【嵌入式底层知识修炼】按键和LED共用IO口的分时复用扫描方法

VIP【嵌入式底层知识修炼】按键和LED共用IO口的分时复用扫描方法
文章目录01 - PCB原理图例程02 - 分时复用的注意项和设计2.1 - 注意项2.2 - 设计03 - 代码实现只要我跑的速度够快,寂寞就追不上我只要Key和Led切换速度够快,人眼就看不出来————小白  如果你存在按键Key和显示Led共用同一个IO时,需要分时复用的需求,则可以移植代码进行使用:代码所占code少于0.5K线程安全,中断安全可移植性高,配置容易注意:系统需要存在一个至少为1ms的时钟中断01 - PCB原理图例程  举2个Key和Led共用IO口的
开通可读全文 ·1.1w 人阅读
最低0.47元/天 解锁文章


只要我跑的速度够快,寂寞就追不上我
只要Key和Led切换速度够快,人眼就看不出来

————小白


  如果你存在按键Key和显示Led共用同一个IO时,需要分时复用的需求,则可以移植代码进行使用:

  • 代码所占code少于0.5K
  • 线程安全,中断安全
  • 可移植性高,配置容易
  • 注意:系统需要存在一个至少为1ms的时钟中断

01 - PCB原理图例程

  举2个Key和Led共用IO口的例子,当MCU的IO口资源不足时,通常会让一些可以用速度欺骗人眼的做法进行资源的节省,比如Key扫描、Led扫描等,例如Led的扫描只要高于25Hz的速度,人眼就基本看不出闪烁,例如Key扫描只要大于100Hz,人的触感就难以察觉。

例程1

在这里插入图片描述

例程2

在这里插入图片描述

02 - 分时复用的注意项和设计

2.1 - 注意项

  Led和Key的分时复用需要考虑几个情况:
  1、Led扫描的频率,必须高于肉眼能看见闪烁的频率25HZ。一般为了效果较好,都会大于50HZ,也就是Led扫描时间<=20ms
  2、保证分时复用,扫描一定要有先后顺序。要确保Led扫描期间不能进行Key扫描,同时确保Key扫描期间不能进行Led扫描
  3、Led需要备份当前状态。因为扫描Key时Led是不起作用的,Key扫描完成后需要恢复Led的状态
  4、注意Led切换为Key时的准备动作。Led切换为Key时根据原理图要做哪些准备工作以防止切换后Key误触发,而Key切换为Led时按照电路决定是否需要做准备动作
  5、Led扫描时间比Key扫描时间长。考虑到肉眼的观察是最容易受影响的,时刻都能看见,而按键的使用次数则较低

2.2 - 设计

  根据注意项,总体设计如下:
  1、系统需要有一个至少为1ms的时钟中断,里面调用扫描ISR函数LedKeyStatusSwitchService_1ms,用于保证高频扫描
  2、理清状态机,存在2种状态的切换,分别为KeyState和LedState,值得注意的是,Led和Key的数量暂时未知,如果数量较多则实际的扫描动作不宜在中断内进行,此时中断则只做状态切换,所以2个状态分别需要一个记录器
  3、决定取舍,Led为人眼可见,最为敏感,Led的扫描动作直接放在中断进行,舍弃Key的中断扫描,让Key在前台进行扫描

03 - 代码实现

  以例程1的PCB为例,整个分时复用时间为6ms(167Hz),其中Led扫描占据4ms,Key扫描占据2ms,下面为参考代码:

#define LED_SACND_TIME_MS	4
#define KEY_SACND_TIME_MS	2
volatile uint8_t configKeyFlag = 0
VIP IO口控制-按键控制LED灯花式显示 IO口控制-按键控制LED灯花式显示 实践目的: 掌握P0-P3 各个I/O的工作原理和作用 掌握I/O口的输入输出控制 进一步熟练C51编程和软硬件联调 实践内容: 在交通灯控制系统的基础上修改硬件电路 AT89C51单片机的P1口接8个独立按键,P0口接8个LED灯,led等的上拉电阻改用排阻,设计硬件电路。 编写程序,实现基本要求:当P1.0键按下后P0.0灯亮, P1.1键按下后P0.0~P1.1灯亮, P1.2键按下后P0.0~P1.2灯亮,以此类推, P1.7键按下后P0.0~P1.7灯亮 开通可读全文·2.1k 阅读·2 点赞·12 收藏 阅读全文

相关推荐

按键与LED共用IO口的分时复用实现原理与实战

