新聞中心

        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;

        }

        }

        }



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 大渡口区| 南通市| 额济纳旗| 广水市| 云和县| 九龙城区| 大埔县| 财经| 夏邑县| 和政县| 遂川县| 赫章县| 皋兰县| 罗甸县| 柏乡县| 黄大仙区| 喀喇| 房产| 平罗县| 道真| 洱源县| 和政县| 鹤峰县| 克东县| 深泽县| 理塘县| 商都县| 葵青区| 陆川县| 肥城市| 广宗县| 湖南省| 寻甸| 泰顺县| 尖扎县| 丰原市| 缙云县| 渑池县| 延川县| 科尔| 玉树县|