在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于單片機的矩陣鍵盤檢測案例

CHANBAEK ? 來源:郎哥編程課堂 ? 作者:郎宏林 ? 2023-10-31 14:35 ? 次閱讀

單片機需要連接多個按鍵,每個按鍵與單片機的I/O端口單獨連接的方式就不太適用了,因為單片機的I/O端口是單片機系統與外界設備交互的重要資源,如果采用按鍵與I/O端口獨立連接的方式,就會占用過多的I/O端口資源,導致單片機與其它外部設備無法連接。在這種情況下,可以使用矩陣鍵盤,實現多個按鍵與單片機的連接,而且不浪費單片機的I/O端口資源。

矩陣鍵盤是一種很好地節約I/O端口資源的技術方法,矩陣鍵盤將多個按鍵排列成矩陣形式。例如:將16個按鍵排成4行4列,每行將按鍵的一端連接在一起構成行線,每列將按鍵的另一端連接在一起構成列線,這樣一共有4行4列8根線,將這8根線連接到單片機的8個I/O端口上,通過檢測程序掃描矩陣鍵盤就可以檢測16個按鍵。通過這種連接方式,可以實現3行3列9個鍵,5行5列25個鍵,6行6列36個鍵等多個按鍵的檢測。

圖片

上圖為設計的4 X 4矩陣鍵盤,每行4個按鍵,每列4個按鍵,可以檢測16個按鍵。每列按鍵的右端連接在一起,分別連接P3.4 ~ P3.7,每行按鍵的左端連接在一起,分別連接P3.0~P3.3,這樣可以使用8個I/O端口檢測16個按鍵。

雖然矩陣鍵盤充分利用了I/O端口資源,但增加了檢測程序的復雜性。因為獨立按鍵有一端固定為低電平,編寫單片機鍵盤檢測程序比較方便,而矩陣鍵盤兩端都與I/O端口相連,因此檢測程序需要向I/O端口人為送出低電平。具體檢測方法:先送一行低電平,其余各行為高電平,現在已經確定了行數(送入低電平的行),然后循環檢測與該行相交的各列是否有低電平,若檢測到某列有低電平,說明與該行相交的某列按鍵被按下,即確定了當前按下的按鍵屬于哪一行哪一列。同理,使用同樣的方法輪流送各行一次低電平,再輪流檢測各列是否有低電平,即可完成所有按鍵的檢測。當然也可以先送各列為低電平,然后再循環檢測各行是否有低電平。

矩陣鍵盤應用案例:應用16個獨立按鍵構成4行4列的矩陣鍵盤,行線接P3.0 ~ P3.3,列線接P3.4~P3.7。按鍵排列順序為:1行1列為第1個按鍵,1行2列為第2個按鍵,……,2行1列為第5個按鍵,2行2列為第6個按鍵,……,4行4列為第16個按鍵。要求用戶按下按鍵1后,數碼管顯示數字1,按下按鍵2后,數碼管顯示數字2,……,依次顯示3,4,5,6,7,8,9,A,B,C,D,E,F。

下圖是矩陣鍵盤案例電路設計圖:

圖片

數碼管采用7SEG-MPX1-CA,為共陽極數碼管,獨立按鍵采用SPST Push Button,請同學們參考上圖使用proteus繪制電路設計圖。

單片機內運行的完整C程序如下:

