STM32学习日志——按键的单击、双击、长按

发布者:SereneSunset最新更新时间:2023-01-13 来源: zhihu关键字:STM32  按键  单击  双击  长按 手机看文章 扫描二维码
随时随地手机看文章

前两天去面试的时候,面试官看了我的业余小设计,问了个问题,怎么实现按键的双击,当时的设计只有单击和长按的功能,当时没回答出来。回来后看了下资料,整理并尝试了一下。


大概的思路是这样的,单击与长按的区别在于按下后弹起时间的长短,如果按键一直按着,且大于一个时间值,判断为长按;

否则为非长按,那么就要继续判断是单击还是双击,区别在于弹起后的一个较短时间内是否再次被按下,如果是,则为双击,反之则为单击。


不知道大佬们有没有更好的办法,可以指导下吗?

主函数


关键字:STM32  按键  单击  双击  长按 引用地址:STM32学习日志——按键的单击、双击、长按

上一篇:STM32学习日志——主函数框架:时间轮
下一篇:STM32学习日志——基于NT35510驱动芯片的LCD屏显示

推荐阅读最新更新时间:2024-11-08 10:13

STM32学习—如何选择各个电路部分的主要芯片
电路设计的基本过程一般是这样的:需求分析——元件选型——原理图设计——PCB设计——焊接调试。 ▼需求分析: 在这里,主要是确定小车需要哪些模块、外设或接口。首先,STM32最小系统是必须的,这是小车控制的核心。然后小车的两个轮子需要两个H桥驱动和编码器接口。需要陀螺仪感知小车的姿态(包括倾角,转向角,角速度等)。需要一些调试和指示用的外设(蜂鸣器,LED等)。需要电源电路为系统供电。需要电池电压采集电路来实时采集电池电压,做低压报警,防止电池过放。需要下载接口和调试用的串口。基本就是根据自己想要实现功能,然后确定需要那些部分的电路。 ▼元件选型: 为需要的各个部分电路选择元件,一般来说,主要是选择何种型号、什么封装的芯片
[单片机]
<font color='red'>STM32</font>学习—如何选择各个电路部分的主要芯片
编写STM32项目遇到的报错
1.Undefined symbol SystemInit(未定义符号SystemInit) 新建项目并编译后遇到以下的错误: ..OutputLED.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f429_439xx.o). 错误分析:从括号里面的内容可以知道:这个错误在 startup_stm32f0xx.o 这个文件里面被提及到,所以我们只需要在工程里面找到对应的.s或者.c文件即可(此错误对应的文件为startup_stm32f429_439xx.s)。 这个文件是STM32的启动文件,在此文件中可以找
[单片机]
编写<font color='red'>STM32</font>项目遇到的报错
STM32学习笔记7——浮点数四舍五入
C 中浮点转换为整型是截断的,直接将后面的小数去掉,而不是四舍五入。 如:uint16_t(12.89)=12,而不是13。 项目中写了个小函数,将浮点数输入后,直接用7段译码管显示,用上述方法转换为整型后发现有显示误差。解决方法如下: 1、定义一个四舍五入小数的宏 #define ROUND_TO_UINT16(x) ((uint16_t)(x)+0.5) (x)? ((uint16_t)(x)):((uint16_t)(x)+1) //将浮点数x四舍五入为uint16_t 2、使用例程 下面即可将数据四舍五入为整型数 disp_num = ROUND_TO_UINT16(num); ROUND_TO
[单片机]
STM32单片机的学习经验
随便写写,关于stm32 最近在学习stm32,写点东西,虽然简单,但都是原创啊 开发板是前辈画的,好像是用来测试一个3G功能的,不过对于我来说太远;我要来了3个,自己焊了一个最小系统,好在公司资源还是不错的,器件芯片有,还可以问问前辈--对公司还是比较满意的,虽然工资少了点,但学东西第一位O( _ )O~。 最开始当然是建工程了,这个真不太会,前前后后竟用了一周(时间真长,别见笑啊),上网查资料, 问前辈,自己琢磨。。。总算搞定,然后从GPIO开始学,开始还真没什么头绪(虽然在大学学点51,但完全没有真正应用,顶多是跑马灯实验),开始纠结是从寄存器开始学还是从库函数开始学,后来看到一句 用库函数入门,用寄存器提高 于是
[单片机]
MSP430单片机按键中断程序
#include IRRemote.h void main(void) { //初始化 Initialize(); //死循环 while(1) { unsigned int transmit; //初始化变量 transmit = ENDTRANSMIT; //等待按键按下 SetForPress(); //进入LPM4模式 LPM4; Debounce(); //扫描键盘 KeyS CAN (); //键盘处理 KeyLookup(); if (Error
[单片机]
stm32笔记:点亮一个led (精简版)
仅包含启动文件 STM32F10x.s C代码 #define GPIOA_CRL (*(volatile unsigned long *)(0x40000000+0x10000+0x0800+0x00)) #define GPIOA_CRH (*(volatile unsigned long *)(0x40000000+0x10000+0x0800+0x04)) #define GPIOA_IDR (*(volatile unsigned long *)(0x40000000+0x10000+0x0800+0x08)) #define GPIOA_ODR (*(volatile unsigned
[单片机]
<font color='red'>stm32</font>笔记:点亮一个led (精简版)
STM32之CAN---工作/测试模式浅析
1 bxCAN工作模式 bxCAN有3个主要的工作模式:初始化模式、正常模式和睡眠模式。 在硬件复位后,bxCAN工作在睡眠模式以节省电能,同时CANTX引脚的内部上拉电阻被激活。软件通过对CAN_MCR寄存器的INRQ或SLEEP位置’1’,可以请求bxCAN进入初始化或睡眠模式。一旦进入了初始化或睡眠模式,bxCAN就对CAN_MSR寄存器的INAK或SLAK位置’1’来进行确认,同时内部上拉电阻被禁用。 当INAK和SLAK位都为’0’时,bxCAN就处于正常模式。在进入正常模式前,bxCAN必须跟CAN总线取得同步;为取得同步,bxCAN要等待CAN总线达到空闲状态,即在CANRX引脚上监测到11个连续的隐性位
[单片机]
<font color='red'>STM32</font>之CAN---工作/测试模式浅析
STM32 定时器中断配置心得【自用】
1.IO配置 略 2.TIM配置 void TIM2_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period =359999; TIM_TimeBaseStructure.TIM_Prescaler = 99; TIM_TimeBas
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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