資料介紹
今天,我們來講解一下板子上的一個(gè)模塊——機(jī)械按鍵。
機(jī)械按鍵分為兩種使用模式:獨(dú)立按鍵和矩陣按鍵。這兩個(gè)模式是通過板子上的一個(gè)硬件部分來切換的,使用方法不相同,但原理都差不多,在大家使用小紅板學(xué)習(xí)的時(shí)候這方面都應(yīng)該也有接觸過。沒錯(cuò),它與小紅板上的使用方式幾乎是相同的。
相信很多人在學(xué)習(xí)的時(shí)候,都覺得按鍵很簡(jiǎn)單對(duì)吧?但是大家要注意的是,想要寫出一個(gè)完全沒bug(按鍵能夠特別靈敏地判斷狀態(tài))的按鍵其實(shí)并不簡(jiǎn)單。而且它總是結(jié)合數(shù)碼管、LED燈等各種模塊來配合使用的,按鍵各種按下狀態(tài)中實(shí)現(xiàn)各種功能,各種邏輯寫起來也是有一定難度的。
好的,話不多說了,接下來我會(huì)為大家分別講解一下獨(dú)立鍵盤和矩陣鍵盤基礎(chǔ)知識(shí)。
機(jī)械按鍵原理圖
我們先來看一下按鍵部分的原理圖:
我們看右邊藍(lán)色框框起來引腳,可以看到大部分的按鍵都是通過P3端口來控制的。
為什么說是大部分呢?因?yàn)榘遄由系膬蓚€(gè)引腳有變化:P3^6 --> P4^2; P3^7 --> P4^4
前邊說的鍵盤兩種模式是通過左邊橙色框里框起來的硬件(對(duì)應(yīng)板子上的J5)來控制的。當(dāng)跳線帽接2-3時(shí),模式為獨(dú)立按鍵;接1-2時(shí),模式為矩陣按鍵(千萬別抬杠哦)。
獨(dú)立按鍵原理
好的,我們現(xiàn)在先開始獨(dú)立按鍵的講解。
這里的獨(dú)立按鍵與小紅板上的使用方法是完全一樣的。
我們看左邊紅色框里框起來的部分,這四個(gè)按鍵就是獨(dú)立按鍵,可以看到它右邊分別接了P3^0~P3^3引腳,左邊通過跳線帽接到了GND。
然后,我們又知道51單片機(jī)在默認(rèn)狀態(tài)下,引腳都為高電平,當(dāng)對(duì)應(yīng)按鍵按下時(shí),右邊的引腳就與左邊的GND接在了一起,電平就會(huì)被拉低,所以直接判斷對(duì)應(yīng)的引腳是否為低電平就可以知道這個(gè)按鍵有沒有被按下。
使用按鍵的時(shí)候要注意一點(diǎn)就是機(jī)械按鍵的抖動(dòng),我們看下邊這張圖:
上邊藍(lán)色框框起來的是我們理想中的波形圖(默認(rèn)高電平,按下低電平),實(shí)際中的波形是下邊紅色框框起來的。
可以看到綠色框中的電平一直在抖動(dòng),這段電平就會(huì)對(duì)我們判斷按鍵是否觸發(fā)產(chǎn)生干擾。由于板子上沒有消除抖動(dòng)的硬件設(shè)計(jì),我們就需要通過程序延時(shí)來跳過這段抖動(dòng)。
很簡(jiǎn)單,只需要在判斷引腳電平為低以后加10ms左右的延時(shí),如果這時(shí)候引腳電平還是低電平,就代表我們的按鍵確實(shí)被按下了。還有,在我們按下沒松手的時(shí)候,程序會(huì)一直循環(huán)執(zhí)行我們這段程序。
為了避免這種問題,還需要在按鍵程序中加入“松手檢測(cè)”,看下邊一段程序:
if(P30 == 0) //判斷按鍵S7是否按下
{
Delay_key(10); //10ms延時(shí)用來消抖
if(P30 == 0) //再次判斷按鍵S7是否按下
{
/* 按下S7時(shí)需要執(zhí)行的程序放這里 */
while(P30 == 0); //松手檢測(cè)
}
}
這就是獨(dú)立按鍵的檢測(cè)函數(shù),嘻,很簡(jiǎn)單吧?
矩陣按鍵原理
好的獨(dú)立按鍵講完了我們來講解一下矩陣按鍵。(切換的時(shí)候記得要把跳線帽換一下哦)
這時(shí)我們?cè)倏丛韴D,每行的四個(gè)按鍵都接在了一起,右端分別接在了P3^0、P3^1、P3^2、P3^3引腳,每列的四個(gè)按鍵也接在了一起,左端分別接在了P3^4、P3^5、P4^2、P4^4引腳。
當(dāng)按下一個(gè)按鍵的時(shí)候,我們只要想辦法判斷它是哪一行哪一列的就行啦。通過程序先把P3^4、P3^5、P4^2、P4^4全部拉低,再判斷P3^0、P3^1、P3^2、P3^3中哪一個(gè)引腳變?yōu)榱说碗娖骄涂梢耘袛嗟趲仔邪存I按下了,同樣的方法來判斷按鍵是哪一列的就可以啦。
再看下邊一段程序:
void key_scan()
{
P34 = P35 = P42 = P44 = 0;
P30 = P31 = P32 = P33 = 1;
if(P30 == 0)
{
delayms(10)
if(P30 == 0) KeyValue = 7;
while(P30 == 0)
}
if(P31 == 0)
{
delayms(10)
if(P31 == 0) KeyValue = 6;
while(P31 == 0)
}
if(P32 == 0)
{
delayms(10)
if(P32 == 0) KeyValue = 5;
while(P32 == 0)
}
if(P33 == 0)
{
delayms(10)
if(P33 == 0) KeyValue = 4;
while(P33 == 0)
}
P34 = P35 = P42 = P44 = 1;
P30 = P31 = P32 = P33 = 0;
if(P34 == 0)
{
delayms(10)
if(P34 == 0) KeyValue = KeyValue 12;
while(P34 == 0)
}
if(P35 == 0)
{
delayms(10)
if(P35 == 0) KeyValue = KeyValue 8;
while(P35 == 0)
}
if(P42 == 0)
{
delayms(10)
if(P42 == 0) KeyValue = KeyValue 4;
while(P42 == 0)
}
if(P44 == 0)
{
delayms(10)
if(P44 == 0) KeyValue = KeyValue;
while(P44 == 0)
}
}
這段代碼沒加注釋,是因?yàn)槲蚁M蠹铱梢圆恢灰蕾囉谧⑨?。?xì)品一下這段代碼,在品的時(shí)候多加思考,絕對(duì)比只看注釋理解得更加透徹。
KeyValue是我們?cè)诔绦蜃铋_始定義的一個(gè)全局變量,它主要起標(biāo)志的作用,這就是傳說中的標(biāo)志位,通過判斷給它的賦值就可以判斷按下的哪一個(gè)按鍵(KeyValue=6 --> 按鍵6...),把這個(gè)函數(shù)在主函數(shù)while循環(huán)中執(zhí)行就可掃描矩陣按鍵。當(dāng)然,這只是其中一種判斷形式,常用的還有逐行判斷等等,大家可以自己試一下。
值得注意的是,我們這里的頭文件使用的是“stc15f2k60s2.h”,相較于“reg52.h”,它的功能更加強(qiáng)大。而且在“reg52.h”中是沒有P4端口的定義的,在使用的時(shí)候要在程序開頭部分添加一句代碼 “sfr P4 = 0xC0;” 來給P4定義地址?!皊tc15f2k60s2.h”就不需要了,而且可以直接用 “P30”等來表示 “P3^0” 等。
本文轉(zhuǎn)載自:電子產(chǎn)品世界(作者:阿飛)
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請(qǐng)聯(lián)系小編進(jìn)行處理。
(mbbeetchina)
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- stm32矩陣鍵盤的程序
- 學(xué)習(xí)筆記之51單片機(jī)鍵盤篇(非編碼鍵盤與編碼鍵盤、非編碼鍵盤的掃描方式、獨(dú)立鍵盤、矩陣鍵盤)
- 51單片機(jī)鍵盤接口-獨(dú)立按鍵和矩陣按鍵
- 使用單片機(jī)實(shí)現(xiàn)LCD矩陣鍵盤的程序免費(fèi)下載 19次下載
- 單片機(jī)的矩陣鍵盤實(shí)驗(yàn)文件和程序免費(fèi)下載 16次下載
- 使用單片機(jī)進(jìn)行矩陣鍵盤基本控制的詳細(xì)資料和程序免費(fèi)下載
- 使用51單片機(jī)實(shí)現(xiàn)矩陣鍵盤的代碼免費(fèi)下載
- 使用51單片機(jī)實(shí)現(xiàn)矩陣式鍵盤的資料和程序免費(fèi)下載
- 使用51單片機(jī)實(shí)現(xiàn)矩陣鍵盤的程序免費(fèi)下載
- 使用51單片機(jī)進(jìn)行矩陣鍵盤的程序免費(fèi)下載
- 簡(jiǎn)易矩陣鍵盤的C語言程序免費(fèi)下載 21次下載
- 矩陣鍵盤依次輸入控制的C語言程序資料免費(fèi)下載 5次下載
- 4×4鍵盤矩陣按鍵電路圖和HEX資料免費(fèi)下載 35次下載
- 第四棵--KEY獨(dú)立鍵盤和矩陣鍵盤的檢測(cè) 0次下載
- 矩陣鍵盤 0次下載
- 基于單片機(jī)的獨(dú)立鍵盤與矩陣鍵盤檢測(cè) 1444次閱讀
- 單片機(jī)鍵盤檢測(cè)與應(yīng)用 5183次閱讀
- 通過采用DSP芯片實(shí)現(xiàn)非編碼矩陣鍵盤的設(shè)計(jì) 2385次閱讀
- 51單片機(jī)對(duì)矩陣鍵盤實(shí)現(xiàn)16個(gè)按鍵操作的電路設(shè)計(jì) 2.9w次閱讀
- 單片機(jī)矩陣鍵盤的使用之讀取鍵盤 4278次閱讀
- 51單片機(jī)對(duì)矩陣鍵盤實(shí)現(xiàn)16個(gè)按鍵操作的設(shè)計(jì) 3.6w次閱讀
- 基于51單片機(jī)的4*4矩陣鍵盤字符輸入 1w次閱讀
- 什么是矩陣鍵盤?4*4鍵盤的原理軟件設(shè)計(jì)分析 3.8w次閱讀
- 單片機(jī)8x8矩陣鍵盤原理說明 2.5w次閱讀
- 4x4矩陣鍵盤工作原理及掃描程序 24w次閱讀
- 矩陣式鍵盤使用方法 2.5w次閱讀
- 一文看懂矩陣鍵盤的特點(diǎn)及工作方式 3.7w次閱讀
- 矩陣鍵盤有什么用_矩陣鍵盤有何用途 1.6w次閱讀
- 基于FPGA的矩陣鍵盤控制器的設(shè)計(jì) 4868次閱讀
- 基于ARM的矩陣鍵盤設(shè)計(jì)及其linux驅(qū)動(dòng)實(shí)現(xiàn) 3057次閱讀
下載排行
本周
- 1TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開關(guān)電源基礎(chǔ)知識(shí)
- 5.73 MB | 6次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 0.61 MB | 2次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21548次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6653次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191185次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183278次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多