按键输入消抖

 按键输入是人机对话不可缺少的一部分,对于消抖设计,一种是软件消抖,一种是硬件消抖。但在单片机电路设计中,采用电容消抖才是最佳的选择,其次才是定时器消抖

1、按键输入采用软件消抖

1)、通过定时器方式定时读取按键输入

根据固定的采集周期,通常为10ms,需要读两次,若前后两次均相同,则认为按键被按下。需要占用CPU的定时器,优点:不占用CPU执行时间,程序执行速度快。缺点:需要一个全局变量Key来辅助完成。

定时器中断程序:

Key=(u8)(Key<<1);

if(KeyPin=0)   Key=(u8)(Key|0x01);  //将key的最低位置1

else Key=(u8)(Key&0xFE); //将key的最低位置0

按键读取程序

if( (key&0x03) ==0x03 ) 按键被按下

else 无按键被按下

2)、完全采用软件延时,每隔10ms周期采集一次,需要读两次,若前后两次均相同,则认为按键被按下。缺点:占用CPU执行时间,影响程序的执行速度,当有中断发送时,读取按键的时间变长,不适合用于中断频繁的程序中。

if(KeyPin=0)

{

   delay_ms(10);

  if(KeyPin=0)//确认有键按下

  {

  }

}

2、按键输入采用硬件消抖

1)、电容消抖

注意:KEY_UP,KEY_Left,KEY_OK连接到CPU引脚。 

 采用定时器轮询读取

先置SetCOL1=0,SetCOL2=0,SetCOL3=0,SetCOL4=0,延时10ms让电容完成放电,然后执行 读ReadROW1,ReadROW2,ReadROW3,ReadROW4,如果出现低电平,则记录ROW的值为x;没有出现低电平,表示无按键按下。

当SetCOL1=1,SetCOL2=0,SetCOL3=0,SetCOL4=0时,延时10ms让电容完成充电,然后执行 读ReadROW1,ReadROW2,ReadROW3,ReadROW4,如果全部为高电平,则记录COL的值为y=1,表示读到按键所在的列值;

同理

当SetCOL1=1,SetCOL2=1,SetCOL3=0,SetCOL4=0,延时10ms让电容完成充电,然后执行 读ReadROW1,ReadROW2,ReadROW3,ReadROW4,如果全部为高电平,则记录COL的值为y=2,表示读到按键所在的列值;

当SetCOL1=1,SetCOL2=1,SetCOL3=1,SetCOL4=0,延时10ms让电容完成充电,然后执行 读ReadROW1,ReadROW2,ReadROW3,ReadROW4,如果全部为高电平,则记录COL的值为y=3,表示读到按键所在的列值;

当SetCOL1=1,SetCOL2=1,SetCOL3=1,SetCOL4=1时延时10ms让电容完成充电,然后执行 读ReadROW1,ReadROW2,ReadROW3,ReadROW4,如果全部为高电平,则记录COL的值为y=4,表示读到按键所在的列值;

if(x=1 && y==1) SW1被按下;

if(x=1 && y==2) SW2被按下;

if(x=1 && y==3) SW3被按下;

if(x=1 && y==4) SW4被按下;

等等,按照坐标去决定哪个按键被按下。

 2)、专用芯片消抖

在有很多按钮输入的情况下,使用专用芯片。缺点:增加硬件成本。

3、总结

在单片机电路设计中,采用电容消抖是最佳的选择,其次才是定时器消抖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/714453.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Android面试八股文】请你描述一下JVM的内存模型

文章目录 JVM内存模型1. 方法区(Method Area)运行时常量池(Runtime Constant Pool)2. 堆(Heap)3. 栈(Stack)4. 本地方法栈(Native Method Stack)5. 程序计数器(Program Counter Register)6. 直接内存(Direct Memory)JVM内存溢出的情况Java的口号是: “Write onc…

生产者消费者模型的同步与互斥:C++代码实现

文章目录 一、引言二、生产者消费者模型概述1、基本概念和核心思想2、生产者消费者模型的优点 三、消费者和生产者之间的同步与互斥四、代码实现1、事前准备2、环形队列的实现3、阻塞队列的实现4、两种实现方式的区别 一、引言 在现代计算机系统中&#xff0c;很多任务需要同时…

稀疏矩阵是什么 如何求

稀疏矩阵是一种特殊类型的矩阵&#xff0c;其中大多数元素都是零。由于稀疏矩阵中非零元素的数量远少于零元素&#xff0c;因此可以使用特定的数据结构和算法来高效地存储和处理它们&#xff0c;从而节省存储空间和计算时间。 RowPtr 数组中的每个元素表示对应行的第一个非零元…

FreeRTOS队列(queue)

队列(queue)可以用于"任务到任务"、 "任务到中断"、 "中断到任务"直接传输信息。 1、队列的特性 1、1常规操作 队列的简化操如下图所示&#xff0c;从此图可知&#xff1a; 队列中可以包含若干数据&#xff1a;队列中有若干项&#xff0c;这…

PostgreSql中使用to_char函数、date()函数可能会导致索引无法充分利用,导致查询速度无法提升

今天在处理接口请求速度慢的问题&#xff0c;惊奇的发现加了索引&#xff0c;但还是请求很忙。由于card_stop_info表有300w条数据&#xff0c;这时候关联查询非常慢&#xff0c;于是我加上匹配项索引&#xff0c;但是发现依然没有改变速度。。这时候去搜了一下才知道pgsql的to_…

javaweb 期末复习

