官术网_书友最值得收藏!

3.7 8只數(shù)碼管滾動顯示單個數(shù)字

本例運(yùn)行時,數(shù)字0~7單個顯示在8只集成式數(shù)碼管的相應(yīng)位置上。

本例電路如圖3-7所示。

程序設(shè)計調(diào)試與實訓(xùn):

本例使用了8只集成式7段共陽數(shù)碼管(SEG-MPX8-CA-BLUE,共陽為CA,共陰為CC),所有數(shù)碼管a引腳并聯(lián)在一起,b,c,d,e,f,g,dp也是分別并聯(lián)的,任何時候發(fā)送的段碼均會傳送到所有數(shù)碼管上,所有數(shù)碼管共陽極是獨立的,本例中各數(shù)碼管的共陽極分別與8只NPN三極管射極相連,程序運(yùn)行時,任一時刻僅允許一只數(shù)碼管的共陽極連接+5V,當(dāng)向P0端口發(fā)送段碼時,相應(yīng)數(shù)字只會顯示在某一只數(shù)碼管上,依次循環(huán)選中8只數(shù)碼管中的一只時,即可形成滾動顯示效果。

圖3-7 8只數(shù)碼管滾動顯示單個數(shù)字電路

要在數(shù)碼管上滾動顯示單個數(shù)字,任一時刻只需要選通一只數(shù)碼管,例如,要在最左邊數(shù)碼管上顯示數(shù)字,對于本例中的共陽數(shù)碼管,其位引腳1(即本例中該數(shù)碼管的共陽極)要設(shè)為1(+5V),由于使用的是NPN三極管,P2.0為1,即P2端口的值為00000001時,第1只三極管導(dǎo)通,對應(yīng)數(shù)碼管共陽極連接+5V,同理,如果需要在第3只數(shù)碼管上顯示數(shù)字,P2端口的值為00000100。

本例將位碼初值設(shè)為0x80,即10000000,for循環(huán)中執(zhí)行循環(huán)左移時,k值將為00000001,00000010,00000100,……,10000000,如此重復(fù)。每次段碼的發(fā)送均與位選通碼對應(yīng),形成單個數(shù)字的循環(huán)滾動顯示。

讀者可修改代碼,使單個數(shù)字從右向左滾動顯示。

源程序代碼:

        //-----------------------------------------------------------------
        //  名稱: 8只數(shù)碼管滾動顯示單個數(shù)字
        //-----------------------------------------------------------------
        //  說明: 數(shù)碼管從左到右依次滾動顯示0~7,程序通過每次僅循環(huán)選通一只數(shù)碼管
        //  實現(xiàn)單只數(shù)碼管滾動顯示效果。
        //
        //-----------------------------------------------------------------
        #include <reg51.h>
        #include <intrins.h>
        #define uchar unsigned char
        #define uint  unsigned int
        //各數(shù)字的數(shù)碼管段碼
        uchar code DSY_CODE[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
        //-----------------------------------------------------------------
        // 延時
        //-----------------------------------------------------------------
        void DelayMS(uint x)
        { uchar i;
          while(x--) for(t = 0; i < 120; i++);
        }
        //-----------------------------------------------------------------
        // 主程序
        //-----------------------------------------------------------------
        void main()
        { uchar i,k = 0x80;
          while(1)
          { for(i = 0; i < 8; i++)
            {
                P2 = 0xFF;                    //關(guān)閉顯示
                k = _crol_(k, 1);
                P0 = DSY_CODE[i];             //發(fā)送數(shù)字段碼
                P2 = k;                       //發(fā)送數(shù)碼管位碼,打開對應(yīng)的數(shù)碼管
                DelayMS(300);
            }
          }
        }
主站蜘蛛池模板: 江安县| 威信县| 信阳市| 江油市| 淄博市| 承德市| 东源县| 潞西市| 肇源县| 云林县| 泰和县| 文安县| 芜湖县| 澎湖县| 体育| 景东| 台北市| 陈巴尔虎旗| 陕西省| 连云港市| 瑞金市| 武冈市| 马关县| 永安市| 遂昌县| 灵璧县| 普安县| 电白县| 湖南省| 汉川市| 肥城市| 讷河市| 新河县| 荥阳市| 昌图县| 喀喇| 天等县| 电白县| 日照市| 江华| 孝感市|