本文主要描述数码管动态显示的实现过程,介绍如何通过74HC245和74HC138芯片实现段选和位选。
-
74HC245芯片
![86646f7c724869082405c78173b5ccf6.png](https://i-blog.csdnimg.cn/blog_migrate/c0ea64585d74257b73ef1587881e1b54.png)
74HC245芯片用以数码管的段选,它的输入端与P0相连,故可通过对P0赋段码值实现段选。已知八段数码管为共阴数码管,查阅资料,段码表如下,
![6894e1f31ba6c8e2cf30bc44880775c9.jpeg](https://i-blog.csdnimg.cn/blog_migrate/6241a5f8ef351862652cd1110937ca8c.jpeg)
-
74HC138芯片
该芯片用以位选,通过P2端口的P22,P23,P24实现位选,真值表如下:
![30e8f38d1c49dc8891100a5380836ab9.png](https://i-blog.csdnimg.cn/blog_migrate/b39150a575a95d16e64fb491c9a13b7f.png)
![008ce1441209e4e17188f8af56a9255e.png](https://i-blog.csdnimg.cn/blog_migrate/d248d98ca028c8b2af97dfa9d0fd24e1.png)
-
动态显示
动态显示实际上是利用LED显示器的余辉和人眼的视觉暂留作用,达到在同一时刻多位数码管同时亮起的假象。这只需要控制位选之间的延时效果间隔合适即可。
代码如下:
ORG 0000H
AJMP START
ORG 0030H
START:
MOV 60H,#1
MOV 61H,#3
MOV 62H,#1
MOV 63H,#4
MOV 64H,#10
MOV 65H,#5
MOV 66H,#2
MOV 67H,#0
MAIN:
MOV P2,#0FFH ;位选
MOV A,60H ;查表第一个数,给A赋值
LCALL LOOP1 ;调用函数,确定段选
MOV P0,A ;将段码赋给P0,进行段选
LCALL DLY ;延时
MOV P2,#0FBH
MOV A,61H
LCALL LOOP1
MOV P0,A
LCALL DLY
MOV P2,#0F7H
MOV A,62H
LCALL LOOP1
MOV P0,A
LCALL DLY
MOV P2,#0F3H
MOV A,63H
LCALL LOOP1
MOV P0,A
LCALL DLY
MOV P2,#0EFH
MOV A,64H
LCALL LOOP1
MOV P0,A
LCALL DLY
MOV P2,#0EBH
MOV A,65H
LCALL LOOP1
MOV P0,A
LCALL DLY
MOV P2,#0E7H
MOV A,66H
LCALL LOOP1
MOV P0,A
LCALL DLY
MOV P2,#0E3H
MOV A,67H
LCALL LOOP1
MOV P0,A
LCALL DLY
LJMP MAIN
DLY:MOV R0,#20 ;延时
D1:MOV R1,#50
DJNZ R1,$
DJNZ R0,D1
RET
LOOP1: INC A ;偏移量
MOVC A,@A+PC
RET
TAB: ;0-9与-的段码
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H
END
仿真结果如下图:
注意,要先进行位选,再进行段选,否则在proteus 中数码管无法正常显示。
![393470788edc92df243826d6b7c8e000.jpeg](https://i-blog.csdnimg.cn/blog_migrate/fd7381b9b5d229473578683aba33bd0e.jpeg)
![2535e51620836efd286d55436f5cd6fe.png](https://i-blog.csdnimg.cn/blog_migrate/f46a87e36317556b9bc99f53344daa6f.png)