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

发布者:乐基儿vos最新更新时间: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.


关键字:单片机  按键扫描  状态机 引用地址:单片机按键扫描程序状态机方法

上一篇:基于STM32W108的无线程控微加热平台设计
下一篇:STM32驱动W24Q16

推荐阅读最新更新时间:2024-11-12 02:24

MCU多元再进化 强化运算及各种介面延伸字号
微控制器(MCU)近年在智慧系统、物联网需求提高,成为电子产业中,再次翻红的产品,怎么说翻红。过去的MCU功能较简单,已大量应用在传统电子产品如冰箱、电视等家电到自动化产品等,如今在网路影响及数位资讯云端化,传统应用方向不再单一,还多了分享,因此MCU随之进化,强化运算及各种介面的延伸,打造出符合市场需求的产品,让MCU需求不断提高。 意法半导体大中华暨南亚区产品行销经理杨正廉说,MCU市场受M2M(MachinetoMachine)加持,近年出货表现确实不俗,但对整体MCU市场,则是一场厂商生存战的开始,主因推出低阶MCU的业者,将面临技术提升及价格竞争,反观谁拥有技术及整体多元的产品支援才符合市场期待。以意法半导体为
[单片机]
AVR单片机相关
AVR单片机的型号标识解析   1. 型号紧跟的字母,表示电压工作范围。带 V :1.8-5.5V;若缺省,不带 V :2.7-5.5V。   例:ATmega48-20AU,不带 V 表示工作电压为2.7-5.5V。   2. 后缀的数字部分,表示支持的最高系统时钟。   例:ATmega48-20AU, 20 表示可支持最高为20MHZ的系统时钟。   3. 后缀第一(第二)个字母,表示封装。 P :DIP封装, A :TQFP封装, M :MLF封装。   例:ATmega48-20AU, A 表示TQFP封装。   4. 后缀最后一个字母,表示应用级别。 C :商业级, I :工业级(有铅)、 U 工业级(无铅)。   例:
[单片机]
基于单片机的12位PWM DAC的设计
.前言 在用单片机制作的变送器类和控制器类的仪表中,需要输出1—5V或4—20mA的直流信号的时候,通常采用专用的D/A芯片,一般是每路一片。当输出信号的精度较高时,D/A芯片的位数也将随之增加。在工业仪表中,通常增加到12位。12位D/A的价格目前比单片机的价格要高得多,占用的接口线数量也多。尤其是在需隔离的场合时,所需的光电耦合器数量与接口线相当,造成元器件数量大批增加,使体积和造价随之升高。如果在单片机控制的仪表里用PWM方式完成D/A输出,将会使成本降低到12位D/A芯片的十分之一左右。我们在S系列流量仪表中采用了这种方式,使用效果非常理想。下面介绍一下PWM方式D/A的构成原理。 .电路原理 一般12位D/A转换器
[单片机]
基于<font color='red'>单片机</font>的12位PWM DAC的设计
MSP430 F5529 单片机 时钟 闹钟 倒计时 OLED
为了便于开发,我做了一块扩展板子: https://blog.csdn.net/x1131230123/article/details/108772807 扩展板有一些常用器件,这样开发MSP430 F5529程序的时候,就不用杜邦线连接了。当然也可以选择杜邦线连接器件,效果都一样。 功能要求: 1.在oled屏上面显示出年月日,小时,分钟,秒,可以通过按键来调整时间 2.一个闹钟功能,通过按键设置闹钟的时间,到点了需要蜂鸣器响和LED闪烁 3.一个倒计时,跟闹钟差不多,也是通过按键设置时间,到时间了LED闪烁 硬件上需求: 1 蜂鸣器一个,有源蜂鸣器和无源蜂鸣器都可以。闹钟到了或者倒计时到了都需要响。 连接: 蜂鸣器
[单片机]
MSP430 F5529 <font color='red'>单片机</font> 时钟 闹钟 倒计时 OLED
基于AVR单片机的mega16内部EEPROM操作C语言程序设计
#include iom16v.h #include macros.h #include math.h #define uchar unsigned char #define uint unsigned int uchar const seg_data ={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff}; //0~9和熄灭符的段码表 uchar const bit_tab ={0xbf,0x7f}; //第7、8只数码管位选表 uchar disp_buf ={0,0}; //定义2个显示缓冲单元 uchar val; #define beep_0 (PORTD=
[单片机]
STC8单片机OLED通过SPI硬件中断方式驱动(下)
到这里基本就写完了,我们来看看修改例程中的代码,先看看中景园给的 void OLED_WR_Byte(uint8_t dat, uint8_t cmd) { register uint8_t i = 0; OLED_DC = cmd; for(;i 8;i++) { OLED_SCL_Clr(); if(dat&0x80) { OLED_SDA_Set(); } else { OLED_SDA_Clr(); } OLED_SCL_Set(); dat =1; } OLED_CS_Set(); OLED_DC_Set
[单片机]
STM32单片机GPIO寄存器
每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH)分别控制每个端口的高八位和低八位,如果IO口是0-7号的话,则写CRL寄存器,如果IO口是8-15号的话,则写CRH寄存器,两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR)一个是只读作输入数据寄存器,一个是只写作输出寄存器,一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。常用的IO端口寄存器只有四个:CRH,CRL,IDR,ODR。 数据手册中列出的每个I/O端口的特定硬件特征, GPIO端口的每个位可以由软件分别配置成多种模式。每个I/
[单片机]
PIC单片机片内EEPROM运用方法
/*============================================================================= 访问PIC16F877A片内EEPROM,运行程序: Begin Test - LED0亮, EEPROM Test OK- LED7亮, Write&Read OK - LED0/2/4/6亮。 =============================================================================*/ //////////////////////////////////////////////
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved