
if(key=ReadKey())//读取按拆世余键,判断有无按键按下去,没按键按下,这里返回0值是不进入这个函数的
{
delay(x)//延时一段时间,写过循环就行了
if(!ReadKey())//在次读取按键值,实际上按下去按键是低电平(原理图一般都是这样做的)
{
return 已旅滚经松手了( 这里是高电平了返回0了)
/* 网友反映长键结束后会送出短键值,特作更改 2019.03.29 *///1,再写一个长短键判断函数,调用那个按键扫描函数
unsigned char KEY_process(void)
{
static unsigned char Old_key = 0//上次按键值
static unsigned char Key_buf = 0//按键有效保存
static unsigned char Press_CNT = 0//按键按下时间,根据调用时间间隔确定
static unsigned char bPreKeyIsLong = 0//长键有效标记变量
unsigned char New_key = 0//当前按键值
unsigned char KEY = 0//待返回的按键值
New_key 团扒= keyscan()
if(New_key == Old_key)
{
if(New_key != 0)//建议keyscan返回0的那个值改为其他值,方便这里判断
{
Key_buf = New_key
if(Press_CNT < 0xff)
{
Press_CNT ++
}
if(Press_CNT >= 100)//调用时间间隔确定 * 100为长按时间,
{
KEY = Key_buf + 100//将短键+100作长键区分
Press_CNT = 0//按键时间清0
Key_buf = 0//按键缓冲清0
bPreKeyIsLong = 1//长键有效标记
}
}
else//按键d起
{
if(Key_buf && (bPreKeyIsLong == 0) )//仅在长键无效时
{
KEY = Key_buf//将缓冲值送将返回的值
Key_buf = 0//清按键缓冲
}
Press_CNT = 0//按键d起或按其他按键,将长按时间清0
bPreKeyIsLong 塌枝昌= 0//长键有效标记清0
}
}
搭缓Old_key = New_key//将新按键赋给下一次的旧按键值
return KEY//0代表无按键
}
//2,d起不返回已确定的值,则在keyscan最后加一句判断
if((P3 & 0X0F) == 0X0F)//按键已经d起
{
keyvalue = MY_key//使按键等于一个自定义的值
}
#include<reg51.h>#define uchar unsigned char
sbit key=P1^0
sbit close=P1^1
uchar times=0
void t0isr() interrupt 1
{
TH0=(65536-50000)/256
TL0=(65536-50000)%256
times++
if(key==1)times=0
if(times>60)close=0
}
main()
{
TMOD=0x01
TH0=(65536-50000)/256
TL0=(65536-50000)%256
ET0=1
EA=1
close=1
while(1)
{
if(key==0){TR0=1times=0}
if(key==1)TR0=0
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)