74HC164怎样实现32位流水灯。用串行口方式 0 输出,用级联的 4 个 74HC164 扩展出 4 个 8 位并行输出口,

74HC164怎样实现32位流水灯。用串行口方式 0 输出,用级联的 4 个 74HC164 扩展出 4 个 8 位并行输出口,,第1张

用串行口方式 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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7737232.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存