• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 拉幕式數碼顯示技術

    拉幕式數碼顯示技術

    作者: 時間:2011-02-27 來源:網絡 收藏

    1. 實驗任務

    AT89S51P0.0/AD0P0.7/AD7端口接數碼管的ah端,8位數碼管的S1S8通過74LS138譯碼器的Y0Y7來控制選通每個數碼管的位選端。AT89S51P1.0P1.2控制74LS138ABC端子。在8位數碼管上從右向左循環顯示“12345678”。能夠比較平滑地看到拉幕的效果。

    2.電路原理圖

    4.21.1

    3.系統板上硬件連線

    (1. 把“系統”區域中的P0.0/AD0P0.7/AD78芯排線連接到“動態數碼顯示”區域中的ah端口上;

    (2. 把“三八譯碼模塊”區域中的Y0Y78芯排線連接到“動態數碼顯示”區域中的S1S8端口上;

    (3. 把“單片機系統”區域中的P1.0P1.2端口用3根導線連接到“三八譯碼模塊”區域中的ABC“端口上;

    4.程序設計方法

    (1. 動態數碼顯示技術;如何進行動態掃描,由于一次只能讓一個數碼管顯示,因此,要顯示8位的數據,必須經過讓數碼管一個一個輪流顯示才可以,同時每個數碼管顯示的時間大約在1ms4ms之間,所以為了保證正確顯示,我必須每隔1ms,就得刷新一個數碼管。而這刷新時間我們采用單片機的定時/計數器T0來控制,每定時1ms對數碼管刷新一次,T0采用方式2

    (2. 在進行數碼顯示的時候,要對顯示單元開辟8個顯示緩沖區,每個顯示緩沖區裝有顯示的不同數據即可。

    5.程序框圖

    主程序框圖


    中斷服務程序

    6.匯編源程序

    DISPBUF EQU 30H

    DISPCNT EQU 38H

    DISPBIT EQU 39H

    T1CNTA EQU 3AH

    T1CNTB EQU 3BH

    CNT EQU 3CH

    ORG 00H

    LJMP START

    ORG 0BH

    LJMP INT_T0

    START: MOV DISPCNT,#8

    MOV A,#10

    MOV R1,#DISPBUF

    LP: MOV @R1,A

    INC R1

    DJNZ DISPCNT,LP

    MOV DISPBIT,#00H

    MOV T1CNTA,#00H

    MOV T1CNTB,#00H

    MOV CNT,#00H

    MOV TMOD,#01H

    MOV TH0,#(65536-1000) / 256

    MOV TL0,#(65536-1000) MOD 256

    SETB TR0

    SETB ET0

    SETB EA

    SJMP $

    INT_T0:

    MOV TH0,#(65536-1000) / 256

    MOV TL0,#(65536-1000) MOD 256

    MOV A,DISPBIT

    ADD A,#DISPBUF

    MOV R0,A

    MOV A,@R0

    MOV DPTR,#TABLE

    MOVC A,@A+DPTR

    MOV P0,A

    MOV A,P1

    ANL A,#0F8H

    ADD A,DISPBIT

    MOV P1,A

    INC DISPBIT

    MOV A,DISPBIT

    CJNE A,#08H,NEXT

    MOV DISPBIT,#00H

    NEXT: INC T1CNTA

    MOV A,T1CNTA

    CJNE A,#50,LL1

    MOV T1CNTA,#00H

    INC T1CNTB

    MOV A,T1CNTB

    CJNE A,#8,LL1

    MOV T1CNTB,#00H

    INC CNT

    MOV A,CNT

    CJNE A,#9,LLX

    MOV CNT,#00H

    MOV A,CNT

    LLX: CJNE A,#01H,NEX1

    MOV 30H,#8

    LL1: LJMP DONE

    NEX1: CJNE A,#02H,NEX2

    MOV 31H,#8

    MOV 30H,#8

    LJMP DONE

    NEX2: CJNE A,#03H,NEX3

    MOV 32H,#8

    MOV 31H,#8

    MOV 30H,#8

    LJMP DONE

    NEX3: CJNE A,#04H,NEX4

    MOV 33H,#8

    MOV 32H,#8

    MOV 31H,#8

    MOV 30H,#8

    LJMP DONE

    NEX4: CJNE A,#05H,NEX5

    MOV 34H,#8

    MOV 33H,#8

    MOV 32H,#8

    MOV 31H,#8

    MOV 30H,#8

    LJMP DONE

    NEX5: CJNE A,#06H,NEX6

    MOV 35H,#8

    MOV 34H,#8

    MOV 33H,#8

    MOV 32H,#8

    MOV 31H,#8

    MOV 30H,#8

    LJMP DONE

    NEX6: CJNE A,#07H,NEX7

    MOV 36H,#8

    MOV 35H,#8

    MOV 34H,#8

    MOV 33H,#8

    MOV 32H,#8

    MOV 31H,#8

    MOV 30H,#8

    LJMP DONE

    NEX7: CJNE A,#08H,NEX8

    MOV 37H,#8

    MOV 36H,#8

    MOV 35H,#8

    MOV 34H,#8

    MOV 33H,#8

    MOV 32H,#8

    MOV 31H,#8

    MOV 30H,#8

    LJMP DONE

    NEX8: CJNE A,#00H,DONE

    MOV 37H,#10

    MOV 36H,#10

    MOV 35H,#10

    MOV 34H,#10

    MOV 33H,#10

    MOV 32H,#10

    MOV 31H,#10

    MOV 30H,#10

    LL: LJMP DONE

    DONE: RETI

    TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H

    END

    7.C語言源程序

    #include AT89X51.H>

    unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,

    0x66,0x6d,0x7d,0x07,

    0x7f,0x6f,0x77,0x7c,

    0x39,0x5e,0x79,0x71,0x00};

    unsigned char dispbitcode[]={0xf8,0xf9,0xfa,0xfb,

    0xfc,0xfd,0xfe,0xff};

    unsigned char dispbuf[8]={16,16,16,16,16,16,16,16};

    unsigned char dispbitcnt;

    unsigned int t02scnt;

    unsigned char t5mscnt;

    unsigned char u;

    unsigned char i;

    void main(void)

    {

    TMOD=0x02;

    TH0=0x06;

    TL0=0x06;

    TR0=1;

    ET0=1;

    EA=1;

    while(1);

    }

    void t0(void) interrupt 1 using 0

    {

    t5mscnt++;

    if(t5mscnt==4)

    {

    t5mscnt=0;

    P0=dispcode[dispbuf[dispbitcnt]];

    P1=dispbitcode[dispbitcnt];

    dispbitcnt++;

    if(dispbitcnt==8)

    {

    dispbitcnt=0;

    }

    }

    t02scnt++;

    if(t02scnt==1600)

    {

    t02scnt=0;

    u++;

    if(u==9)

    {

    u=0;

    }

    for(i=0;i8;i++)

    {

    dispbuf[i]=16;

    }

    for(i=0;iu;i++)

    {

    dispbuf[i]=8;

    }

    }

    }



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 湘乡市| 晋城| 泾阳县| 烟台市| 洛浦县| 宁远县| 新绛县| 招远市| 噶尔县| 曲靖市| 深州市| 临夏县| 改则县| 封开县| 浠水县| 建宁县| 体育| 揭西县| 常宁市| 罗定市| 满洲里市| 周至县| 淄博市| 贡嘎县| 无棣县| 资中县| 伊通| 木兰县| 香河县| 东平县| 慈利县| 广东省| 平原县| 望奎县| 永平县| 德安县| 呼玛县| 乐山市| 本溪市| 绥芬河市| 从江县|