既然涉及到數碼管部分來了
我把數碼管的原理和程序貼出來
希望能更好的幫助你理解
在 《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.zg4o1577.cn
;-----------------------------
;單片機內存分配申明!
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 有的用其他的來驅動數碼管 )開工吧