既然涉及到数码管部分来了
我把数码管的原理和程序贴出来
希望能更好的帮助你理解
在 《51hei单片机实验板资料-总括和说明.pdf》
里很清楚的看到了
P2。0接的是段码控制端
P2。1是位码
74HC573驱动模块和其他数码管驱动又是不同的方式
比如MAX7219 或者74HC245等
它的主要思路是 要要显示的数据 比如20H-27H单元中的数据
先取20H中的数 查段码表(这个最基本的查表应该没问题了 )
numtab: db 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H,39H
我们来看段码表
第一个数 3FH 就是00111111 对应ABCDEFG DP 就是ABCDEF 亮 G 和DP 不亮
那么这就是显示数字0
第二个数 06H 就是00000110 就是 BC 亮 其他不亮 就是显示数字1
后面以此类推。。。。。
紧接着 我们要让20H 的值显示到第一个数码管 那么再用
P2。1来选择位码位
实现方法是 先做了一张表
tab: db 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
我们看第一个0FEH 就是11111110 就是第一个数码管
第二个数 0FDH,就是11111101 就是选中第二个数码管
以此类推 。。。。。
说一下74HC573 的原理PDF上也有
OE:output_enable,输出使能; 第 1脚
LE:latch_enable,数据锁存使能,latch是锁存的意思; 第11脚
Dn:第n路输入数据; 2-9 脚
On:第n路输出数据; 19-12脚
我们看这个板子的电路图
2个573片子的 第1脚都是直接接地的 也就是说输出使能一直是打开的
那么我们要控制的就是 LE脚 也就是接在单片机上的 P2。0 和P2。1
来控制数据的锁存
在实际应用的时候是这样做的:
a. OE=0; (573的第1脚直接接地)
b. 先将数据从单片机的口线上输出到Dn; (从P0送数据)
c. 再将LE从0->1->0 (下降沿锁存)
d. 这时,你所需要输出的数据就锁存在On上了,输入的数据在变化也影响不到输出的数据了
好了 说了这么多文字性的 下面是实验板源程序 编译通过 直接运行
;原创作品http://www.51hei.com
;-----------------------------
;单片机内存分配申明!
DUAN BIT P2.0
WEI BIT P2.1
led bit p1.4
GE_BIT EQU 30H
SHI_BIT EQU 31H
XCQ_DATA EQU 40H ;显存区
;---------------------------
ORG 0000H
ljmp main
org 0020H
;--------------------------------
main:
MOV R0,#XCQ_DATA
MOV a,#20
mov @r0,a
acall chuli
acall display
ajmp main
;---------------------
;数据处理子程序
;-------------------
CHULI:
mov a,XCQ_DATA
MOV B,#10
DIV AB
MOV GE_BIT,b;个 位存入30H中
MOV B,#10
DIV AB
MOV SHI_BIT,b ;十位存入31H中
RET
;--------------------------
;数码管显示子程序
;-------------------------
DISPLAY:
mov r0,#4
dpl1: mov r1,#250 ;
dplop:
MOV DPTR ,#NUMTAB
clr DUAN
mov a,SHI_BIT ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
mov p0,A ;送出十位的7段代码
SETB DUAN ;打开锁存 给它一个下降沿
clr DUAN ; 这里就是上面的第三步c. 再将LE从0->1->0 (下降沿锁存)
CLR WEI
MOV P0,#0DFH
SETB WEI
CLR WEI
lcall DELAY ;
MOV DPTR ,#NUMTAB
CLR DUAN
mov a,GE_BIT ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
mov p0,A ;送出个位的7段代码
SETB DUAN ; 打开锁存 给它一个下降沿
CLR DUAN
CLR WEI
MOV P0,#0BFH
SETB WEI
CLR WEI
lcall DELAY
MOV DPTR ,#NUMTAB
CLR DUAN
mov a,#11 ;显示C
MOVC A,@A+DPTR ;
mov p0,a ;
SETB DUAN
clr DUAN ;
CLR WEI
MOV P0,#07FH
SETB WEI
CLR WEI
lcall DELAY
CLR DUAN
MOV P0,#00H
SETB DUAN
CLR DUAN
lcall DELAY ;
djnz r1,dplop ;
djnz r0,dpl1 ;
ret
;-------------------
;延时程序
;--------------------
DELAY:
MOV R7,#250
DJNZ R7,$
RET
;------------------------------------------------
;实验板上的7段数码管0~9数字的共Y显示代码
;-----------------------------
numtab: db 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H,39H
tab: db 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
;0 1 2 3 4 5 6 7
END
51hei开发板的8个数码管为2*4 位共阴数码管,它的位选端和段选端都连接在MCU 的P0 端,
再通过74HC573 锁存器直接控制驱动显示
附带的资料 里面的
开发板资料-总括和说明.pdf
里面的电路图很清楚
数码管的段选和位选都是接在P0上的
刚开始程序
MOV P0,#00H
ACALL DEL
MOV P0,#0FFH
那么直接是给P0全0然后全1 不影响74HC573的 数据锁存
后面 改第5条语句
MOV P0,#0FEH
即 MOV P0,11111110B
P0。1为0 对应 选中从左到右第一个数码管
再改一下程序
MOV P0,#0FH 高4位为0 选中从左到右后4个数码管 同时 段码也只显示A,B,C,D 4位
P0是数码管和LED 复用的 改变P0的值对这2个都会有影响
板子买回来 看下电路图 再找找上面用的 芯片的PDF
找找示例程序 书上的 网上的 (对应的接口定义需要改一下 比如有的板子用MAX7219 有的用其他的来驱动数码管 )开工吧