新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 一個(gè)經(jīng)典的按鍵掃描程序

一個(gè)經(jīng)典的按鍵掃描程序

作者: 時(shí)間:2016-11-17 來源:網(wǎng)絡(luò) 收藏
按鍵是比較復(fù)雜??梢杂?strong>狀態(tài)機(jī)表示。

每10mS執(zhí)行一次鍵盤掃描任務(wù)

本文引用地址:http://butianyuan.cn/article/201611/315486.htm

0、無鍵,若有鍵進(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;

}

}



關(guān)鍵詞: 按鍵掃描狀態(tài)

評論


技術(shù)專區(qū)

關(guān)閉