问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

51单片机最有效的按键处理程序

发布网友 发布时间:2022-04-23 14:54

我来回答

1个回答

热心网友 时间:2023-10-06 11:10

只有更好,没有最好。只有更有效,没有最有效。适合当前项目需要的程序就是合适的程序。针对51单片机,没有一个按键程序是包打天下的。通常的按键扫描程序大致为:
扫描按键 ==>按键去抖(如果去抖过程中按键值变化了就去抖失败,重新扫描按键) ==>得到有效键 ==》可能需要针对长按或重复按键要求做不同处理 ==>等待按键松开追问"可能需要针对长按或重复按键要求做不同处理",这个处理不太懂,能提供参考程序么?

追答KEY_EVENT AdcKeyEventGet()

{
static BYTE PreKeyIndex = -1;
BYTEKeyIndex;
KEY_EVENTevent = IN_KEY_NONE;
if (!IsTimeOut(&AdcKeyScanTimer))
{
return IN_KEY_NONE;
}
TimeOutSet(&AdcKeyScanTimer, ADC_KEY_SCAN_TIME);
KeyIndex = GetAdcKeyIndex();
switch(AdcKeyState)
{
case ADC_KEY_STATE_IDLE:
if(KeyIndex == -1)
{
return IN_KEY_NONE;
}
PreKeyIndex = KeyIndex;
TimeOutSet(&AdcKeyWaitTimer, ADC_KEY_JTTER_TIME);
AdcKeyState = ADC_KEY_STATE_JITTER;

case ADC_KEY_STATE_JITTER:
if(PreKeyIndex != KeyIndex)
{
AdcKeyState = ADC_KEY_STATE_IDLE;

}
else if(IsTimeOut(&AdcKeyWaitTimer))
{
TimeOutSet(&AdcKeyWaitTimer, ADC_KEY_CP_TIME);

AdcKeyState = ADC_KEY_STATE_PRESS_DOWN;
}
break;
case ADC_KEY_STATE_PRESS_DOWN:
if(PreKeyIndex != KeyIndex)
{
AdcKeyState = ADC_KEY_STATE_IDLE;

return AdcKeyEvent[PreKeyIndex][0];
}
else if(IsTimeOut(&AdcKeyWaitTimer))
{
//DBG(("ADC KEY CPS(PreKeyIndex:%bd)!\n", PreKeyIndex));
TimeOutSet(&AdcKeyWaitTimer, ADC_KEY_CPH_TIME);
AdcKeyState = ADC_KEY_STATE_CP;
return AdcKeyEvent[PreKeyIndex][1];
}
break;
case ADC_KEY_STATE_CP:
if(PreKeyIndex != KeyIndex)
{
AdcKeyState = ADC_KEY_STATE_IDLE;

return AdcKeyEvent[PreKeyIndex][3];
}
else if(IsTimeOut(&AdcKeyWaitTimer))
{
//DBG(("ADC KEY CPH!\n"));
TimeOutSet(&AdcKeyWaitTimer, ADC_KEY_CPH_TIME);
return AdcKeyEvent[PreKeyIndex][2];
}
break;
default:
AdcKeyState = ADC_KEY_STATE_IDLE;
break;
}
return IN_KEY_NONE;
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
华为手机删除qq聊天记录还能恢复吗 曙光英雄怎么登录以前的账号,曙光英雄曙光英雄客户端在哪里下载? 曙光英雄怎么注销账号 详细注销方法分享 曙光英雄怎么注销账号-账号注销方法介绍 六大茶类之青茶知识大科普 六大茶类香气类型之青茶(乌龙茶)茶香 六大茶类之青茶 简单认识六大茶类之青茶 一文带你全面认识六大茶类中的青茶,速来围观 识茶笔记:六大茶类之青茶篇 8月份吃雪莲果好吃吗 tcl xqb55f101t怎么设置洗衣按键流程 51单片机汇编语言按键如何编程? 雪莲果是什么季节的水果 一年四季都有吗 单片机按键延时,使用定时计数器消除按键延时,求操作流程 雪莲果一年四季都能吃吗 键盘按键程序 雪莲果是在什么季节成熟的 VB编写按键程序. 雪莲果什么时候吃? 单片机应用中,独立式按键操作的流程是什么? 雪莲果什么时候吃最好 雪莲果是那的特产,什么季节吃最好呀 雪莲果是什么季节的水果 雪莲果一年四季都有吗 腾讯视频vip帮助中心在哪个位置 暴风TV互联网电视怎么看卫视台和地方台 腾讯视频的卫视节目在那 腾讯视频强势接档在页面哪个位置 防盗门怎样锁外边有钥匙也不能打开 腾讯视频在哪里? 家里的门锁住了,有钥匙也打不开,怎么办求解 什么季节吃雪莲果好值 如何用易语言制作游戏最小化后 后台按键程序。 雪莲果什么时候吃最好? 单片机C语言两个数码管按键计数程序 雪莲果含糖量是多少? 如何用易语言写网络游戏最小化后 后台按键程序? 雪莲果是水果还是蔬菜,怎么吃? 怎样用程序制作软键盘 雪莲果什么时候吃最好?求解。 求51单片机中断式独立按键的程序流程图,完整一点谢谢。 雪莲果可以天天吃吗,没次吃多少合适,吃多了对身体 VB一个简单的键盘按键响应程序 雪莲果的热量?每天都吃可以吗? 关于单片机温度控制系统C语言程序中的按键设置程序,请求详细的介绍下按键的输入过程。while(1) { if(KeyFl win7下怎么记录键盘按键过程,就是按过哪些按键 矩阵式键盘工作流程主要包括 三个步骤 单片机键盘自检程序 51单片机的4*4键盘程序 按键控制led灯的程序 单片机5个IO口扫描25个按键的程序,怎么只能扫描到下面5个键