8个流水灯来回点亮设计程序

合集下载

单片机8个led灯循环点亮程序

单片机8个led灯循环点亮程序

单片机8个led灯循环点亮程序一、前言单片机是一种非常重要的电子元件,它可以通过编程来实现各种功能。

其中,点亮LED灯是最基础的操作之一。

本文将介绍如何使用单片机8个LED灯循环点亮。

二、硬件准备1. 单片机:STC89C52RC或其他8051系列单片机;2. LED灯:8个;3. 电阻:8个(220欧姆);4. 面包板:1个;5. 杜邦线:若干。

三、程序设计首先,我们需要了解一些基本的概念和知识:1. 端口:单片机的I/O口被称为端口,其中P0、P1、P2、P3四个端口分别对应着不同的引脚。

2. 输出:通过控制端口输出高电平或低电平来控制外部设备。

3. 延时函数:为了让程序在执行时停留一段时间,需要使用延时函数。

接下来,我们开始编写程序。

具体步骤如下:1. 定义引脚首先,我们需要定义每个LED所对应的引脚。

这里我们将8个LED分别连接到P0口的0~7引脚上。

sbit led0=P0^0;sbit led1=P0^1;sbit led2=P0^2;sbit led3=P0^3;sbit led4=P0^4;sbit led5=P0^5;sbit led6=P0^6;sbit led7=P0^7;2. 定义延时函数为了让程序在执行时停留一段时间,我们需要定义一个延时函数。

这里我们使用循环来实现延时。

void delay(unsigned int i){while(i--);}3. 循环点亮LED灯接下来,我们就可以开始循环点亮LED灯了。

这里我们使用for循环来实现。

void main(){while(1){for(int i=0;i<8;i++){switch(i){case 0:led0=1;break;case 1:led1=1;break;case 2:led2=1;break;case 3:led3=1;break;case 4:led4=1;break;case 5:led5=1;break;case 6:led6=1;break;case 7:led7=1;break;}delay(50000);switch(i){case 0:led0=0;break;case 1:led1=0;break;case 2:led2=0;break;case 3:led3=0;break;case 4:led4=0;break;case 5:led5=0;break;case 6:led6=0;break;case 7:led7=0;break;}}}}四、总结通过以上步骤,我们就可以实现单片机8个LED灯循环点亮的程序了。

51八只LED灯做流水灯实验

51八只LED灯做流水灯实验

51八只LED灯做流水灯实验第一节:单片机在上电初始后,其各端口输出为高电平。

如果我们现在想让接在P1.0口的LED1亮,那么我们只要把P1.0口的电平变为低电平就可以了。

想让LED1灭,LED0亮,只需将P1.0升高,P1.1变低,LED 1就熄灭LED2随后既点亮!依始类推如下所示8只LED变会一亮一暗的做流水灯了。

本实验在“SP-5 1实验板”学习套件上的相关图纸:P1.0低、P1.0高、P1.1低、P1.1高、P1.2低、P1.2高、P1.3低、P1.3高、P1.4低、P1.4高、P1.5低、P1.5高、P1.6低、P1.6高、P1.7低、P1.7高、返回到开始、程序结束。

我们不能说P1.1你变低,它就变低了。

因为单片机听不懂我们的汉语的,只能接受二进制的“1、0......”代码。

我们又怎样来用二进制语议论使单片机按我们的意思去工作呢?为了让单片机工作,只能将程序写为二进制代码交给其执行;早期单片机开发人员就是使用人工编写的二进制代码交给单片机去工作的。

今天,我们不必用烦人的二进制去编写程序,完全可以将我们容易理解的“程序语言”通过“翻译”软件“翻译”成单片机所需的二进制代码,然后交给单片机去执行。

这里的“程序语言”目前主要有汇编和C两种;在这里我们所说的“翻译”软件,同行们都叫它为“编译器”,将“程序语言”通过编译器产生单片机的二进制代码的过程叫编译。

前面说到,要想使LED1变亮,只需将对应的单片机引脚电平变为低电平就可以了。

现在让我们将上面提到的8只LED流水灯实验写为汇编语言程序。

“汉语”语言汇编语言开始:star:P1.0低clr p1.0P1.0高setb p1.0P1.1低clr p1.1P1.1高setb p1.1P1.2低clr p1.2P1.2高setb p1.2这里用到了四条汇编指令:clr、 setb、 ljmp 、end;clr:是将其后面指定的位清为0;setb:是将其后面指定的位置成1;ljmp:是无条件跳转指令,意思是:跳转到指定的标号处继续运行。

