参考江协科技的定时器实现非阻塞式按键程序中对按键状态判断的思路,搞了一个半阻塞式按键判断程序,挺有意思。
#include <STC8H.H>
#include "delay.h"
#include "keyx3.h"
sbit k1 = P3^2;
sbit k2 = P3^3;
sbit k3 = P3^4;
unsigned char num;
//==============================
unsigned char keynum()
{
unsigned char temp;
temp = num;
num = 0;
return temp;
}
unsigned char key_getnum()//输出与实际电平相反,有数值代表按下,0为未按下。
{
if(k1 == 0)
{
return 1;
}
if(k2 == 0)
{
return 2;
}
if(k3 == 0)
{
return 3;
}
return 0;
}
//--------------------------------------------
void key_tick()//在主函数轮循
{
static unsigned char currstate, prevstate;
delayms(20);//阻塞延时
prevstate = currstate; //当前状态传递到之前状态
currstate = key_getnum(); //按键值传递到当前状态
if(currstate != 0 && prevstate == 0)
{
num = currstate;
}
} |