欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
比較實用的51矩陣鍵盤程序解析
[打印本頁]
作者:
dagu
時間:
2015-1-23 04:32
標題:
比較實用的51矩陣鍵盤程序解析
由于單片機I/o口的有限,當需要多個按鍵的時候,常用矩陣鍵盤作為輸入設備.
由于按鍵按下后,松開得到的波形實際中不是理想化的方波,會出現機械抖動,對后續單片機檢測按鍵帶來麻煩,
一般教材上基本都是利用延時去抖動:基本套路都:
void key()
{
if(k1==0) //如果按鍵按下
{
delay_10ms();延時去抖動
if(k1==0) 再次判斷
{
你要的功能
}
}
}
由于10ms是理論上人們按鍵按下后到松手所要的大概時間,由于個體差異,和按鍵的機械靈活度有差異,導致可能出現按鍵按太快,沒反應,按時間太長導致單片機效率降低等不確定因素.
可以采用判斷是否是第一次按下來進行檢測,可以大大提高效率,當你按鍵按了再快也能檢測到。
程序如下:
//---------------------------------------------------------------------
#include <reg52.h>
#define key P2
int val;
char code sign[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay_10ms();
void key_scan(); //矩陣按鍵函數聲明
void main()
{
while(1)
{
P0=sign[val];
key_scan();
}
}
void key_scan()
{
static char a,b; //a用于判斷是不是第一次按下,b用于稍微延時
char state; //記錄鍵值
key=0x0f;
if(key!=0x0f) //如果有按鍵按下
{
state=key; //記錄第一次按鍵狀態
if(a==0) //如果第一次按下
{
b++; //略微延時 不需要延時10ms以提高單片機效率
if(b>3)
{
if(key==state) //判斷鍵值是否和第一次一致
{
a=1,b=0; //復位狀態值 a==1說明已經按下,等待后續松開
key=0x0f; //測試列
switch(key)
{
case (0x07): val=0;break;
case (0x0b): val=1;break;
case (0x0d): val=2;break;
case (0x0e): val=3;break;
}
key=0xf0; // 測試行
switch(key)
{
case (0x70): val=val;break;
case (0xb0): val=val+4;break;
case (0xd0): val=val+8;break;
case (0xe0): val=val+12;break;
}
}
}
}
}
else
{
a=b=0; //松開后復位狀態機
}
}
作者:
綠源學習者
時間:
2015-1-23 16:11
矩陣鍵盤的程序,用到再復制
作者:
綠源學習者
時間:
2015-1-23 16:11
矩陣鍵盤的程序,用到再復制
作者:
綠源學習者
時間:
2015-1-23 16:11
矩陣鍵盤的程序,用到再復制
作者:
fontex
時間:
2015-2-5 13:33
學習了,謝謝!
作者:
zrb5688
時間:
2015-2-9 07:59
留著,用的時候再拿,謝謝樓主。
作者:
vbn6264
時間:
2015-2-22 07:24
謝謝樓主的分享
作者:
ydmxyz
時間:
2015-3-11 13:19
可以學習下。
作者:
qiujinjiao
時間:
2017-12-21 17:57
多鍵摁下 怎么處理呢?
作者:
wh1998
時間:
2018-9-25 11:26
非常感謝,減少了打代碼的時間
作者:
小楓z
時間:
2018-9-25 16:01
感謝 好具體
作者:
1525508292
時間:
2021-12-5 20:25
如果顯示平方數的要怎么修改?
作者:
bhjyqjs
時間:
2021-12-6 09:04
思路真正對路,修改待驗證。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1