大家帮忙看段按键程序,长按松手引发一次短按,不知道如何改,程序简单+有仿真!
谢谢哈有长按,短按,长按连_发。。但长按松手引发一次短按,没发现问题在哪!帮忙看下吧
点击此处下载 ourdev_573374.rar(文件大小:53K) (原文件名:key_test.rar)
/************************************************************/
//判断按键操作,确立按键标志位
/***********************************************************/
void Scan_Key(void)
{
static unsigned char count = 0; //长按计数
static bit valid = 0; //有效标志
static bit reach = 0; //长按标志
if (valid == 1) //判断有效标志
{
if (Read_Key()!=NO_KEY) //有键按下
{
Key_value=Read_Key(); //记录键值
count++; //开始计数
if (count == LONG_DELAY) //长按
{
count = REPEAT_DELAY; //长按加速
reach = 1; //长按置位
if(Key_value==KEY_SET) KeyFlg=1; //产生标志位供程序调用
else if(Key_value==KEY_UP) KeyFlg=1;
else if(Key_value==KEY_DOWN)KeyFlg=1;
else if(Key_value==KEY_ESC) KeyFlg=1;
}
}
else //3 松手,短按了
{
count = 0; //计数清零
valid = 0; //有效清零
reach = 0; //长按清零
if (reach == 0)// Sign = !Sign; //取反状态,短按松手一次,开关机一次
{
if(Key_value==KEY_SET) KeyFlg =1; //产生标志位供程序调用
else if(Key_value==KEY_UP) KeyFlg =1;
else if(Key_value==KEY_DOWN)KeyFlg =1;
else if(Key_value==KEY_ESC) KeyFlg =1;
}
}
}
else //2
{
if (Read_Key()!=NO_KEY)valid = 1; //有效置位
}
} 如下这样改动就行了
else //3 松手,短按了
{
count = 0; //计数清零
valid = 0; //有效清零
////////////////////////////////////////////////////////////
if(reach == 1)//如果先前是长按,本次不执行短按功能,直接退出
{
reach =0;
return;
}
////////////////////////////////////////////////////////////
//reach = 0; //长按清零
//if (reach == 0)// Sign = !Sign; //取反状态,短按松手一次,开关机一次
//{
if(Key_value==KEY_SET) KeyFlg =1; //产生标志位供程序调用
else if(Key_value==KEY_UP) KeyFlg =1;
else if(Key_value==KEY_DOWN)KeyFlg =1;
else if(Key_value==KEY_ESC) KeyFlg =1;
//}
} 我来学习留个记号哈 我来学习留个记号哈 我来学习留个记号哈 mark reach = 0; //长按清零
if (reach == 0)// Sign = !Sign; //取反状态,短按松手一次,开关机一次
LZ的reach置1表示长按,但这你先清零,又来判断,所以长按时会产生一次短按的了 mark, 在此留个足印。 zenghl 发表于 2021-4-7 17:04
mark, 在此留个足印。
十年前的帖子 被你挖出来了
页:
[1]