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

3.20 數(shù)碼管顯示撥碼開關(guān)編碼

撥碼開關(guān)常用于編碼設(shè)置或狀態(tài)設(shè)置,例如,多媒體教室常用的硬件廣播卡就是用撥碼開關(guān)來設(shè)置編碼的。本例用數(shù)碼管顯示當(dāng)前撥碼開關(guān)所設(shè)定的編碼,系統(tǒng)運行過程中如果改動撥碼設(shè)置,新的編碼會立即顯示在數(shù)碼管上。

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

圖3-17 數(shù)碼管顯示撥碼開關(guān)編碼電路

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

本例直接讀取連接在P1端口的撥碼開關(guān)編碼值,然后將其分解為3個數(shù)位并顯示在數(shù)碼管上。語句m = 0xFE用于設(shè)置數(shù)碼管位碼初值,即11111110,在for循環(huán)內(nèi)會進(jìn)行3次循環(huán)左移,m依次為11111101,11111011,11110111,這3個位碼中,0分別位于1,2,3位,這分別與4位數(shù)碼管的2,3,4位對應(yīng),因此所讀取的值會顯示在數(shù)碼管右3位上。

如果在系統(tǒng)運行時調(diào)整撥碼開關(guān),新的編碼會立即顯示在數(shù)碼管上。

讀者可修改本例,使3個數(shù)位從數(shù)碼管左邊開始顯示,同時將高位無效的0屏蔽。

源程序代碼:

        //-----------------------------------------------------------------
        //  名稱: 數(shù)碼管顯示撥碼開關(guān)編碼
        //-----------------------------------------------------------------
        //  說明: 系統(tǒng)顯示撥碼開關(guān)所設(shè)置的編碼000~255。
        //-----------------------------------------------------------------
        #include <reg51.h>
        #include <intrins.h>
        #define uchar unsigned char
        #define uint  unsigned int
        //各數(shù)字的數(shù)碼管段碼
        uchar code DSY_CODE[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
        //顯示緩沖
        uchar DSY_Buffer[3] = {0,0,0};
        //-----------------------------------------------------------------
        // 延時
        //-----------------------------------------------------------------
        void DelayMS(uint x)
        {
          uchar i;
          while(x--) for(i = 0; i < 120; i++);
        }
        //-----------------------------------------------------------------
        // 主程序
        //-----------------------------------------------------------------
        void main()
        {
          uchar i,m,Num;
          P0 = 0xFF;
          P2 = 0xFF;
          while(1)
          {
            m = 0xFE;
            //讀取撥碼開關(guān)的值
            Num = P1;
            DSY_Buffer[0] = Num /100;
            DSY_Buffer[1] = Num /10 % 10;
            DSY_Buffer[2] = Num % 10;
            //刷新顯示在數(shù)碼管上
            for(i = 0; i < 3; i++)
            {
                m = _crol_(m,1);
                P2 = m;
                P0 = DSY_CODE[ DSY_Buffer[i] ];
                DelayMS(10);
            }
          }
        }
主站蜘蛛池模板: 兴安盟| 孝昌县| 阿坝| 巫山县| 浪卡子县| 海宁市| 昭通市| 荔浦县| 屯昌县| 芜湖县| 郯城县| 汽车| 和田县| 元阳县| 汕头市| 探索| 花莲县| 哈密市| 湘潭县| 开鲁县| 玛多县| 广宁县| 林周县| 黄平县| 金塔县| 伊宁县| 晋城| 苗栗县| 凤阳县| 永兴县| 修武县| 平江县| 沅陵县| 姚安县| 东阳市| 屏东市| 民权县| 福安市| 运城市| 正宁县| 临沭县|