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

6个IO控制2个按键7个led 使用扫描方法实现6个IO控制2两个按键7个led, //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //按键+LED 扫描显示 // //1. 2个按键 7个LED ,采用6个IO ,以2 *4的方式复用 //2. 扫描分时 - 3步 (X1 X2 对应IOA5 IOA3;Y1 Y2 Y3 Y4对应IOB3 IOC0 IOB0 IOB1) // a. X1/X2 设置为输入上拉模式,作为按键输入检测;同时Y1 Y2 Y3 Y4也设置为输入上拉模式,以方式LED有弱电流的... 阅读详情


只要我跑的速度够快,寂寞就追不上我
只要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
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灯亮 阅读详情

相关推荐

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

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

weixin_34289454的博客 448

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

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

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

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

weixin_33997389的博客 372

按键LED复用扫描程序

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

c语言按键复用,按键LED复用原理图及编程方法

​开发过程中,为了节省成本,常常会采用按键LED复用,从而达到节省IO的目的。很多刚刚碰到这种情况的工程师,可能会不知道如何处理,PS:大神请自动略过。下面来给大家讲讲按键LED复用IO时,程序该如何处理吧。(这里采用状态机编程的方法,来实现按键LED复用扫描功能)。一、 按键LED复用原理图如下: LEDC是LED灯的COM控制端,LED1_K1LED2_K2是按键LED的复用I...

weixin_30096321的博客 4593

GPIO:LED按键

上一篇文章讲解了如何快速点灯,当一名点灯工程师(o(* ̄▽ ̄*)ブ)这一章加入按键,快速实现GPIO的输入输出功能,实现按键按下,灯的状态进行取反的操作。

a1981613393的博客 1002

单片机IO应用-独立按键控制LED以及控制LED灯闪烁

【代码】单片机IO应用-独立按键控制LED

公众号:风景邮递Yuan的博客 3922

常见按键LED复用电路图

比较常用的电路图,当是保存一下吧

chuangwu2009的专栏 7610

Python嵌入式开发全景解析:从MicroPython到嵌入式Linux的实战路线

编程语言与硬件开发的结合向来是嵌入式领域的热门话题。当Python以解释型语言身份进入嵌入式系统时,许多开发者会疑惑它能否胜任底层控制与资源受限场景。事实上,嵌入式系统按硬件资源开发方式可分为固件级、板级与应用级,Python在其中的角色截然不同:在MCU上可通过MicroPython以解释器形式运行,适合快速原型与教学;在嵌入式Linux板卡中则以CPython进程承载业务逻辑,广泛用于边缘计算物联网网关;此外,Python更是硬件工程师在PC端进行自动化测试与仪器控制的强力工具。理解Python在嵌

weixin_34417200的博客 431

从STM32入门到求职上岸:嵌入式开发核心技能与项目实战指南

嵌入式开发是连接硬件与软件的关键技术领域,其核心在于对微控制器、实时操作系统及底层通信协议的深入理解与工程实践。从原理层面看,开发者需要掌握C语言在嵌入式环境下的高效运用,包括指针、内存管理位操作等核心概念,并理解实时操作系统(如FreeRTOS)的任务调度与资源管理机制。这些技术的价值在于能够构建稳定、高效的嵌入式系统,满足物联网、工业控制等场景对实时性可靠性的严苛要求。在实际应用中,通过STM32等主流平台,结合传感器、通信模块进行项目实战,是提升嵌入式开发能力、积累项目经验的有效途径。本文围绕嵌入

angou6476的博客 1043

嵌入式工程师成长路线图:从单片机到Linux驱动的实战能力构建

嵌入式系统开发是融合硬件与软件的系统工程,其核心在于理解计算机系统的基本原理与硬件交互机制。从微控制器(MCU)的最小系统开始,开发者需要掌握C语言在嵌入式环境下的精要,如位操作、指针与内存地址的直接访问,以及volatile关键字对编译器优化的控制,这是与硬件寄存器对话的基础。理解这些底层原理,是为了构建高效、可靠的嵌入式软件,其技术价值在于实现对物理设备的精准控制与实时响应。随着系统复杂度的提升,实时操作系统(RTOS)引入了多任务并发与任务间通信的机制,而Linux环境则进一步拓展了网络、多进程等高级

weixin_34331102的博客 355

基于XIAO ESP32C6与CircuitPython的物联网开发实战指南

物联网开发的核心在于将物理设备连接至网络,实现数据采集与远程控制。其技术原理通常基于微控制器、传感器无线通信协议,通过嵌入式软件栈完成设备端的数据处理与传输。CircuitPython作为一种针对微控制器优化的Python实现,显著降低了嵌入式开发门槛,使开发者能够使用高级语言快速实现硬件交互网络通信。在工程实践中,结合ESP32-C6这类支持多协议(Wi-Fi 6、蓝牙5.0)的芯片,可以高效构建低功耗、高性能的物联网节点。本文以Seeed Studio XIAO ESP32C6开发板为硬件平台,详细

dieqiao8331的博客 313

【元婴·19】驱动开发:沟通硬件的御灵术

驱动开发是嵌入式工程师的核心修为。本文用修仙世界御灵术类比Linux驱动模型,讲透bus/device/driver三要素匹配机制、file_operations五大函数、中断上下半部机制、裸机GPIO驱动、printk/dmesg/devmem2/JTAG四大调试法器。从键盘按键到屏幕显示的完整数据旅程,从STM32点LED到内核字符设备驱动,一篇讲清驱动工程师的修炼四步走。

谦-努-实-攻城狮 239

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

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

weixin_34318326的博客 324

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

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

weixin_33937499的博客 332

应广单片机IO配置

应广单片机IO主要由 3个寄存器进行设置 ,表中为PA.0的说明,其他端同样适用. 例如io有如下定义 BIT ADC_IN : PB.0; BIT USB_IN : PB.1; BIT LED : ...

zhongvv的专栏 3418

小白跟做江科大32单片机之按键控制LED

/将赋值后的构体变量传递给GPIO_Init函数。if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_2)==0) //获取输出寄存器的状态,如果当前引脚输出低电平。

weixin_58051657的博客 1958
上一篇: 【应用C】C语言实现基于实验法的定频波轮洗衣机模糊称重计算及处理
下一篇: 【应用C】C语言实现可配置带回调函数的蜂鸣器驱动
单眼皮的根号3
博客等级 码龄9年 664粉丝 118原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值