『壹』 單片機中的鍵盤模塊是什麼
單片機中的鍵盤模塊是什麼,就是矩陣鍵盤比如下圖的4*4= 16個按鍵,用單片機低4位IO口驅動4行,高4位IO口驅動4列,比如你會問為啥要用矩陣鍵盤,很簡單比如你寫一個計算器程序,需要數字0-9,加、減、乘、除、等於,很多運算符的時候,需要用到矩陣鍵盤,如果不用矩陣鍵盤,像我們平常設計按鍵那樣,一個IO口控制一個按鍵,按鍵多了就會佔用單片機IO口資源,這樣單片機的IO就不夠用了,希望我的回答對你有幫助!
『貳』 單片機中的4×4矩陣鍵盤的鍵值怎麼求
單片機書上應該有講的哦,多查資料。
既然是4x4,即4行4列了,共需要8個I/O口,有8bit數據(如高四位為行4bit,低四位為列4bit)位:xxxx xxxx。還要結合你的程序來編碼鍵值,如果有鍵按下了,查詢所有按鍵的所連接的I/O口電平狀態,每個按鍵需要兩個I/O口,一端連接行(行4bit之一),一端連接列(列4bit之一);若此時按鍵的電平狀態為0010 0001,即十六進制數據0x21,按下的按鍵所對應的鍵值編碼即為0x21。當然為了使用方便,在確定了按下按鍵的編碼後,可對其賦值,我要將它賦值為數字鍵8,方便後續編程使用。例:
//獲取鍵值編碼,由於確定哪個按鍵按下
uchar keyscan(void)//鍵盤掃描函數,使用行列反轉掃描法
{
uchar cord_h,cord_l;//行列值
P3=0x0f; //行線輸出全為0
cord_h=P3&0x0f; //讀入列線值
if(cord_h!=0x0f) //先檢測有無按鍵按下
{
delay(100); //去抖
if(cord_h!=0x0f)
{
cord_h=P3&0x0f; //讀入列線值
P3=cord_h|0xf0; //輸出當前列線值
cord_l=P3&0xf0; //讀入行線值
return(cord_h+cord_l);//鍵盤最後組合碼值
}
}return(0xff); //返回該值
}
while(1)
{
key=keyscan();//調用鍵盤掃描,
//keyVal=0~15表示按鍵對應的功能
switch(key)
{
case 0x7e:keyVal=0;break;//0 按下相應的鍵顯示相對應的碼值
case 0x7d:keyVal=1;break;//1
case 0x7b:keyVal=2;break;//2
case 0x77:keyVal=3;break;//3
case 0xbe:keyVal=4;break;//4
case 0xbd:keyVal=5;break;//5
case 0xbb:keyVal=6;break;//6
case 0xb7:keyVal=7;break;//7
case 0xde:keyVal=8;break;//8
case 0xdd:keyVal=9;break;//9
case 0xdb:keyVal=10;break;//a
case 0xd7:keyVal=11;break;//b
case 0xee:keyVal=12;break;//c
case 0xed:keyVal=13;break;//d
case 0xeb:keyVal=14;break;//e
case 0xe7:keyVal=15;break;//f
}
『叄』 51單片機4*4矩陣鍵盤如何同時實現單擊+雙擊的功能
一般地,我們的鍵盤檢測都有一個按鍵碼存儲位元組,一般情況下,只要檢測到有效按鍵,那麼這個存儲位元組的按歷宴鍵碼就有效,也就是單擊。何為雙擊呢?雙擊就是在監測到該按鍵後在該按鍵要有作用(這個作用就是單擊)之前又檢測到該按鍵,然後就當作了雙擊。那怎麼實現這一判斷呢?我們只要加一個軟計數器,當檢測到有效按鍵後,該計數器開始向下計數,如果計數器自然減到了0那麼就是單擊生效;如伏爛橋果在該計數器值沒有減到0之前又檢測到該按鍵,那麼就是雙擊立馬有效同時計數器歸零。這個計數器肯定是ms級的,也就是要在定時器里工作,只要它不為0,那麼定時器中斷服務就對它減1操作,因此計數器本身同時就是一個開關量,而觸發它的是檢測缺猛到有效按鍵。
『肆』 單片機鍵盤矩陣答疑,下面這個程序的鍵值具體是怎麼實現的
codevalue = m + j; //行號加列號
while (checkkey() != 0);//待鬆手
return (codevalue); //返回鍵值
----------
codevalue = m + j; //為行號加列號,
共有兩層循環,各循環四次,即有物鬧:
j = 0, 1, 2, 3;
m = 0, 4, 8, 12;
於是:
m + j = 0 ~ 15;
沒錯。
只是兄絕程序編寫的濫一些,可以化簡好多的罩塵罩,
『伍』 簡述單片機反轉法識別矩陣按鍵過程
行反轉法的基本概念是:行列線的交叉位置布置按鍵。所有行和列加上拉電阻。
所有行作輸出先送低電平,然後讀入列值。 如果有任意鍵按下,那麼一定對應列值有0出現,也就知道了按下的鍵所在列。
反過來驅動這一列為0,其他列為1。把行作輸入。就可以判斷按下的鍵所在行。矩陣式結構的鍵盤顯然比直接法要復雜一些,識別也要復雜一些,列線通過電阻接正電源,並將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當按鍵沒有按下時,所有的輸入端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態就可得知是否有鍵按下了。<1>確定矩陣式鍵盤上何鍵被按下介紹一種「行掃描法」。行掃描法 行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法,如上圖所示鍵盤,介紹過程如下。1、判斷鍵盤中有無鍵按下 將全部行線Y0-Y3置低電平,然後檢測列線的狀態。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位於低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。2、判斷閉合鍵所在的位置 在確認有鍵按下後,即可進入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。
『陸』 單片機矩陣掃描鍵盤問題 C語言
每個switch語耐差滾句後加一句慶畢
while(temp!=0x0f)
{
temp=P3;
temp=temp&0xf0;
}
即:按鍵鬆手檢昌余測
『柒』 單片機矩陣式鍵盤產生抖動的原理是什麼..急...寫論文要用到,謝謝!!
產生抖動的原理:當你按下按鍵時,不論你的速度有多快,這個過程都是:接觸-斷開-接觸-斷開。。。。。。可靠接觸,前面10至20毫秒就是抖動狀態,是不穩定狀態,抬起手指時也是如此。
由此可見CPU要正確獲取一次按鍵的信息,就要濾除前後的兩段抖動時間,以免計數錯誤。單片槐頃機矩陣式鍵盤一般採用延時10ms來防抖。
我翻了下敗攔教材,沒找到原文,反正原理就是這樣。既然是寫論文,你自鉛枯陸己組織下語言不就結了。
『捌』 單片機矩陣式鍵盤顯示設計中,如何處理多個按鍵同時按下的情況
矩陣鍵盤悉橘陪有多種鍵盤演算法,如果是行列掃描的話,多個按鍵同時按下是可以得到所有的鍵值,如果是線反轉法的話,就會有誤判的可能。
行列掃描的話,睜蠢一次只掃描一行按鍵,而且對伍源應行的按鍵的狀態也會通過互相獨立的IO得到。