单片机八个灯依次亮的编程汇编语言

单片机八个灯依次亮的编程汇编语言

单片机八个灯依次亮的编程汇编语言哎呀,这可是个不简单的活儿啊!单片机八个灯依次亮,听起来就像是在玩连连看,可是可不是那么简单的事情哦!不过别着急,我来给你讲讲怎么搞定这个“连连看”吧!我们得了解一下单片机的基本知识。

单片机就像一个小电脑,里面有好多好多的芯片,可以完成各种各样的任务。

这次我们要让单片机控制八个灯依次亮起来,就像是在跳一个八步舞一样,一步一步地来。

第一步,我们得给这八个灯分别取个名字。

比如说,第一个灯叫做“小明”,第二个叫做“小红”,以此类推。

这样一来,我们就可以用名字来代替它们了,方便我们进行编程。

第二步,我们得告诉单片机该怎么做。

这就需要用到编程语言了。

编程语言就像是我们跟单片机沟通的工具,它告诉单片机:“小明先亮一下,然后是小红,再是小刚......”这样一来,单片机就知道该按照什么顺序来控制灯了。

第三步,我们得把这个程序写到单片机里。

这可不是一件容易的事情,需要我们仔细地思考每一个步骤,确保没有漏洞。

写完之后,我们还得把程序烧录到单片机的芯片里,让它变成真正的“活”程序。

第四步,我们得测试一下这个程序是否正常工作。

这就像是在排练一场舞蹈一样,我们需要不断地调整步伐和节奏,直到完美无缺。

如果发现有什么问题,我们就得赶紧修改程序,让它重新开始跳舞。

终于到了最后一步——让我们看看这个八步舞到底有多精彩吧!当所有的灯都亮起来的时候,你会感觉就像是看到了一场绚丽多彩的烟花表演,让人陶醉其中。

这就是单片机控制八个灯依次亮起来的魅力所在!虽然这个任务看起来有点儿复杂,但是只要我们一步一步地来,就一定能够成功。

就像学习任何一门新技能一样,只要肯下功夫、勤奋努力,就一定能够取得好成绩!加油吧!。

单片机课程设计-8个LED灯来回点亮

单片机课程设计-8个LED灯来回点亮

目录第一章绪论--------------------------------------------------------3 第二章设计目的及要求-----------------------------------------5 1.1 设计目的--------------------------------------------------------5 1.2 设计要求--------------------------------------------------------5 第三章设计电路原理----------- -------------------------------7 3.1 控制部分的设计与选择-------------------------------------7 3.2 LED显示方案-----------------------------------------------8 第四章硬件系统------------------------------------------------9 4.1 原件清单-------------------------------------------------------9 4.2 单片机AT89C51---------------------------------------------9 4.3 单片机时钟电路--------------------------------------------104.4 单片机复位电路---------------------------------------------11 4.5 工作电路------------------------------------------------------12 第五章软件设计------------------------------------------------135.1 程序流程图--------------------------------------------------13 5.2 编辑源程序--------------------------------------------------14 第六章系统调试与仿真结果--------------------------------166.1系统调试-----------------------------------------------------16 6.2仿真结果----------------------------------------------------16 总结------------------------------------------------------------- 19 参考文献--------------------------------------------------------20第一章绪论课题简介当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品。

8个LED灯循环闪烁课程设计

8个LED灯循环闪烁课程设计

摘要“微机原理与接口技术”是高等学校电子信息工程、通信工程、自动化、电气工程及其自动化等工科电气与电子信息类各专业的核心课程。

该课程以INTER 8086微处理器和IBM PC系列微机为主要对象,系统。

深入地介绍了微型计算机的基本组成、工作原理、接口技术及应用,把微机系统开发过程中用到的硬件技术和软件技术有机地结合起来。

本文详述了8个LED灯循环闪烁的课程设计。

设置8个LED灯,首先是1、3、5、7号LED依次亮1秒钟,当7号LED亮后,这四个灯同时闪烁5下。

然后是2、4、6、8号LED 依次亮1秒钟,当8号LED亮后,这四个灯同时闪烁5下。

本课程设计,由于自身能力和学习水平有限,可能存在一定的错误和不当之处,敬请批评和指正。

