在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            msp430矩陣式4*4鍵盤

            作者: 時間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
            msp430單片機(jī)矩陣式4*4鍵盤接口技術(shù)及程序設(shè)計
            V5v



            上圖中,列線通過電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鈕沒有按下時,所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。
            矩陣式鍵盤的按鈕識別辦法——“行掃描法”。
            行掃描法行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鈕識別辦法。
            判斷鍵盤中有無鍵按下將全部行線Y0-Y3置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鈕之中。若所有列線均為高電平,則鍵盤中無鍵按下。
            判斷閉合鍵所在的位置在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其辦法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鈕就是閉合的按鈕。
            例如:圖仍如上所示。430單片機(jī)的P1口用作鍵盤I/O口,鍵盤的列線接到P1口的低4位,鍵盤的行線接到P1口的高4位。列線P1.0-P1.3分別接有4個上拉電阻到正電源5V,并把列線P1.0-P1.3設(shè)置為輸入線,行線P1.4-P.17設(shè)置為輸出線。4根行線和4根列線形成16個相交點。
            檢測當(dāng)前是否有鍵被按下。檢測的辦法是P1.4-P1.7輸出全“0”,讀取P1.0-P1.3的狀態(tài),若P1.0-P1.3為全“1”,則無鍵閉合,不然有鍵閉合。
            去除鍵抖動。當(dāng)檢測到有鍵按下后,延時一段時間再做下一步的檢測判斷(以防是干擾)。
            若有鍵被按下,應(yīng)識別出是哪一個鍵閉合。辦法是對鍵盤的行線進(jìn)行掃描。P1.4-P1.7按下述4種組合依次輸出:
            P1.71110P1.61101P1.51011P1.40111
            在每組行輸出時讀取P1.0-P1.3,若全為“1”,則表示為“0”這一行沒有鍵閉合,不然有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值

            鍵盤掃描程序如下:
            #include
            charkey;
            manage_key1()
            {}
            .................
            .................
            manage_key16()
            {}
            voiddelays()
            {
            intv=500;
            while(v!=0)v--;
            }
            voidkeyscan()
            {
            charsccode,recode;
            P1DIR=0X0f;

            P1OUT=0X00;//置所有行為低電平,行掃描,列線輸入(此時)
            if((P1IN&0X0F)!=0X0F)//判斷是否有有鍵按下(讀取列的真實狀態(tài),若第4列有鍵按下則P1的值會變成01110000),有往下執(zhí)行
            {
            delays();
            if((P1IN&0x0f)!=0x0f)//再次判斷列中是否是干擾信號,不是則向下執(zhí)行
            {
            sccode=0xef;//逐行掃描初值(即先掃描第1行)
            while((sccode&0x01)!=0)//行掃描完成(4行已全部掃描完)sccode為11101111停止while程序
            {
            P1OUT=sccode;//輸出行掃描碼
            if((P1IN&0x0F)!=0X0F)//本行有鍵按下(即P1(真實的狀態(tài))的高四位不全為1)
            {
            recode=(P1IN&0x0F)|0xf0;//列(列處于低四位,高四位補1)
            key=(sccode&recode);//行和列
            }
            //所掃描行沒有鍵按下,則掃描下一行,直到4行都掃描,此時sccode為11101111退出while程序
            else
            {
            sccode=(sccode<<1)|0x10;;//行掃描碼左移一位
            }
            }
            }
            //無鍵按下,返回0
            }
            }
            voidmain()
            {
            keyscan();
            delays();
            switch(key)
            {
            case0xee:manage_key1();break;//11101110
            case0xde:manage_key2();break;//11011110
            case0xbe:manage_key3();break;//10111110
            case0x7e:manage_key4();break;//01111110

            case0xed:manage_key5();break;//11101101
            case0xdd:manage_key6();break;//11011101
            case0xbd:manage_key7();break;//10111101
            case0x7d:manage_key8();break;//01111101

            case0xeb:manage_key9();break;//11101011
            case0xdb:manage_key10();break;//11011011
            case0xbb:manage_key11();break;//10111011
            case0x7b:manage_key12();break;//01111011

            case0xe7:manage_key13();break;//11100111
            case0xd7:manage_key14();break;//11010111
            case0xb7:manage_key15();break;//10110111
            case0x77:manage_key16();break;//01110111
            default:break;
            }
            }



            關(guān)鍵詞: msp430矩陣式4*4鍵

            評論


            技術(shù)專區(qū)

            關(guān)閉