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

3.9 數碼管閃爍顯示

本例電路與前一案例相同,程序稍有差異,形成了顯示內容的閃爍效果,即所有字符同時顯示,同時關閉,如此循環。

程序設計調試與實訓:

上一案例中對數碼管的循環選通采用了循環左移函數,本例中則專門提供了位選通的索引數組DSY_IDX(位碼表),每字節展開為二進制數時,其中僅有一位為1,這表示每次只有一只數碼管被選通。這樣設計雖然占用了更多的空間,但每次輸出位碼時不需要再執行移位運算。

完成本例學習與調試后,讀者可修改代碼,在數碼管上閃爍顯示由3~5個數字構成的數字串。

源程序代碼:

        //-----------------------------------------------------------------
        //  名稱: 8只數碼管閃爍顯示數字串
        //-----------------------------------------------------------------
        //  說明: 數碼管閃爍顯示由0~7構成的一串數字。
        //       本例用動態刷新法顯示了一串數字,在停止刷新時所有數字顯示消失。
        //-----------------------------------------------------------------
        #include <reg51.h>
        #define uchar unsigned char
        #define uint  unsigned int
        //數字0~9的數碼管段碼表
        uchar code DSY_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
        //數碼管的選通索引表(位碼表)
        uchar data DSY_IDX [] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
        //-----------------------------------------------------------------
        // 延時
        //-----------------------------------------------------------------
        void DelayMS(uint x)
        {
          uchar i;
          while(x--) for(i = 0; i < 120; i++);
        }
        //-----------------------------------------------------------------
        // 主程序
        //-----------------------------------------------------------------
        void main()
        {
          uchar i,j;
          P0 = 0xFF;
          P2 = 0x00;
          while(1)
          {
            //動態掃描顯示,刷新30次,實際上實現了8只數碼管的保持顯示延時
            for(i = 0; i < 30; i++)
            {
                for(j = 0; j < 8; j++)
                {
                P2 = DSY_IDX [j];
                P0 = DSY_CODE[j];
                DelayMS(2);
                }
            }
            P2 = 0x00; //所有數碼管共陽極與+5V斷開
            DelayMS(1000); //關閉持續一段時間
          }
        }
主站蜘蛛池模板: 洪江市| 靖边县| 东辽县| 眉山市| 扎鲁特旗| 西林县| 凤冈县| 五家渠市| 沁源县| 中西区| 武义县| 错那县| 香港 | 泗阳县| 乌拉特前旗| 合阳县| 兴海县| 洛隆县| 鲁山县| 鹤壁市| 社会| 马尔康县| 吴川市| 漳浦县| 酒泉市| 沈阳市| 仪陇县| 阿拉善盟| 宜宾市| 古交市| 孝昌县| 平顺县| 广丰县| 鄂托克旗| 丰顺县| 汉中市| 印江| 江阴市| 赫章县| 清原| 加查县|