#include <stdio.h>
#include <cms.h>
#define KEY1 RB5;
#define key_state_0 0
#define key_state_1 1
#define key_state_2 2
int Key_Number = 0;
unsigned char read_key(void)
{
static char key_state = 0; //按键的状态
unsigned char key_press; //按键是否被按下
unsigned char key_return = 0; //按键返回值
key_press = KEY1; //读取按键值
switch (key_state)
{
//按键初始态
case key_state_0:
if (key_press)
key_state = key_state_1;// 按键被按下,状态转换到按键确认态1
break;
//按键确认态
case key_state_1:
if (key_press)
{
key_return = 1;// 按键仍按下,按键确认输出为“1”
key_state = key_state_2;// 状态转换到按键释放态
}
else
key_state = key_state_0; // 按键已抬起,转换到按键初始态
break;
case key_state_2:
if (!key_press)
key_state = key_state_0;//按键已释放,转换到按键初始
break;
}
return key_return;
}
//main调用
int main()
{
while(1)
{
Key_Number=read_key();
Delay_nms(10);
if(Key_Number==1)
{
wonf = 1;//执行操作
}
else
{
wonf = 0;//执行操作
}
}
}
二
uchar key_flag = 0; //首先定义按键的标志位,并初始化为0
void key_scan() //按键扫描函数
{
if((KEY1 == 1) && (!key_flag)) //如果有键按下,则条件成立(有键按下,则s4为0;而 !key_flag为1)
{
Delay_nms(10); //延时消抖
key_flag = 1; //把标志位置为1
if(KEY1 == 1) //如果确定有键按下
{
wonf=1; //进行事件处理
}
}
else if(KEY1 == 0) //未按下按键
{
key_flag = 0;
}
}