既然涉及到数码管部分来了 我把数码管的原理和程序贴出来 希望能更好的帮助你理解 在 《STC51-02A开发板资料-总括和说明.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上了,输入的数据在变化也影响不到输出的数据了
好了 说了这么多文字性的 下面是实验板源程序 编译通过 直接运行
;----------------------------- ;单片机内存分配申明! 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
|