#include
#include
unsigned char led[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8,0x3,0xc6,0x21,0x6,0xe};
unsigned char key[] = {0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
unsigned char rowscan[] = {0xfe,0xfd,0xfb,0xf7};
void delay(unsigned int millisecond)
{
       unsigned int i,j;
       for(i=millisecond;i >0;i--)
              for(j=120;j >0;j--);
}
void show_keyvalue(int keynum)
{
              P0 = led[keynum];
         delay(100);
}
void marix_keyscan()
{
       unsigned int i,j;
       unsigned char temp;
       for( i = 0; i< 4; i++ )
       {
               P3 = rowscan[i];
               temp = P3;
               temp = temp & 0xf0;
               if( temp != 0xf0 )
               {
                        delay(10);
                       temp = P3;
                  temp = temp & 0xf0;
                       if( temp != 0xf0 )
                            {
                               temp = P3;
                                    for( j = 0; j < 16; j++ )
                                    {
                                           if( temp == key[j] )
                                                          break;
                                    }
                                    while(temp != 0xf0)
                                    {
                                            temp = P3;
                                            temp = temp & 0xf0;
                                    }
                                    show_keyvalue(j);
                            }
               }
    
       }
}
void main(void)
{
        while(1)
        {
                 marix_keyscan();
        }
 }

程序設計思路:

按矩陣鍵盤的行線和列線順序對16個按鍵進行編碼,編碼值是矩陣鍵盤某按鍵被按下后P3端口的值。例如:行1列1按鍵被按下后,P3端口的值為0xee,行2列1按鍵被按下后,P3端口的值為0xed。對所有按鍵進行編碼后,可以通過P3端口的值來確定哪個按鍵被按下。

掃描矩陣鍵盤需要對4條行線循環送出低電平,然后再判斷列線是否有低電平。在電路設計中矩陣鍵盤的4條行線接P3口的低4位P3.0 ~ P3.3,因此在行線循環中為P3口賦不同的值,即可完成對4條行線循環送出低電平的操作,1~4條行線送入低電平P3口的值分別為0xfe、0xfd、0xfb、0xf7。

矩陣鍵盤掃描程序需要一個循環結構,循環次數為矩陣鍵盤的行線數量,在循環體內依次為4條行線送入低電平,然后讀取P3口的值,將P3口與0xf0進行與運算,若運算結果不為0xf0,說明有按鍵被按下(有列線為低電平),延遲10ms后再次檢測有按鍵是否被按下,若確認有按鍵被按下,使用for循環遍歷已定義16個按鍵編碼值的數組,定位被按下按鍵的索引,最后調用數碼管顯示函數將按鍵索引對應的字符顯示出來。

代碼說明:

數組led[]定義了數碼管顯示的字符編碼值,數組長度為16。數組key[]定義了16個按鍵的編碼值,數組長度為16。數組rowscan[]定義了4條行線送入低電平P3口的值,數組長度為4。

delay()函數為時間延遲函數,show_keyvalue()為數碼管顯示字符的函數,參數keynum為字符led數組元素的索引,該索引與key數組元素的索引對應。marix_keyscan()為矩陣鍵盤掃描函數,用于檢測按鍵是否被按下。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6057

    文章

    44811

    瀏覽量

    644266
  • 端口
    +關注

    關注

    4

    文章

    1004

    瀏覽量

    32620
  • 按鍵
    +關注

    關注

    4

    文章

    225

    瀏覽量

    57885
  • 矩陣鍵盤
    +關注

    關注

    7

    文章

    207

    瀏覽量

    31845
收藏 人收藏

    評論

    相關推薦

    [下載]Pic單片機視頻教程

    第三講 PIC單片機獨立鍵盤檢測原理及實現。 53分 第四講 PIC單片機矩陣鍵盤
    發表于 03-26 16:39

    郭天祥十天學會PIC單片機和C語言視頻教程 強烈推薦 零基

    。內容:PIC單片機獨立鍵盤檢測原理及實現。Lesson4:時間:45分。內容:PIC單片機矩陣鍵盤
    發表于 12-19 09:00

    51單片機矩陣鍵盤檢測問題

    不知道哪里有問題,按鍵按下去數碼管都沒反應#include#define uint unsigned int#define uchar unsigned charuchar num,temp;***it key1=P3^4;***it dula=P2^6;***it wela=P2^7;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){dula=1;P0=0;dula=0;wela=1;P0=0xc0;wela=0;while(1){P3=0xfe;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0);{temp=P3;switch(temp){case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e:num=4;break;}dula=1;P0=table[num-1];dula=0;}}}}
    發表于 10-15 21:34

    【郭天祥】十天學會單片機【視頻目錄】

    :PIC單片機獨立鍵盤檢測原理及實現。 5、Lesson4:時間:45分。內容:PIC單片機矩陣鍵盤
    發表于 06-27 21:48

    如何去實現PIC單片機矩陣鍵盤檢測

    uchar unsigned char#define uintunsigned int__CONFIG(0x3B31);const uchar table[]={0x3f,0x0...
    發表于 11-24 06:47

    怎樣去實現PIC單片機矩陣鍵盤檢測

    uchar unsigned char#define uintunsigned int__CONFIG(0x3B31);const uchar table[]={0x3f,0x0...
    發表于 11-24 06:21

    3.3V單片機系統中矩陣鍵盤檢測電路的改進

    本文提出了一種解決3.3V單片機系統中矩陣鍵盤檢測問題的方法
    發表于 03-24 15:35 ?1次下載

    單片機8x8矩陣鍵盤原理說明

    本文主要介紹了介紹基于51單片機矩陣鍵盤原理以及單片機8x8矩陣鍵盤原理說明,另外還詳細的附上
    的頭像 發表于 02-24 16:14 ?2.7w次閱讀
    <b class='flag-5'>單片機</b>8x8<b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>原理說明

    單片機鍵盤檢測與應用

    非編碼鍵盤通常又分為獨立鍵盤矩陣鍵盤兩大類。所謂獨立鍵盤是指按鍵在與單片機相連時,每一個按鍵都
    的頭像 發表于 09-18 16:34 ?5552次閱讀

    51單片機按鍵檢測--獨立按鍵與矩陣鍵盤

    按鍵,每個按鍵對應一個IO口,通過循環或者中斷去檢測,這種方法常用于按鍵個數較少得時候。如果按鍵的個數較多,每個按鍵都分配一個IO口,會占用大量的資源,所以就有了矩陣鍵盤矩陣
    發表于 11-12 11:06 ?17次下載
    51<b class='flag-5'>單片機</b>按鍵<b class='flag-5'>檢測</b>--獨立按鍵與<b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>

    PIC單片機矩陣鍵盤檢測原理及實現

    PIC單片機矩陣鍵盤檢測原理及實現
    發表于 11-16 11:51 ?2次下載
    PIC<b class='flag-5'>單片機</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b><b class='flag-5'>檢測</b>原理及實現

    PIC單片機矩陣鍵盤檢測原理及實現

    PIC單片機矩陣鍵盤檢測原理及實現
    發表于 11-16 12:51 ?7次下載
    PIC<b class='flag-5'>單片機</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b><b class='flag-5'>檢測</b>原理及實現

    51單片機——矩陣鍵盤檢測

    4x4鍵盤檢測程序,按下鍵后相應的代碼顯示在數碼管上#include&amp;lt;reg51.h&amp;gt;sbit dula=P2^6;sbit wela
    發表于 11-20 20:51 ?7次下載
    51<b class='flag-5'>單片機</b>——<b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>的<b class='flag-5'>檢測</b>

    矩陣鍵盤-單片機入門課件

    矩陣鍵盤-單片機入門課件
    發表于 03-18 11:12 ?0次下載

    51單片機矩陣鍵盤掃描程序

    51單片機矩陣鍵盤掃描程序
    發表于 05-17 17:20 ?11次下載
    主站蜘蛛池模板: 成人精品亚洲人成在线 | 好爽毛片一区二区三区四 | 嫩草影院www | 日本免费精品视频 | 欧美综合视频 | 你懂得在线 | 一级特黄aa大片免费 | bt天堂中文在线 | 傲视影院午夜毛片 | 免费视频播放 | 爽死你个放荡粗暴小淫视频 | 殴美aⅴ| 免费观看a毛片一区二区不卡 | 久久伊人男人的天堂网站 | 亚洲一区有码 | 中文字幕天堂在线 | 波多野结衣一级毛片 | 手机亚洲第1页 | 四虎最新免费观看网址 | 成年男人永久免费看片 | 九九99久久精品午夜剧场免费 | 亚洲一区二区影院 | 91色在线观看 | 日日夜夜狠狠干 | 国产一级做a爱免费观看 | 国产精品毛片一区二区三区 | 国产欧美日韩va | 亚洲1314 | 香蕉色综合 | 黄色网址在线播放 | 很黄很黄的网站免费的 | 色播.com| 天天色踪合合 | 美女好紧好大好爽12p | 国产高清一级在线观看 | 免费色站| 草草操| 色六月丁香 | 天天躁夜夜躁狠狠躁2021 | 黄字幕网 | 久久草在线视频播放 |