流水灯111111d 文档
单片机流水灯实验报告

实验一流水灯实验报告一、实验目的1、熟练掌握JC-51A型开发板的使用方法和注意事项。
2、了解简单单片机应用系统的设计方法。
3、掌握应用KEIL软件编辑、编译源汇编程序的操作方法。
4、掌握应用USBISP烧录软件STC-ISP的操作方法。
5、掌握89C52RC单片机的流水灯操作过程。
二、实验内容在JC-51A开发板上实现8个发光LED“流水”的现象,并通过编写程序控制流水现象。
三、实验主要仪器及软件1,JC-51A开发板2,一台电脑3,STC-ISP-V479软件4,KEIL软件四、实验说明当8255 的PA口有低电平输出时,相应的发光二极管就会点亮。
应用这一原理我们可以容易的点亮一个数码管,例如令PA口输出0111 1111时D1就会点亮。
若再把0111 1111向右循环一位,利用PA口输出,就会点亮D2。
在发光二极管两次点亮的间隔中加延时程序,让每次点亮停留一段时间,像这样人眼就可以看到“流水”的现象。
五、实验步骤步骤一:把学习板连接到电脑上,把光盘安装到电脑里,注意电脑右下方显示的是COM几端口;步骤二:打开光盘看到“4.程序烧写软件”字样并打开,安装PL-232驱动这个软件,并打开STC手动下载,找到STC_ISP_V479.exe并打开;步骤三:打开看到一个界面,MCU type选择STC89C52RC,COM端口选择刚刚看到的几端口;步骤四:点击open file,选择光盘里5.MINI-V22实例源程序,打开汇编参考样例,打开流水灯2,选择hex格式的文件,点击确定;步骤五:点击download,如果连接不成功,重置下学习板的开关,这时就看到学习板的流水灯的滚动了。
六、广告流水灯程序ORG 00HMOV P2,#80HSTART:MOV A,#0FFH ;赋初值CLR CMOV R2,#8LOOP:RRC A ; 带进位右移MOV P1,ACALL DELAYDJNZ R2,LOOPMOV R2,#7LOOP1:RLC A ; 带进位左移MOV P1,ACALL DELAYDJNZ R2,LOOP1JMP STARTDELAY:MOV R3,#20 ; 延时0.2秒D1: MOV R4,#20 D2: MOV R5,#248DJNZ R5,$DJNZ R4,D2DJNZ R3,D1RETEND七、实验原理图更改此处可以使流水灯速度发生变化八、总结:通过本实验,懂得如何安装kell软件以及实验板,懂得单片机的调试,初步了解并熟悉实验板上单片机I/O口和LED 灯的电路结构,能通过修改程序实现仿真板上不同灯的亮灭情况,并希望通过多次试验对它有更多的了解。
流水灯

汇编语言程序:BITS EQU 20HTEN EQU 21HTEMP EQU 22HSTART:MOV TEMP,#0STLOP:ACALL DISPLAY;调用显示子程序INC TEMP;计数器加1MOV A,TEMP;CJNE A,#100,NEXT;判断计数器是否满100MOV TEMP,#0;满100清零从新开始NEXT:是返回否开始初始化显示参数关所有位显示取显示数据数据移位输出到164 输出时钟脉冲到164 8段码完成输出位选通信号延时位选通信号移位指向下一个显示数据2位完成否是LJMP STLOP;不满就循环执行DISPLAY:MOV A,TEMP;将TEMP中的十六进制数转换成十进制MOV B,#10;DIV ABMOV TEN,A;十位在AMOV BITS,B;个位在BMOV DPTR,#NUMTAB;指定查表起始地址MOV R0,#4;DPL1:MOV R1,#250;DPLOP:MOV A,BITS;取个位数MOVC A,@A+DPTR;查个位的7段数码管MOV P1,A;送出个位的7段代码CLR P2.0;开个位显示ACALL DELAY1ms;显示162msSETB P2.0;关闭个位显示MOV A,TEN;取十位显示MOVC A,@A+DPTR;查十位数的7段代码MOV P1,A;送出十位的7段代码CLR P2.1;开十位显示ACALL DELAY1ms;显示162msSETB P2.1;关闭十位显示DJNZ R1,DPLOPDJNZ R0,DPL1RETDELAY1ms:MOV R7,#80DJNZ R7,$RETNUMTAB:DB03fh,006H,05bH,04fH,066H,06dH,07dH,007H,07fH,06fH,077H,07cH,039H,05eH,079H,071H endC语言程序:#include<reg52.h>unsigned int dulatable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x 71};void delay(unsigned int z);void main(){unsigned int x,z,l;while(1){for(x=0;x<10;x++){for(z=0;z<10;z++){for(l=0;l<10;l++){P2=0xfe;P1=dulatable[z];delay(1);P2=0xfd;P1=dulatable[x];delay(1);}}}}}void delay(unsigned int z){unsigned int y;for(;z>0;z--)for(y=1000;y>0;y--);}实验一:流水灯实验51单片机,P1口外接8个发光二极管,共阴极接法,如图所示。
实验三流水灯实验(io口和定时器实验)

实验三流水灯实验(I/O口和定时器实验)一、实验目的1.学会单片机I/O口的使用方法和定时器的使用方法;2.掌握延时子程序的编程方法、内部中断服务子程序的编程方法;3.学会使用I/O口控制LED灯的应用程序设计。
二、实验内容1.控制单片机P1口输出,使LED1~LED8右循环轮流点亮(即右流水),间隔时间为100毫秒。
2.控制单片机P1口输出,使LED1~LED8左循环轮流点亮(即左流水),间隔时间为100毫秒。
3.使用K1开关控制上面LED灯的两种循环状态交替进行;4. 用定时器使P1口输出周期为100ms的方波,使LED闪烁。
5.使用定时器定时,使LED灯的两种循环状态自动交替,每一种状态持续1.6秒钟(选作)。
三、实验方法和步骤1.硬件电路设计使用实验仪上的E1、E5和E7模块电路,把E1区的JP1(单片机的P1口)和E5区的8针接口L1~L8(LED的驱动芯片74HC245的输入端)连接起来,P1口就可以控制LED 灯了。
当P1口上输出低电平“0”时,LED灯亮,反之,LED灯灭。
E7区的K1开关可以接单片机P3.0口,用P3.0口读取K1开关的控制信号,根据K1开关的状态(置“1”还是置“0”),来决定LED进行左流水还是右流水。
综上,画出实验电路原理图。
2.程序设计实验1和实验2程序流程图如图3-1实验3程序流程图如图3-2所示。
图3-1 实验1,2程序流程图图3-2 实验3程序流程图实验4程序流程图如图3-3,3-4所示。
实验5程序流程图如图3-5,3-6所示。
图3-5 实验5主程序流程图图3-6 定时器中断服务子程序流程图图3-4 定时器中断服务子程序流程图图3-3 实验4主程序流程图编程要点:(1)Pl,P3口为准双向口,每一位都可独立地定义为输入或输出,在作输入线使用前,必须向锁存器相应位写入“1”,该位才能作为输入。
例如:MOV P1,A; P1口做输出MOV P1,#0FFHMOV A,P1;P1口做输入SETB P3.0MOV C,P3.1;从P3.1口读入数据(2)每个端口对应着一个寄存器,例:P1→90H(P1寄存器地址);P3→B0H(P3寄存器地址);寄存器的每一位对应着一个引脚,例:B0H.0→P3.0(3)对寄存器写入“0”、“1”,对应的外部引脚则输出“低电平”、“高电平”。
流水灯模拟系统设计PPT模板

软件设计
three
—4—
汇编语言程序如下:
;<--------------------主程序-------------------->
START:
CLR
P1.0
ACALL
DELAY
SETB
P1.0
CLR
P1.1
ACALL
DELAY
SETB
P1.1
CLR
P1.2
ACALL
DELAY
SETB
P1.2
CLR
ACALL
DELAY
SETB
P1.7
ACALL
DELAY
AJMP
START
;<--------------------延时子程序-------------------->
DELAY:
MOV
R5,#20
பைடு நூலகம்
LOOP1:
MOV
R6,#20
LOOP2:
MOV
R7,#230
DJNZ
R7,$
—7—
;调用延时子程序 ;P1.7输出高电平,使D8熄灭 ;调用延时子程序 ;返回到标号START处再循环
two 硬件设计
—3—
要实现流水灯功能,我们只要将D1~D8依次点亮、熄灭,从信 号灯闪烁系统中我们得知,端口输出低电平,LED发亮,端口输出高 电平,LED熄灭。因此,程序流程设计如下,8只LED便会一亮一暗地 做流水灯了。
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高→返回 到程序开始。
单片机流水灯所有程序

#define unit unsigned int unit i,j;
void delay1s();
sbit led=P1;
sbit led仁PMO;
sbit led2=P1A1;
sbit led3=P1A2;
sbit led4=P1A3;
sbit led5=P1A4;
{
unit i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
用数组实现流水灯循环,依次点亮,然后依次熄灭
#include<reg52.h>
#define uchar unsigned char
//char是字符数组
#define unit unsigned int unit num;
头文件宏定义端口循环永不停止voiddelaymsunitxms用循环左移指令实现流水灯延迟05s下一灯亮led31
#include<reg52.h>
#define uchar unsigned char
//char是字符数组
#define unit unsigned int
uchar num;
sbit led仁PMO;
for(j=110;j>0;j--);
}流水灯
#include<reg52.h>
#define unit unsigned int unit i,j;
void delay1s();
sbit led=P1;
sbit led仁PMO;
sbit led2=P1A1;
sbit led3=P1A2;
单片机实验2-LED流水灯实验实验

四、实验步骤: 实验步骤: 1. 实验原理图: 实验原理图:
1KΩ P1.0 P1.1 P1.2
VCC
MCU
P1.3 P1.4 P1.5 P1.6 P1.7 1KΩ
用导线把A2区的 接口与D1区的 用导线把 区的J61接口与 区的 区的 接口与 区的J52接口相连 接口相连
2. 编写程序思路: 编写程序思路: 用单片机P1口的 位输出控制8只 口的8位输出控制 用单片机 口的 位输出控制 只LED灯, 灯 每次点亮一只 LED,8只LED灯依次点亮, , 只 灯依次点亮, 灯依次点亮 点亮LED8之后同时点亮 个LED两秒时间, 之后同时点亮8个 两秒时间, 点亮 之后同时点亮 两秒时间 然后再依次点亮LED1~LED8,如此循环, 然后再依次点亮 ,如此循环, 即可形成流水灯。 即可形成流水灯。 •注意:因为人眼的视觉暂留时间为0.1s 注意:因为人眼的视觉暂留时间为 注意 (100ms),所以每个灯点亮的时间间隔应大于 所以每个灯点亮的时间间隔应大于 200ms。建议取 左右。 。建议取250ms左右。 左右
实验报告要求
1. 实验名称 2. 实验目的 3. 实验设备 4. 实验内容 5. 实验原理(图要画完整)及控制方法和过程的详细 实验原理(图要画完整) 说明。 说明。 6.实验编写的程序 实验编写的程序 7.实验结果 实验结果 8.心得和建议 心得和建议
实验报告不得抄袭
下次实验内容:手动扩展外部中断^INT0、 ^INT1。 下次实验内容 : 手动扩展外部中断 、 。 当 ^INT0产生中断时 , 使 LED 8盏灯流水显示 。 当 产生中断时, 盏灯流水显示。 产生中断时 盏灯流水显示 ^INT1产生中断时,使8盏LED停止流水显示。 产生中断时, 盏 停止流水显示。 产生中断时 停止流水显示 只数码管全亮; 注:当P1=00H时,8只数码管全亮; 时 只数码管全亮 全灭。 当P1=0FFH时,8只LDE全灭。 时 只 全灭 ^INT0:外接 外接SW1; 外接 ; ^INT1外接 外接SW2。 外接 。 设定外部中断边沿触发方式有效; 附:(1) 设定外部中断边沿触发方式有效; (2) 请设计一验证外部中断优先级。 请设计一验证外部中断优先级。
单片机闪烁灯流水灯汇编代码大全
单片机闪烁灯流水灯汇编代码大全1、单片机AT89C51的P2 口接8个发光二极管,让这8 个发光二极管显示闪烁功能,即八灯亮2S,熄灭3S,如此循环。
参考程序:ORG 0000Hstart: MOV P1,#0HCALL delayMOV P1,#0FFHCALL delayCALL delayLJMP startdelay:MOV R7,#200d2: MOV R6,#250d1: DJNZ R6,d1DJNZ R7,d2RETEND;200*250 次*2*1us=1000ms=1s个发光二极管能够双灯左移之后再双灯右移,形成霹雳灯的效果,如此循环 5 次后全灭,延时0.5S 灯右移,形成霹雳灯的效果,如此循环5 次后全灭。
延时0.5S。
参考程序1:ORG 0000HMOV A,#11111100Bstart:MOV P1,ACALL delayRL ARL AINC R0CJNE R0,#4,startMOV R0,#00Hs:RR ARR AMOV P1,ACALL delayINC R0CJNE R0,#4,sMOV R0,#00HLJMP startdelay: MOV R5,#100 k1: MOV R6,#250k2: MOV R7,#250k3: DJNZ R7,k3DJNZ R6,k2DJNZ R5,k1RETEND参考程序2:ORG 0000HMOV R0,#5start:MOV P2,#11111100B CALL delay0_5s MOV P2,#11110011B CALL delay0_5s MOV P2,#11001111B MOV P2,#00111111BMOV P2,#00111111BMOV P2,#11001111B CALL delay0_5s MOV P2,#11110011B CALL delay0_5s MOV P2,#11111100B CALL delay0_5s DJNZ R0,start MOV P2,#0FFH SJMP $delay0_5s:MOV R7,#20d3: MOV R6,#200 d2: MOV R5,#250 d1: NOPNOPDJNZ R5,d1DJNZ R6,d2DJNZ R7,d3RETEND3、单片机AT89C51的P2 口接8个发光二极管,让这8 个发光二极管先交互闪烁 5 次,然后双灯左移之后再双灯右移,如此循环,形成流水灯的效果,延时0.5S。
plc课程设计--流水灯.doc
《可编程控制器原理及应用》课程设计报告目录觀 (2)1•谢仑 (5)2.主要硬件设备的介绍 (6)2.1可编程控制器的发展历史........................................ 错误!未定义书签。
2.1.1可编程控制器的定义 (6)2.1.2可编程控制器的特点 (4)2.1.3 PLC的基本结构和工作原理 (7)3•主要软件的介绍 (10)3.1 CX-0NE 简介 (10)3. 1. 1CX-Programmer 简介 (10)3.2 EPLAN 简介................................................................. 1()4.课程设计........................................................... 错误!未定义书签。
4.1小车自动往返控制程序.......................................... 错误!未定义书签。
4.1.1设计功能目的 (11)4. 1.2梯形图 (12)4. 1.3语句表 (12)4. 1.41/0 表 (14)4. 1.5功能说明 (15)4. 1.6电气原理图 (15)4. 1.7实物图 (17)4.2流水灯程序 ....................................................错误!未定义书签。
4.2.1设计功能目的 (18)4. 2. 2梯形图 (18)4. 2. 3语句表 (18)4. 2. 41/0 表 (19)4.2.5电气原理图 (20)4. 2. 6实物图 (21)53殳i十,雜 (22)6. (23)随着社会经济的发展,城市美化问题越来越引起人们的关注。
由于流水灯所具有的特有流动感而广泛应用于广告控制及人们生活中,给人们一种美感,为人们生活带来乐趣。
01实验一:流水灯设计
MOV NEXT1: MOV MOV
R1,#03H P1,#0AAH P1,#55H
ACALL DELAY ACALL DELAY DJNZ R1,NEXT1 AJMP START DELAY:MOV DEL2: MOV DEL1: MOV R6,#10 ;延时1S 延时1S R5,#200 R4,#250 DELA: MOV DELA2: MOV DELA1: MOV DJNZ R4,$ DJNZ R5,DELA1 DJNZ R6,DELA2 RET END R6,#2 ;延时0.2S 延时0.2S
ACALL DELA DJNZ R2,LOOP0 MOV LOOP1: SETB RLC MOV R2,#8 C A P1,A
ACALL DELAY ACALL DELAY DJNZ R1,NEXT0 LOOP: MOV MOV LOOP2: MOV A,#0FFH R3,#2 R2,#8
ACALL DELA DJNZ R2,LOOP1 DJNZ R3,LOOP2
AJMP START ORG 0030H
R5,#200 R4,#250
START: MOV A,# 0FEH LOOP: MOV P1,A ACALL DELA RL A AJMP LOOP
实验一: 例程2) 实验一:流水灯设计 (例程 例程
ORG ORG 0000H 0030H R1,#03H P1,#0FFH P1,#00H LOOP0: CLR RRC MOV C A P1,A AJMP START START: MOV NEXT0: MOV MOV
R1
200R
R2
200R
R3
200R
R4
200R
R5
200R
(完整word版)项目二流水灯的制作与调试
随着电子技术的快速发展尤其是数字技术的突飞猛进,多功能流水灯凭着简易,高效,稳定等特点得到普遍的应用。
在各种娱乐场所、店铺门面装饰、家居装潢、 城市墙壁更是随 处可见,与此同时,还有一些城市采用不同的流水灯打造属于自己的城市文明, 塑造自己的 城市魅力。
目前,多功能流水灯的种类已有数十种, 如家居装饰灯、店铺招牌灯等等。
所以, 多功能流水灯的设计具有相当的代表性。
任务1认识电路1•电路工作原理图1所示为555+ 4017构成的自动脉冲分配器 电路原理图。
十进制计数/分频器 CD4017,其内部由计数器及译码器两部分组成,由译码输出实现对脉 冲信号的分配,整个输出时序就是 O0、01、02、…、09依次出现与时钟同步的高电平, 宽度等于时钟周期。
CD4017有10个输出端(Y0〜Y9 )和1个进位输出端 C0。
每输入10个计数脉冲,CO 就 可得到1个进位正脉冲,该进位输出信号可作为下一级的时钟信号。
CD4017有3个控制(MR 、CP0和~CP1) , MR 为清零端,当在 MR 端上加高电平或正脉冲 时其输出00为高电平,其余输出端(01〜09)均为低电平。
CP0和〜CPl 是2个时钟输入 端,若要用上升沿来计数,则信号由 CP0端输入;若要用下降沿来计数,则信号由〜 CPl 端输入。
设置2个时钟输入端,级联时比较方便,可驱动更多二极管发光。
由此可见,当CD4017有连续脉冲输入时,其对应的输出端依次变为高电平状态, 用作顺序脉冲发生器。
项目二流水灯的制作与调试故可直接图1叮咚门铃电路原理图CLK或CP端:轻触开关作为信号触发,上升沿•CR端:清零端,高电平清零•INH端:接低电平时,CLK端上升沿计数,输出高电平•接高电平时,保持•CO 端:进位输出端,没有进位时输出高电平(Q0~Q4),有进位时输出低电平(Q5~Q9).实物图图2所示为流水灯电路实物图。
图2流水灯电路实物图任务2元器件的识别与检测1•电路元器件的识别在电路的制作过程中,元器件的识别与检测是不可缺少的一个环节,读者在制作前可先对照表1逐一进行识别。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用单片机控制的流水灯设计1.引言当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。
学习单片机的最有效方法就是理论与实践并重,本文笔者用AT89C51单片机自制了一款简易的流水灯,重点介绍了其软件编程方法,以期给单片机初学者以启发,更快地成为单片机领域的优秀人才。
2.硬件组成按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。
AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使用AT89C51单片机时无须外扩存储器。
因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。
其具体硬件组成如图1所示。
图1 流水灯硬件原理图从原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。
因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。
在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。
3.软件编程单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要告诉单片机怎么来进行工作,即编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。
软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。
下面我们以最简单的流水灯控制功能即实现8个LED灯的循环点亮,来介绍实现流水灯控制的几种软件编程方法。
3.1位控法这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,从而来控制相应LED灯的亮灭。
程序如下:ORG 0000H ;单片机上电后从0000H地址执行AJMP START ;跳转到主程序存放地址处ORG 0030H ;设置主程序开始地址START:MOV SP,#60H ;设置堆栈起始地址为60HCLR 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 ;程序结束3.2循环移位法在上个程序中我们是逐个控制P1端口的每个位来实现的,因此程序显得有点复杂,下面我们利用循环移位指令,采用循环程序结构进行编程。
我们在程序一开始就给P1口送一个数,这个数本身就让P1.0先低,其他位为高,然后延时一段时间,再让这个数据向高位移动,然后再输出至P1口,这样就实现“流水”效果啦。
由于8051系列单片机的指令中只有对累加器ACC中数据左移或右移的指令,因此实际编程中我们应把需移动的数据先放到ACC中,让其移动,然后将ACC移动后的数据再转送到P1口,这样同样可以实现“流水”效果。
具体编程如下所示,程序结构确实简单了很多。
ORG 0000H ;单片机上电后从0000H地址执行AJMP START ;跳转到主程序存放地址处ORG 0030H ;设置主程序开始地址START:MOV SP,#60H ;设置堆栈起始地址为60HMOV A,#0FEH ;ACC中先装入LED1亮的数据(二进制的11111110)MOV P1,A ;将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 ;程序结束3.3查表法上面的两个程序都是比较简单的流水灯程序,“流水”花样只能实现单一的“从左到右”流方式。
运用查表法所编写的流水灯程序,能够实现任意方式流水,而且流水花样无限,只要更改流水花样数据表的流水数据就可以随意添加或改变流水花样,真正实现随心所欲的流水灯效果。
我们首先把要显示流水花样的数据建在一个以TAB为标号的数据表中,然后通过查表指令“MOVC A,@A+DPTR”把数据取到累加器A中,然后再送到P1口进行显示。
具体源程序如下,TAB标号处的数据表可以根据实现效果的要求任意修改。
ORG 0000H ;单片机上电后从0000H地址执行AJMP START ;跳转到主程序存放地址处ORG 0030H ;设置主程序开始地址START:MOV SP,#60H ;设置堆栈起始地址为60HMOV DPTR,# TAB ;流水花样表首地址送DPTRLOOP:CLR A ;累加器清零MOVC A,@A+DPTR ;取数据表中的值CJNE A,#0FFH,SHOW;检查流水结束标志AJMP START ;所有花样流完,则从头开始重复流SHOW:MOV P1,A ;将数据送到P1口ACALL DELAY ;调用延时子程序INC DPTR ;取数据表指针指向下一数据AJMP LOOP ;继续查表取数据DELAY:;延时子程序MOV R0,#255 ;延时一段时间D1:MOV R1,#255DJNZ R1,$DJNZ R0,D1RET ;子程序返回TAB:;下面是流水花样数据表,用户可据要求任意编写DB 11111110B ;二进制表示的流水花样数据,从低到高左移DB 11111101BDB 11111011BDB 11110111BDB 11101111BDB 11011111BDB 10111111BDB 01111111BDB 01111111B ;二进制表示的流水花样数据,从高到低右移DB 10111111BDB 11011111BDB 11101111BDB 11110111BDB 11111011BDB 11111101BDB 11111110BDB 0FEH,0FDH,0FBH,0F7H ;十六进制表示的流水花样数据DB 0EFH,0DFH,0BFH,7FHDB 7FH,0BFH,0DFH,0EFHDB 0F7H,0FBH,0FDH,0FEH……DB 0FFH ;流水花样结束标志0FFHEND ;程序结束4.结语当上述程序之一编写好以后,我们需要使用编译软件对其编译,得到单片机所能识别的二进制代码,然后再用编程器将二进制代码烧写到AT89C51单片机中,最后连接好电路通电,我们就看到LED1~LED8的“流水”效果了。
本文所给程序实现的功能比较简单,旨在抛砖引玉,用户可以自己在此基础上扩展更复杂的流水灯控制,比如键盘控制流水花样、控制流水灯显示数字或图案等等。
参考文献:[1]徐煜明,韩雁.单片机原理及接口技术[M].北京:电子工业出版社,2005.1[2]万光毅,严义,邢春香.单片机实验与实践教程[M].北京:北京航空航天大学出版社,2006.4。