用串行口方式 0 输出,用级联的4个74HC164 扩展出 4 个 8 位并行输出口,接32个LED流水灯。串口的方式0时,级联的芯片过多时,在串口输入数据的时候,每个164的输出端的状态在快速变化,所以,效果并不是很理想,特别是仿真时,流水灯的效果不是很流畅。改换成74HC595就可以,因为,在输入数据时,输出端的锁存器可以并闭,等数据全部输入结束后再同时锁存数据,就可以避免了输出端的快速变化的缺陷了。如下是仿真图,要是在实物开发板上测试会好些,可以避免仿真的缺陷。
CLK EQU P1.0定义端口P1.0在该程序中用CLK表示HEIPING:MOV R0,#40 r0=40 BLACK子程序入口参数
LCALL BLACK 调用BLACK
LP: MOV R6,#0 r6=0
MOV R3,#16 r3=16决定BEGIN子程序执行次数
MOV A,#0 a=0
BEGIN: MOV DPTR,#MyZiKu dptr=MYZIKU(首地址)
MOVCA,@A+DPTR a=欲显示字符的字形码
LCALL SHOW 调用SHOW程序(显示)
LCALL DELAY 调用DELAY程序(延时)
INC R6 r6加1
MOV A,R6 a=r6
DJNZR3,BEGIN r3减1不为0转移到BEGIN
BEGIN这一段程序的作用是在LED上每隔DELAY程序设定的时间按顺序显示0~F 循环16次
LJMPLP 转移到LP执行
延时程序 r0 r1 r2决定延时时间
DELAY: MOV R0,#0FFH r0=255
DLP:MOV R1,#0FFH r1=255
DLP1: MOV R2,#04H r2=4
DJNZR2,$ r2减1不为0仍在该行再次执行
DJNZR1,DLP1 r1减1不为0转到DLP1
DJNZR0,DLP r0减1不为0转到DLP
RET 退出
显示程序 该程序将循环8次显示一个字符
SHOW: MOV R0,#8 r0=8
SLP:CLR CLK P1.0输出低电平
RRC A 将存放在A中欲显示的字符码右移一位(最低位存入C)
MOV A_B,C A_B(未见到你程序中定义 应是个端口)=C
SETBCLK P1.0输出高电平
DJNZR0,SLP r0减1不为0转到SLP 继续输出字形码
RET
该程序循环40次 P1.0输出40个脉冲 同时端口A_B持续输出低电平
BLACK: CLR CLK P1.0输出低电平
CLR A_B A_B(未见到你程序中定义 应是个端口)输出低电平
SETBCLK P1.0输出高电平
DJNZR0,BLACK r0减1不为0转到BLACK
RET
0~F的字形码
MYZIKU:
DB 77H,06H,0B3H,97H,0C6H"0,1,2,3,4"
DB 0D5H,0F5H,07H,0F7H,0D7H "5,6,7,8,9"
DB 0E7H,0F4H,71H,0B6H,0F1H,0E1H "A,B,C,D,E,F"
0101 0000 1289 1488 R4H5 Q533
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)