嵌入式实时系统程序开发一:按键程序编写
?為了回顧以前的東西,以及把操作系統(tǒng)的思想能用在處理器的多任務(wù)操作上,會(huì)持續(xù)連載一些文章,這些思想主要借鑒周慈航《基于嵌入式實(shí)時(shí)系統(tǒng)程序設(shè)計(jì)技術(shù)》一書
鍵盤程序控制技術(shù):
鍵盤作為輸入輸出口,是我們常用的一個(gè)模塊,下面把自己總結(jié)的鍵盤程序大體描繪一下。
鍵盤中有兩個(gè)問題我們需要解決:一個(gè)是防抖,一個(gè)是要避免連擊。
對(duì)于防抖:通常我們加延時(shí)函數(shù),等待按鍵穩(wěn)定后再執(zhí)行后面的步驟,但是具體要延時(shí)多長時(shí)間只能憑借經(jīng)驗(yàn)或嘗試的辦法,不可靠,更好的辦法是我們可以設(shè)置兩個(gè)狀態(tài)變量,分別保存按鍵上一時(shí)刻和這一時(shí)刻的狀態(tài),當(dāng)兩個(gè)狀態(tài)一樣時(shí),說明按鍵狀態(tài)穩(wěn)定。
避免連擊:連擊通常也會(huì)造成不可預(yù)知的操作,避免連擊就是讓按鍵一次只響應(yīng)一次,為此我們需要檢測(cè)按下和釋放兩種狀態(tài),然后再執(zhí)行相應(yīng)的操作。一般有兩種方法,一是按鍵按下,執(zhí)行相應(yīng)操作,然后檢測(cè)釋放;二是,檢測(cè)按鍵按下并釋放后,然后執(zhí)行相應(yīng)操作。我一般用第二種。
程序流程:
int ? TaskKey(void* pdata)
{
INT8U key,key0;
while(1)
{
OSTimeDly(1);
key=keyin(); ? ? ??
if(key=未按下|key!=key0) ? ? ? ?//如果按鍵沒有按下或者按鍵前后狀態(tài)不一,繼續(xù)檢查按鍵狀態(tài)
{
key0=key;
continue;
}
which(key)
{
執(zhí)行相應(yīng)按鍵解析函數(shù),并更新顯示消息。 ??
}
while(1)
{
key=keyin();
if(key釋放) break; ? ? ? ? ? ? ? ? ? ? //如果按鍵釋放,跳出循環(huán),一次按鍵相應(yīng)操作完成
OSTimeDly(1);
?
}
}
}
轉(zhuǎn)載于:https://www.cnblogs.com/summer-xwq/p/4153894.html
總結(jié)
以上是生活随笔為你收集整理的嵌入式实时系统程序开发一:按键程序编写的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 分页类
- 下一篇: windows程序快速启动的方式:WIN