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

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

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

3天內不再提示

基于51單片機的矩陣鍵盤設計

CHANBAEK ? 來源: 透析之眼 ? 作者: AdamChen ? 2023-10-31 17:47 ? 次閱讀

獨立按鍵,一個按鍵需要占用一個I/O口,如果需要16個按鍵,那么就會 占用16個I/O口,占據MCS-51系列單片機一半的I/O口。

理論基礎

為了解決I/O這個問題,設計出了矩陣鍵盤,下圖是一個4*4的矩陣鍵盤原理圖。

按鍵按照4*4的格局進行擺放,組成4行4列,將按鍵的同行或同列連接在一起,分別連接到P1口。

圖片

怎么才能識別是哪個按鍵被按下呢?

以上圖的S1為例,當按鍵被按下S1導通,P17與P13導通,可以通過判斷P17與P13端口的電平是否一致,判斷按鍵是否被按下。

可以先設置P13(檢測端口)電平為高電平,假設P17(驅動端口)為低電平,當按鍵按下,按鍵導通,讀取P13的電平可以讀到低電平。

(1)設置驅動端口電平為高電平(1)或者低電平(0);

(2)判斷檢測端口電平是否與驅動端口的電平一致;

實踐演練

P2口連接8個LED(如下圖所示),P1口連接為4*4的矩陣鍵盤(如前面的矩陣鍵盤所示),當按鍵被按下時,P2口的LED點亮,點亮的LED與按鍵的鍵值一致。

圖片

寫代碼邏輯代碼先確定S1功能的實現,然后以S1寫其他的按鍵的代碼。

假設設置P17為驅動端口,設置P13為檢測端口。初始化時P17口與P13檢測口初始狀態均為0,然后設置P17口為1,檢測P13是否變為高電平,當變為高電平時,說明有按鍵被按下,代碼如下。

#include "reg52.h"


sbit driver_key1 = P1^7;
sbit snesor_key1 = P1^3;


void main() {


    P2=0xff;    //初始化P2口,P2口原有的數據影響
    P1=0;     //清空P1口,防止原有數據影響
    while(1) {
        char num=0; //設置鍵值
        driver_key1 = 1;   //驅動端口電平為1,驅動開始
        if(snesor_key1==1) //判斷檢測端口是否為1,如果為1則按鍵被按下。
            num = 1;        //設置鍵值


        driver_key1 = 0;   //驅動端口電平為0,驅動結束
        P2 =~num;
        //由于I/O為低電平時,才可以被點亮。
        //1的值換成二進制00000001,其余七個led被點亮第一個不亮,
        //需要第一個led被點亮需要將1取反,二進制數變為1111 1110,第一個led亮。
    }
}

使用上述代碼,燒錄程序后。LED燈不亮,按下按鍵S1,LED1也沒有亮。這是由于按鍵按下時,P17驅動端的高電平,會被P13檢測端的低電平拉成低電平,檢測端口檢測不到高電平。

將代碼修改為初始化時P17口與P13檢測口初始狀態均為1,然后設置P17口為0,檢測P13是否變為低電平,當變為低電平時,說明有按鍵被按下,修改代碼如下。

void main() {
    P2=0xff;    //初始化P2口,P2口原有的數據影響
    P1=0xff;     //P1口置1,防止原有數據影響
    while(1) {
         char num=0; //設置鍵值
        driver_key1 = 0;   //驅動端口電平為0,驅動開始
        if(snesor_key1==0) //判斷檢測端口是否為1,如果為1則按鍵被按下。
            num = 1;        //設置鍵值


        driver_key1 = 1;   //驅動端口電平為0,驅動結束
        P2 =~num;
        //由于I/O為低電平時,才可以被點亮。
        //1的值換成二進制00000001,其余七個led被點亮第一個不亮,
        //需要第一個led被點亮需要將1取反,二進制數變為1111 1110,第一個led亮。
    }
}

編譯燒錄程序,當按下S1時,可以實現LED1被點亮。

將按鍵檢測代碼獨立拉出來寫成函數,實現16個按鍵,按壓時對應的led被點亮,代碼如下。

#include "reg52.h"


sbit driver_key1 = P1^7;
sbit driver_key2 = P1^6;
sbit driver_key3 = P1^5;
sbit driver_key4 = P1^4;




sbit snesor_key1 = P1^3;
sbit snesor_key2 = P1^2;
sbit snesor_key3 = P1^1;
sbit snesor_key4 = P1^0;


char key_scan() {
    char num =0;
    driver_key1 = 0;
    if(snesor_key1==0)
        num = 1;
    if(snesor_key2==0)
        num = 2;
    if(snesor_key3==0)
        num = 3;
    if(snesor_key4==0)
        num = 4;
    driver_key1 = 1;


    driver_key2 = 0;
    if(snesor_key1==0)
        num = 5;
    if(snesor_key2==0)
        num = 6;
    if(snesor_key3==0)
        num = 7;
    if(snesor_key4==0)
        num = 8;
    driver_key2 = 1;


    driver_key3 = 0;
    if(snesor_key1==0)
        num = 9;
    if(snesor_key2==0)
        num = 10;
    if(snesor_key3==0)
        num = 11;
    if(snesor_key4==0)
        num = 12;
    driver_key3 = 1;


    driver_key4 = 0;
    if(snesor_key1==0)
        num = 13;
    if(snesor_key2==0)
        num = 14;
    if(snesor_key3==0)
        num = 15;
    if(snesor_key4==0)
        num = 16;
    driver_key4 = 1;
    return num;


}


