历史上的今天
今天是:2025年07月09日(星期三)
2021年07月09日 | 单片机按键扫描程序状态机方法
2021-07-09 来源:eefocus
简介:设定一个定时器中断,每隔10MS 扫描一次按键。,读取值。。如果多个按键,又有多余的定时器,可以试试这个方法,效率高了。搞STM32 刚好。 cool.
#define key_input PIND.7 // 按键输入口
#define key_state_0 0
#define key_state_1 1
#define key_state_2 2
char read_key(void)
{
static char key_state = 0;
char key_press, key_return = 0;
key_press = key_input; // 读按键I/O电平
switch (key_state)
{
case key_state_0: // 按键初始态
if (!key_press) key_state = key_state_1; // 键被按下,状态转换到键确认态
break;
case key_state_1: // 按键确认态
if (!key_press)
{
key_return = 1; // 按键仍按下,按键确认输出为“1”
key_state = key_state_2; // 状态转换到键释放态
}
else
key_state = key_state_0; // 按键已抬起,转换到按键初始态
break;
case key_state_2:
if (key_press) key_state = key_state_0; //按键已释放,转换到按键初始态
break;
}
return key_return;
}
另外一个原则就是设计的中断服务函数执行时间应该尽量的短。这样假如系统中使用多个中断的话,就是不采用中断嵌套的方式,也能够保证系统能够及时响应各个中断的请求。
所以我喜欢在定时中断中只使用一个标志变量,这样中断服务函数执行时间是最快的,就不会阻塞其它中断的及时响应,而在主程序中判断标志变量,然后再去扫描按键。尽管此时扫描的间隔已经不是严格意义上的10ms,或多或少都有一些延误,而且延误也是不确定的,但都不会影响按键扫描的正确性(一个按键的过程至少在300ms以上)。
设定一个定时器中断,每隔10MS 扫描一次按键。,读取值。。如果多个按键,又有多余的定时器,可以试试这个方法,效率高了。搞STM32 刚好。 cool.
下一篇:STM32驱动W24Q16
史海拾趣
|
各位大虾好: 小弟在坛子里发贴寻求帮助解决44B0的网口通信问题,可惜至今没有人来帮我啊 无奈之下,只能在网上down别人的程序,然后用用工具一步一步走,每一个函数都 认真的看,在小弟的不懈努力下,总算是将这个网口用起来了,虽然现在还没有 ...… 查看全部问答> |
|
我用的资料是从这下载的:https://bbs.eeworld.com.cn/thread-73210-1-8.html 板子上元件排布基本上也是参照照片上的,只是想在使用时,实验板的电源就用USB的VCC,所以去掉了J2。 烧固件时,用编程器烧的,USBASP板子连接电脑后,绿灯闪烁了三下 ...… 查看全部问答> |
|
最近看到些关于dsp电平转换的好资料!发上来大家看看 电平转换 1. 常用的电平转换方案 (1) 晶体管+上拉电阻法 就是一个双极型三极管或 MOSFET,C/D极接一个上拉电阻到正电源,输入电平很灵活,输出电平大致就是正电源电平。 ...… 查看全部问答> |
|
详细说明:CPLD实用设计50例,非常经典的CPLD设计,包含50个实际的典型应用,涉及直流电机PWM驱动,编码等内容,有了这50例,举一反三,就会了很多应用 文件列表: CPLD实用设计50例 ................\\基于DSP+CPLD的 ...… 查看全部问答> |
|
如题 类似WINXP下regedit的功能。 我现在编写程序写注册表好像都对,但是读的时候有时返回错误 GetLastError为1814。 我想找个软件看看我写进去的东西对不对。 另外,我把一个键保存在HKLM下 \\\\Drivers\\\\BuiltIn\\\\XXXX目录下, 那么 ...… 查看全部问答> |
|
首先来一段非常俗的开场白(O(∩_∩)O哈哈哈~):2009 年是不平凡的一年。。。。。。前半年在eeworld混的很开心,后半年忙的要命,后几个月来来了也只是匆匆走过。 一年来只记得几件事。一是天天在eeworld混着,有一天 ...… 查看全部问答> |
|
曾经在某个论坛收集了一些做CD-ROM控制器的资料。本来也想自己做一个。但是一直没时间 现在放到咱这个网站上。 谁有兴趣做一个看看 效果怎么样!!! 有电路图 有代码 但是没试过能不能用。 谁有空来当个小白 ...… 查看全部问答> |
|
现在用STM32做一个语音到站钟的项目,音质要求不高,就是报“一楼到了,上行”,“二楼是酒店”之类的语音,CPU上资源有PWM/DAC/IIS,通过上网查资料,网上解决的方案大体有以下三种: 1 PWM+SPI PWM模拟时钟时序,SPI传输数据,采用PCM编码 ...… 查看全部问答> |




