带有2个LED灯和一个开关的GPIO

出处:网络整理时间:2026-10-08
  使用PIC制作一个控制器(带按钮),通过同步串行通信作为客户端接口。在设计GPIO引脚的指示灯时遇到了困难。
  由于PIC CPU大部分时间都处于空闲状态,计划是使用中断来处理新按钮的按下,而不是轮询。一旦按钮被注册为按下状态,PIC就可以按照与串行主机轮询速率一致的速率对其进行轮询。
  手柄有三种操作模式,每个按钮可以单独分配。每个按钮只能有1个GPIO引脚。每个按钮需要两个LED灯。
  在模式1中,按下按钮时LED必须亮起。
  在模式2中,模式1的LED必须通过PIC切换。它可以切换为高电平或低电平(即按键电流为2毫安,开关可以使LED电流为0毫安或20毫安)。关键是控制器需要在按下按钮时显示自己正在做某件事。)
  第二个LED用于模式3,必须仅通过PIC切换。当模式3 LED亮起时,模式1的LED必须关闭。如果模式3能完全关闭模式1的LED灯,那将是理想的(也就是说,模式3按下的按钮理想情况下点亮0个LED,但这里可以妥协)。
  以下表格总结如下:
  switch openswitch closed
  Mode 1XLED 1
  Mode 2XLED 1 and X (or LED 1')
  Mode 3LED 2LED 2 and X (or LED 1 or LED 1')
  PIC是16F18145。
  LED灯是ZMYKVG45WT-9。
  值得注意的是,PIC 16F18145允许读取引脚状态,无论其为输入还是输出。推拉、开放排水和弱引体向上可以分配给单个瓶子。
  每个按钮大约是10mA。理想情况下,这应该用来点亮LED灯。
  给几个无源电路(除了LED外)做过电磁化,要么工作不完全,要么电流过大。下面是能想到的接近的描述。右侧的接地和5伏开关代表PIC。
   如上所述,不需要按钮直接控制LED灯。按钮只需告诉PIC它被按下了,按下后不干扰LED灯。
  可以使用一种称为查理复用的方法。 但确实需要持续刷新,才能营造出六个LED独立控制的错觉。
  示意图

  模拟该电路——使用 CircuitLab 创建的示意图

  每个GPIO引脚可以处于四种状态之一:高阻段、拉高(MCU内部上拉约25 kΩ或更高)、高驱动、低驱动。
  这样总共得到4个3 = 64个状态,其中大多数都有实际作用:
  所有高阻数电路均处于空闲状态
  一个拉高,另一个高Z:测试开关是开还是闭
  一个高驱动,其他的则是高阻区驱动或低驱动:点亮一两个LED灯
  注意通过LED存在开关间的串扰问题。例如,如果你拉高GPIO0来测试SW1,但SW2闭合,D1会有电流。LED的正向压降足以区分这些状态,但也可能不行。 需要一些测试。
  省略了二极管,并更换了一些电阻。
  模拟该电路——使用 CircuitLab 创建的示意图
  要读取按钮,将GPIO调到弱上拉模式,电压会降到大约3.8V,这应该足以被视为高电压,或者按钮按压低于1V时,这才是有效的低电压。
  LED灯在切换GPIO模式后会发光,所以读取速度会比较快。
上一篇:自制一款感应式应急 LED 灯
下一篇:三种LED驱动电路设计,负反馈在运算放大器中的作用

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关电路图