下面是獨立按鍵驅(qū)動程序,特點是利用TIMER0中斷,CPU在不停的掃描程序,60ms到,執(zhí)行按鍵驅(qū)動,函數(shù)在48ms執(zhí)行一次,60ms再次執(zhí)行,避免了CPU資源的浪費
bit ltkey = 0; //防止按鍵被長按
bit am_led = 0;
uchar unitTemp = 0xff;
bit amkey;
bit remsg = 0;
bit send = 0;
bit delay100 = 0;
bit mtoa = 0;
void KeyScn(void) //按鍵掃描模塊
{
uchar NowKeyValue;
bit NowAMKeyValue;
//檢測按鍵
if(pic == 10) //首次按鍵檢測
{
amkey = AMKEY;
unitTemp = P2;
}
if(pic == 13) //12ms后,再次執(zhí)行檢測
{
NowKeyValue = P2;
NowAMKeyValue = AMKEY;
if(NowKeyValue != unitTemp) //如果兩次檢測到的結(jié)果不同,則認為是抖動,不做處理
{
unitTemp = 0xff;
}
if((NowAMKeyValue == amkey) && (amkey == 0)) //如果狀態(tài)鍵按鍵有效
{
if(ltkey == 0)
{ //AM狀態(tài)LED位,0為自動,1為手動
am_led = !am_led;
if(am_led == 0) //如果是從手動切回自動,切回到CH1
{
unitTemp = 0xf7;
mtoa = 1; //由手動切到自動后的標志位
}
AMLED = am_led; //狀態(tài)燈,變化時寫入
ltkey = 1;
}
}
else
{
ltkey = 0;
}
}
}
