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

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

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

矩陣鍵盤實現(xiàn)16個按鍵操作原理及應(yīng)該方案

貿(mào)澤電子設(shè)計圈 ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2017-09-08 13:54 ? 次閱讀

矩陣鍵盤是單片機外部設(shè)備中所使用的排布類似于矩陣的鍵盤組。矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復(fù)雜一些,識別也要復(fù)雜一些,列線通過電阻接正電源,并將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為輸入。矩陣鍵盤的優(yōu)點是節(jié)約單片機IO口,例如普通鍵盤8個IO口只能用作8個按鍵,而矩陣鍵盤能作16個按鍵。

本文以51單片機為載體介紹一種4*4矩陣鍵盤實現(xiàn)16個按鍵操作的原理、電路和軟件設(shè)計要點。

1、 矩陣鍵盤的一般電路

如圖 1矩陣鍵盤電路所示,4*4矩陣鍵盤有4行4列按鍵,單片機4個I/O口接矩陣鍵盤的行線,另外4個I/O口接矩陣鍵盤的列線,通過對行線列線的操作完成按鍵的識別和操作。

2、 矩陣鍵盤的原理

矩陣鍵盤按鍵識別的流程一般是這樣的:(1)置第1行為低電平(0),其余行為高電平,讀取列線數(shù)據(jù),列線有低電平表示此行有按鍵按下。(2)置第2行為低電平(0),其余行為高電平,讀取列線數(shù)據(jù),列線有低電平表示此行有按鍵按下。......(N-1)根據(jù)行線列線的電平不同可以識別是否有按鍵按下,哪一個按鍵按下,獲取按鍵號。(N) 根據(jù)按鍵號跳轉(zhuǎn)至對應(yīng)的按鍵處理程序。

3、 一個矩陣鍵盤程序的例子

圖2為按鍵處理的主流程,思路是依次拉低按鍵的各個行,再讀取列線的數(shù)據(jù),假如列線有低電平,則認為此行有按鍵按下,標記此行有按鍵按下并存入行值。

讀取列線數(shù)據(jù)的思路則是這樣,依次讀取第1-4列,假如讀取此列時為低電平,則標記并存入列值。

下面是部分代碼:

//(1)按鍵識別程序void key() //按鍵掃描{unsigned char key_value_temp; //臨時按鍵值,默認1111 1111(二進制)key_value=0xff;

//鍵值key_value_temp=0xff; //鍵值臨時變量//矩陣鍵盤程序流程//依次拉低第1234行,讀入列線數(shù)據(jù)Pin_r_1=0; Pin_r_2=1;Pin_r_3=1;Pin_r_4=1; //拉低第1行。//Pin_r_1第1行行線,Pin_r_2第2行行線,其余類似key_value_temp=read_column();//讀列數(shù)據(jù)if (key_value_temp != 0xff)

//表示第一行有按鍵按下{key_value=key_value_temp & 0x1f;//獲取按鍵號,例如0001

1101表示第1行第2列的按鍵按下}Pin_r_1=1; Pin_r_2=0;Pin_r_3=1;Pin_r_4=1; //拉低第2行key_value_temp=read_column();//讀列數(shù)據(jù)if (key_value_temp != 0xff)

//表示第2行有按鍵按下{key_value=key_value_temp &0x2f;}Pin_r_1=1; Pin_r_2=1;Pin_r_3=0;Pin_r_4=1; //拉低第3行key_value_temp=read_column();//讀列數(shù)據(jù)if (key_value_temp != 0xff)

//表示第3行有按鍵按下{key_value=key_value_temp &0x3f;}Pin_r_1=1; Pin_r_2=1;Pin_r_3=1;Pin_r_4=0; //拉低第4行key_value_temp=read_column();//讀列數(shù)據(jù)if (key_value_temp != 0xff)

//表示第4行有按鍵按下{key_value=key_value_temp &0x4f;}}//(2)讀取列線數(shù)據(jù)unsigned char read_column() //讀矩陣鍵盤的列{unsigned char key_column;key_column=0xff;if(Pin_c_1==0 ) key_column=key_column & 0xfe;//1110

表示第1列按鍵按下。 key_column的低4位表示按鍵號,高4位常為1111if(Pin_c_2==0 ) key_column=key_column & 0xfd;//1101

表示第2列按鍵按下。if(Pin_c_3==0 ) key_column=key_column & 0xfb;//1011

表示第3列按鍵按下。if(Pin_c_4==0 ) key_column=key_column & 0xf7;//0111

表示第4列按鍵按下。return key_column;}以上程序?qū)?yīng)的鍵值表如下:

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

    關(guān)注

    7

    文章

    206

    瀏覽量

    31471
  • 矩陣鍵盤電路
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    8235

原文標題:一種單片機矩陣鍵盤設(shè)計,實在是太實用了~~~~

