導航:首頁 > 操作系統 > 單片機鍵盤掃描

單片機鍵盤掃描

發布時間:2022-03-13 15:33:26

❶ 簡述單片機鍵盤掃描工作過程

這個思路還是比較簡單的,實現起來方法很多,首先判斷有沒按鍵按下,再過一個按鍵抖動時間再次檢測,如果還是按了,就查鍵值。你講的是掃描過程,這個實現起來方法也很多,行列式的可行處列入,也可列出行入,還要看你是在按鍵按下時處理還是在按鍵彈起是處理。

❷ C51單片機按鍵掃描

1.設置一個狀態變數,如flag,定義flag=0為開狀態,flag=1為關狀態。
2.因為是按鍵(不是開關),所以實際上單片機讀取的應該是脈沖形式的輸入。設按鍵接單片機P01引腳,故可採用以下程序實現按鍵掃描
if(P01==0)//按下按鍵,進入下降沿
{
delay2();//20ms延時去按鍵前抖動
while(P01==0);//等待上升沿到
來,即按鍵彈起
flag=~flag;//flag取反,實現狀態切換
}
void
delay2()//20ms延時子程序
{
unsigned
char
i,k;
for(i=0;i<100;i++)
for(k=0;k<100;k++);
}
註:根據按鍵的具體接法,若按下按鍵向單片機輸入低電平,則採用以上程序;若按下按鍵向單片機輸入高電平,則將兩處P01==0均改為P01==1。

❸ 單片機4*4鍵盤掃描程序

//你要看得懂代碼首先你要了解按鍵掃描的原理
//k_input是Px8個IO(x=0/1/2/3)
ucharkeys()
{
uchari,j,k_in,k_out=0xfe,jm;
k_input=0x0f//步驟1:Px7~Px4為低,Px3~Px0為高
if(k_input!=0x0f)//步驟2:是否有按鍵按下,如果有,Px的值將發生變化
yanshi(10);//軟體消除抖動
else
return16;//如果沒有,返回空鍵值

for(jm=0;jm<4;jm++)//掃描是哪個按鍵按下
{
k_input=k_out;//步驟3:從Px0這一列開始掃描
k_int=k_input;//這里應該是k_in
j=0x01;
for(i=0;i<4;i++)//步驟4:逐個掃描這一列上面的4個按鍵
{
if(~(k_in>>4)&j)//如果有按鍵按下,返回被按下的按鍵值
return(jm*4+i);
j=_crol_(j,1);//如果沒有按鍵按下,依次掃描這一列的其他按鍵
}
k_out=crol_(k_out,1);//步驟5:移位,依次掃描另一列,直到檢測到按鍵按下
}
return16;//如果沒有掃描到按鍵,認為是誤觸發,返回空鍵值
}

❹ 單片機行列式鍵盤掃描原理

單片機行列式鍵盤掃描原理如下:

1、行線P10~P13為輸出線,列線P14~P17為輸入線。一開始單片機將行線(P10~P13)全部輸出低電平,此時讀入列線數據,若列線全為高電平則沒有鍵按下,當列線有出現低電平時調用延時程序以此來去除按鍵抖動。

2、延時完成後再判斷是否有低電平,如果此時讀入列線數據還是有低電平,則說明確實有鍵按下。最後一步確定鍵值。當判斷確實有鍵按下之後,行線輪流輸出低電平,根據讀入列線的數據可以確定鍵值。

3、單片機將P10輸出為低電平,其它P11~P13輸出高電平,此時讀取列線的數據全為高電平,說明沒有在第一行有鍵按下;其次,單片機將P11輸出低電平,其它P10、P12、P13仍為高電平。

4、此時再來讀取列線數據,發現列線讀到的數據有低電平,數值為1011(0x0B),如果我們的鍵盤布局已經確定,那麼0x0B就代表S5的值了。轉到S5鍵功能處理子程序就可以達到目的。

(4)單片機鍵盤掃描擴展閱讀

單片機學習方法

1、基礎理論知識學習

基礎理論知識包括模擬電路、數字電路和C語言知識。。在學習單片機之前,覺得模擬電路和數字電路基礎不好的話,不要急著學習單片機,應該先回顧所學過的模擬電路和數字電路知識,為學習單片機加強基礎。

2、單片機實踐

