导航

独立按键防抖

/*
****************************************************************************
* 名称:key.c
*
* 功能:独立按键测试,非挂起延时防抖
****************************************************************************
*/

#include "stc89xx.h"

#define key1 P10

volatile unsigned char key1_valid; //有效的按键值变量

void key_timer0_init(void)
{
  TMOD&=0xF0;
  TMOD|=0x01;
  TH0=(65536-Fclk/1000/12*5+15)/256; //定时间隔为5ms,加15是为了修正重装所花费时间
  TL0=(65536-Fclk/1000/12*5+15)%256;
  ET0=1;
  TR0=1;
  EA=1;
}

/********************************************************************
函数功能:在定时器0中断里获取按键
入口参数:无。
返 回:无。
备 注:22.1184M晶体约5ms中断一次。
********************************************************************/
void Timer0Isr(void) interrupt 1
{
  static unsigned char key1_timer;
  TH0=(65536-Fclk/1000/12*5+15)/256; //定时间隔为5ms,加15是为了修正重装所花费时间
  TL0=(65536-Fclk/1000/12*5+15)%256;

  if(key1==0) //按键此刻按下
  {
    key1_timer++; //计时
    if(key1_timer>=2)
    {
      key1_timer=2;
      key1_valid=1; //按键生效
    }
  }
  else
  {

    key1_timer=0;
    key1_valid=0;

  }
}

posted on 2017-09-14 08:45  刘梢  阅读(390)  评论(0编辑  收藏  举报