专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

独立按键驱动程序

作者:佚名   来源:本站原创   点击数:  更新时间:2011年03月08日   【字体:

下面是独立按键驱动程序,特点是利用TIMER0中断,CPU在不停的扫描程序,60ms到,执行按键驱动,函数在48ms执行一次,60ms再次执行,避免了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后,再次执行检测
 {
  NowKeyValue = P2;
  NowAMKeyValue = AMKEY;

  if(NowKeyValue != unitTemp)   //如果两次检测到的结果不同,则认为是抖动,不做处理
  {
    unitTemp = 0xff;
  }

  if((NowAMKeyValue == amkey) && (amkey == 0))   //如果状态键按键有效
  {
    if(ltkey == 0)
    {           //AM状态LED位,0为自动,1为手动
      am_led = !am_led;
   if(am_led == 0)       //如果是从手动切回自动,切回到CH1
   {
     unitTemp = 0xf7;
     mtoa = 1;        //由手动切到自动后的标志位
   }

   AMLED = am_led;       //状态灯,变化时写入
   ltkey = 1;
    }
  }
  else
  {
    ltkey = 0;
  }
 }

}
关闭窗口

相关文章