專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

51hei單片機(jī)實(shí)驗(yàn)板LED控制程序

作者:耗子   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2009年06月01日   【字體:

既然涉及到數(shù)碼管部分來(lái)了
我把數(shù)碼管的原理和程序貼出來(lái)
希望能更好的幫助你理解
在 《51hei單片機(jī)實(shí)驗(yàn)板資料-總括和說(shuō)明.pdf
里很清楚的看到了
P2。0接的是段碼控制端
P2。1是位碼
74HC573驅(qū)動(dòng)模塊和其他數(shù)碼管驅(qū)動(dòng)又是不同的方式
比如MAX7219 或者74HC245等
 它的主要思路是 要要顯示的數(shù)據(jù) 比如20H-27H單元中的數(shù)據(jù)
先取20H中的數(shù) 查段碼表(這個(gè)最基本的查表應(yīng)該沒(méi)問(wèn)題了 )
 numtab: db 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H,39H
我們來(lái)看段碼表
   第一個(gè)數(shù) 3FH 就是00111111 對(duì)應(yīng)ABCDEFG DP 就是ABCDEF 亮 G 和DP 不亮
那么這就是顯示數(shù)字0
 第二個(gè)數(shù)    06H 就是00000110  就是 BC 亮 其他不亮  就是顯示數(shù)字1
 后面以此類(lèi)推。。。。。
緊接著  我們要讓20H 的值顯示到第一個(gè)數(shù)碼管 那么再用
P2。1來(lái)選擇位碼位
實(shí)現(xiàn)方法是 先做了一張表
tab: db 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
    我們看第一個(gè)0FEH 就是11111110 就是第一個(gè)數(shù)碼管 
    第二個(gè)數(shù)      0FDH,就是11111101  就是選中第二個(gè)數(shù)碼管 
    以此類(lèi)推 。。。。。
 
說(shuō)一下74HC573 的原理PDF上也有  
 OE:output_enable,輸出使能;  第 1腳
LE:latch_enable,數(shù)據(jù)鎖存使能,latch是鎖存的意思;  第11腳
Dn:第n路輸入數(shù)據(jù);  2-9 腳
On:第n路輸出數(shù)據(jù);   19-12腳
我們看這個(gè)板子的電路圖
2個(gè)573片子的 第1腳都是直接接地的 也就是說(shuō)輸出使能一直是打開(kāi)的
那么我們要控制的就是 LE腳  也就是接在單片機(jī)上的 P2。0 和P2。1
來(lái)控制數(shù)據(jù)的鎖存
在實(shí)際應(yīng)用的時(shí)候是這樣做的:
a. OE=0; (573的第1腳直接接地) 
b. 先將數(shù)據(jù)從單片機(jī)的口線(xiàn)上輸出到Dn; (從P0送數(shù)據(jù))
c. 再將LE從0->1->0 (下降沿鎖存)
d. 這時(shí),你所需要輸出的數(shù)據(jù)就鎖存在On上了,輸入的數(shù)據(jù)在變化也影響不到輸出的數(shù)據(jù)了

好了  說(shuō)了這么多文字性的 下面是實(shí)驗(yàn)板源程序 編譯通過(guò) 直接運(yùn)行 

 ;原創(chuàng)作品http://www.torrancerestoration.com
 ;-----------------------------
;單片機(jī)內(nèi)存分配申明!
DUAN        BIT P2.0 
WEI         BIT P2.1
led         bit p1.4
GE_BIT      EQU 30H
SHI_BIT     EQU 31H
XCQ_DATA    EQU  40H ;顯存區(qū)

;---------------------------
       ORG 0000H
       ljmp main
       org 0020H
;--------------------------------
main:  
       MOV R0,#XCQ_DATA
   MOV a,#20
   mov @r0,a
  
   acall chuli
   acall display
   ajmp main

;---------------------
;數(shù)據(jù)處理子程序
;------------------- 
CHULI:
     mov a,XCQ_DATA
     MOV B,#10 
     DIV AB 
     MOV GE_BIT,b;個(gè) 位存入30H中
     MOV B,#10 
     DIV AB 
     MOV SHI_BIT,b ;十位存入31H中 
     RET
;--------------------------
;數(shù)碼管顯示子程序
;-------------------------
DISPLAY:
       mov r0,#4
dpl1:  mov r1,#250 ;
dplop:

    MOV DPTR ,#NUMTAB
    clr DUAN         
    mov a,SHI_BIT ;取十位數(shù)
    MOVC A,@A+DPTR ;查十位數(shù)的7段代碼
    mov p0,A ;送出十位的7段代碼
    SETB DUAN  ;打開(kāi)鎖存 給它一個(gè)下降沿
    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 ;取個(gè)位數(shù)
    MOVC A,@A+DPTR ;查個(gè)位數(shù)的7段代碼
    mov p0,A ;送出個(gè)位的7段代碼
    SETB  DUAN ;   打開(kāi)鎖存 給它一個(gè)下降沿
    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
;-------------------
;延時(shí)程序
;--------------------
DELAY:
    MOV R7,#250
    DJNZ R7,$
    RET
;------------------------------------------------
;實(shí)驗(yàn)板上的7段數(shù)碼管0~9數(shù)字的共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開(kāi)發(fā)板的8個(gè)數(shù)碼管為2*4 位共陰數(shù)碼管,它的位選端和段選端都連接在MCU 的P0 端,
再通過(guò)74HC573 鎖存器直接控制驅(qū)動(dòng)顯示
 附帶的資料 里面的
開(kāi)發(fā)板資料-總括和說(shuō)明.pdf
里面的電路圖很清楚
  數(shù)碼管的段選和位選都是接在P0上的
剛開(kāi)始程序
       MOV P0,#00H
        ACALL DEL
        MOV P0,#0FFH
那么直接是給P0全0然后全1 不影響74HC573的 數(shù)據(jù)鎖存
后面 改第5條語(yǔ)句
MOV P0,#0FEH
即 MOV P0,11111110B
P0。1為0 對(duì)應(yīng) 選中從左到右第一個(gè)數(shù)碼管  
再改一下程序
MOV P0,#0FH 高4位為0 選中從左到右后4個(gè)數(shù)碼管 同時(shí) 段碼也只顯示A,B,C,D 4位 
P0是數(shù)碼管和LED 復(fù)用的 改變P0的值對(duì)這2個(gè)都會(huì)有影響
  板子買(mǎi)回來(lái) 看下電路圖 再找找上面用的 芯片的PDF 
    找找示例程序 書(shū)上的 網(wǎng)上的 (對(duì)應(yīng)的接口定義需要改一下 比如有的板子用MAX7219 有的用其他的來(lái)驅(qū)動(dòng)數(shù)碼管 )開(kāi)工吧 

關(guān)閉窗口