在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī) 4*4 矩陣鍵盤應(yīng)用

            單片機(jī) 4*4 矩陣鍵盤應(yīng)用

            作者: 時(shí)間:2016-11-26 來源:網(wǎng)絡(luò) 收藏
            單片機(jī)按鍵使用過程中,當(dāng)鍵盤中按鍵數(shù)量較多時(shí) 為了減少端口的占用通常將按鍵排列成矩陣 形式如下圖所示,在矩陣式鍵盤中 每條水平線和垂直線在交叉處不直接連通而是通過一個(gè)按鍵加以連接,到底這樣做是出意何種目的呢? 大家看下面電路圖,單片機(jī)的整一個(gè)8位端口可以構(gòu)成 4*4=16 個(gè)矩陣式按鍵 ,相比獨(dú)立式按鍵接法多出了一倍,而且線數(shù)越多區(qū)別就越明顯,假如再多加一條線就可以構(gòu)成 20個(gè)按鍵的鍵盤,但是獨(dú)立式按鍵接法只能多出1個(gè)按鍵。由此可見,在需要的按鍵數(shù)量比較多時(shí),采用矩陣法來連接鍵盤是非常合理的,矩陣式結(jié)構(gòu)的鍵盤顯然比獨(dú)立式鍵盤復(fù)雜一些,單片機(jī)對(duì)其進(jìn)行識(shí)別也要復(fù)雜一些。確定矩陣式鍵盤上任何一個(gè)鍵被按下通常采用行掃描法。行掃描法又稱為逐行查詢法它是一種最常用的多按鍵識(shí)別方法。因此,我們就以行掃描法為例介紹矩陣式鍵盤的工作原理。

            圖5-4(4*4矩陣式按鍵的接法)

            本文引用地址:http://www.biyoush.com/article/201611/321822.htm

            首先,不斷循環(huán)地給低四位獨(dú)立的低電平,然后判斷鍵盤中有無鍵按下。將低位中其中一列線(P1.0~P1.3中其中一列)置低電平然后檢測(cè)行線的狀態(tài)(高4位,即P1.4~P1.7,由于線與關(guān)系,只要與低電平列線接通,即跳變成低電平),只要有一行的電平為低就延時(shí)一段時(shí)間以消除抖動(dòng),然后再次判斷,假如依然為低電平,則表示鍵盤中真的有鍵被按下而且閉合的鍵位于低電平的4個(gè)按鍵之中任其一,若所有行線均為高電平則表示鍵盤中無鍵按下。再其次,判斷閉合鍵所在的具體位置。在確認(rèn)有鍵按下后 ,即可進(jìn)入確定具體閉合鍵的過程。其方法是: 依次將列線置為低電平,即在置某一根列線為低電平時(shí),其它列線為高電平。同時(shí)再逐行檢測(cè)各行線的電平狀態(tài) ;若某行為低 ,則該行線與置為低電平的列線交叉處的按鍵就是閉合的按鍵。下面圖5-5是4*4矩陣式按鍵接法的軟件算法操作流程。

            下面程序按照上述算法流程去編寫的,其電路如圖5-6,只是在圖5-5的基礎(chǔ)上多加了P0端口的8只LED燈。從鍵盤中檢測(cè)到一個(gè)鍵值,然后將這個(gè)值寫到LED數(shù)碼管上顯示。

            #include

            #include

            #define uchar unsigned char

            #define uint unsigned int

            uchar temp,num;

            uchar code Dis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff} ;

            //0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,0ff

            void delay(uchar ms)

            {

            int i;

            while(ms--)

            {

            for(i=0;i<100;i++) ;

            }

            }

            uchar keyscan()

            {

            P1=0xfe;

            temp=P1;

            while(temp!=0xfe)

            {

            temp=P1;

            switch(temp)

            {

            case 0xee:num=1;

            break;

            case 0xde:num=2;

            break;

            case 0xbe:num=3;

            break;

            case 0x7e:num=4;

            break;

            }

            delay(100);

            }

            P1=0xfd;

            temp=P1;

            while(temp!=0xfd)

            {

            temp=P1;

            switch(temp)

            {

            case 0xed:num=5;

            break;

            case 0xdd:num=6;

            break;

            case 0xbd:num=7;

            break;

            case 0x7d:num=8;

            break;

            }

            delay(100);

            }

            P1=0xfb;

            temp=P1;

            while(temp!=0xfb)

            {

            temp=P1;

            switch(temp)

            {

            case 0xeb:num=9;

            break;

            case 0xdb:num=10;

            break;

            case 0xbb:num=11;

            break;

            case 0x7b:num=12;

            break;

            }

            delay(100);

            }

            P1=0xf7;

            temp=P1;

            while(temp!=0xf7)

            {

            temp=P1;

            switch(temp)

            {

            case 0xe7:num=13;

            break;

            case 0xd7:num=14;

            break;

            case 0xb7:num=15;

            break;

            case 0x77:num=16;

            break;

            }

            delay(100);

            }

            return num;

            }

            void Display(uchar Wei_8,uchar Wei_7,uchar Wei_6,uchar Wei_5,uchar Wei_4,uchar Wei_3,uchar Wei_2,uchar Wei_1)

            {

            P2=0xfe;

            P0=Dis_code[Wei_8];

            delay(1);

            P2=0xfd;

            P0=Dis_code[Wei_7];

            delay(1);

            P2=0xfb;

            P0=Dis_code[Wei_6];

            delay(1);

            P2=0xf7;

            P0=Dis_code[Wei_5];

            delay(1);

            P2=0xef;

            P0=Dis_code[Wei_4];

            delay(1);

            P2=0xdf;

            P0=Dis_code[Wei_3];

            delay(1);

            P2=0xbf;

            P0=Dis_code[Wei_2];

            delay(1);

            P2=0x7f;

            P0=Dis_code[Wei_1];

            delay(1);

            }

            void main()

            {

            while(1)

            {

            Display(keyscan(),16,16,16,16,16,16,16);

            }

            }



            關(guān)鍵詞: 單片機(jī)4*4矩陣鍵

            評(píng)論


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

            關(guān)閉