74HC595和74LS164一样,也是串入并出的移位寄存器。
它们经常出现在单片机系统中,用来扩充并行输出接口。
看过一些资料,送往74HC595的串行信号,基本上都是用单片机并行接口的某个位,模拟SPI的时序,输出出来的。
这种方法,灵活性是它的优点,速度低是它的缺点。
如果使用51单片机的串口方式0,就可以得到更高的速度和更简练的编程方法。
在一般的单片机教材上,讲到串口方式0的时候,都给出了用164扩充并口的方法。但是对595这个后起之秀,介绍甚少。
其实,595和164的功能是一样的,只是多了一个“更新输出”的控制引脚。
下面,做而论道介绍使用四片74HC595扩充四个8位接口、驱动数码显示器的方法。
电路如下所示:
注意:电路图中省略了限流电阻。实际制作时,在每个段,串联1K左右的电阻即可。
这个显示电路,是属于静态显示的方法,不需要经常的调用显示子程序,使用起来非常方便。
这个显示电路,仅仅画出了四片595,实际上,可以仿照现在电路的结构,继续级连下去。当然,级连过多,会导致信号不稳定,那就要加上驱动电路了。
这个显示电路,实际上也就是LED点阵屏幕上,“显示一行”的驱动电路。如果配上16行的译码电路,就可以驱动16×32的点阵屏幕了。
用74HC595驱动数码管的程序如下。
;用595并行输出带动4个数码显示器。
;=============================================
ORG 0000H
SJMP START
;-----------------------------------------------------------------
START:
MOV SCON, #0 ;设置串口方式0
MOV 30H, #1 ;在显示缓冲区写入数字:8031
MOV 31H, #3
MOV 32H, #0
MOV 33H, #8
CALL TXD_595 ;显示
LJMP $ ;此处可以执行其它程序,不必经常调用显示程序
;-----------------------------------------------------------------
;串口发送到595的子程序。
;-----------------------------------------------------------------
TXD_595:
MOV R0, #30H ;显示缓冲区首址
TXD_B:
MOV A, @R0 ;取来待显示的数据
ADD A, #(TAB - $ - 3)
MOVC A, @A+PC ;查出七段码
MOV SBUF, A ;串口输出8位数
INC R0
JNB TI, $ ;等待输出完毕
CLR TI ;很快,8us(@12MHz)即可输出完8位数
CJNE R0, #34H, TXD_B ;共输出4字节
CLR P3.2 ;令595更新显示
SETB P3.2 ;用164,这两行就免了
RET
TAB:
DB 0C0H,0F9H,0A4H,0B0H, 99H, 92H, 82H,0F8H ;共阳极0-7显示代码
DB 80H, 90H, 88H, 83H,0C6H,0A1H, 86H, 8EH ;共阳极8-F显示代码
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)