void main() {


    P2=0xff;    //初始化P2口,P2口原有的數據影響
    P1=0xff;     //清空P1口,防止原有數據影響
    while(1) {
        char num =0;
        num = key_scan();
        P2 =~num;
        //由于I/O為低電平時,才可以被點亮。
        //1的值換成二進制00000001,其余七個led被點亮第一個不亮,
        //需要第一個led被點亮需要將1取反,二進制數變為1111 1110,第一個led亮。


    }
}

總結:

(1)獨立按鍵使用簡單,如果項目中需要多個獨立按鍵就會很浪費I/O資源;

(2)矩陣鍵盤通過判斷按鍵兩端的I/O是否一致,判斷按鍵是否被按下;

(3)按鍵按下時,驅動端口的高電平會被檢測端口的低電平拉低;

(4)對同一個功能可以寫成函數,需要時進行函數調用,看代碼時更有邏輯性。

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

    關注

    6037

    文章

    44558

    瀏覽量

    635304
  • 51單片機
    +關注

    關注

    274

    文章

    5702

    瀏覽量

    123617
  • 矩陣鍵盤
    +關注

    關注

    7

    文章

    206

    瀏覽量

    31471
  • 獨立按鍵
    +關注

    關注

    1

    文章

    45

    瀏覽量

    11563
收藏 人收藏

    評論

    相關推薦

    51單片機矩陣鍵盤控制設計

    51單片機矩陣鍵盤控制設計
    發表于 05-30 11:33

    51單片機矩陣鍵盤c語言程序

    51單片機矩陣鍵盤c語言程序,c51單片機實現矩陣
    發表于 07-21 09:20

    基于51單片機矩陣鍵盤電子密碼鎖

    基于51單片機矩陣鍵盤電子密碼鎖,使用矩陣鍵盤輸入四位密碼,有錯誤和正確提示音。
    發表于 07-21 11:23 ?117次下載

    C51單片機矩陣鍵盤設計程序的詳細資料免費下載

    本文檔的主要內容詳細介紹的是C51單片機矩陣鍵盤設計程序的詳細資料免費下載。
    發表于 11-27 16:37 ?26次下載
    C<b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>設計程序的詳細資料免費下載

    51單片機矩陣鍵盤的原理說明和實驗程序及電路圖免費下載

    本文檔的主要內容詳細介紹的是51單片機矩陣鍵盤的原理說明和實驗程序及電路圖免費下載。
    發表于 04-18 17:27 ?7次下載

    使用51單片機矩陣鍵盤模擬密碼鎖的C語言程序免費下載

    本文檔的主要內容詳細介紹的是使用51單片機矩陣鍵盤模擬密碼鎖的C語言程序免費下載。
    發表于 08-15 17:32 ?17次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>模擬密碼鎖的C語言程序免費下載

    51單片機-矩陣鍵盤模塊-長短按鍵&數碼管顯示-模塊化編程模板

    51單片機-矩陣鍵盤模塊-長短按鍵&數碼管顯示-模塊化編程模板
    發表于 11-21 09:21 ?28次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>-<b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>模塊-長短按鍵&數碼管顯示-模塊化編程模板

    51單片機矩陣鍵盤的原理圖

    51單片機矩陣鍵盤的原理圖
    發表于 12-30 11:32 ?69次下載

    基于AT89C51單片機矩陣鍵盤電子琴

    方案介紹AT89C51單片機矩陣鍵盤電子琴通過16個按鍵彈奏16種音調;數碼管根據按鍵顯示。
    發表于 12-15 17:08 ?8次下載

    基于89C51單片機矩陣鍵盤反轉掃描源程序

    基于89C51單片機矩陣鍵盤反轉掃描源程序
    發表于 05-15 11:02 ?3次下載

    基于89C51單片機矩陣鍵盤簡易計算器源程序

    基于89C51單片機矩陣鍵盤簡易計算器源程序
    發表于 05-15 11:01 ?30次下載

    基于89C51單片機矩陣鍵盤密碼鎖源程序

    基于89C51單片機矩陣鍵盤密碼鎖源程序
    發表于 05-15 11:01 ?4次下載

    基于89C51單片機矩陣鍵盤行列掃描源程序

    基于89C51單片機矩陣鍵盤行列掃描源程序
    發表于 05-15 11:00 ?3次下載

    基于89C51單片機矩陣鍵盤中斷掃描源程序

    基于89C51單片機矩陣鍵盤中斷掃描源程序
    發表于 05-15 11:00 ?2次下載

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

    51單片機矩陣鍵盤掃描程序
    發表于 05-17 17:20 ?11次下載
    主站蜘蛛池模板: 黄色午夜网站 | 四虎影业 | 狠狠五月深爱婷婷网 | 性欧美精品久久久久久久 | 四虎最新永久免费网址 | 国产叼嘿视频网站在线观看 | 91成人免费视频 | 亚洲另类激情综合偷自拍 | 国产aaaaaaa毛片 | 日韩一级黄色录像 | 亚洲一区二区三区在线视频 | 一级特黄性生活大片免费观看 | 亚洲 自拍 欧美 综合 | 性欧美xxxxhd| 岛国毛片 | 天天爽天天 | 77se77亚洲欧美在线大屁股 | 伊人涩 | 五月婷婷啪啪 | 萌白酱香蕉白丝护士服喷浆 | 亚洲视频在线视频 | 亚洲美女视频一区二区三区 | 免费高清特级毛片 | 色宅男看片午夜大片免费看 | 五月婷婷综合在线 | 日日草天天干 | 国产手机在线观看视频 | 亚洲成人毛片 | 一级免费视频 | 天天操天天插天天干 | 俺也来俺也去俺也射 | 色视频在线免费观看 | 可以免费看黄的网址 | 午夜影视免费观看 | 四虎四虎 | 欧美影院一区二区三区 | 亚洲国产精品婷婷久久 | 天天宗合网 | 激情丁香六月 | 久久啊| 五月婷婷丁香综合 |