18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于51單片機(jī)的矩陣鍵盤(pán)設(shè)計(jì)

CHANBAEK ? 來(lái)源: 透析之眼 ? 作者: AdamChen ? 2023-10-31 17:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

獨(dú)立按鍵,一個(gè)按鍵需要占用一個(gè)I/O口,如果需要16個(gè)按鍵,那么就會(huì) 占用16個(gè)I/O口,占據(jù)MCS-51系列單片機(jī)一半的I/O口。

理論基礎(chǔ)

為了解決I/O這個(gè)問(wèn)題,設(shè)計(jì)出了矩陣鍵盤(pán),下圖是一個(gè)4*4的矩陣鍵盤(pán)原理圖。

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

圖片

怎么才能識(shí)別是哪個(gè)按鍵被按下呢?

以上圖的S1為例,當(dāng)按鍵被按下S1導(dǎo)通,P17與P13導(dǎo)通,可以通過(guò)判斷P17與P13端口的電平是否一致,判斷按鍵是否被按下。

可以先設(shè)置P13(檢測(cè)端口)電平為高電平,假設(shè)P17(驅(qū)動(dòng)端口)為低電平,當(dāng)按鍵按下,按鍵導(dǎo)通,讀取P13的電平可以讀到低電平。

(1)設(shè)置驅(qū)動(dòng)端口電平為高電平(1)或者低電平(0);

(2)判斷檢測(cè)端口電平是否與驅(qū)動(dòng)端口的電平一致;

實(shí)踐演練

P2口連接8個(gè)LED(如下圖所示),P1口連接為4*4的矩陣鍵盤(pán)(如前面的矩陣鍵盤(pán)所示),當(dāng)按鍵被按下時(shí),P2口的LED點(diǎn)亮,點(diǎn)亮的LED與按鍵的鍵值一致。

圖片

寫(xiě)代碼邏輯代碼先確定S1功能的實(shí)現(xiàn),然后以S1寫(xiě)其他的按鍵的代碼。

假設(shè)設(shè)置P17為驅(qū)動(dòng)端口,設(shè)置P13為檢測(cè)端口。初始化時(shí)P17口與P13檢測(cè)口初始狀態(tài)均為0,然后設(shè)置P17口為1,檢測(cè)P13是否變?yōu)楦唠娖?,?dāng)變?yōu)楦唠娖綍r(shí),說(shuō)明有按鍵被按下,代碼如下。

#include "reg52.h"


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


void main() {


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


        driver_key1 = 0;   //驅(qū)動(dòng)端口電平為0,驅(qū)動(dòng)結(jié)束
        P2 =~num;
        //由于I/O為低電平時(shí),才可以被點(diǎn)亮。
        //1的值換成二進(jìn)制00000001,其余七個(gè)led被點(diǎn)亮第一個(gè)不亮,
        //需要第一個(gè)led被點(diǎn)亮需要將1取反,二進(jìn)制數(shù)變?yōu)?111 1110,第一個(gè)led亮。
    }
}

使用上述代碼,燒錄程序后。LED燈不亮,按下按鍵S1,LED1也沒(méi)有亮。這是由于按鍵按下時(shí),P17驅(qū)動(dòng)端的高電平,會(huì)被P13檢測(cè)端的低電平拉成低電平,檢測(cè)端口檢測(cè)不到高電平。

將代碼修改為初始化時(shí)P17口與P13檢測(cè)口初始狀態(tài)均為1,然后設(shè)置P17口為0,檢測(cè)P13是否變?yōu)榈碗娖?,?dāng)變?yōu)榈碗娖綍r(shí),說(shuō)明有按鍵被按下,修改代碼如下。

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


        driver_key1 = 1;   //驅(qū)動(dòng)端口電平為0,驅(qū)動(dòng)結(jié)束
        P2 =~num;
        //由于I/O為低電平時(shí),才可以被點(diǎn)亮。
        //1的值換成二進(jìn)制00000001,其余七個(gè)led被點(diǎn)亮第一個(gè)不亮,
        //需要第一個(gè)led被點(diǎn)亮需要將1取反,二進(jìn)制數(shù)變?yōu)?111 1110,第一個(gè)led亮。
    }
}

編譯燒錄程序,當(dāng)按下S1時(shí),可以實(shí)現(xiàn)LED1被點(diǎn)亮。

將按鍵檢測(cè)代碼獨(dú)立拉出來(lái)寫(xiě)成函數(shù),實(shí)現(xiàn)16個(gè)按鍵,按壓時(shí)對(duì)應(yīng)的led被點(diǎn)亮,代碼如下。

#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口原有的數(shù)據(jù)影響
    P1=0xff;     //清空P1口,防止原有數(shù)據(jù)影響
    while(1) {
        char num =0;
        num = key_scan();
        P2 =~num;
        //由于I/O為低電平時(shí),才可以被點(diǎn)亮。
        //1的值換成二進(jìn)制00000001,其余七個(gè)led被點(diǎn)亮第一個(gè)不亮,
        //需要第一個(gè)led被點(diǎn)亮需要將1取反,二進(jìn)制數(shù)變?yōu)?111 1110,第一個(gè)led亮。


    }
}

總結(jié):