准備一台電腦、一塊單片機開發板、一套視頻教程、一本單片機教材和一本C語言教材。電腦是用來編寫和編譯程序,並將程序代碼下載到單片機上;開發板來運行單片機程序,驗證實際效果。

❺ 關於51單片機鍵盤掃描函數。

是不是第一個函數調用後就進入死循環了,所以調用不了第二個函數

❻ 單片機鍵盤掃描怎麼實現一鍵多用

1:鍵值記錄
2:時間記錄
3:是不是同一個鍵。
以上三個條件組合,一個條件用一個變數。

❼ 單片機的獨立鍵盤掃描程序

這是keil 的語法規定的,在程序中不能有類似的P3^4的寫法的。必須在主程序之前用sbit 命令定義成符號,所以,
if(P3^4==0)的寫法是錯誤的,只有if(key==0)的寫法才是正確的。
雖然編譯是通過的,也沒有報錯,但是編譯後的代碼卻是錯誤的。
如果懂得匯編代碼,是可以查編譯後的匯編代碼,就知道是錯的。

❽ 單片機鍵盤掃描。

兄弟,你好

void key()
{uchar key1,key2,key3; 這條語句後就key1=key2=key3=0了,肯定就一直在key()函數中一直不出來了撒,你的key1等是按鍵,怎麼沒有分配一個IO口呢

你如果這樣的話就可以了
void key()
{uchar key1,key2,key3;
key1=key2=key3=1;這樣的話就不會一直在key()中了

要想達到效果,估計你還的弄幾個按鍵
添幾句

sbit key1=P3^0;
。。。。。。
再把 uchar key1,key2,key3;這一句刪了,

你試一下,祝你成功

❾ 單片機鍵盤掃描C程序

uchar code act[4]={0xfe,0xfd,0xfb,0xf7};
char scan_key(void)
{
uchar i,j,in,ini,inj;
bit find=0;
for(i=0;i<4;i++)
{ //額 ,先給你解釋下4*4
P1=act[i]; //開通讀取,並輸出高電平
delay(10); //延時
in=P1; //讀取單片機值並賦值給in,四種情況4個按鍵,
in=in>>4; //右移四位,去掉低位
in=in|0xf0; //位或運算,高四位補1,
for(j=0;j<4;j++)
{
if(act[j]==in) //判斷具體哪個按鍵
{
find=1;
inj=j;ini=i;
}
}
}
if(find==0)return-1; //返回值 -1,return 1是正常返回,return -1是非正常返回 程序寫法標准而已,即沒按鍵
return(ini*4+inj); //i是判斷高四位,j判斷低4位
}

0 1 2 3 p1.0 p1.0為零 可判斷0,1,2,3 如果開關0導通 p4即為0,即為1110 1110

4 5 6 7 p1.1 右移補1,得 1111 1110,及j為0

8 9 a b p1.2 開關1導通 p5為0, 即 1101 1110, 右移補1111 1101

c d e f p1.3 可判斷j為1 同理可類推

p4 5 6 7

按這種思路4個埠只能實現4個開關4*4=16,2*2=4 得換思路,如果是因為埠緊張的話,可以用P3口,或者採用分壓讀取AD判斷按鍵(AD鍵盤)

閱讀全文

與單片機鍵盤掃描相關的資料

熱點內容
安卓手機電話簿怎麼導出到蘋果手機 瀏覽:763
php實現投票 瀏覽:333
手機爆力解壓加密視頻文件 瀏覽:932
東方財富app怎麼看北上資金圖解 瀏覽:418
邢昭林程序員那麼可愛拍現場 瀏覽:169
安卓什麼應用可以免費看電視劇 瀏覽:504
合適pdf 瀏覽:293
app監測睡眠怎麼選擇 瀏覽:642
老人家用什麼安卓手機好 瀏覽:955
解壓包能不能送女朋友 瀏覽:701
好看發卡網源碼 瀏覽:51
水平集演算法matlab 瀏覽:769
區域網如何用ftp伺服器配置 瀏覽:74
程序員慣性思考模式 瀏覽:441
如何在個稅app上查身份證號 瀏覽:7
電視家app安裝在電視上怎麼安 瀏覽:889
怎麼將pdf格式轉化為圖片格式 瀏覽:639
伺服器拔掉raid卡怎麼裝系統 瀏覽:234
區域對稱加密演算法 瀏覽:247
數字轉漢字php 瀏覽:735