#include<reg52h>
bit KEYFlag = 1; //指示按键状态,'1'为d起态,'0'按下态
/
按键去抖
/
void KEYDelay()
{
unsigned char i = 200;
while(i--);
}
/
键翻译
/
unsigned char KEY_Tran(unsigned char Key)
{
switch(Key)
{
case 0xee: return 0; break; //根据按键编码返回对应的键值
case 0xde: return 1; break;
case 0xbe: return 2; break;
case 0x7e: return 3; break;
case 0xed: return 4; break;
case 0xdd: return 5; break;
case 0xbd: return 6; break;
case 0x7d: return 7; break;
case 0xeb: return 8; break;
case 0xdb: return 9; break;
case 0xbb: return 0;break;
case 0x7b: return 0x0b;break;
case 0xe7: return 0x0c;break;
case 0xd7: return 0x0d;break;
case 0xb7: return 0x0e;break;
case 0x77: return 0x0f;break;
default: break;
}
}
/
键扫描
/
unsigned char KEY_Scan()
{
unsigned char KEY_Value;
P2 = 0x0f;
KEY_Value = P2;
P2 = 0xf0;
KEY_Value |= P2;
return KEY_Value;
}
/
查键
/
void KEY()
{
static bit KEYFlag = 1;
static unsigned char KEYCode;
if(KEYFlag)
{
if(KEY_Scan()!=0xff)
{
KEYCode = KEY_Scan();
KEYDelay();//有按键按下延时去抖
if(KEYCode==KEY_Scan())
{
// 键号 = KEY_Tran(KEYCode);
// 此处添加功能模块
KEYFlag = 0;
}
}
}
else
{
if(KEY_Scan()==0xff)
{
KEYDelay();//按键d起延时去抖
if(KEY_Scan()==0xff)
KEYFlag = 1;
}
}
}
1、如果延时在程序中比较常用,而前后台程序在延时的过程中是无法被相应的,除非便随有中断。所以建议使用嵌入式 *** 作系统,则可满足要求。
2、IIC的控制不一定非要串口,只需要2个单片机的I/O,在程序中按照IIC的控制时序和控制字,就可以进行读写。首先要读24C02的datasheet,弄明白其控制时序后,可随意 *** 作。
我推荐一个和按键精灵类似的软件AutoHotKey,要实现你的功能它的代码可以这么写。
w::就代表按w后会执行什么
Send w代表按一下w
Sleep 500代表停500毫秒也就是半秒
Return代表执行动作完了
所以完整的代码就是下面五行
w::
Send w
Sleep 500
Send e
Return
做了一个延时事件,程序如下:
自定义事件 bool dalay(long start,long num1,bool yesno1)
//
// start为初始值,由外部变量赋值,可用做事件的执行条件
// num1为终止值,由num1-start所得差值为延时时间值。
// yesno1为循环条件,如果为1,则延时继续循环,如果为0,则停止
// value 为返回值,为事件触发条件,当value=1时,执行事件。
//
if(num1>start)
start=start+1;
bool value;
if(start==num1)
value=1;
if(yesno1==1 && start>num1)
{
value=0;start=0;
}
if(start>=num1 && yesno1==0)
value=1;
message=strfromint(start,10);
return value;
以上程序本人测试通过,请参考。
以上就是关于单片机消抖延时程序全部的内容,包括:单片机消抖延时程序、程序中延时子程序比较长,怎样确保按键能够得到及时响应、按键精灵如何实现按一个键延时触发另一个键等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)