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

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

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