微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 一种新型的按键程序

一种新型的按键程序

时间:11-25 来源:互联网 点击:
抖动,则进入按键处理程序。
当然,不要跟我说你delay(20)那样去死循环去,真是那样的话,我衷心的建议你先放下手上所有的东西,好好的去了解一下操作系统的分时工作原理,大概知道思想就可以,不需要详细看原理,否则你永远逃不出“菜鸟”这个圈子。当然我也是菜鸟。我的意思是,真正的单片机入门,是从学会处理多任务开始的,这个也是学校程序跟公司程序的最大差别。当然,本文不是专门说这个的,所以也不献丑了。
我的主程序架构是这样的:
volatileunsignedcharIntrcnt;
voidInterruptHandle()//中断服务程序
{
Intrcnt++;//1ms中断1次,可变
}
voidmain(void)
{
SysInit();
while(1)//每20ms执行一次大循环
{
KeyRead();//将每个子程序都扫描一遍
KeyProc();
Func1();
Funt2();


while(1)
{
if(Intrcnt>20)//一直在等,直到20ms时间到
{
Intrcnt="0";
break;//返回主循环
}
}
}
}
貌似扯远了,回到我们刚才的问题,也就是怎么做按键消抖处理。我们将读按键的程序放在了主循环,也就是说,每20ms我们会执行一次KeyRead()函数来得到新的TrgCont值。好了,下面是我的消抖部分:很简单
基本架构如上,我自己比较喜欢的,一直在用。当然,和这个配合,每个子程序必须执行时间不长,更加不能死循环,一般采用有限状态机的办法来实现,具体参考其它资料咯。
懂得基本原理之后,至于怎么用就大家慢慢思考了,我想也难不到聪明的工程师们。例如还有一些处理,
怎么判断按键释放?很简单,Trg和Cont都为0则肯定已经释放了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top