历史上的今天
返回首页

历史上的今天

今天是: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.


推荐阅读

史海拾趣

德立电子(DDY)公司的发展小趣事

面对日益激烈的市场竞争,德立电子积极拥抱数字化转型。公司引进先进的生产管理系统和智能设备,实现生产过程的自动化和智能化。通过数字化改造,德立电子提高了生产效率,缩短了生产周期,降低了成本,进一步增强了市场竞争力。

Avalon Photonics公司的发展小趣事

Avalon Photonics始终坚持以客户需求为导向,不断进行产品创新。公司研发团队根据市场反馈,不断优化产品性能,同时推出了一系列定制化服务。某知名科研机构需要一种特殊规格的光子探测器,Avalon团队迅速响应,为其量身定制了解决方案。这一成功案例不仅赢得了客户的赞誉,也为公司带来了更多的定制化订单。

Hei Inc Optoelectronic Division公司的发展小趣事
控制电路需要具备良好的电磁兼容性,以避免对周边设备产生干扰或被干扰。
亿佰特(EBYTE)公司的发展小趣事

亿佰特在发展过程中,荣获了多项荣誉和奖项。公司成功入选2022年度四川省“专精特新”中小企业名单,这是对公司在细分市场专业化、企业管理精细化、产品或服务特色化、科技成果新颖化等方面的认可。同时,亿佰特还积极履行社会责任,关注环保和公益事业,展现了企业的良好形象和责任感。

以上五个故事方向涵盖了亿佰特在电子行业中的发展过程中的重要方面,希望能够帮助您了解该公司的成长历程。

CLANDELL公司的发展小趣事

在电子产品市场日益同质化的背景下,CLANDELL公司意识到技术创新的重要性。公司投入大量资源研发新型电子元件,通过优化设计和材料选择,成功推出了具有更高性能、更低能耗的电子产品。这一创新不仅提升了CLANDELL公司的市场竞争力,也为整个行业带来了技术进步的推动力。

福建国光公司的发展小趣事

随着公司规模的扩大,CLANDELL公司开始积极履行社会责任。公司不仅关注自身的经济效益,还积极参与公益事业和环保活动。同时,公司还注重员工的福利待遇和职业发展,为员工提供良好的工作环境和培训机会。这些举措不仅提升了CLANDELL公司的社会形象,也为公司的可持续发展注入了新的动力。

这五个故事只是CLANDELL公司发展过程中的一部分,它们展示了公司在电子行业中的崛起之路,也反映了公司不断追求卓越、勇于创新的精神风貌。

问答坊 | AI 解惑

arm网口通信成功利用!

各位大虾好: 小弟在坛子里发贴寻求帮助解决44B0的网口通信问题,可惜至今没有人来帮我啊 无奈之下,只能在网上down别人的程序,然后用用工具一步一步走,每一个函数都 认真的看,在小弟的不懈努力下,总算是将这个网口用起来了,虽然现在还没有 ...…

查看全部问答>

【求助】USBASP制作中遇到的问题

我用的资料是从这下载的:https://bbs.eeworld.com.cn/thread-73210-1-8.html 板子上元件排布基本上也是参照照片上的,只是想在使用时,实验板的电源就用USB的VCC,所以去掉了J2。 烧固件时,用编程器烧的,USBASP板子连接电脑后,绿灯闪烁了三下 ...…

查看全部问答>

dsp电平转换的方法介绍

最近看到些关于dsp电平转换的好资料!发上来大家看看 电平转换 1. 常用的电平转换方案 (1) 晶体管+上拉电阻法     就是一个双极型三极管或 MOSFET,C/D极接一个上拉电阻到正电源,输入电平很灵活,输出电平大致就是正电源电平。 ...…

查看全部问答>

CPLD最实用的50例设计

详细说明:CPLD实用设计50例,非常经典的CPLD设计,包含50个实际的典型应用,涉及直流电机PWM驱动,编码等内容,有了这50例,举一反三,就会了很多应用 文件列表:   CPLD实用设计50例   ................\\基于DSP+CPLD的 ...…

查看全部问答>

5.0模拟器下有没有编辑注册表的软件

如题 类似WINXP下regedit的功能。 我现在编写程序写注册表好像都对,但是读的时候有时返回错误 GetLastError为1814。 我想找个软件看看我写进去的东西对不对。 另外,我把一个键保存在HKLM下 \\\\Drivers\\\\BuiltIn\\\\XXXX目录下, 那么 ...…

查看全部问答>

明天回家了,Ooo,Ooo,Ooo。。。散分送祝福了。

   首先来一段非常俗的开场白(O(∩_∩)O哈哈哈~):2009 年是不平凡的一年。。。。。。前半年在eeworld混的很开心,后半年忙的要命,后几个月来来了也只是匆匆走过。     一年来只记得几件事。一是天天在eeworld混着,有一天 ...…

查看全部问答>

wince平台下的t9输入法

wince平台下的t9ime,包括拼音、笔画、字母、数字输入。有兴趣联系t9ime_wince@163.com.…

查看全部问答>

DIY CD-ROM 控制器 一套资料

 曾经在某个论坛收集了一些做CD-ROM控制器的资料。本来也想自己做一个。但是一直没时间   现在放到咱这个网站上。 谁有兴趣做一个看看 效果怎么样!!!   有电路图 有代码  但是没试过能不能用。 谁有空来当个小白  ...…

查看全部问答>

用STM32做音频项目,三种方案

现在用STM32做一个语音到站钟的项目,音质要求不高,就是报“一楼到了,上行”,“二楼是酒店”之类的语音,CPU上资源有PWM/DAC/IIS,通过上网查资料,网上解决的方案大体有以下三种: 1 PWM+SPI PWM模拟时钟时序,SPI传输数据,采用PCM编码 ...…

查看全部问答>