STM32高级篇—按键FIFO

2024-06-11 21:44
文章标签 stm32 高级 按键 fifo

本文主要是介绍STM32高级篇—按键FIFO,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

想成问一名非常优秀的嵌入式软件工程师,是需要掌握很多知识的。
完成STM32的基础内容的学习后,我们也进入到学习STM32高级的内容上。
本人也是一名嵌入式的初级入坑人,写的内容可能会有错误,或者不正确的地方也请大家多多指教,我们一起努力。

文章目录

  • 一、FIFO(先进先出)
    • 1.1 按键FIFO的意义
    • 1.2 FIFO的实现
  • 二、按键FIFO的实现
    • 2.1 按键FIFO的初始化
    • 2.2 按键FIFO功能的实现
    • 2.3 按键扫描功能实现

一、FIFO(先进先出)

1.1 按键FIFO的意义

通常情况下,我们再判断按键是否按下的时候,是采用中断的方式进行设计的,过多的使用中断,会导致程序实现的不稳定,因此需要设计FIFO按键模式,设计按键FIFO主要有几方面的好处:
1)可以有效地记录按键事件的发生,尤其使对按键的按下,长按,弹起等事件的发生,使用FIFO的方式实现是一种非常好的思路。
2)系统是非阻塞的,这样系统在检测到按键按下的情况下,由于机械按键抖动的原因不需要再这里等待一段事件,然后再确定按键是否按下。

1.2 FIFO的实现

FIFO的基本思想,就是先进先出,还是比较好理解的,我们以几张图为代表,就可以轻松的搞定。我们以5个字节的FIFO空间为例子。Read和Write分别表示读和写指针。
在这里插入图片描述分别按下按键,K1,K2,K3按键被按下的事件将进入FIFO当中。如下所示。这个时候写指针会根据写入的事件从而发生改变。
在这里插入图片描述
通过读指针,实现对按键事件的读写操作。
在这里插入图片描述

二、按键FIFO的实现

2.1 按键FIFO的初始化

/* 
******************************************************************************************* 
* 函 数 名: KeyFifoVar_Init 
* 功能说明: 初始化每一个按键对应的结构体
* 形    参:  无 
* 返 回 值: 无 
*******************************************************************************************
*/
static void KeyFifoVar_Init(void)
{uint8_t i;// 初始化读写指针s_tKey.Read = 0;s_tKey.Write = 0;  // 给每个按键结构体成员变量赋一组值for(i = 0; i < KEY_NUM; i++){s_tBtn[i].LongTime = KEY_LONG_TIME;s_tBtn[i].Count = KEY_FILTER_TIME;s_tBtn[i].State = 0;s_tBtn[i].RepeatCount = 0;s_tBtn[i].RepeatSpeed = 0;s_tBtn[i].LongTime = 0; }/* 如果需要单独更改某个按键的参数,可以在此单独重新赋值 */ 

这篇关于STM32高级篇—按键FIFO的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1052354

相关文章

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

mysql中的group by高级用法详解

《mysql中的groupby高级用法详解》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,本文给大家介绍mysql中的groupby... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

Python中Flask模板的使用与高级技巧详解

《Python中Flask模板的使用与高级技巧详解》在Web开发中,直接将HTML代码写在Python文件中会导致诸多问题,Flask内置了Jinja2模板引擎,完美解决了这些问题,下面我们就来看看F... 目录一、模板渲染基础1.1 为什么需要模板引擎1.2 第一个模板渲染示例1.3 模板渲染原理二、模板

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时

mysql中的group by高级用法

《mysql中的groupby高级用法》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,下面给大家介绍mysql中的groupby用法... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI