流水灯,真是百玩不厌呀,呵呵。。。今天在网友的博客上看到了几种花样流水灯,其中一种类似于许多动态广告牌的蛮吸引我,受到他的启发,我也写了一个流水灯程序,我是用查表法写这个程序的,也不知道实现这样的流水灯到底怎样写更简单。
这里有一幅该流水灯的Proteus虚拟仿真效果图,不过跟我下面的程序所实现的有所区别:

这是本程序实现的一小段演示视频:
我写的汇编源程序如下:
/******************************************************************/
/*名称:依次堆积流水灯(仿广告牌)
/*功能:P2口接8只数码管,实现依次堆积点亮,闪烁几下后再依次堆积熄灭
/*编写:JiangX.net
/*时间:2008年6月23日
/*版本:V1.1/修改时间: 2008年6月23日
/******************************************************************/
ORG 0
START:
MOV DPTR,#TAB ;将DPTR指向编码表位置
MOV R5,#87 ;编码数,编码表共88行(0-87)
LOOP:
CLR A ;清空ACC
MOVC A,@A+DPTR ;根据ACC的内容取出编码表里的编码
MOV P2,A ;让P2口输出ACC的内容
ACALL DELAY ;调用延时子程序
INC DPTR ;将DPTR寄存器的内容加1
DJNZ R5,LOOP ;将LOOP执行R5次
LJMP START
DELAY: ;0.1S延时子程序(12MHz晶振)
MOV R7,#200
D1:
MOV R6,#250
DJNZ R6,$
DJNZ R7,D1
RET
TAB: ;流水花样可以任意编写
DB 01111111B ;0表示点亮LED,1表示熄灭LED
DB 10111111B
DB 11011111B
DB 11101111B
DB 11110111B
DB 11111011B
DB 11111101B
DB 11111110B
DB 01111110B
DB 10111110B
DB 11011110B
DB 11101110B
DB 11110110B
DB 11111010B
DB 11111100B
DB 01111100B
DB 10111100B
DB 11011100B
DB 11101100B
DB 11110100B
DB 11111000B
DB 01111000B
DB 10111000B
DB 11011000B
DB 11101000B
DB 11110000B
DB 01110000B
DB 10110000B
DB 11010000B
DB 11100000B
DB 01100000B
DB 10100000B
DB 11000000B
DB 01000000B
DB 10000000B
DB 00000000B ;依次堆积点亮LED
DB 0FFH
DB 0FFH
DB 000H
DB 000H
DB 0FFH
DB 0FFH
DB 000H
DB 000H ;八只LED全体闪几下
DB 10000000B
DB 01000000B
DB 00100000B
DB 00010000B
DB 00001000B
DB 00000100B
DB 00000010B
DB 00000001B
DB 10000001B
DB 01000001B
DB 00100001B
DB 00010001B
DB 00001001B
DB 00000101B
DB 00000011B
DB 10000011B
DB 01000011B
DB 00100011B
DB 00010011B
DB 00001011B
DB 00000111B
DB 10000111B
DB 01000111B
DB 00100111B
DB 00010111B
DB 00001111B
DB 10001111B
DB 01001111B
DB 00101111B
DB 00011111B
DB 10011111B
DB 01011111B
DB 00111111B
DB 10111111B
DB 01111111B
DB 11111111B ;依次堆积熄灭LED
DB 000H
DB 000H
DB 0FFH
DB 0FFH
DB 000H
DB 000H
DB 0FFH
DB 0FFH ;八只LED全体闪几下
END ;主程序结束
硬件系统电路原理图(点击放大):

原创文章如转载,请注明:转载自萬用電路板 [ http://www.jiangx.net/ ]