1. JDBC数据库连接的实现逻辑与步骤以及JDBC连接配置&#xff08;单列模式&#xff09; public class JDBCUtil {// 这些换成自己的数据库 private static final String DB_URL "jdbc:mysql://localhost:3306/你的数据库名称";private static final String USER &q…

辛弃疾,笔墨剑影的一生

辛弃疾&#xff0c;字幼安&#xff0c;号稼轩&#xff0c;生于南宋高宗赵构绍兴十年&#xff08;公元1140年&#xff09;&#xff0c;卒于南宋宁宗赵扩嘉泰元年&#xff08;公元1207年&#xff09;&#xff0c;享年67岁。他是中国南宋时期著名的爱国词人&#xff0c;与苏轼并称…

Unity贪吃蛇改编【详细版】

Big and small greedy snakes 游戏概述 游戏亮点 通过对称的美感&#xff0c;设置两条贪吃蛇吧&#xff0c;其中一条加倍成长以及加倍减少&#xff0c;另一条正常成长以及减少&#xff0c;最终实现两条蛇对整个界面的霸占效果。 过程中不断记录两条蛇的得分情况&#xff0c…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 部门项目任务分配(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 部门项目任务分配(100分) 🌍 评测功能需要订阅专栏后私信联…

【eMTC】eMTC PBCH与LTE PBCH有什么不同

1 概述 eMTC是基于LTE演进的物联网技术&#xff0c;在R12中叫Low-Cost MTC&#xff0c;在R13中被称为LTE enhanced MTC &#xff0c;即eMTC&#xff0c;旨在基于现有的LTE载波满足物联网设备需求。eMTC基于蜂窝网络进行部署&#xff0c;支持上下行最大1Mbps的峰值速率&#xff…

lxml库在爬虫领域的贡献及应用

重头戏lxml库里面的xpath 一段代码给各位开开胃 这段代码首先导入了lxml库中的etree模块&#xff0c;然后定义了一个包含HTML内容的字符串html。接着&#xff0c;我们使用etree.HTML()函数解析这个HTML字符串&#xff0c;得到一个表示整个HTML文档的树形结构。最后&#xff0c;…

《大数据分析》期末考试整理

一、单项选择题&#xff08;1*9&#xff09; 1.大数据发展历程&#xff1a;出现阶段、热门阶段和应用阶段 P2 2.大数据影响 P3 1&#xff09;大数据对科学活动的影响 2&#xff09;大数据对思维方式的影响 3&#xff09;大数据对社会发展的影响 4&#xff09;大数…

C语言---------深入理解指针

目录 一、字符指针 二、指针数组&#xff1a; 三、数组指针&#xff1a; 1、定义&#xff1a; 2、&数组名和数组名区别&#xff1a; 3、数组指针的使用&#xff1a; 四、数组参数&#xff0c;指针参数&#xff1a; 1、一维数组传参&#xff1a; 2、二维数组传参&am…

单列集合顶层接口Collection及五类遍历方式(迭代器)

collection add方法细节&#xff1a; remove方法细节&#xff1a; contains方法细节&#xff1a; 如果集合中存储的是自定义对象, student之类的, 也想通过contains进行判断, 就必须在javaBean中重写equals方法 contains在arrayList中源代码&#xff1a;在底层调用了equals方…

对候选人得票的统计程序

一个结构体变量中可以存放一组数据&#xff08;如一个学生的学号、姓名、成绩等数据&#xff09;。如果有10个学生的数据需要参加运算&#xff0c;显然应该用数组&#xff0c;这就是结构体数组。结构体数组与以前介绍过的数值型数组不同之处在于&#xff1a;每个数组元素都是一…

认识Redis 主从同步、事务和Memcached的区别

08- 什么是 Redis 主从同步&#xff1f; Redis 的主从同步(replication)机制&#xff0c;允许 Slave 从 Master 那里&#xff0c;通过网络传输拷贝到完整的数据备份&#xff0c;从而达到主从机制。 主数据库可以进行读写操作&#xff0c;当发生写操作的时候自动将数据同步到从…

React+TS前台项目实战(十)-- 全局常用组件CopyText封装

文章目录 前言CopyText组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲项目常用复制文本组件封装&#xff0c;这个组件是一个用于拷贝文本的 React 组件&#xff0c;它提供了拷贝&#xff0c;国际化和消息提示的功能 CopyText组件 1. 功能分…

HTML表格的跨行与跨列:《红楼梦》人物与小学课表示例

在HTML中&#xff0c;表格不仅可以按常规行和列排列数据&#xff0c;还可以通过跨行&#xff08;rowspan&#xff09;和跨列&#xff08;colspan&#xff09;属性来合并单元格&#xff0c;以适应更复杂的数据展示需求。以下是跨行与跨列属性的介绍&#xff0c;以及两个示例&…

全网爆火《pvz植物大战僵尸杂交版》最新安装包,Android、Windows、ios安装包+教程!

今天阿星想和大家分享一个最近在B站上引起轰动的老游戏——《植物大战僵尸》&#xff01; 是的&#xff0c;你没听错&#xff0c;就是那个曾经让我们熬夜到天亮&#xff0c;一关接一关挑战的游戏。 让我们来聊聊&#xff0c;这款游戏怎么就突然又火了起来呢&#xff1f; 原来…

4款好用的文本扩展器!!提高工作效率!【送源码】

今天的文章中为大家带来几款好用的文本扩展器&#xff0c;帮助大家提供工作效率&#xff0c;减少重复劳动&#xff5e; Beeftext Beeftext 是一个文本扩展工具&#xff0c;可以帮助用户快速输入短语、段落或者常用的文本片段。它允许你创建自定义的缩写和对应的文本替换&…