GPIO分时复用是一种在嵌入式系统中通过动态切换IO方向,实现输入(如按键)与输出(如LED)功能交替工作的底层技术。其原理基于数字电路的时序控制与电气隔离,依赖精确的软件状态机和硬件电路(如二极管隔离)协同,确保毫秒级无冲突切换。该技术显著节省MCU有限IO资源,提升硬件利用率,在STM32、GD32等主流MCU上无需特殊外设支持,具备强通用性与成本优势。典型应用场景包括智能门锁、温控面板、手持医疗设备等空间与BOM敏感型产品。本文深入解析其电路设计、时序约束、寄存器级编程及量产抗干扰实践,覆盖分时复用与

weixin_42641741的博客 305

固件工程师核心技能修炼:从C语言到底层调试的七项硬核能力

在嵌入式系统与物联网开发领域,固件(Firmware)作为连接硬件与操作系统的关键软件层,其开发要求工程师具备独特的底层思维与工程能力。其核心原理在于直接操作硬件资源,在严格的内存、时序与功耗约束下实现功能。掌握这项技术的价值在于能够构建稳定、高效的嵌入式产品,广泛应用于消费电子、工业控制与智能设备等场景。要胜任这一角色,工程师必须精通C语言的底层编程,例如熟练运用指针与位操作进行寄存器访问,并理解内存对齐与volatile关键字对硬件交互的影响。同时,RTOS(实时操作系统)的任务调度与同步机制,以及使用

weixin_34289454的博客 454

STM32F103最小系统详解:从电源时钟到PCB布局与故障排查

