新聞中心

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

        21. 拉幕式數碼顯示技術

        作者: 時間:2016-11-18 來源:網絡 收藏
        1.實驗任務
        用AT89S51單片機的P0.0/AD0-P0.7/AD7端口接數碼管的a-h端,8位數碼管的S1-S8通過74LS138譯碼器的Y0-Y7來控制選通每個數碼管的位選端。AT89S51單片機的P1.0-P1.2控制74LS138的A,B,C端子。在8位數碼管上從右向左循環顯示“12345678”。能夠比較平滑地看到拉幕的效果。
        2.電路原理

        圖4.21.1
        3.系統板上硬件連線
        (1.把“單片機系統”區域中的P0.0/AD0-P0.7/AD7用8芯排線連接到“動態數碼顯示”區域中的a-h端口上;
        (2.把“三八譯碼模塊”區域中的Y0-Y7用8芯排線連接到“動態數碼顯示”區域中的S1-S8端口上;
        (3.把“單片機系統”區域中的P1.0-P1.2端口用3根導線連接到“三八譯碼模塊”區域中的A、B、C“端口上;
        4.程序設計方法
        (1.動態數碼顯示技術;如何進行動態掃描,由于一次只能讓一個數碼管顯示,因此,要顯示8位的數據,必須經過讓數碼管一個一個輪流顯示才可以,同時每個數碼管顯示的時間大約在1ms到4ms之間,所以為了保證正確顯示,我必須每隔1ms,就得刷新一個數碼管。而這刷新時間我們采用單片機的定時/計數器T0來控制,每定時1ms對數碼管刷新一次,T0采用方式2。
        (2.在進行數碼顯示的時候,要對顯示單元開辟8個顯示緩沖區,每個顯示緩沖區裝有顯示的不同數據即可。
        5.程序框圖

        主程序框圖

        開始

        顯示緩沖區初始化

        必要參數初始化

        T0初始化,TH0,TL0裝入初值

        T0工作并開中斷

        等待中斷








        中斷服務程序
        T0中斷入口

        通過查表方式,獲得顯示代碼送入P0

        位選數據送P1

        位選數據=8嗎?

        位選數據加1

        位選數據=0

        CNT加1

        0.4秒定時到了嗎?

        CNT=9嗎?

        CNT=0

        根據CNT來決定顯示幾位數據

        中斷返回
















        6.匯編源程序
        DISPBUFEQU30H
        DISPCNTEQU38H
        DISPBITEQU39H
        T1CNTAEQU3AH
        T1CNTBEQU3BH
        CNTEQU3CH

        ORG00H
        LJMPSTART
        ORG0BH
        LJMPINT_T0
        START:MOVDISPCNT,#8
        MOVA,#10
        MOVR1,#DISPBUF
        LP:MOV@R1,A
        INCR1
        DJNZDISPCNT,LP
        MOVDISPBIT,#00H
        MOVT1CNTA,#00H
        MOVT1CNTB,#00H
        MOVCNT,#00H
        MOVTMOD,#01H
        MOVTH0,#(65536-1000)/256
        MOVTL0,#(65536-1000)MOD256
        SETBTR0
        SETBET0
        SETBEA
        SJMP$

        INT_T0:
        MOVTH0,#(65536-1000)/256
        MOVTL0,#(65536-1000)MOD256
        MOVA,DISPBIT
        ADDA,#DISPBUF
        MOVR0,A
        MOVA,@R0
        MOVDPTR,#TABLE
        MOVCA,@A+DPTR
        MOVP0,A
        MOVA,P1
        ANLA,#0F8H
        ADDA,DISPBIT
        MOVP1,A
        INCDISPBIT
        MOVA,DISPBIT
        CJNEA,#08H,NEXT
        MOVDISPBIT,#00H
        NEXT:INCT1CNTA
        MOVA,T1CNTA
        CJNEA,#50,LL1
        MOVT1CNTA,#00H
        INCT1CNTB
        MOVA,T1CNTB
        CJNEA,#8,LL1
        MOVT1CNTB,#00H
        INCCNT
        MOVA,CNT
        CJNEA,#9,LLX
        MOVCNT,#00H
        MOVA,CNT
        LLX:CJNEA,#01H,NEX1
        MOV30H,#8
        LL1:LJMPDONE
        NEX1:CJNEA,#02H,NEX2
        MOV31H,#8
        MOV30H,#8
        LJMPDONE
        NEX2:CJNEA,#03H,NEX3
        MOV32H,#8
        MOV31H,#8
        MOV30H,#8
        LJMPDONE
        NEX3:CJNEA,#04H,NEX4
        MOV33H,#8
        MOV32H,#8
        MOV31H,#8
        MOV30H,#8
        LJMPDONE
        NEX4:CJNEA,#05H,NEX5
        MOV34H,#8
        MOV33H,#8
        MOV32H,#8
        MOV31H,#8
        MOV30H,#8
        LJMPDONE
        NEX5:CJNEA,#06H,NEX6
        MOV35H,#8
        MOV34H,#8
        MOV33H,#8
        MOV32H,#8
        MOV31H,#8
        MOV30H,#8
        LJMPDONE
        NEX6:CJNEA,#07H,NEX7
        MOV36H,#8
        MOV35H,#8
        MOV34H,#8
        MOV33H,#8
        MOV32H,#8
        MOV31H,#8
        MOV30H,#8
        LJMPDONE
        NEX7:CJNEA,#08H,NEX8
        MOV37H,#8
        MOV36H,#8
        MOV35H,#8
        MOV34H,#8
        MOV33H,#8
        MOV32H,#8
        MOV31H,#8
        MOV30H,#8
        LJMPDONE
        NEX8:CJNEA,#00H,DONE
        MOV37H,#10
        MOV36H,#10
        MOV35H,#10
        MOV34H,#10
        MOV33H,#10
        MOV32H,#10
        MOV31H,#10
        MOV30H,#10
        LL:LJMPDONE
        DONE:RETI
        TABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H
        END
        7.C語言源程序
        #include
        unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71,0x00};
        unsignedchardispbitcode[]={0xf8,0xf9,0xfa,0xfb,
        0xfc,0xfd,0xfe,0xff};
        unsignedchardispbuf[8]={16,16,16,16,16,16,16,16};
        unsignedchardispbitcnt;
        unsignedintt02scnt;
        unsignedchart5mscnt;
        unsignedcharu;
        unsignedchari;

        voidmain(void)
        {
        TMOD=0x02;
        TH0=0x06;
        TL0=0x06;
        TR0=1;
        ET0=1;
        EA=1;
        while(1);
        }

        voidt0(void)interrupt1using0
        {
        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;i<8;i++)
        {
        dispbuf=16;
        }
        for(i=0;i{
        dispbuf=8;
        }
        }
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 云安县| 琼中| 芮城县| 滁州市| 克东县| 鲁甸县| 翁牛特旗| 花垣县| 那坡县| 伊吾县| 黔东| 天峻县| 原平市| 温泉县| 北京市| 绥德县| 安顺市| 芦山县| 登封市| 图们市| 黑龙江省| 嘉定区| 白银市| 雷山县| 建德市| 儋州市| 容城县| 离岛区| 衡阳市| 九龙城区| 晋江市| 贺兰县| 娱乐| 肇源县| 天等县| 峨眉山市| 吴忠市| 铜川市| 乡宁县| 平遥县| 扎赉特旗|