基于STC系列单片机实现一个按键单击增加,一个按键单击减少,以及这两个按键组成一种分先后按的组合按键的功能

#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uint
#define KeyPressDeshakeTime 10//自定义按键按下消抖时间为10ms
uchar AddKeyLockFlag;//声明增加按键锁定标志位变量
uchar DecKeyLockFlag;//声明减少按键锁定标志位变量
uchar KeyNumber = 0;//定义按键键值为0
uint AddKeyPressDelayTime;//声明增加按键按下延时时间变量
uint DecKeyPressDelayTime;//声明减少按键按下延时时间变量
sbit AddKey = P2^0;//位定义增加按键为单片机P2.0引脚
sbit DecKey = P2^1;//位定义减少按键为单片机P2.1引脚
  void KeyScan(void)//按键扫描函数 该函数放在定时器定时2ms的中断函数中扫描
{
   if(AddKey)//如果增加按键没按下或弹起
  {
    AddKeyLockFlag = 0;//增加按键锁定标志位清0
    AddKeyPressDelayTime = 0;//增加按键按下延时时间清0
   }   
   else if(!AddKeyLockFlag)//如果增加按键锁定标志位置1 即增加按键按下
  {
    AddKeyPressDelayTime++;//增加按键按下延时时间自加
    if(AddKeyPressDelayTime > KeyPressDeshakeTime)//如果增加按键按下延时时间大于按键按下消抖时间
   {
     AddKeyPressDelayTime = 0;//增加按键按下延时时间清0
     if(!DecKey)//如果减少按键按下
    {
      AddKeyLockFlag = 1;//增加按键锁定标志位置1
      KeyNumber = 2;//按键键值置2 此处是组合按键 即减少按键先按下不松+增加按键后按下 可赋给swicth()语句中的变量来控制其他功能
     }
     else//如果增加按键按下
    {
      AddKeyLockFlag = 1;//增加按键锁定标志位置1
      KeyNumber = 1;//按键键值置1 此处是单击增加 可赋给swicth()语句中的变量来对数值增加
     }
    }
   }
   if(DecKey)//如果减少按键没按下或弹起
  {
    DecKeyLockFlag = 0;//减少按键锁定标志位清0
    DecKeyPressDelayTime = 0;//减少按键按下延时时间清0
   }   
   else if(DecKeyLockFlag)//如果减少按键锁定标志位置1 即减少按键按下
  {
    DecKeyPressDelayTime++;//减少按键按下延时时间自加
    if(DecKeyPressDelayTime > KeyPressDeshakeTime)//如果减少按键按下延时时间大于按键按下消抖时间
   {
     DecKeyPressDelayTime = 0;//减少按键按下延时时间清0
     if(!AddKey)//如果增加按键按下
    {
      DecKeyLockFlag = 1;//减少按键锁定标志位置1
      KeyNumber = 4;//按键键值置4 此处是组合按键 即增加按键先按下不松+减少按键后按下 可赋给swicth()语句中的变量来控制其他功能
     }
     else//如果减少按键按下
    {
      DecKeyLockFlag = 1;//减少按键锁定标志位置1
      KeyNumber = 3;//按键键值置3 此处是单击减少 可赋给swicth()语句中的变量来对数值减少
     }
    }
   }
  }

你可能感兴趣的:(单片机,c语言)