在嵌入式系统开发中,微控制器(MCU)是核心处理单元,但其正常运行离不开一个稳定可靠的最小系统。最小系统为MCU提供了必需的工作环境,其原理基于为芯片提供纯净的电源、精准的时钟信号、可靠的复位逻辑以及程序下载与调试接口。理解并正确设计最小系统具有重要的技术价值,它是确保整个嵌入式硬件平台稳定性的基石,能有效避免程序无法下载、芯片不运行等基础问题。在工程实践上,最小系统广泛应用于工业控制、物联网设备、消费电子等场景,是开发者进行外设扩展(如驱动LED、使用ADC采集、配置定时器生成PWM或通过UART、I2C

weixin_33997389的博客 374

AVR单片机RTOS内核实现:从零构建抢占式调度器

实时操作系统(RTOS)是嵌入式开发中实现多任务并发的核心技术,其核心原理在于任务调度与上下文切换。通过引入任务控制块(TCB)、就绪列表和调度算法,RTOS能够在单核CPU上实现宏观上的多任务并行执行,从而显著提升CPU利用率和系统响应实时性。在资源受限的8位AVR单片机(如ATmega328P)上实现RTOS,尤其需要关注**任务堆栈管理**和**上下文切换**的优化,这有助于深入理解RTOS在硬件层面的运作机制。这种实践不仅适用于学习,也能为工业控制、传感器数据采集等需要模块化与实时性保证的场景提供轻

weixin_34318326的博客 325

低功耗开发工程师实战指南:硬件、系统与应用三层功耗治理

低功耗开发是智能设备能效管理的核心工程能力,其本质是融合电路物理特性、操作系统电源状态机与应用业务逻辑的跨层协同。从CMOS漏电、寄存器级电源门控,到Linux cpuidle框架与Android Suspend-to-Idle机制,再到Wake Lock滥用与LocationManager误用等典型功耗陷阱,技术价值在于将抽象需求(如‘24小时续航’)转化为可测量、可建模、可验证的电流毫安时指标。广泛应用于穿戴设备、工业物联网网关、车规T-Box及安卓智能终端等对能效敏感的嵌入式场景。本文聚焦真实产线中的

weixin_33937499的博客 335

按键和LED复用原理图及编程方法

本文主要讲了按键和LED复用原理图及编程方法,希望对你的学习有所帮助。

按键和LED复用扫描程序

在我们的实际产品开发过程中,为了节省成本,常常会采用按键和LED复用,从而达到节省IO口的目的。很多刚刚碰到这种情况的工程师,可能会不知道如何处理,PS:大神请自动略过。下面由我来给大家讲讲按键和LED复用IO口时,程序该如何处理吧。(上一讲已经讲过,我个人比较喜欢状态机编程,因此这里还是采用状态机编程的方法,来实现按键和LED复用扫描功能)。

Claude skill-creator插件深度解析:从创建到优化的完整技能工程化体系

摘要:skill-creator是Anthropic推出的Claude技能开发插件,提供从创建到优化的全流程工程化支持。其核心架构采用渐进式披露机制和多Agent协作模式,包含Grader、Analyzer等专业评估组件。该插件支持自动化评测系统,通过测试用例管理、并行执行和结果聚合实现技能验证;提供迭代优化算法,基于数据驱动改进技能性能。典型应用场景包括标准化技能开发、自动化测试验证和触发优化,显著降低开发门槛并提升技能质量。

虚心若愚 983

Tushare使用教程

@Tushare简易教程 Python财经数据接口Tushare 最近在看量化分析有关的东西,然后第一步先了解的就是如何获取股票交易数据。发现大部分教程都是关于Tushare的,于是在这里简单的介绍一下Tushare的用法吧。目前tushare有免费版本和升级的需要付费的Pro版本。大多数教程写的都是免费版本,但是pro版本提供的数据更多,但是由于本人入坑还不深,暂时还是用的免费版本,但是每次使用都收到提示,“本接口即将停止更新,请尽快使用Pro版接口:https://tushare.pro/documen

kuangzhi9124的博客 2万+

SAP ABAP开发避坑:BAPI_MATVAL_PRICE_CHANGE调用报‘估价未维护’的完整解决流程

本文深入解析SAP ABAP开发中调用BAPI_MATVAL_PRICE_CHANGE函数时遇到的'估价未维护'错误,提供从基础配置检查到CKML_PRICE_SEND表维护的完整解决方案。通过实战案例和代码示例,帮助开发者快速定位问题并实现批量价格更新的自动化处理,提升开发效率。

weixin_28705087的博客 419

无法找到来自源 nvlddmkm 的事件 ID 14 的描述

具体错误是: 无法找到来自源 nvlddmkm 的事件 ID 14 的描述。本地计算机上未安装引发此事件的组件,或者安装已损坏。可以安装或修复本地计算机上的组件。 出现这样错误的原因有很多了,有可能是硬件有可能是软件。由于我是刚配置的电脑,起初非常怀疑是自己组装的问题,折腾了好久,心态爆炸!!!先说我报这样错误的情况,以及解决办法,供后面人参考。 ...

SeventhBlue 6万+

【代码审计】RuoYi定时任务漏洞:从SQL注入到RCE的攻防演变

本文深入剖析了RuoYi框架定时任务模块从早期版本无校验到引入黑白名单机制,再到被组合利用实现RCE的完整漏洞演变过程。文章详细分析了SQL注入与定时任务功能结合导致的远程代码执行漏洞,并总结了代码审计与安全开发的核心要点,为开发者提供了重要的安全参考。

yellow的专栏 689

【100分】【等和子数组最小和】

逆序排序,这样能够使得在分组时优先选取较大的元素,以便将元素分配到较小的子集中,从而使得每个子集的和相对均衡。给定一个数组nums,将元素分为若干个组,使得每组和相等,求出满足条件的所有分组中,组内元素和的最小值。分成若干个组,使得每组的和相等,并求出满足条件的所有分组中,组内元素和的最小值。在递归的过程中,我们需要注意一个优化点,即避免将相同和的桶重复计算。4 个子集(5),(1,4),(2,3),(2,3)2 个子集(5, 1, 4),(2,3, 2,3)个子集,则返回子集和的最小值,如果不能,则将。

weixin_54707168的博客 1161

读懂 SAP S/4HANA 里的 SAP Fiori 架构:前端服务器、搜索链路、传统应用接入与内容组织全景解析

摘要:SAP Fiori架构并非简单的系统连接图,而是明确区分界面层与业务数据层的三层分工体系:用户交互层(浏览器与Fiori launchpad)、前端技术层(SAPUI5运行环境)和业务数据层(SAP S/4HANA后端)。这种分离实现了生命周期解耦,前端专注于统一体验治理,后端处理核心业务逻辑。值得注意的是,SAP Fiori front-end server本质仍是ABAP系统,负责UI技术组件运行。虽然SAP S/4HANA推荐嵌入式部署,但独立部署在多系统场景中仍有价值。典型Fiori应用通过O

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 175

【智能车Code review】——小S与中S道路判断

基本思想: 找到中线的左拐点和右拐点,并且计算出两点之间的空间距离。通过限制空间距离,分为中S和小S。 注意这种情况:当20行以下的中线斜率比较陡,此时可以通过人为限制设定,将第0行的中线设置为拐点。 if (flag_centre_right_point == 0 && flag_centre_left_point == 1 && parameterB >= 0.5 && centre_left_point[0] >= 33) { .

hanhan的博客 6095

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: 【应用C】C语言实现基于实验法的定频波轮洗衣机模糊称重计算及处理
下一篇: 【应用C】C语言实现可配置带回调函数的蜂鸣器驱动

双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —
单眼皮的根号3
博客等级 码龄9年 664粉丝 118原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值