查询方式流水灯制作
Proteus虚拟仿真案例---流水灯制作
Proteus虚拟仿真案例-——流水灯制作一、原理图设计1.打开proteus,新建文件2.选择元器件(1)选择单片机芯片左侧快捷菜单栏里按下,按下P,在“关键字”栏中输入“8951”,选择AT89C51(2)选择晶振:输入crystal,选择CRYSTAL(3)选择电容:输入22p,左边类别中选择Capacitors,右边选择CERAMIC22P(4)选择电阻:输入10k,左边类别中选择Resistors,右边选择RESISTORS库的3WATT10K(5)选择led:输入led,左边类别中选择Optoelectronics,右边选择led—yellow(6)选择按钮:输入button,选择USERDVC库的BUTTON(7)选择好的元器件如图所示3.放置器件振荡电路:(1)放置AT89C51单片机:在DEVICES栏中选中AT89C51,然后在绘制区放置到合适的位置(2)放置晶振,隐藏text属性(菜单-模板—设置设计默认值—显示隐藏文本不勾选)(3)分别将晶振的两脚与AT89C51的19、18脚相连(4)放置两个22p的电容,一端与晶振相连,另一端互连(5)放置地节点(左侧快捷菜单栏里按下—-GROUND),与两个电容相连复位电路:a.放置电源节点(左侧快捷菜单栏里按下——POWER)b.放置地节点c.放置电容,电阻,电阻一端接地,一端与电容相连,电容一端接+5V电源d.AT89C51第9脚接电阻、电容中间e.放置按钮,接电容两端f.右击按钮——编辑属性——元件参考:BUTTON,并取消“本元件不用于PCB制版”g.修改C3电容的值:右击——编辑属性—-Capacitance改为10u绘制流水灯:a.放置电阻、led,右击led——编辑属性——隐藏元件值,连接电阻和ledb.使用块复制,复制7组电阻和ledc.放置电源,分别与D1—D8的一端连接d.总线绘制:左侧选择“总线模式”,绘制一条总线,连接P1口与R2-R9e.使用属性分配工具进行快速网络标号:按下a,出现属性分配窗口,“字符串”框输入“net=D#”,单击P0口的8条线,进行编号,再次按下a,出现属性分配窗口,“字符串”框输入“net=D#”,单击R2—R9的8条线,进行编号f.批量修改R2-R9的值:按下a,出现属性分配窗口,“字符串”框输入“VALUE=100”,确定二、系统仿真1.编写源代码(1)菜单——源代码——添加/删除源文件—-new——文件名输入pmd。
流水灯电路的制作
流水灯电路的制作流水灯是一种光电转换装置,通过一系列的LED灯组成,可以在不同的时间间隔内依次点亮,形成像水流一样的效果,因此得名“流水灯”。
下面我将介绍流水灯电路的制作过程。
首先,我们需要准备以下材料和工具:1. Arduino控制板(如Arduino UNO)2. Jumper wires(杜邦线)3.电阻(220欧)4. LED灯(3mm直径和5mm直径,不同颜色)5.面包板6.铁丝钳和钳子(辅助工具)接下来,按照以下步骤制作流水灯电路:1. 将Arduino控制板插入面包板的两侧,并通过杜邦线将GND(地线)引脚与面包板上的负极连接。
2.将220欧的电阻通过杜邦线连接到面包板上,一端与GND(地线)相连,另一端空置。
3.通过杜邦线将LED灯连接到面包板上。
LED灯有一个长脚和一个短脚,长脚是阳极(正极),短脚是阴极(负极)。
将LED灯的阳极连接到电阻的空置端,阴极连接到GND(地线)。
4.重复步骤3,将其他的LED灯连接到面包板上。
你可以选择不同颜色的LED灯,以获得更丰富的效果。
确保每个LED灯的阳极连接到电阻的空置端,而阴极连接到GND(地线)。
5. 通过杜邦线将Arduino控制板的数字引脚与面包板上的LED灯连接。
根据你想要的效果,可以将LED灯连接到不同的数字引脚上。
例如,将第一个LED灯连接到数字引脚2,第二个LED灯连接到数字引脚3,依此类推。
6. 将Arduino控制板通过USB线连接到计算机,并开启Arduino IDE编程软件。
7. 在Arduino IDE中编写相应的代码,以控制流水灯的效果。
以下是一个简单的流水灯代码示例:```const int ledPin1 = 2; // 设置第一个LED灯的数字引脚const int ledPin2 = 3; // 设置第二个LED灯的数字引脚const int ledPin3 = 4; // 设置第三个LED灯的数字引脚//以此类推...void setupinMode(ledPin1, OUTPUT);pinMode(ledPin2, OUTPUT);pinMode(ledPin3, OUTPUT);//初始化其他LED的引脚void loodigitalWrite(ledPin1, HIGH); // 点亮第一个LED灯delay(100); //等待100毫秒digitalWrite(ledPin2, HIGH); // 点亮第二个LED灯delay(100); //等待100毫秒digitalWrite(ledPin3, HIGH); // 点亮第三个LED灯delay(100); //等待100毫秒//以此类推...逐个点亮其他LED灯digitalWrite(ledPin1, LOW); // 关闭第一个LED灯delay(100); //等待100毫秒digitalWrite(ledPin2, LOW); // 关闭第二个LED灯delay(100); //等待100毫秒digitalWrite(ledPin3, LOW); // 关闭第三个LED灯delay(100); //等待100毫秒//以此类推...逐个关闭其他LED灯```8. 将上述代码上传到Arduino控制板,并观察LED灯是否能够像流水灯一样依次点亮和熄灭。
流水灯灯的制作流程
流水灯的制作流程201400800657 唐宁1·根据系统的需求设计需求设计单片机电路,本实验的目的是制一个流水灯,编写的程序使用中断电路和直接控制电路,下图为流水灯的电路:2. 对单片机闪光电路的程序设计,本次编程采用了定时器来控制闪光灯,设计的周期为50ms,采用51单片机学习板为例(P1控制闪光灯),使用keil-c对单片机进行编程。
keil-c的安装使用如下:(1)点击keil-c软件,按默认位置安装,这是为使得程序中的头文件reg51.h能够在默认位置调用,安装完成后运行软件。
(2)新建一个工程,保存在计算机的某一个文件夹下;在新建一个空白文档,将所写的程序写完后,保存为c文件,关闭程序。
(3)找到所建工程的文件夹,打开project文件,将c文件添加到所在的工程中,对工程右键选中生成hex文件,然后对c文件进行编译,不断调试,然后选择重编译,直至编译通过。
表明所写的程序没有语法上的错误。
接下来就可以对程序进行模拟,在这里我们可以先利用软件自带的调试程序来查看运行是否正确,最终是下载到单片机上进行测试。
程序见下图:#include <reg51.h>main(){TMOD=0x01; /*初始化定时器,按方式一工作*/TH0=0x3c;TL0=0xb0; /*定时为50ms*/ET0=1; /*开定时器的中断允许*/EA=1; /*开CPU中断允许*/TR0=1; /*打开定时器中断开关*/TF0=0; /*溢出置为零*/P1=0xfe; /*第一个灯亮*/while(1); /*死循环,等待中断发生*/}void read() interrupt 1 /*定时器中断函数*/ {TH0=0x3c;TL0=0xb0; /*重赋初值*/static int number=0; /*定义计数变量*/ number++;if (number<8){P1=~P1;P1=~(P1<<1);} /*流水灯挨个连续发光*/ else if(number<15){P1=~P1;P1=P1>>1;P1=~P1;} /*流水灯往回挨个亮灯*/ else if(number==15)P1=0x00; /*灯全亮*/else if(number==16)P1=0xff; /*灯全灭*/else if(number==17)P1=0x00; /*灯全亮*/else if(number==18)P1=0xff; /*灯全灭*/else{P1=0xfe;number=0; /*重复亮灯*/}使用keil-c对上述程序进行编译以后,发现弹出的窗口提示:0错误,0警告,表明所编写的程序在语法没有错误,接下来可以利用软件自带的工具进行调试,最终通过下载程序到单片机执行即可,运行以确定是否存在逻辑错误。
实验二 查表指令实现流水灯控制
实验二 查表指令实现流水灯控制一、实验目的1、熟悉Keil uVision2软件的使用;2、掌握流水灯控制;3、掌握延时程序的编制;二、实验设备及仪器Keil μVision2软件;单片机开发板;PC 机一台三、实验原理及内容1、LED 流水灯模块电路原理图,如图2.1所示。
U7+5V 图2.1 LED 流水灯模块原理图 (1)74HC573为8位三态输出锁存器,各引脚功能: D0~D7为输入端(接到P0口); Q0~Q7为输出端(驱动LED 灯DS2~DS9); LE 输入数据锁存控制端,高电平有效(当LE=1时,锁存数据);OE 输出使能端,低电平有效; 只要锁存器按照一定规律输出低电平,就能使LED 灯按一定的规律点亮。
(2)P0口控制流水灯模块、数码管及点阵。
对应的锁存器控制端: P1.2 流水灯(74HC573锁存器U7)P1.0 数码管的段(74HC573锁存器U8)P1.1 点阵列、数码管的位(74HC573锁存器U9)P1.3 点阵行(74HC573锁存器U4)2、训练内容一:用查表指令分别实现如下流水灯方案:(1)LED灯由右到左逐步熄灭参考程序:ORG 00HMAIN:CLR P1.1 ;数码管位、点阵列控制位关闭CLR P1.3 ;点阵行控制位SETB P1.2 ;led灯控制MOV DPTR,#TAB1;首地址MOV R0,#8 ;移位次数MOV R1,#0MOV P0,#0LCALL DELAY ;延时LOOP:MOV A,R1MOVC A,@A+DPTRMOV P0,ALCALL DELAYINC R1DJNZ R0,LOOPLJMP MAINDELAY:MOV R2,#0D1:MOV R3,#0D2:NOPDJNZ R3,D2DJNZ R2,D1RETTAB1:DB 80H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH END(2)LED灯由右到左逐步点亮(3)LED 灯由两边向中间靠拢(4)LED 灯由中间向两边分离(5)LED 等先由两边向中间靠拢,再由中间向两边分离2、训练内容二:点阵模块静态显示对应的行为高电平控制,对应的列为低电平控制。
流水灯的实验原理及步骤
流水灯的实验原理及步骤流水灯(也称为跑马灯)是一种由多个LED灯组成的电子显示器件,常常被用于电子实验、电子产品展示等场合中。
流水灯可以通过变化发光的方式来传递信息或者装饰环境,具有简单、实用、灵活的特点。
下面将详细介绍流水灯的实验原理及步骤。
实验原理:流水灯的实现原理是通过控制每个LED灯的点亮与熄灭来形成一种连续而有序的动画效果,使得LED灯看起来像是在“流水”一样运动。
一般来说,流水灯采用的是LED的时分多路复用技术,即通过定时器控制每个LED点亮和熄灭的时刻,使得它们按照一定的顺序依次发光。
实验步骤:1. 准备材料:LED灯(数量根据需要决定)、电阻(限流电阻,选择合适的阻值)、电路板、导线、面包板或焊接工具等。
2. 连接电路:根据所需的LED数量,设计电路图,按照图上的连线方式将LED 连接到电路板上,注意保持连线的正确性。
3. 添加电阻:根据LED的工作电压和电流需求,计算每个LED对应的限流电阻的阻值,将电阻依次与LED进行串联连接。
4. 供电测试:将电路板连接到电源上,确认电源电压是否符合LED的工作电压要求。
注意检查整个电路的连线是否正确,电阻是否接在了正确位置。
5. 编写程序:使用单片机或其他控制芯片来控制LED的点亮和熄灭。
根据所采用的开发平台和编程语言,编写相应的代码,控制每个LED的状态和时间间隔。
6. 调试程序:将编写好的程序下载到控制芯片中,并连接到电路板上。
通过电脑或其他输入设备控制程序运行,观察LED的点亮和熄灭效果。
根据需要调整程序中每个LED的点亮时间和顺序,使得LED灯看起来像是在流水一样运动。
7. 完善电路:根据实际需求,可以设计并添加其他功能模块,如按键控制、调节亮度等。
总结:流水灯实验是一种常见的电子实验,通过控制LED灯的点亮和熄灭来形成一种连续的流动效果。
实验的原理是利用LED的时分多路复用技术和控制芯片的编程来实现。
实验步骤包括准备材料、连接电路、添加限流电阻、供电测试、编写程序、调试程序和完善电路等。
综合实验一——按键控制流水灯实验(查询方式)
北京科技大学微型计算机原理实验报告学院:____自动化学院________________专业、年级:_自动化1101_ ______________ 姓名:__廖文骏_ ________________学号:_ 20111002124 ____________ 指导教师:___ _____王粉花____________2013年12 月综合实验一按键控制流水灯实验(查询方式)实验学时:2学时一、实验目的1.掌握ATmega16 I/O口操作相关寄存器2.掌握CodeVision AVR软件的使用3. 复习C语言,总结单片机C语言的特点二、实验内容1. 设计一个简单控制程序,功能是8个LED逐一循环发光0.5s,构成“流水灯”。
2. 用两个按键K1和K2控制流水灯(中断方式):(1)当按下K1时,流水灯从左向右流动;(2)当按下K2时,流水灯从右向左流动。
三、实验所用仪表及设备硬件:PC机一台、AVR_StudyV1.1实验板软件:CodeVision AVR集成开发软件、SLISP下载软件四、实验原理ATmega16芯片有PORTA、PORTB、PORTC、PORTD(简称PA、PB、PC、PD)4组8位,共32路通用I/O接口,分别对应于芯片上32根I/O引脚。
所有这些I/O口都是双(有的为3)功能复用的。
其中第一功能均作为数字通用I/O接口使用,而复用功能则分别用于中断、时钟/计数器、USRAT、I2C和SPI串行通信、模拟比较、捕捉等应用。
这些I/O口同外围电路的有机组合,构成各式各样的单片机嵌入式系统的前向、后向通道接口,人机交互接口和数据通信接口,形成和实现了千变万化的应用。
每组I/O口配备三个8位寄存器,它们分别是方向控制寄存器DDRx,数据寄存器PORTx,和输入引脚寄存器PINx(x=A\B\C\D)。
I/O口的工作方式和表现特征由这3个I/O口寄存器控制。
AVR通用I/O端口的引脚配置情况:I/O口引脚配置表表中的PUD为寄存器SFIOR中的一位,它的作用相当AVR全部I/O口内部上拉电阻的总开关。
五种编程方式实现流水灯的单片机C程序
五种编程方式实现流水灯的单片机C程序流水灯是一种常见的灯光效果,常用于装饰和展示。
实现流水灯的程序可以使用多种不同的编程方式,包括传统的顺序编程、状态机编程、中断编程、调度器编程和面向对象编程。
下面分别介绍这五种方式实现流水灯的程序。
1.顺序编程方式:顺序编程是最常见的编程方式,也是最直接的方式。
下面是使用顺序编程方式实现流水灯的C程序:```c#include <reg52.h>void delay(unsigned int t)while(t--)for(int i=0; i<50; i++);}void mainunsigned char led = 0x80; // 初始灯光状态while(1)P0 = led; // 输出灯光状态delay(500); // 延时一段时间led >>= 1; // 右移一位,实现流水灯效果if(led == 0) // 到达最右边后重新开始led = 0x80;}}```2.状态机编程方式:状态机编程是一种基于状态的编程方式,通过定义不同的状态和状态转换来实现流水灯效果。
下面是使用状态机编程方式实现流水灯的C程序:```c#include <reg52.h>typedef enumState1,State2,State3,State4,State5} State;void delay(unsigned int t)while(t--)for(int i=0; i<50; i++);}void mainState state = State1; // 初始状态为State1 while(1)switch(state)case State1:P0=0x80;delay(500);state = State2;break;case State2:P0=0x40;delay(500);state = State3;break;case State3:P0=0x20;delay(500);state = State4;break;case State4:P0=0x10;delay(500);state = State5;break;case State5:P0=0x08;delay(500);state = State1;break;}}```3.中断编程方式:中断编程方式是一种基于中断事件的编程方式,通过在特定的中断事件触发时改变灯光状态来实现流水灯效果。
流水灯的实验原理及步骤
流水灯的实验原理及步骤流水灯是一种用于电子电路实验的简单电路。
它由一组LED灯组成,灯珠逐个点亮,呈现出流水的效果。
以下是流水灯的实验原理及步骤:实验原理:流水灯的实验原理是借助555计时器和数个逻辑门实现的。
555计时器产生的方波信号通过逻辑门的组合,控制LED灯的亮灭顺序,从而实现流水的效果。
实验步骤:1.准备材料和工具:一块实验面板、555计时器、几个逻辑门(如74LS04等)、一组LED灯、几个电阻、导线等。
2.将555计时器、逻辑门、LED灯等器件按照连线图连接在实验面板上。
具体连接方式如下:- 将VCC引脚连接到正电源。
- 将GND引脚连接到地线。
- 连接一个电阻和电容来设置555计时器的频率。
电阻连接到引脚7(DISCHARGE)和引脚8(VCC)之间,电容连接到引脚6(THRESHOLD)和引脚2(TRIGGER)之间。
同时将电容的另一端连接到地线。
- 将555计时器的引脚3(OUTPUT)连接到逻辑门1的一个输入端,再将逻辑门1的输出端连接到一个电阻,电阻的另一端连接到LED灯1的正极。
LED 灯1的负极连接到地线。
- 将LED灯1的负极连接到逻辑门2的一个输入端,再将逻辑门2的输出端连接到一个电阻,电阻的另一端连接到LED灯2的正极。
LED灯2的负极连接到地线。
- 依此类推,将其他LED灯也连接起来,形成流水灯的效果。
3.检查连接是否正确,确保没有短路或接触不良的地方。
4.将正电源接入电路,调整电阻和电容的值,以控制流水灯的速度和亮度。
5.观察LED灯的亮灭顺序,若亮灯顺序与预期不符,可能需要调整逻辑门的输入连接方式。
6.实验完成后,断开电源,注意安全。
以上是流水灯的实验原理及步骤,希望对你有帮助。
流水灯的绘制流程及注意事项及注意事项
流水灯的绘制流程及注意事项及注意事项嘿,今天咱们就来唠唠流水灯的绘制流程及注意事项呀!这流水灯可有趣了呢!**一、流水灯的绘制流程**1. 首先呢,准备工作是必不可少的哇!咱们得有绘制流水灯的工具呀,像是电路板、LED灯、电阻、电容这些元件,哎呀呀,可不能少呢!还得有个合适的电源供应设备,这就像流水灯的能量源泉一样重要呀!2. 然后呢,设计电路原理图呀。
这一步可关键了呢!要确定好LED灯的连接方式,一般来说是串联或者并联的方式。
哇,要是搞错了连接方式,那可就麻烦大了呀!在原理图里呢,要准确地标出每个元件的位置和连接关系,这样才能确保后续的制作顺利进行呀。
3. 接下来就是绘制PCB板图啦。
哎呀,这一步需要一点耐心哦。
根据电路原理图,把各个元件在PCB板上合理地布局。
要考虑到布线的合理性,不能让线路交叉得乱七八糟的呀!而且要注意留出足够的空间给元件焊接呢。
在布线的时候,要尽量让线路短而直,这样可以减少信号的干扰呢。
4. 再然后就是制作实际的电路板啦。
可以选择自己腐蚀电路板,或者找专门的厂家制作呢。
如果自己制作的话,要小心化学药品的使用哦!把元件按照PCB板图焊接到电路板上,这时候就要考验焊接技术啦。
焊接要牢固,不能有虚焊的情况呀,否则流水灯可能就不能正常工作了呢!5. 最后呢,就是编写程序啦。
这是让流水灯动起来的关键一步呀!根据流水灯的工作模式,比如从左到右依次点亮,或者是交替闪烁之类的,编写相应的程序代码。
如果对编程不太熟悉的话,可能要多花点时间学习和调试呢!**二、流水灯的注意事项**1. 元件选择方面要特别注意呀!LED灯的额定电压和电流一定要匹配电路中的电源呢。
要是电压过高,LED灯可能就会被烧坏啦,哎呀,那多可惜呀!电阻的阻值也要选择合适的,它可是用来控制电流大小的重要元件呢。
2. 在焊接的时候呀,要注意温度的控制呢。
电烙铁温度过高的话,可能会损坏元件或者PCB板呢!而且要保持焊接的焊点光滑、饱满,像个小珠子一样圆润就最好啦!千万不能有短路的情况,就是相邻的焊点不能连在一起哦,不然整个电路可能就会出故障呢!3. 编写程序的时候,要仔细检查语法错误呀。
实验三 流水灯控制实验
P1=tab[0];
delay_ms(200);
keyscan();
P1=tab[9];
delay_ms(200);
keyscan();
}
}
void own()
{
char k;
for(k=1;k<5&&(num==5);k++)
{
P1=tab[k]|tab[9-k];
delay_ms(200);
keyscan();
(3)按动K1键,观察是否达到演示效果。
(4)试用中断和查询两种方式编写程序,比较二者的区别。
四、程序设计与调试:
1.实验电路图如图1所示。
2.实验源程序见附录。
图1
五、实验总结:
1.实验设计时注意按键电平抖动问题,可在检测到按键按下后延时5—10ms,待前沿抖动消失后,再检测按键状态,若发现仍保持闭合状态,则确真正有键按下。
附录1.查询方式程序
#include <REG52.H>
char code tab[10]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff};
char code tabunsigned char num=0;
sbit key=P3^3;
void keyscan()
{
unsigned char m,t;
{
P1=0xff;
delay_ms(200);
keyscan();for(t=8;t>0&&(num==3);t--)
{m=(~tab[t])&(P1);
P1=m;delay_ms(200);keyscan();}
流水灯的制作过程
发光二极管
绿色
11只
发光二极管
黄色
10只
管脚
40P
1块
管脚
28P
1块
管脚
20P
5块
管脚
14P
1块
导线
?3.5mm
若干
返回
ACT3: LCALL CLOSE0
MOV A,#7FH
MOV DPTR,#7000H
ACT30:MOVX @DPTR,A
LCALL DELAY
RR A
JNB ACC.7,ACT2
SJMP ACT30
LCALL DELAY
RL A
RL A
JNB ACC.0,NNK31
SJMP NNK30
NNK31:DJNZ R0,NNK0
;每次亮两颗,逆时钟转
MOV R0,#02H ;使其转两圈
ANK2: LCALL CLOSE3
MOV A,#3FH
MOV DPTR,#0B000H
ANK20:MOVX @DPTR,A
LCALL DELAY
RR A
具体制作步骤如下:
(1) 画电路原理图。(电路原理图)
(2) 列元器件清单(如表二),购元器件。
(3) 按照电路图将元器件焊接好。
(4) 写程序。(程序代码)
(5) 接5V电源,观看其运行效果。
源程序如下:
ORG 0000H
LCALL CLOSEA ;关所有的灯
;每次亮一颗,顺时钟转
YWG: MOV R0, #02H ;使其转两圈
LMD0: LCALL CLOSE3
教你制作流水灯,图形
1.所需原材料:
2.用到的工具:焊锡丝、电烙铁、镊子、小电钻、焊接线等(根
据个人情况,总之焊接的相关工具必须有)。
3.主要控制电路的电路图:
记得电源用手机电池正好,手机电池电压是3.7v。
4.制作过程及效果:
接下来就是照着电路图将控制电路做出来!这是我焊接好的电路板:
这是正面:
这是背面:
这个控制的电路板做好了就基本上完成了,然后就是灯板的只做了,总之就三种颜色,你可以做三个字,或者是一个图形用三种灯变换,做出来很漂亮的,曾经做过一个,是用三种发光二级管各五个,拼成以个心形,流水闪起来很有感觉!
(写这个主要是当时自己要做的时候,找电路图找了很久很费劲,而且找到的很多电路图做出来都不稳定,亮度也不是很好,但是这个是找到的里面最好的一个,亮度很好,而且挺稳定的,所以把它拿出来给那些也想做的分享一下)
那个灯板我就不做了,因为手头上没有那么多的二极管了。
祝大家制作成功,有情人终成眷属啊。
这是我之后又做的手机电池盒,给这个流水灯做电源:
下面是我简单的把我有的二极管不多,黄绿蓝各五个,也没有焊到电路板上,只是简单的接了一下,主要是为了检测这个电路是
不是好用!因为黄的和绿色二极管的额定电压不同,所以亮度有所不同,下面是发光的照片,大家在做的时候可以做成想做的图形或字:
这回完整了。
stc 单片机闪烁灯、流水灯查表法的实现
Stc 单片机闪烁灯、流水灯查表法的实现闪烁灯1.实验任务如电路原理图所示:在P2.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。
3.系统板上硬件连线把“单片机最小系统”中的P2.0端口用导线连接到发光二极管L1端口上。
1.实验任务利用取表的方法,使端口P2做单一灯的变化:左移2次,右移2次,闪烁2次(延时的时间0.2秒)3.硬件实现把“单片机最小系统”P1.0-P1.7用8芯排线连接到“八路发光二极管指示模块”中的L1-L8端口上,要求:P1.0对应着L1,P1.1对应着L2,……,P1.7对应着L8。
5.C语言源程序#include <AT89X51.H>unsigned char code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00,0xff,0x00,0xff,0x01};unsigned char i;void delay(void){unsigned char m,n,s;for(m=20;m>0;m--)for(n=20;n>0;n--) for(s=248;s>0;s--);}void main(void){while(1){if(table!=0x01){P1=table;i++;delay();}else{i=0;}}}流水灯程序c#include <REG52.H>sbit L1=P2^0;sbit l2=P2^1;sbit l3=P2^2;sbit l4=P2^3;sbit l5=P2^4;sbit l6=P2^5;sbit l7=P2^6;sbit l8=P2^7;void delay02s(void) //延时0.2秒子程序{unsigned char i,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=150;k>0;k--);}void main(void) {while(1){L1=0;delay02s();L1=1;l2=0;delay02s();l2=1;l3=0;delay02s();l3=1;l4=0;delay02s();l4=1;l5=0;delay02s();l5=1;l6=0;delay02s();l6=1;l7=0; delay02s(); l7=1;l8=0; delay02s(); l8=1;}}。
流水灯汇编语言程序设计
根据如图所示的电路图实现流水灯汇编语言程序设计,要求系统完成如下功能:
设计程序一、、实现流水灯显示控制,流水灯显示方式可自行选择,如由P0口输出状态,依次点亮LED灯D1-D8,无限循环。
设计程序二、用按键K1,K2控制流水灯流动方向,左移或右移。
程序可采用中断或查询方式完成
设计程序三、用按键K1,K2控制流水灯流水速度,K1,K2分别为加速,减速控制(提示:流水速度由定时器控制,通过改变定时器初值实现流水速度控制)
程序编写要求在下周二之前独立完成,程序要在电子实训课上完成调试。
Keil。
单片机学习编程之流水灯篇OK
第一章单片机的基础学习第一个实验 LED发光二极管的左移右移(D1到D8依次)点亮二极管点亮的原理图如下。
实际上是接在P1口。
原理图说明:发光二极管阴极接单片机,让电流流入单片机,因为单片机输出电流小,点不亮发光二极管。
发光二极管点亮电流为5 mA至20mA。
编程说明:(1)做一个LED的左移右移,有硬件电路可知,输出“0”才能使LED亮。
开始时P1.0亮,——P1.1亮——P1.2亮….——P1.7亮——P1.0亮,重复循环点亮LED。
(2)延时时间的设计:石英晶体为12MHz,1个机器周期为1微秒,采用单片机每走一步指令需要的时间来延时。
✧延时时间子程序(10.002毫秒)Delay: MOV R4,#20 ;2个机器周期,2微秒D1: MOV R5,#248 ;2个机器周期,2微秒DJNZ R5,$ ;2个机器周期,2*248微秒DJNZ R4,D1 ;2个机器周期,2*20微秒RET这个延时子程序:20*(498+2)+2=10002个机器周期=10.002毫秒。
✧延时时间子程序(200毫秒)Delay: MOV R3,#20 ; 200微秒D1:MOV R4,#20 ;10微秒D2: MOV R5,#248DJNZ R5,$DJNZ R4,D2DJNZ R3,D1RET(3)汇编程序源代码注意:向电脑上编辑程序时注意标点符号要在英文的格式下输入。
ORG 00HMAIN: MOV A,#0FFHCLR CMOV R2,#08H;左移点亮发光二极管LOOP: RLC A ;带进位左移一位MOV P1,A;点亮LED发光二极管CALL DELAY;调用延时子程序DJNZ R2,LOOP;左移、轮流点亮发;光二极管;左移点亮发光二极管后,再右移点亮发光二极管MOV R2,#07HLOOP1: RRC A ;带进位右移一位MOV P1,A;点亮LED发光二极管CALL DELAY;调用延时子程序DJNZ R2,LOOP1JMP MAIN; 返回到初始位置;设置延时时间DELAY: MOV R3,#20D1: MOV R4,#20D2: MOV R5,#248DJNZ R5,$DJNZ R4,D2DJNZ R3,D1RETEND(4)C程序源代码#include <reg51.h>void Delay()//延时子程序{ int i,j;for(i=0;i<=255;i++)for(j=0;j<=255;j++);}void main(){unsigned int i;unsigned int temp;P1=0xff;while(1){temp=0x01;for(i=0;i<8;i++){P1=~temp;逐位取反Delay();temp=temp<<1;}}}(4)实验结果图(注意学习板上的JJ_P1连接器连上)第二个实验采用定时器来设置延时时间(方式0)说明:(1)开始时p1.0亮,延时0.2秒后左移至p1.1亮,如此左移7次后至,再延时0.2秒右移至p1.6亮,如此右移7次后至p1.0亮;(2)延时时间0.2秒,使用定时器0在方式0下工作;采用查询的方式(3)程序源代码ORG 00HMOV TMOD,#00H /***设置定时器的工作方式***/START: CLR CMOV A,#0FFHMOV R2,#08 /***设置循环次数***/LOOP: RLC A /***带进位左循环累加器,点亮发光二极管***/ MOV P1,A /***设置定时器定时时间***/MOV R3,#100CALL DELAYDJNZ R2,LOOP /***点亮了八个发光二极管吗,没有继续***/MOV R2,#07LOOP1: RRC AMOV P2,AMOV R3,#100CALL DELAYDJNZ R2,LOOP1JMP START/***通过单片机内部的定时器设置定时时间***/DELAY: SETB TR0 /***启动定时器***/AGAIN: MOV TL0,#(8192-2000) MOD 32MOV TH0,#(8192-2000) / 32LOOP2: JBC TF0,LOOP3 ;通过查询的方式来判断时间定时器的计时JMP LOOP2LOOP3: DJNZ R3,AGAINCLR TR0RET;非中断END(4)实验结果图第三个实验采用定时器来设置延时时间(方式1)(1)开始时p1.0亮,延时0.2秒后左移至p2.1亮,如此左移7次后至,再延时0.2秒右移至p1.7亮,如此右移7次后至p1.0亮;(2)延时时间0.2秒,使用定时器0在方式1下工作;采用查询的方式(3)源程序代码ORG 00HMOV TMOD,#01HSTART: CLR CMOV A,#0FFHMOV R2,#08LOOP: RLC AMOV P1,AMOV R3,#20CALL DELAYDJNZ R2,LOOPMOV R2,#07LOOP1: RRC AMOV P1,AMOV R3,#20CALL DELAYDJNZ R2,LOOP1JMP STARTDELAY: SETB TR0AGAIN: MOV TL0,#0F0HMOV TH0,#0D8HLOOP2: JBC TF0,LOOP3JMP LOOP2LOOP3: DJNZ R3,AGAINCLR TR0RETEND附录资料:红外发射器的原理图AT89S52下载器的原理图。
2种方法实现流水灯
delay(500);
}Байду номын сангаас
}
还有一种方法就是将数据放到数组中,然后利用 for 循环,将数据取出赋值。
/* *名称:延时函数
*功能:实现延时.5眤为 1000 时,延时约 1s. */ void delay(uint z) {
uint x,y; for(x=z;x>0;x--)
for(y=110;y>0;y--); }
/* *名称:显示函数 *功能:实现流水灯功能 */ void display() {
uchar temp=0,i=0;
P1=0xfe;
//左移模块
temp=P1;
for(i=0;i<8;i++)
{
P1=temp;
temp=_crol_(temp,1);
delay(500);
}
P1=0x7f;
//右移模块
temp=P1;
for(i=0;i<8;i++)
{
P1=temp;
temp=_cror_(temp,1);
*/
#include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int
void delay(uint); void display();
void main() {
while(1) {
display(); } }
还有一种方法就是将数据放到数组中然后利用for循环将数据取出赋值
平常用到的 2 种实现流水灯的方法
/* *作用:实现流水灯功能 *思路:通过左移和右移运算符实现 *不足:在首尾 2 个灯上停留时间过长,产生类似停顿现象 *解决方法:右移模块初始赋值 0xbf,循环改为 6 次 */
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于51单片机的流水灯
1.实验任务
利用单片机AT89C51与LED设计一串流水灯,要求至少26个灯,三种流水模式。
2. 电路原理图
3.系统板上硬件连线
(1)P0,P2,P3分别接24个小灯,P1.5,P1.6,P1.7用来显示流水灯模式的指示灯;
(2)P1.0,P1.2,P1.4三个管脚为三种模式控制键,按下其中一种可以显示一种流水模式。
4.c语言程序
#include <reg51.h>
#include <intrins.h>
sbit key1=P1^0;
sbit key2=P1^2;
sbit key3=P1^4;
sbit W1=P1^5;
sbit W2=P1^6;
sbit W3=P1^7;
unsigned char i,j,k,m,n,temp,y,v,u;
int a[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
int b[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void delay02s(void) //延时0.2秒子程序
{
unsigned char i,j,k; //定义3个无符号字符型数据。
for(i=20;i>0;i--) //作循环延时
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
void aa() // 实现要求子程序(key1按下时实现逐盏点亮,逐盏灭掉) {
P0=0xff ;// 发光二极管全灭
while(!key1)
delay02s();
while(key1==1)
{ while(1)
{P0=a[m];P2=a[m];P3=a[m];
W3=0;delay02s();P0=0xff;P2=0xff;P3=0xff;delay02s();P0=a[m];P2=a[m];P3 =a[m];m++;
if(m==8) m=0;
}//逐盏点亮、闪烁,逐盏灭掉
} }
void bb()
{ P3=0xff ;// 发光二极管全灭
while(!key2)
delay02s();
while(key2==1)
{ while(1)
{P0=b[n];P2=b[n];P3=b[n];W2=0;delay02s();n++;
if(n==8)n=0;}}
}
void cc()
{ P2=0xff ;// 发光二极管全灭
while(!key3)
delay02s();
while(key3==1)
{ while(1)
{P0=0xaa;P2=0xaa;P3=0xaa;
W1=0;delay02s();delay02s();delay02s();delay02s();P0=0x55;P2=0x55;P3=0 x55;delay02s();delay02s();delay02s();delay02s();
temp=0xfe;
P0=temp; P2=temp;P3=temp;delay02s(); for(y=1;y<8;y++)
{
u=temp<<y;
v=temp>>(8-y);
P0=u|v;
P2=u|v;
P3=u|v;
delay02s();
}
for(y=1;y<8;y++)
{
u=temp>>y;
v=temp<<(8-y);
P0=u|v;
P2=u|v;
P3=u|v;
delay02s();
}
}
}}
void main()
{
while(1){P0=0xff; while(!key1)aa(); while(!key2)bb(); while(!key3)cc(); }}。