(1)獨(dú)立按鍵使用簡(jiǎn)單,如果項(xiàng)目中需要多個(gè)獨(dú)立按鍵就會(huì)很浪費(fèi)I/O資源;

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

(3)按鍵按下時(shí),驅(qū)動(dòng)端口的高電平會(huì)被檢測(cè)端口的低電平拉低;

(4)對(duì)同一個(gè)功能可以寫(xiě)成函數(shù),需要時(shí)進(jìn)行函數(shù)調(diào)用,看代碼時(shí)更有邏輯性。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6071

    文章

    45265

    瀏覽量

    660766
  • 51單片機(jī)
    +關(guān)注

    關(guān)注

    277

    文章

    5713

    瀏覽量

    130950
  • 矩陣鍵盤(pán)
    +關(guān)注

    關(guān)注

    7

    文章

    207

    瀏覽量

    32548
  • 獨(dú)立按鍵
    +關(guān)注

    關(guān)注

    1

    文章

    45

    瀏覽量

    11968
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    51單片機(jī)矩陣鍵盤(pán)控制設(shè)計(jì)

    51單片機(jī)矩陣鍵盤(pán)控制設(shè)計(jì)
    發(fā)表于 05-30 11:33

    51單片機(jī)矩陣鍵盤(pán)c語(yǔ)言程序

    51單片機(jī)矩陣鍵盤(pán)c語(yǔ)言程序,c51單片機(jī)實(shí)現(xiàn)矩陣
    發(fā)表于 07-21 09:20

    基于51單片機(jī)矩陣鍵盤(pán)電子密碼鎖

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

    C51單片機(jī)矩陣鍵盤(pán)設(shè)計(jì)程序的詳細(xì)資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是C51單片機(jī)矩陣鍵盤(pán)設(shè)計(jì)程序的詳細(xì)資料免費(fèi)下載。
    發(fā)表于 11-27 16:37 ?26次下載
    C<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤(pán)</b>設(shè)計(jì)程序的詳細(xì)資料免費(fèi)下載

    51單片機(jī)矩陣鍵盤(pán)的原理說(shuō)明和實(shí)驗(yàn)程序及電路圖免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機(jī)矩陣鍵盤(pán)的原理說(shuō)明和實(shí)驗(yàn)程序及電路圖免費(fèi)下載。
    發(fā)表于 04-18 17:27 ?7次下載

    使用51單片機(jī)矩陣鍵盤(pán)模擬密碼鎖的C語(yǔ)言程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)矩陣鍵盤(pán)模擬密碼鎖的C語(yǔ)言程序免費(fèi)下載。
    發(fā)表于 08-15 17:32 ?19次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤(pán)</b>模擬密碼鎖的C語(yǔ)言程序免費(fèi)下載

    51單片機(jī)-矩陣鍵盤(pán)模塊-長(zhǎng)短按鍵&數(shù)碼管顯示-模塊化編程模板

    51單片機(jī)-矩陣鍵盤(pán)模塊-長(zhǎng)短按鍵&數(shù)碼管顯示-模塊化編程模板
    發(fā)表于 11-21 09:21 ?28次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>-<b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤(pán)</b>模塊-長(zhǎng)短按鍵&數(shù)碼管顯示-模塊化編程模板

    51單片機(jī)矩陣鍵盤(pán)的原理圖

    51單片機(jī)矩陣鍵盤(pán)的原理圖
    發(fā)表于 12-30 11:32 ?71次下載

    基于AT89C51單片機(jī)矩陣鍵盤(pán)電子琴

    方案介紹AT89C51單片機(jī)矩陣鍵盤(pán)電子琴通過(guò)16個(gè)按鍵彈奏16種音調(diào);數(shù)碼管根據(jù)按鍵顯示。
    發(fā)表于 12-15 17:08 ?13次下載

    基于89C51單片機(jī)矩陣鍵盤(pán)反轉(zhuǎn)掃描源程序

    基于89C51單片機(jī)矩陣鍵盤(pán)反轉(zhuǎn)掃描源程序
    發(fā)表于 05-15 11:02 ?3次下載

    基于89C51單片機(jī)矩陣鍵盤(pán)簡(jiǎn)易計(jì)算器源程序

    基于89C51單片機(jī)矩陣鍵盤(pán)簡(jiǎn)易計(jì)算器源程序
    發(fā)表于 05-15 11:01 ?31次下載

    基于89C51單片機(jī)矩陣鍵盤(pán)密碼鎖源程序

    基于89C51單片機(jī)矩陣鍵盤(pán)密碼鎖源程序
    發(fā)表于 05-15 11:01 ?6次下載

    基于89C51單片機(jī)矩陣鍵盤(pán)行列掃描源程序

    基于89C51單片機(jī)矩陣鍵盤(pán)行列掃描源程序
    發(fā)表于 05-15 11:00 ?3次下載

    基于89C51單片機(jī)矩陣鍵盤(pán)中斷掃描源程序

    基于89C51單片機(jī)矩陣鍵盤(pán)中斷掃描源程序
    發(fā)表于 05-15 11:00 ?2次下載

    51單片機(jī)矩陣鍵盤(pán)掃描程序

    51單片機(jī)矩陣鍵盤(pán)掃描程序
    發(fā)表于 05-17 17:20 ?11次下載