專注電子技術(shù)學習與研究
當前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

獨立按鍵驅(qū)動程序

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2011年03月08日   【字體:

下面是獨立按鍵驅(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;
  }
 }

}
關(guān)閉窗口

相關(guān)文章