新聞中心

        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;

        }

        }

        }



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 新竹市| 浙江省| 韩城市| 北海市| 土默特右旗| 社旗县| 威信县| 保定市| 普宁市| 镇远县| 布尔津县| 吕梁市| 砚山县| 惠水县| 柞水县| 淳化县| 稻城县| 扶沟县| 辽宁省| 广丰县| 三都| 神木县| 龙岩市| 高邮市| 阜城县| 西充县| 青浦区| 会宁县| 灵川县| 肥乡县| 淮滨县| 横山县| 馆陶县| 西平县| 陆川县| 昌吉市| 科技| 泊头市| 屯留县| 武汉市| 崇仁县|