一、设计目的1.巩固和加深课堂所学知识;熟悉各种指令的应用及条件;2.学习掌握一般的软硬件的设计方法和查阅、运用资料的能力;3.进一步了解8255A各引脚的功能, 8255A和系统总线之间的连接, 8255A和CPU 之间的数据交换,以及8255A的内部逻辑结构。

深入掌握8255A显示电路的基本功能及编程方法,8255等芯片的工作方式、作用。

4.培养和锻炼在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力。

通过课程设计,要求熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,得到微机开发应用方面的初步训练。

同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后搞设计时逻辑更加清晰。

二、设计内容根据所学内容和对8255A的应用,整个系统硬件采用8086微处理器和8255A可编程并行接口芯片和8个LED等连成硬件电路。

设计8个LED灯,实现如下要求:首先是1、3、5、7号LED依次亮1秒钟,当7号LED亮后,这四个灯同时闪烁5下。

然后是2、4、6、8号LED依次亮1秒钟,当8号LED亮后,这四个灯同时闪烁5下。

三、设计要求使用8255A可编程接口芯片实现8个LED灯以十种不同的方式显示。

八位双向流水灯”设计

八位双向流水灯”设计

八位双向流水灯”设计以下是对八位双向流水灯设计的详细介绍。

1.硬件设计:该设计需要使用以下硬件元件:-8个LED灯:用于点亮和显示流水灯效果。

-8个当前限流电阻:用于限制LED灯的电流,保护LED灯不受损坏。

-8个开关:用于手动切换流水灯的方向。

-一个控制器:用于控制LED灯的点亮和熄灭。

-一个脉冲发生器:用于为控制器提供驱动信号。

首先,将8个LED灯连接到控制器的8个输出引脚上,并通过对应的当前限流电阻进行连接。

然后,将8个开关连接到控制器上,用于手动控制流水灯的方向。

最后,将脉冲发生器连接到控制器上,用于为控制器提供驱动信号。

2.软件设计:该设计需要使用软件来控制LED灯的点亮和熄灭。

软件设计可以使用C语言等编程语言实现。

首先,需要定义一个数组,用于存储LED灯的状态。

数组中的每个元素对应一个LED灯,其中0表示灯灭,1表示灯亮。

然后,通过控制器的输入和输出引脚,可以确定当前LED灯的状态和流水灯的方向。

接着,需要实现一个循环,用于不断更新LED灯的状态。

循环的过程中,根据当前LED灯的状态和流水灯的方向,通过控制器的输出引脚控制LED灯的点亮和熄灭。

在循环的过程中,需要监测开关的状态,以便手动切换流水灯的方向。

当检测到开关状态改变时,需要更新流水灯的方向。

3.工作原理:首先,当控制器接收到脉冲发生器的驱动信号时,它将根据当前流水灯的方向和控制器的输入引脚的状态来更新LED灯的状态。

如果流水灯的方向是从左到右,则控制器会根据当前LED灯的状态和开关的状态,点亮或熄灭相应的LED灯。

具体的控制规则可以根据设计需求进行定义,例如按照顺序点亮灯1、2、3、4、5、6、7、8如果流水灯的方向是从右到左,则控制器会根据当前LED灯的状态和开关的状态,点亮或熄灭相应的LED灯。

具体的控制规则可以根据设计需求进行定义,例如按照顺序点亮灯8、7、6、5、4、3、2、1当开关的状态改变时,控制器会更新流水灯的方向,并根据新的方向重新设置LED灯的状态。

实现8个LED流水灯汇编语言程

实现8个LED流水灯汇编语言程

