uchar mjz; // 外部可使用的键值, 相当于一个信号旗, 其他程序只需根据其值作简单判断
#define ANYS 25 // 延长多长时间连击 #define ANJG 1 // 连击间隔
void key(void) // 按键预处理程序, 每40mS处理一次 { static uchar njzbf, njzjs; // 键值备份、键值计时 uchar njz; // 键值 njz=~P1; // 读端口( 或者读变量, 并且处理为规范的键值) if(njzbf!=njz) {njzbf=njz; njzjs=0;} // 新键值, 保存到键值备份, 键值计时清0
if( njzjs==1 // 消抖
||(njz==4||njz==2)&&njzjs==ANYS // 只有特定的键值具有连击功能 ) mjz=njz; // 键值有效, 传给全局变量供其他程序使用 else mjz=0; // 键值无效, 清mjz
njzjs++; if(njzjs>ANYS) njzjs-=ANJG; // 延时时间25, 连击间隔1, 若key每40mS处理一次则延时为1S, 25次/S }
/*** 以上是一个可塑性很强的按键预处理程序 适当修改还能进行长按处理(即按键一直按下后等一会才有反应) ***/ |