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

3.8 8只數(shù)碼管顯示多個(gè)不同字符

本例不同于上一案例的是在集成式數(shù)碼管上同時(shí)顯示了多個(gè)不同字符。

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

圖3-8 8只數(shù)碼管顯示多個(gè)不同字符電路

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

前面已經(jīng)討論過(guò),對(duì)于集成式數(shù)碼管,任何時(shí)候發(fā)送的段碼會(huì)被所有數(shù)碼管收到,如果本例中所有共陽(yáng)數(shù)碼管的位碼均為1(0xFF),則所有數(shù)碼管都會(huì)顯示同一字符。

為了使不同數(shù)碼管顯示不同字符,本例使用的是集成式多位數(shù)碼管常用的動(dòng)態(tài)掃描顯示技術(shù),它利用了人的視覺(jué)暫留特征,選通第1只數(shù)碼管時(shí),發(fā)送1的段碼;選通第2只數(shù)碼管時(shí),發(fā)送2的段碼;選通第3只數(shù)碼管時(shí),發(fā)送3的段碼。每次僅選通一只數(shù)碼管,發(fā)送對(duì)應(yīng)的段碼,每次切換選通下一數(shù)碼管并發(fā)送相應(yīng)段碼的時(shí)間間隔非常短,視覺(jué)惰性使人感覺(jué)不到字符是一個(gè)接一個(gè)顯示在不同數(shù)碼管上的,而會(huì)覺(jué)得所有字符很穩(wěn)定地同時(shí)顯示在不同數(shù)碼管上。

可見(jiàn),這種設(shè)計(jì)方法和上一案例類似的是仍然是在數(shù)碼管不同位置上逐個(gè)顯示不同字符,只是切換速度大大增加了,在控制切換延時(shí)的時(shí)候,要注意全屏的掃描頻率要高于視覺(jué)暫留頻率16~20Hz。對(duì)于代碼中的最后一行語(yǔ)句DelayMS(2),讀者可嘗試將函數(shù)參數(shù)修改為3,10,20等,觀察會(huì)出現(xiàn)什么樣的效果。

讀者可修改代碼,實(shí)現(xiàn)自定義的若干位數(shù)字串的顯示。

源程序代碼:

        //-----------------------------------------------------------------
        //  名稱: 8只數(shù)碼管動(dòng)態(tài)顯示多個(gè)不同字符
        //-----------------------------------------------------------------
        //  說(shuō)明: 數(shù)碼管動(dòng)態(tài)掃描顯示0~7。
        //-----------------------------------------------------------------
        #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};
        //-----------------------------------------------------------------
        // 延時(shí)
        //-----------------------------------------------------------------
        void DelayMS(uint x)
        {
          uchar i;
          while(x--) for(i = 0; i < 120; i++);
        }
        //-----------------------------------------------------------------
        // 主程序
        //-----------------------------------------------------------------
        void main()
        {
          uchar k,m = 0x80;
          P0 = 0xff;
          P2 = 0x00;
          while(1)
          {
            for(k = 0; k < 8; k++)
            { m = _crol_(m,1);
                P2 = m;                   //位碼
                P0 = DSY_CODE[ k + 1 ];  //段碼
                DelayMS(2);               //延時(shí)
            }
          }
        }
主站蜘蛛池模板: 鹤壁市| 成安县| 额济纳旗| 井陉县| 原阳县| 灵武市| 龙江县| 岳阳市| 广灵县| 垦利县| 和顺县| 衡阳县| 丹巴县| 叶城县| 诸暨市| 祁东县| 靖边县| 伊宁县| 乃东县| 望谟县| 纳雍县| 新田县| 石家庄市| 托克逊县| 白河县| 拜城县| 巴楚县| 宜丰县| 凌海市| 扎兰屯市| 会泽县| 巨野县| 仙居县| 花莲市| 彭山县| 寿光市| 桑日县| 金秀| 明溪县| 赫章县| 乐都县|