马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?请使用中文注册
×
使用PIC制作一个控制器(带按钮),通过同步串行通信作为客户端接口。在设计GPIO引脚的指示灯时遇到了困难。 由于PIC CPU大部分时间都处于空闲状态,计划是使用中断来处理新按钮的按下,而不是轮询。一旦按钮被注册为按下状态,PIC就可以按照与串行主机轮询速率一致的速率对其进行轮询。 手柄有三种操作模式,每个按钮可以单独分配。每个按钮只能有1个GPIO引脚。每个按钮需要两个LED灯。
如上所述,不需要按钮直接控制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模式后会发光,所以读取速度会比较快。 |