📄 key.c
字号:
#include "config.h"
#define KEY_ON 0
#define KEY_OFF 1
#define KEY1 (1<<0)
#define KEY2 (1<<1)
#define KEY3 (1<<2)
#define NOKEY (~(KEY1|KEY2|KEY3))
uint8 KeyCode; //按键码,确认按下以后赋值
uint8 KeyStatus; //按键扫描状态机变量
uint8 KeyDone; //的确有键按下标志位,1为有键
uint8 KeyDownTime; //按下计时
uint8 KeyReleaseTime; //释放计时
void KeyScan(void);
void KeyProcess(void);
void KeyInit(void);
void KeyInit(void)
{
KeyCode = 0;
KeyStatus = 0;
KeyDone = 0;
KeyDownTime = 0;
KeyReleaseTime = 0;
}
void KeyScan(void)
{
uint8 temp;
temp = P2;
temp = (temp & 0x07);
switch(KeyStatus)
{
case 0: //等待是否有按键按下,如果有键按下就进入状态1
if( temp != 7 )
{
KeyStatus = 1;
}
break;
case 1: //进行延时消抖,进入状态2再次判断
if( KeyDownTime > 2)
{
KeyStatus = 2;
KeyDownTime = 0;
}
break;
case 2: //若检测到确实是按下了,读取键值,进入状态3;否则到状态0等待
if( temp != (KEY1|KEY2|KEY3) )
{
KeyCode = (KEY1|KEY2|KEY3) - temp;
KeyStatus = 3;
KeyDone = 1;
}
else
{
KeyStatus = 0;
}
break;
case 3: //若按键释放,进入状态4
if( temp == 0x07 )
{
KeyStatus = 4;
}
break;
case 4: //延时消抖,进入状态5
if( KeyReleaseTime > 2 )
{
KeyStatus = 5;
KeyReleaseTime = 0;
}
break;
case 5: //确实是按键释放了,进入状态0再次等待按键的按下;否则继续在状态4等待释放
if( temp == 0x07 )
{
KeyStatus = 0;
}
else
{
KeyStatus = 4;
}
break;
default:
break;
}
}
void KeyProcess(void)
{
KeyScan();
if( KeyDone != 0 )
{ //判断是否有键按下
KeyDone = 0;
switch( KeyCode )
{
case KEY1: //+键,下翻页功能
switch( DisValue_Status )
{
case DIS00_HMC: //显示时分秒
DisValue_Status = DIS00_YMD; //+ 切换到年月日
break;
case DIS00_YMD:
DisValue_Status = DIS00_HMC;
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
default:
break;
}
break;
case KEY2:
break;
case KEY3:
break;
case (KEY1|KEY2):
break;
case (KEY2|KEY3):
break;
case (KEY1|KEY3):
break;
case (KEY1|KEY2|KEY3):
break;
default:
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -