⑴ 單片機 鍵盤掃描 這個程序是如何工作的
別人寫的代碼我很難分析,代碼也不全,就不想費時間分析,大概的思路,就是將接鍵盤的IO口設為輸入,當按下時位低電平,就能判斷哪個被按下。具體的是,4*4,四行四列,表示16個數,四個接行數,數個接列數,具體的接法就不說了,網上有,叫矩陣鍵盤,然後就是一直掃描,if語句判斷哪行被按下,在掃描列,就可以對應到具體的按鍵了,然後就可以跳到相應的處理函數進行處理。
⑵ 簡述單片機鍵盤掃描工作過程
鍵盤由行線列線交叉而成。列線接有上拉電阻。對第一行的行線置0,然後讀取列線碼,如果所有列線都是1說明買有被按下的鍵,繼續掃描下一行。直到能讀到0為止,讀到0時所掃描的行就是該鍵的行碼,而0所在的位是列碼。一般的鍵盤掃描都做成中斷形式,把列線所有線相與,只要有一個0就輸出0,將這個信號送給中斷,就可以實現在有鍵被按下時開啟掃描了。
⑶ 51單片機 矩陣鍵盤掃描
bit keyscan()//掃描按鍵函數
{
bit yes=0;
unsigned char temp;
P2=0xfe;//掃描第1行
temp=P2;//讀取埠值,檢測是否有按鍵按下
if(temp!=0xfe)
{
delay(15);//按下去抖
temp=P2;
if(temp!=0xfe)//再一次判斷,確實有鍵按下再執行
{
yes=1;
while(P2!=0xfe);
delay(15);
while(P2!=0xfe);
switch(temp)//獲取鍵值
{
case 0x7e:NUM=14;break;
case 0xbe:NUM=0;break;
case 0xde:NUM=12;break;
case 0xee:NUM=11;break;
}
}
}
P2=0xfd;//掃描第2行
temp=P2;
if(temp!=0xfd)
{
delay(15);//按下去抖
temp=P2;
if(temp!=0xfd)
{
yes=1;
while(P2!=0xfd);
delay(15);
while(P2!=0xfd);
switch(temp)
{
case 0x7d:NUM=7;break;
case 0xbd:NUM=8;break;
case 0xdd:NUM=9;break;
case 0xed:NUM=15;break;
}
}
}
P2=0xfb;//掃描第3行
temp=P2;
if(temp!=0xfb)
{
delay(15);//按下去抖
temp=P2;
if(temp!=0xfb)
{
yes=1;
while(P2!=0xfb);
delay(15);
while(P2!=0xfb);
switch(temp)
{
case 0x7b:NUM=4;break;
case 0xbb:NUM=5;break;
case 0xdb:NUM=6;break;
case 0xeb:NUM=10;break;
}
}
}
P2=0xf7;//掃描第4行
temp=P2;
if(temp!=0xf7)
{
delay(15);//按下去抖
temp=P2;
if(temp!=0xf7)
{
yes=1;
while(P2!=0xf7);
delay(15);
while(P2!=0xf7);
switch(temp)
{
case 0x77:NUM=1;break;
case 0xb7:NUM=2;break;
case 0xd7:NUM=3;break;
case 0xe7:NUM=13;break;
}
}
}
return yes;
}
其中NUM為全局變數,每次檢測到有按鍵按下時會返回『1』,通過讀取NUM來獲得鍵值,四個switch語句中的NUM值完全取決於你要把該按鍵設定為何值而定的。
本程序的鍵盤掃描的原理就是進行行掃描,每一行先對埠寫行掃描字,然後再讀取埠值,若該行有按鍵按下,則按鍵對應列線被拉為低電平。掃描完四行就可以檢測一遍16個鍵了。
⑷ 51單片機4×4小鍵盤的構造原理
其實就是一個排列組合的關系,4行和4列組成一個矩陣,根據作者的掃描軟體處理不同,可以檢測到單鍵,也可以檢測到多鍵。比如行鍵全部設為高,一列一列的掃以「低電平」,此時檢測行健的電平高低從而得知所按鍵的位置,這就是矩陣鍵盤的掃描原理。
⑸ 單片機數碼顯示和鍵盤掃描為什麼需要不斷刷新
因為數碼管電路,多數都是採用動態掃描顯示方式,即多位數碼管是逐位點亮的,要不停地刷新,就是不停地掃描顯示,否則就會滅掉了。而鍵盤也同樣,需要不停地掃描,才能隨時識別有按鍵了,並判斷出是什麼鍵,然後便執行相應的按鍵操作。因為,按鍵是隨機的,不可能事預 測的,更不是事先約定的,只有隨時掃描鍵盤才能及時發現有按鍵。數碼管顯示和按鍵的動態掃描這個道理非常簡單,難道這有什麼不好理解嗎?
⑹ 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。
⑺ 單片機掃描電路原理
單片機行列式鍵盤掃描原理如下:
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語言教材。電腦是用來編寫和編譯程序,並將程序代碼下載到單片機上;開發板來運行單片機程序,驗證實際效果。
⑻ 單片機匯編矩陣鍵盤實驗(掃描法)
關於掃描按鍵的原理,可以看下面這篇文章。
本文以循序漸進的思路,引導大家思考如何用最少的IO驅動更多的按鍵,並依次給出5種方案原理圖提供參考。在實際項目中我們經常會遇到有按鍵輸入的需求,但有的時候為了節省資源成本,我們都會選擇在不增加硬體的情況下使用最少的控制器IO驅動更多的按鍵,那麼具體是怎麼做的呢,下面我們就以用5個IO引腳為例,講下怎麼設計可以實現更多的按鍵?共有5種設計思路,下面依次介紹。
首先通常想到的可能是下面這樣的設計:
這樣我們可以先識別K01、K02、K03、K04、K05,若沒有按鍵按下然後再和思路四的設計一樣去識別其他按鍵。但這樣存在一個問題,如果IO1配置為0,IO5讀到0,那麼怎麼知道是K51按下還是K05按下呢,這里只需要在程序里做下判斷,先判斷下是不是K05按下,若不是就是K51,因為按鍵K01、K02、K03、K04、K05在5個IO口都為讀取的情況下,就可以識別,不需要掃描識別處理,相當於這5個按鍵優先順序高與其他按鍵。
總結
綜合上述,5個IO口最多可以識別25個按鍵,思路五程序上處理比較麻煩,若實際中只按思路四設計,也可識別20個按鍵,那麼如果有N個IO口可識別多少按鍵呢?這里給出如下公式:
假設有N個IO口按照思路三可以識別N*(N-1)/2個;
按照思路四可識別N*(N-1)個;
按照思路5可以識別N*(N-1)+N個。
最後再說下,如果實際設計時,還是按思路四設計好,軟體也沒那麼麻煩。如果是你的話你會選擇哪種方法呢?你還有沒有其他的設計方法呢?
⑼ 51單片機中闡述4*4行列式按鍵的掃描原理
如圖:單片機4個IO線如P1.0至P1.3作為輸出,4 個作為輸入如P1.4至P1.7,上面可以接16 個按鍵,這些按鍵都有是一端跨在一根輸出線上,另一端跨在一根輸入線上, 要是沒有按鍵按下時,輸入 狀態和輸出狀態沒有任何關系,這時單片機讀輸入線的狀態,得到的結果全是1(默認或設定),若有按鍵按下,輸出線的狀態就會反映在輸入線上。
先讓輸出線的一根線P1.0輸出0,這時接這根線上的4個按鍵的某一個如S0被按下,在P1.3上就可以讀到一個0,如果S1被按下,P1.4上就可以讀到0,......從而可以確定4個按鍵有無按下,下一步,讓輸出線的另一根線P1.1輸出0,如果S4按下,P1.3上就又可以讀到一個0,
如果S5按下,P1.4上就又可以讀到一個0........,又可以確定4個按鍵,4 根輸出線分另輸出0,就其可以確定16個按鍵
⑽ 求單片機4*4矩形鍵盤行掃描法的掃描過程和原理!
反轉法鍵盤掃描過程:1)P3高4位為列低4位為行讓高4位為1低4位為0。2)判斷是否有按鍵按下,如果有按鍵按下則高4位上的有一位為低電平。3)去抖動程序。4)繼續判斷。5)保存高4位上的按鍵情況。6)判斷是否有按鍵按下,如果有按鍵按下則低4位上的有一位為低電平。7)去抖動。8)繼續判斷。9)保存低4位上的按鍵情況。