单片机按键扫描程序状态机方法

来源:本站
导读:目前正在解读《单片机按键扫描程序状态机方法》的相关信息,《单片机按键扫描程序状态机方法》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《单片机按键扫描程序状态机方法》的详细说明。
简介:设定一个定时器中断,每隔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.

提醒:《单片机按键扫描程序状态机方法》最后刷新时间 2024-03-14 01:09:32,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《单片机按键扫描程序状态机方法》该内容的真实性请自行鉴别。