① 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。
② 51單片機怎麼把矩陣按鍵的檢測變成一個函數
1、加個定時器功能,把矩陣鍵盤掃描編寫成一個獨立的函數。
、按鍵掃描程序,當掃描到有按鍵按下的時候,按鍵鍵的值寫入緩沖區,繼續掃描直到完成。
3、點擊完成,就成功了。
③ 關於51單片機鍵盤掃描函數。
是不是第一個函數調用後就進入死循環了,所以調用不了第二個函數
④ 51單片機按鍵檢測問題
三個二極體、一個電阻,確實是一個與門。
電阻的計算公式,正確。
二極體的導通電壓、電流,選擇的基本合理。
可以進行實際電路的安裝、測試。
實際上,現在的二極體,發光效率,逐年的提高,已經不用 6mA,就很醒目了。
不同顏色的二極體,導通電壓,也有差異,選用較小的,才利於觸發中斷。
得進行反復實驗,才能完成設計。
在程序中,注意不要使 P3.2 輸出低電平,否則,會有較大的灌電流出現。
⑤ 關於51單片機4*4矩陣按鍵掃描代碼的問題
連續4次判定是為了消抖,也就是防止因各種不同原因(例如觸點臨界狀態、電磁干擾)造成的誤判定。
⑥ 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個按鍵
⑦ 51單片機矩陣鍵盤掃描問題
#include <intrins.h> //_nop_();所需頭文件
/*************鍵盤掃描******錯誤*********/
void scan()
{
unsigned int media;
P2=0x0f;
_nop_(); //在這里延時一個或幾個指令周期試試
P2=P2|0xf0;
key=P2;
}