静态显示接口
在单片机应用系统中,显示器显示常用两种方法:静态显示和动态扫描显示。所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的 I/O 接口用于笔划段字形代码。这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种方法单片机中 CPU 的开销小。可以提供单独锁存的 I/O 接口电路很多,这里以常用的串并转换电路 74LS164 为例,介绍一种常用静态显示电路,以使大家对静态显示有一定的了解。
MCS-51 单片机串行口方式押为移们寄存器方式,外接 6 片 74LS164 作为 6 位 LED 显示器的静态显示接口,把 8031 的 RXD 作为数据输出线, TXD 作为移位时钟脉冲。 74LS164 为 TTL 单向 8 位移位寄存器,可实现串行输入,并行输出。其中 A 、 B (第 1 、 2 脚)为串行数据输入端, 2 个引脚按逻辑与运算规律输入信号,公一个输入信号时可并接。 T (第 8 脚)为时钟输入端,可连接到串行口的 TXD 端。每一个时钟信号的上升沿加到 T 端时,移位寄存器移一位, 8 个时钟脉冲过后, 8 位二进制数全部移入 74LS164 中。 R (第 9 脚)为复位端,当 R=0 时,移位寄存器各位复 0 ,只有当 R=1 时,时钟脉冲才起作用。 Q1 … Q8 (第 3-6 和 10-13 引脚)并行输出端分别接 LED 显示器的 hg---a 各段对应的引脚上。关于 74LS164 还可以作如下的介绍:所谓时钟脉冲端,其实就是需要高、低、高、低的脉冲,不管这个脉冲是怎么来的,比如,我们用根电线,一端接 T ,一端用手拿着,分别接高电平、低电平,那也是给出时钟脉冲,在 74LS164 获得时钟脉冲的瞬间(再讲清楚点,是在脉冲的沿),如果数据输入端(第 1 , 2 引脚)是高电平,则就会有一个 1 进入到 74LS164 的内部,如果数据输入端是低电平,则就会有一个 0 进入其内部。在给出了 8 个脉冲后,最先进入 74LS164 的第一个数据到达了最高位,然后再来一个脉冲会有什么发生呢?再来一个脉冲,第一个脉冲就会从最高位移出,就象车站排队买票,栏杆就那么长,要从后面进去一个人,前面必须要从前面走出去一个人才行。
搞清了这一点,下面让我们来看电路, 6 片 7LS164 首尾相串,而时钟端则接在一起,这样,当输入 8 个脉冲时,从单片机 RXD 端输出的数据就进入到了第一片 74LS164 中了,而当第二个 8 个脉冲到来后,这个数据就进入了第二片 74LS164 ,而新的数据则进入了第一片 74LS164 ,这样,当第六个 8 个脉冲完成后,首次送出的数据被送到了最左面的 164 中,其他数据依次出现在第一、二、三、四、五片 74LS164 中。有个问题,在第一个脉冲到来时,除了第一片 74LS164 中接收数据外,其他各片在干吗呢?它们也在接收数据,因为它们的时钟端都是被接在一起的,可是数据还没有送到其他各片呢,它们在接收什么数据呢?。。。。。。其实所谓数据不过是一种说法而已,实际就是电平的高低,当第一个脉冲到来时,第一片 164 固然是从单片机接收数据了,而其它各片也接到前一片的 Q8 上,而 Q8 是一根电线,在数字电路中它只可能有两种状态:低电平或高电平,也就是“ 0 ”和“ 1 ”。所以它的下一片 74LS164 也相当于是在接收数据啊。只是接收的全部是 0 或 1 而已。这个问题放在这儿说明,可能有朋友不屑一顾,而有的朋友可能还是不清楚,这实际上涉及到数的本质的问题,如果不懂的,请仔细思考,并找一些数字电路的数,理解 164 的工作原理,再来看这个问题,或者去看看我的另一篇文章《初学单片机易掌握的概念》。务必搞懂,搞懂了这一点,你的级别就高过初学者,可谓入门者了
入口:把要显示的数分别放在显示缓冲区 60H-65H 共 6 个单元中,并且分别对应各个数码管 LED0-LED5 。
出口:将预置在显示缓冲区中的 6 个数成相应的显示字形码,然后输出到显示器中显示。
显示程序如下:
DISP: MOV SCON,#00H ; 初始化串行口方式 0
MOV R1,#06H ; 显示 6 位数
MOV R0,#65H ;60H-65H 为显示缓冲区
MOV DPTR,#SEGTAB ; 字形表的入口地址
LOOP:
MOV A,@R0 ; 取最高位的待显示数据
MOVC A,@A+DPTR ; 查表获取字形码
MOV SBUF,A ; 送串口显示
DELAY: JNB TI,DELAY ; 等待发送完毕
CLR TI ; 清发送标志
DEC R0 ; 指针下移一位,准备取下一个待显示数
DJNZ R1,LOOP ; 直到 6 个数据全显示完。
RET