1. 單片機 獨立鍵盤檢測問題
你好,程序中一共出現了兩次temp=p3;temp=temp&0xf0;第一次出現的時候表示單片機檢測到按鍵動作,但為了准確性,防止是無意識的出發,因此用一個delay函數,延時5MS。再次檢測P3的狀態!此時temp=p3;temp=temp&0xf0;說明的確是按鍵按下,而不是誤觸發!因此起到一個去抖動的作用!望採納,謝謝!
2. stm32f4單片機怎麼讀取ps2鍵盤的按鍵信息
你好,ps2鍵盤的輸出信號格式是
第一個是起始位0,然後是8個數據位低位在前面。
然後是一個奇校驗位一個停止位1。
鍵盤的那個時鍾是10k到16k的頻率,你可以用這個時鍾來做中斷,當這個來一個1,就看那個data,如果data是0就是開始的那個提示了,後面就是數據了。
3. 對於這樣的4×4矩陣鍵盤與單片機連接,單片機如何去識別每個按鍵
對於這種連接給你說兩種識別方法吧。
第一種可以叫口掃描法,先給P1口賦值0F0H由高四位讀入數據,保存;再給P1口賦值0FH由低四位讀入數據,兩次的數據即為相應按鍵的鍵值,比如此時「0」的鍵值是0EEH,而「1」是0EDH。
第二種是回送法,先給P1口賦值0F0H由高四位讀入數據,再判斷哪顆線上讀到了低電平,再將p1.0~p1.3,和沒有讀到低電平的到位線置成1,得到低電平的線保持為0,再讀低四位線上的數據,就得到了鍵值。此時得到的鍵值和上一種方法是相同的。
4. 這是單片機4X4的鍵盤識別程序,請幫我解釋,最好每句執行操作和原理都有,特別是case 0X0e; key=7的原因
temp等於0x0e時,鍵值key等於7 : 這個鍵值是你自己定義的,就是起一個標志位的作用,然後用程序判斷鍵值,當鍵值等於7時,該進行什麼動作,這就相當於當你那個按鍵按下時執行什麼動作
寫單片機C程序 一定要活用標志位
還有你好像都大四了,怎麼這樣普通的矩陣鍵盤程序還看不懂,該好好學習呀 兄弟
I和J 只是一個變數 用來決定延時時間的長短 延時是為了消除按鍵的抖動
畢竟機械按鍵存在抖動(按下去並不是電平直接就跳變並穩定下來了)
延時是軟體消抖 增強系統的穩定性
5. 單片機的按鍵功能是什麼
你們知道單片機的每個按鍵的具體功能嗎?下面是我收集整理關於單片機的每個按鍵的具體功能的資料以供大家參考學習,希望大家喜歡。·
鍵盤的分類:
鍵盤分編碼鍵盤和非編碼鍵盤。
鍵盤上閉合鍵的識別由專用的硬體編碼器實現,並產生鍵編碼號或鍵值的稱為編碼鍵盤,如計算機鍵盤;
而靠軟體編程來識別的稱為非編碼鍵盤。
在單片機組成的各種系統中,用的最多的是非編碼鍵盤。也有用到編碼鍵盤的。
非編碼鍵盤有分為:獨立鍵盤和行列式(又稱為矩陣式)鍵盤。
本文主要討論矩陣鍵盤(獨立鍵盤比較簡單可以與此類比),下面是矩陣鍵盤的電路連接圖。
如果單片機檢測到的是抖動部分,則無法按鍵判斷是否有效,所以我們需要加入防抖程序。
註:也可以通過硬體防抖,如上圖(b)。
功能:矩陣鍵盤
(按相應的按鍵,數碼管從0~F的顯示)
單片機:AT89S52
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit DAT=P0^3;
sbit CLK=P0^2;
uchar temp,h;
void delay(uint); //延遲程序
void sendbyte(uchar); //數碼管顯示
void keyscan(); //按鍵掃描
uchar code tab[]={
0xed,0x09,0xbc,0x9d,0x59,0xd5,
0xf5,0x0d,0xfd,0xdd,0x7d,0xf1,
0xe4,0xb9,0xf4,0x74,0x00} ; //0-F, 全滅
void main (void)
{
sendbyte(16); //初始時數碼管無顯示
while(1)
{
keyscan(); //按鍵掃描
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
void sendbyte(uchar byte)
{
uchar num,c;
num=tab[byte];
for(c=0;c<8;c++)
{
CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1; //右移位賦值
}
}
void keyscan()
{
/*第一行按鍵的掃描*/
P2=0xfe; //確定第一行的按鍵有效
temp=P2; //將其賦給一個變數(處理I/O口時,一般先賦值給一個變數,然後通過處理變數來處理I/O口)
temp=temp&0xf0; //用於檢測第一行的哪個按鍵按下
while(temp!=0xf0) /*這個部分只要是用來消除按下抖動的*/
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0) //這個地方,已經消除了按下抖動,P2口的值已經確定
{
temp=P2; //將P2口得值賦給變數
switch(temp) //這個switch語句,用來確定哪一個按鍵按下時,數碼管的顯示值
{
case 0x7e:h=0;
break; //這個break很重要,表示如果有匹配的值,就跳出switch語句,防止程序跳不出來。
case 0xbe:h=1;
break;
case 0xde:h=2;
break;
case 0xee:h=3;
break;
default : h=16;
break;
}
while(temp!=0xf0) /*這個部分只要是用來消除釋放抖動的*/
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h); //送給數碼管顯示
}
}
/*第二行按鍵的掃描*/
P2=0xfd;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0x7d:h=4;
break;
case 0xbd:h=5;
break;
case 0xdd:h=6;
break;
case 0xed:h=7;
break;
default : h=16;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h);
}
}
/*第三行按鍵的掃描*/
P2=0xfb;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0x7b:h=8;
break;
case 0xbb:h=9;
break;
case 0xdb:h=10;
break;
case 0xeb:h=11;
break;
default : h=16;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h);
}
}
/*第四行按鍵的掃描*/
P2=0xf7;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0x77:h=12;
break;
case 0xb7:h=13;
break;
case 0xd7:h=14;
break;
case 0xe7:h=15;
break;
default : h=16;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h);
}
}
6. 單片機讀取電腦USB鍵盤該怎麼弄
USB Host HID 設備類,找有USB Host或OTG的單片機,找廠家提供的HID驅動
7. 單片機行列式鍵盤掃描原理
單片機行列式鍵盤掃描原理如下:
1、行線P10~P13為輸出線,列線P14~P17為輸入線。一開始單片機將行線(P10~P13)全部輸出低電平,此時讀入列線數據,若列線全為高電平則沒有鍵按下,當列線有出現低電平時調用延時程序以此來去除按鍵抖動。
2、延時完成後再判斷是否有低電平,如果此時讀入列線數據還是有低電平,則說明確實有鍵按下。最後一步確定鍵值。當判斷確實有鍵按下之後,行線輪流輸出低電平,根據讀入列線的數據可以確定鍵值。
3、單片機將P10輸出為低電平,其它P11~P13輸出高電平,此時讀取列線的數據全為高電平,說明沒有在第一行有鍵按下;其次,單片機將P11輸出低電平,其它P10、P12、P13仍為高電平。
4、此時再來讀取列線數據,發現列線讀到的數據有低電平,數值為1011(0x0B),如果我們的鍵盤布局已經確定,那麼0x0B就代表S5的值了。轉到S5鍵功能處理子程序就可以達到目的。
(7)單片機識別鍵盤擴展閱讀
單片機學習方法
1、基礎理論知識學習
基礎理論知識包括模擬電路、數字電路和C語言知識。。在學習單片機之前,覺得模擬電路和數字電路基礎不好的話,不要急著學習單片機,應該先回顧所學過的模擬電路和數字電路知識,為學習單片機加強基礎。
2、單片機實踐
准備一台電腦、一塊單片機開發板、一套視頻教程、一本單片機教材和一本C語言教材。電腦是用來編寫和編譯程序,並將程序代碼下載到單片機上;開發板來運行單片機程序,驗證實際效果。
8. 簡述單片機反轉法識別矩陣按鍵過程
行反轉法的基本概念是:行列線的交叉位置布置按鍵。所有行和列加上拉電阻。
所有行作輸出先送低電平,然後讀入列值。 如果有任意鍵按下,那麼一定對應列值有0出現,也就知道了按下的鍵所在列。
反過來驅動這一列為0,其他列為1。把行作輸入。就可以判斷按下的鍵所在行。矩陣式結構的鍵盤顯然比直接法要復雜一些,識別也要復雜一些,列線通過電阻接正電源,並將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當按鍵沒有按下時,所有的輸入端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態就可得知是否有鍵按下了。<1>確定矩陣式鍵盤上何鍵被按下介紹一種「行掃描法」。行掃描法 行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法,如上圖所示鍵盤,介紹過程如下。1、判斷鍵盤中有無鍵按下 將全部行線Y0-Y3置低電平,然後檢測列線的狀態。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位於低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。2、判斷閉合鍵所在的位置 在確認有鍵按下後,即可進入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。
9. 51單片機矩陣鍵盤,所有按鍵一起識別的問題。
你理解按鍵的原理嗎,矩陣的原理嗎,並不是確定的,矩陣大概是這樣,拿4*4來說 4行鍵盤連接一組io的前高四位,4列鍵盤連接一組io的低四位,如果沒有前面的賦值,按下健以後每條io線都是高電平的,只有你先給行賦值0,這時候你來檢測列,只要按下了就通了,也就得到低電平
10. 單片機怎樣識別按鍵是單機,雙擊還是長按,演算法應該是怎樣
按鍵的處理進行時間判斷.在一定的時間內如果按下按鍵,當時間小於這個時間,那麼為單次按鍵,當時間超過一定時間為為長按,當兩次按的中間有高電平時,為雙擊.你可以參考參考.