文章出處:【微信號:Mouser-Community,微信公眾號:貿(mào)澤電子設(shè)計圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    矩陣4x4按鍵,如何把識別結(jié)果按編號01-16(十進制)顯示在兩七段數(shù)碼管上?

    矩陣4x4按鍵,并把識別結(jié)果按編號01-16(十進制)顯示在兩七段數(shù)碼管上,按鍵按下時顯示,
    發(fā)表于 10-31 20:43

    如何在FPGA中實現(xiàn)按鍵消抖

    在FPGA(現(xiàn)場可編程門陣列)中實現(xiàn)按鍵消抖是一重要的設(shè)計環(huán)節(jié),特別是在處理用戶輸入時,由于物理按鍵的機械特性和電氣特性,按鍵在按下和釋放
    的頭像 發(fā)表于 08-19 18:15 ?1900次閱讀

    【xG24 Matter開發(fā)套件試用體驗】物聯(lián)網(wǎng)密碼柜之驅(qū)動矩陣鍵盤和OLED顯示器

    ) display_password(oled, password) time.sleep(0.01)# 防止CPU占用過高 階段性總結(jié) 本次使用circuitpython實現(xiàn)了對矩陣鍵盤和Oled顯示屏的驅(qū)動以及密碼校驗部
    發(fā)表于 08-04 23:04

    鍵盤矩陣規(guī)格設(shè)計圖

    鍵盤矩陣規(guī)格設(shè)計圖
    發(fā)表于 06-19 14:29 ?0次下載

    STM32矩陣按鍵造成IO口的損壞的原因?

    看了網(wǎng)上的4*4矩陣按鍵,不帶外部中斷,可實現(xiàn)多個按鍵同時按下。發(fā)現(xiàn)行線都配置成GPIO_Mode_Out_PP推挽輸出,我認為當(dāng)同一列線
    發(fā)表于 05-17 06:02

    用STM8L152使用一矩陣鍵盤,信號一直處于低電平狀態(tài)的原因?

    想用STM8L152 使用一矩陣鍵盤,根據(jù)的是行列掃描的方法,但是代碼調(diào)試過程中只能檢測到列的信號(高低電平)的變化,信號一直處于低電平狀態(tài),這是怎么一回事?哪里出問題了?
    發(fā)表于 05-15 08:31

    單片機接矩陣鍵盤GPIO應(yīng)該怎么設(shè)置?是用上拉輸出或輸入模式嗎?

    單片機接矩陣鍵盤GPIO應(yīng)該怎么設(shè)置?是用上拉輸出或輸入模式嗎?
    發(fā)表于 05-11 08:38

    stop mode下怎么實現(xiàn)按下矩陣鍵盤的任意鍵將系統(tǒng)喚醒呢?

    請問有沒有大佬知道stop mode下怎么實現(xiàn)按下矩陣鍵盤的任意鍵將系統(tǒng)喚醒呢?用WAKEUP 能實現(xiàn)嗎?
    發(fā)表于 05-06 07:08

    采用NT33510顯示屏,如何通過矩陣鍵盤更改顯示屏上的數(shù)字內(nèi)容?

    我想實現(xiàn)這樣的功能:我的LCD當(dāng)前顯示的是:新年快樂!2018! 想通過矩陣鍵盤將2018更改成2019,這個過程首先通過矩陣
    發(fā)表于 04-24 08:10

    AVR單片機外接16M晶振和STM32F103外接8MHZ運行速度哪一更快?

    同樣的程序進行比較: AVR單片機外接16M晶振:運行程序是矩陣按鍵掃描采用定時器中斷100ms掃描一次、還有串口接收中斷程序1S接收一次運行程序上后,串口接收中斷程序不會影響矩陣
    發(fā)表于 04-23 07:43

    電視機經(jīng)典ADC按鍵電路實現(xiàn)方案

    3根線實現(xiàn)7按鍵,什么原理? 直接上電路原理圖!不同電視廠家的設(shè)計會有一點差異,但基本都是這個原理。
    的頭像 發(fā)表于 04-07 10:25 ?1182次閱讀
    電視機經(jīng)典ADC<b class='flag-5'>按鍵</b>電路<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>方案</b>

    stm32cubeMX如何配置4*4矩陣鍵盤

    stm32cubeMX如何配置4*4矩陣鍵盤,求大佬給代碼指導(dǎo)一下,看了太多代碼,自己迷亂了
    發(fā)表于 03-28 09:27

    MH481:磁軸鍵盤 高精度 線性霍爾傳感器方案

    磁軸鍵盤霍爾是一種特殊的設(shè)計,它將霍爾效應(yīng)傳感器與磁軸鍵盤相結(jié)合。這種設(shè)計使得鍵盤能夠更好地適應(yīng)不同的使用環(huán)境和用戶需求。MH481霍爾效應(yīng)傳感器是一種電子器件,它可以檢測磁場的變化并轉(zhuǎn)換為電信號。在磁軸
    的頭像 發(fā)表于 01-30 23:54 ?2018次閱讀
    MH481:磁軸<b class='flag-5'>鍵盤</b> 高精度 線性霍爾傳感器<b class='flag-5'>方案</b>

    傳iPhone16 Pro取消實體按鍵

    根據(jù)最新傳聞,蘋果在最新的iPhone 16 Pro工程機上做出了一項重大改變。這款新機型的操作按鈕已從實體按鍵轉(zhuǎn)變?yōu)殡娙菔?b class='flag-5'>按鍵,徹底取消了實體按鍵
    的頭像 發(fā)表于 01-15 15:26 ?1151次閱讀

    單片機如何讀取鍵盤數(shù)據(jù)

    等方面。 一、鍵盤的工作原理 鍵盤是一種常用的輸入設(shè)備,它主要通過按下/釋放按鍵的方式來向計算機發(fā)送相應(yīng)的指令或數(shù)據(jù)。鍵盤通常由一
    的頭像 發(fā)表于 01-04 17:09 ?1802次閱讀