×
单片机 > 单片机程序设计 > 详情

利用74HC595在串行口扩充8位的并行输出接口

发布时间:2020-08-27 发布时间:
|

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显示代码
;=============================================




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向