既然涉及到數碼管部分來了 我把數碼管的原理和程序貼出來 希望能更好的幫助你理解 在 《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
|