一個(gè)經(jīng)典的按鍵掃描程序
每10mS執(zhí)行一次鍵盤掃描任務(wù)
本文引用地址:http://butianyuan.cn/article/201611/315486.htm0、無鍵,若有鍵進(jìn)入狀態(tài)1
1、第一次檢到有鍵。若有鍵進(jìn)入狀態(tài)2,同時(shí)將鍵值送緩沖區(qū)。 若無鍵進(jìn)入狀態(tài)0。
2、若有鍵則計(jì)時(shí),按鍵超過300ms進(jìn)入狀態(tài)3,同時(shí)將鍵值送緩沖區(qū)。 若無鍵進(jìn)入狀態(tài)1。
表示第一次按鍵后如果長按鍵則300ms后認(rèn)為有一次按鍵。
3、若有鍵則計(jì)時(shí),按鍵超過200ms則將鍵值送緩沖區(qū)。 若無鍵進(jìn)入狀態(tài)1。
表示長按鍵則以后每200ms后認(rèn)為有一次按鍵。
void KeyScan() //每10mS執(zhí)行一次鍵盤掃描任務(wù)
{
switch(KeyState)
{
case 0:
if(KeyIsKeyDown()) //有鍵
{
KeyState = 1;
}
break;
case 1:
if(KeyIsKeyDown()) //有鍵
{
KeyState = 2;
KeyBufIn(); //將鍵值送緩沖區(qū)
KeyStartRptCnt = 0;
}
else
{
KeyState = 0;
}
break;
case 2:
if(KeyIsKeyDown()) //有鍵
{
if(KeyStartRptCnt++ >= 30)
{
KeyState = 3;
KeyRptCnt = 0;
KeyBufIn();
}
}
else
{
KeyState = 1;
}
break;
case 3:
if(KeyIsKeyDown()) //有鍵
{
if(KeyRptCnt++ >= 20)
{
KeyRptCnt = 0;
KeyBufIn();
}
}
else
{
KeyState = 1;
}
break;
default:
break;
}
}
評論