如何增加按键扫描,同样不需要用到Delay,而按键消抖又不能省略,请看下面的例子
前面例子中函数不变
主函数里面增加一句read_key();
void main(void)
{
uchar temp=15;
init(); //初始化
while(1)
{
if(flag)
{
flag=0;
display(); //显示函数
read_key();
}
}
}
char read_key(void)
{
static char key_state = 0;
char key_press;
key_press = P1; // 读按键 I/O 电平
key_press &=0x01; //假设我们要读P1的第一个I/O
switch (key_state)
{
case 0: // 按键初始态
if (key_press==0) key_state = 1; // 键被按下,状态转换到键确认态
break;
case 1: // 按键确认态
if (key_press==0)
{
key_state = 2; // 状态转换到键释放态
//....................................
//在这里写你按键按下要执行的代码
//例:
date[0]++;
date[1]+=2;
date[2]+=3;
}
else
key_state = 0; // 按键已抬起,转换到按键初始态
break;
case key_state_2:
if (key_press) key_state = 0; //按键已释放,转换到按键初始态
break;
}
}
这样就轻松实现了按键扫描操作。
|