实现8个LED流水灯汇编语言程START:MOV ACC,#0FEH ;ACC中先装入LED1亮的数据(二进制的11111110)MOV P1,ACC ;将ACC的数据送P1口MOV R0,#7 ;将数据再移动7次就完成一个8位流水过程LOOP: RL A ;将ACC中的数据左移一位MOV P1,A ;把ACC移动过的数据送p1口显示ACALL DELAY ;调用延时子程序DJNZ R0,LOOP ;没有移动够7次继续移动AJMP START ;移动完7次后跳到开始重来,以达到循环流动效果;----- 延时子程序-----DELAY:MOV R0,#255;延时一段时间D1:MOV R1,#255DJNZ R1,$DJNZ R0,D1RET;子程序返回END;程序结束START:CLR P1.0 ;P1.0输出低电平,使LED1点亮ACALL DELAY;调用延时子程序SETB P1.0;P1.0输出高电平,使LED1熄灭CLR P1.1;P1.1输出低电平,使LED2点亮ACALL DELAY;调用延时子程序SETB P1.1;P1.1输出高电平,使LED2熄灭CLR P1.2;P1.2输出低电平,使LED3点亮ACALL DELAY;调用延时子程序SETB P1.2;P1.2输出高电平,使LED3熄灭CLR P1.3;P1.3输出低电平,使LED4点亮ACALL DELAY;调用延时子程序SETB P1.3;P1.3输出高电平,使LED4熄灭CLR P1.4;P1.4输出低电平,使LED5点亮ACALL DELAY;调用延时子程序SETB P1.4;P1.4输出高电平,使LED5熄灭CLR P1.5;P1.5输出低电平,使LED6点亮ACALL DELAY;调用延时子程序SETB P1.5;P1.5输出高电平,使LED6熄灭CLR P1.6;P1.6输出低电平,使LED7点亮ACALL DELAY;调用延时子程序SETB P1.6;P1.6输出高电平,使LED7熄灭CLR P1.7;P1.7输出低电平,使LED8点亮ACALL DELAY;调用延时子程序SETB P1.7;P1.7输出高电平,使LED8熄灭ACALL DELAY;调用延时子程序AJMP START;8个LED流了一遍后返回到标号START处再循环;----- 延时子程序-----DELAY:MOV R0,#255;延时一段时间D1:MOV R1,#255DJNZ R1,$DJNZ R0,D1RET;子程序返回END;程序结束ORG0000H;上电复位,程序从0000H开始执行START:MOV SP,#60H;堆栈初始化为60HMOV DPTR,#LIU_TAB;流水花样表首地址送DPTR LOOP: CLR A MOVC A,@A+DPTRCJNE A,#0FFH,SHOW;检查流水结束标志AJMP START;所有花样流完,则从头开始重复流SHOW: MOV P1,A;将数据送到P1口ACALL DELAYINC DPTRAJMP LOOP;----- 延时子程序-----DELAY:MOV R0,#255;延时一段时间D1:MOV R1,#255DJNZ R1,$DJNZ R0,D1RET;子程序返回;----- 下面是流水花样数据表-----LIU_TAB:DB 01111111B ;二进制表示的流水花样数据DB 10111111BDB 11011111BDB 11101111BDB 11110111BDB 11111011BDB 11111101BDB 11111110BDB 11111110BDB 11111101BDB 11111011BDB 11110111BDB 11101111BDB 11011111BDB 10111111BDB 01111111BDB 7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH ;十六进制表示DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FHDB 7EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,7EHDB 7FH,3FH,1FH,0FH,07H,03H,01H,00HDB 0FFH ;流水花样结束标志0FFHEND;程序结束延时子程序,12M晶振延时约250毫秒DELAY:MOV R4,#2L3: MOV R2 ,#250L1: MOV R3 ,#250L2: DJNZ R3 ,L2DJNZ R2 ,L1DJNZ R4 ,L3RETorg 00h ;程序上电从00h开始ajmp main ;跳转到主程序org 0030h ;主程序起始地址main:mov a,#0feh ;给A赋值成11111110loop:mov p1,a ;将A送到P1口,发光二极管低电平点亮 lcall delay ;调用延时子程序rl a ;累加器A循环左移一位ajmp loop ;重新送P1显示delay:mov r3,#20 ;最外层循环二十次d1:mov r4,#80 ;次外层循环八十次d2:mov r5,#250 ;最内层循环250次djnz r5,$ ;总共延时2us*250*80*20=0.8Sdjnz r4,d2djnz r3,d1retend如何精确计算延时子程序的执行时间?汇编语言的一大优势就是能够精确控制程序的执行时间,这在编写一些对时序要求严格的外围器件驱动时由为重要!;延时子程序,12M晶振延时约253毫秒DELAY:MOV R4,#2------执行1个机器周期,耗时1微秒L3: MOV R2 ,#250---执行1个机器周期,耗时1微秒L1: MOV R3 ,#251---执行1个机器周期,耗时1微秒L2: DJNZ R3 ,L2---执行2个机器周期,反复执行251次(2x251)=502微秒)DJNZ R2 ,L1-----执行2个机器周期,反复执行250次(1+502+2)*250=126250微秒)DJNZ R4 ,L3-----执行2个机器周期,反复执行2次(1+1+502+126250+2)*2=253512微秒)RETdelay 加上第一条总共延时1+253512=253513微秒。

51八只LED灯做流水灯实验

51八只LED灯做流水灯实验

51八只LED灯做流水灯实验第一节:单片机在上电初始后,其各端口输出为高电平。

如果我们现在想让接在P1.0口的LED1亮,那么我们只要把P1.0口的电平变为低电平就可以了。

想让LED1灭,LED0亮,只需将P1.0升高,P1.1变低,LED 1就熄灭LED2随后既点亮!依始类推如下所示8只LED变会一亮一暗的做流水灯了。

本实验在“SP-5 1实验板”学习套件上的相关图纸:P1.0低、P1.0高、P1.1低、P1.1高、P1.2低、P1.2高、P1.3低、P1.3高、P1.4低、P1.4高、P1.5低、P1.5高、P1.6低、P1.6高、P1.7低、P1.7高、返回到开始、程序结束。

我们不能说P1.1你变低,它就变低了。

因为单片机听不懂我们的汉语的,只能接受二进制的“1、0......”代码。

我们又怎样来用二进制语议论使单片机按我们的意思去工作呢?为了让单片机工作,只能将程序写为二进制代码交给其执行;早期单片机开发人员就是使用人工编写的二进制代码交给单片机去工作的。

今天,我们不必用烦人的二进制去编写程序,完全可以将我们容易理解的“程序语言”通过“翻译”软件“翻译”成单片机所需的二进制代码,然后交给单片机去执行。

这里的“程序语言”目前主要有汇编和C两种;在这里我们所说的“翻译”软件,同行们都叫它为“编译器”,将“程序语言”通过编译器产生单片机的二进制代码的过程叫编译。

前面说到,要想使LED1变亮,只需将对应的单片机引脚电平变为低电平就可以了。

现在让我们将上面提到的8只LED流水灯实验写为汇编语言程序。

“汉语”语言汇编语言开始:star:P1.0低clr p1.0P1.0高setb p1.0P1.1低clr p1.1P1.1高setb p1.1P1.2低clr p1.2P1.2高setb p1.2这里用到了四条汇编指令:clr、 setb、 ljmp 、end;clr:是将其后面指定的位清为0;setb:是将其后面指定的位置成1;ljmp:是无条件跳转指令,意思是:跳转到指定的标号处继续运行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机C语言如何实现8个LED流水灯来回流动?
第一部分
参考程序
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//--------------------------------
void DelayMS(uint ms)
{
uchar t;
while(ms--) for (t=0;t<120;t++);
}
//----------------------------------
void main()
{
P2= 0xfe;
while (1)
{
P2 =_crol_(P2,1);
DelayMS(200);
}
}
2012-06-14 17:06 芯DZ|分类:C/C++|浏览267次
现在只能从左到右循环流动,怎么才能从左到右再从右到左流动呢?#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit beep=P2^3;
uchar p1e;
void delay(uint a);
void main()
{
p1e=0xfe;
P1=p1e;
while(1)
{
p1e=_crol_(p1e,1);
delay(55);
P1=p1e;
beep=0;
delay(55);
beep=1;
delay(55);
}
}
void delay(uint a)
{
uint x,y;
for(x=a;x>0;x--)
for(y=150;y>0;y--); }
提问者采纳
2012-06-14 17:51
char i;
while(1)
{
for(i=0; i<7; i++)
{
p1e=_crol_(p1e,1);
delay(55);
P1=p1e;
beep=0;
delay(55);
beep=1;
delay(55);
}
for(i=0; i<7; i++)
{
p1e=_cror_(p1e,1);
delay(55);
P1=p1e;
beep=0;
delay(55);
beep=1;
delay(55);
}
}
CYF0316|六级
p1e=_cror_(p1e,1);
追问
这个只是向右移吧...我是说向左移动到第8个LED后再从第8个向左移,实现来回流动
回答
1,赋值
2,右移动
3,再赋值
4,左移动
你程序都写出了
只是把程序COPy 粘帖到下面把p1e=_crol_(p1e,1); 改成p1e=_cror_ (p1e,1); 就好了呀
第二部分
参考、归纳、总结得
正确程序(仅供参考)
#include <AT89X51.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned intvoid DelayMS(uint ms) {
uchar t;
while(ms--) for (t=0;t<120;t++);
}
void main()
{ char i;
P2= 0xfe;
while (1)
{
for(i=0; i<7; i++)
{
P2 =_crol_(P2,1);
DelayMS(200);
}
for(i=0; i<7; i++)
{
P2 =_cror_(P2,1);
DelayMS(200);
}
}
}。

相关文档
最新文档