简 介: 本文介绍了单片机的IO控制 LED 中的复用技术,特别查理复用基本原理和特点进行了介绍。使用一款IS31FL3731可以构成16×9的PWM亮度可控的 LED 矩阵。

关键词查理复用CharlieplexingIOMCUIS31FL3731IO口复用

§01 单片机IO控制 LED


  使用单片机的IO端口控制 LED 点亮是最最基本的单片机的人机界面(HMI),它可以显示电子系统工作状态,参数设置等等。为了传递更多的信息,也可以控制 LED 不同的闪烁模式(频率,占空比,点亮长短组合)表示更多的信息,当然这会增加观察理解方面的难度。

  最基本的方式还是通过单独 LED 分别表示不同的模式最为简洁,但这需要设置较多的 LED 以及相应的MCU控制IO端口。在有些电子产品设计中,可能会遇到单片机IO端口不足的情况。此时就需要考虑IO端口复用来控制更多的 LED

  首先需要说明的是,这里是指不外在增加辅助芯片的情况下完成少量IO控制多与IO口数量的 LED 方法。比如下面这个8×8 双色 LED 显示模块,其背板包括一颗 TM1640 LED 驱动控制芯片 ,它只需要单片机两条IO端口便可以控制。这种扩展不在我们讨论范围之内。

  曾经在博文 如何使用一个单片机的IO口控制两个 LED 介绍了使用一个IO端口控制两个 LED 独立点亮熄灭的方法。因此可以使用N个IO口,控制2N个 LED 独立的点亮与熄灭,它们可以总共表示22N=4N2^{2N} = 4^N22N=4N的不同状态。

  如果不考虑 LED 独立点亮,而是在任何时刻只点亮一个 LED ,则可以使用 查理复用(Charlieplexing) 方法,它可以在N个IO端口,控制 N(N−1)N\left( {N - 1} \right)N(N−1)LED

§02 查理复用原理


  在 微信公众号“电路啊” 近日的一篇推文 用3个IO口控制6个 LED 灯,怎么做到的?查理复用! 中,介绍了使用 查理复用 (Charlieplexing)方法。

1.电动牙刷中查理复用

  有趣的是,他是从一款手头的电动牙刷的设计中看到了 查理复用 在实际产品中是如何解决单片机IO不足的问题。在电动牙刷内部控制板上使用了一颗8PIN的单片机,外部需控制六个 LED ,单片机只使用了其中三个IO控制 6LED 灯,表示电动牙刷不同运行速度设置。

▲ 电动牙刷内部8PIN单片机控制六个 **LED**

  下面是三个IO与六个 LED 之间的连接关系。三个IO口之间共有三对相互连接关系。在每一对连接IO之间,正反并联一对 LED ,总共六个 LED

▲ 三个IO端口控制六个 **LED** 单独点亮

  如果需要点亮某一个 LED ,首先确定它在哪一对IO之间,然后将其余IO设置成高阻状态,使其不参与控制。然后在根据该 LED 的极性,设置它所在两个IO的高低电平,来点亮它,与它并联的 LED 由于极性相反而熄灭。

▲ 任意挑选两个IO,设置他们不同高低电平可以分别控制它们之间连接的两个 **LED** 点亮

  这个电路中使用的 查理复用 是在N=3N = 3N=3的情况下,控制3×2=63 \times 2 = 63×2=6个 LED 的点亮。

2.查理复用原理

  查理复用 最基本单元是一对IO口可以单独控制两个背对背并联 LED 中某一个 LED 点亮。如下图所示,电路连接一对单片机IO口。随着左右两边不同的电平设置,可以控制 LED 1、 LED 2分别单独点亮。

▲ 极性相反并联的 **LED**

  对于N个IO口,它们之间总共有N(N−1)/2N\left( {N - 1} \right)/2N(N−1)/2个相互连接的边。比如下面所示的三个IO口,它们之间有三个连接边。每一个边对应的两个IO口,可以连接一个上面的 LED 并联电路。这样总共有N(N−1)N\left( {N - 1} \right)N(N−1)个 LED

  工作时,任选两个IO,将其余的IO口设置为高阻状态。比如下图中将C对应的IO口设置为高阻,剩下A,B两个IO口完成对于0,1两个 LED 的控制。

▲ 三个IO口,可以形成三个相互连接的边

  由于A,B两点的电位始终被0,1 LED 钳位,使其在单个 LED 导通电压,而小于两个 LED 串联的导通电压,所以A,B两点之间的电位差不会引起(2,3)、(4,5)两边 LED 串联导通。

▲ 三个IO口(分别用黄、绿、蓝表示)不同状态点亮不同 **LED** (0 至 7)

§03 多路查理复用


  在前面介绍的 查理复用 中,每一时刻基本只能点亮一颗 LED ,如果希望同时点亮多个 LED ,则可以通过顺次点亮这些 LED ,只要重复频率足够快(比如大于50Hz),则可以看起来它们是同时点亮。这样,就可以使用 查理复用 控制 LED 矩阵了。

  在 Charplexing-HACKADAY 中展示了一颗ATiny24单片机(PIN14)控制 5 ×18(90个 LED )矩阵工作。通过前面可知控制90个 LED ,如果使用 查理复用 则至少需要10个 LED ,对于14个管脚的ATiny24单片机来讲,几乎它所有IO都用于控制 LED 矩阵了。

▲ 单片机驱动 **LED** 矩阵

  在 Adafruit Charlieplex LED Matrix Bonnet 给出了一款8×16 LED 阵列,利用专用一颗I2C接口控制器,使用 查理复用 驱动 LED 矩阵。

▲ Adafruit 15x7 CharliePlex **LED** Matrix Display FeatherWings

  下面 LED 模块被称为“LED 矩阵羽毛”,它外观看起来就像一片贴满鳞片的羽毛。它外部具有I2C 总线接口。它可以通过PWM控制 LED 亮度(256级别)

▲ CharpliePlex **LED** 矩阵显示不同图案

   LED 矩阵羽毛核心的IC为IS31FL3731芯片,它可以通过PWM波形控制多大16×9个 LED 组成的矩阵,可以工作在 2.7V~5.5V 电压。

  特别,在 PythonY&CircuitPython 还有它专用驱动库文件。

▲ IS31FL3731控制板可以控制16×9 **LED** 矩阵560

  那么问题回来了,这颗IS31FL3731芯片与 查理复用 有什么关系呢?

▲ IS31FL3731芯片外部连接的LED阵列就是使用的查理复用的方法

※ 总结 ※


  查理复用 在单片机IO端口复用应用比较广泛。在解决一些管脚很少单片机在多路显示的情况下,控制更多的 LED 显示。


  ■ 相关文献链接:

  • TM1640 LED 驱动控制芯片
  • 如何使用一个单片机的IO口控制两个 LED
  • 用3个IO口控制6个 LED 灯,怎么做到的?查理复用!
  • Charplexing-HACKADAY
  • Adafruit Charlieplex LED Matrix Bonnet
  • PythonY&CircuitPython
  • 本博文被推文引用的公众号-TSINGHUAZHUOQING
  • 本博文被推文引用的公众号-电路啊
  • 本博文被推文引用的公众号-电子森林

▲ 实验中突然电路着火了

IO口多路查理复用:三个单片机IO口控制六个LED相关推荐

  1. 用3个IO口控制6个LED灯,怎么做到的?查理复用!

    ▲ 本文要分析的电路 事情是这样开始的. 买了个电动牙刷,几十块钱那种: 收到的实物长这样: 牙刷手柄上有1个按键和6个LED灯: 拆开看看电路板: 可以看出,电路板上用的单片机,只有8个脚,却要控制 ...

  2. 基于Charlieplexing算法(查理复用算法)的LED矩阵控制设计

    目录 1.Charlieplexing 基本原理 2.Charlieplexing 注意事项 3.结论 最近发现一个非常有意思的实验:查理复用技术控制LED灯(按键). 简单来说就是:希望能够用较少的 ...

  3. 【算法】查理复用算法(Charlieplexing)

    ▪ 基本信息 基于程序算法让相同针脚数量的IO口能点亮更多的灯,模拟物理方式扩展 IO口:例如常规的设计 6 个IO口只能驱动 6 个LED灯,但利用算法优化有6个IO口就可以驱动 30 个 LED ...

  4. P1P2P3口接24个灯流水的c语言代码,第三章单片机并行口c语言程序设计.ppt

    第三章单片机并行口c语言程序设计 3.1 80C51的并行口结构与应用 3.1.1 P0口.P2口的结构 1.P0口作通用的I/O口使用. 这时,CPU发来的"控制"信号为低电平, ...

  5. p1口输入输出实验c语言程序,51单片机P1口输入输出实验实验报告.doc

    51单片机P1口输入输出实验实验报告 实验一 P1口输入输出实验一 实验目的 1 掌握P1口作为I/O口时的使用方法. 2 理解读引脚和读锁存器的区别. 实验原理 由 AT89C51 组成的单片机系统 ...

  6. linux标准IO实验,Linux系统编程(第三篇) 标准IO.pdf

    第三章:标准I/O 目标: 本章旨在向学员介绍Linux系统 时间:3 学时 I/O相关函数的使用: 1)掌握I/O相关函数的特点及使 教学方法:讲授PPT 用方法 2 )了解I/O与系统调用相关的函 ...

  7. 巧用GPIO口控制多个LED

    3个IO口控制6个LED灯 这个电路用到了单片机GPIO的三种状态: 高电平 低电平 高阻态 所谓"高阻态",是指GPIO对外部电路表现出极大的阻抗.因阻抗很大,几乎不会吸入电流, ...

  8. 一 、单片机IO实验

    一. 单片机IO实验 ​ 自律 学习 坚强 ,拒绝迷茫. 作者:行走的皮卡丘 时间:2021/03/23 喜欢就去追,这个红灯等不到,说不定下一个红灯等到了,嘻嘻!!!!!!! 文章目录 一. 单片机 ...

  9. STM8单片机GPIO口的驱动深度解析

    上一节给大家介绍了STM8标准库的移植,本节课开始学习我们单片机的外设的驱动,单片机基本的外设资料包括GPIO.外部中断.定时器.串口等,本节先给大家介绍一下STM8单片机的GPIO口. 我们先不介绍 ...

最新文章

  1. 打印二叉树的边界节点
  2. linux找不到动态链接库 .so文件的解决方法(转自:http://www.cnblogs.com/xudong-bupt/p/3698294.html)
  3. 牛客 - 斐波那契和(杜教BM)
  4. 相机标定:PNP基于单应面解决多点透视问题
  5. php不会写 能看懂,人人都能看懂的全栈开发教程——PHP
  6. php中背景图怎么设置不重复,css 图像不重复怎么设置
  7. Android Unable to execute dex: java.nio.BufferOverflowException
  8. 谷歌修复又一枚遭在野利用的 Chrome 0day
  9. Linux系统中设置静态ip地址
  10. 一个完整的计算器c语言源代码,分享一个C语言的计算器源代码
  11. 在计算机上如何打开资源管理器,资源管理器怎么打开?打开资源管理器的5种方法...
  12. Spark视频王家林大神第1课: 30分钟彻底理解Spark核心API发展史:RDD、DataFrame、DataSet
  13. Node项目实战总结
  14. 【转】百度腾讯阿里,其大数据优劣势与策略分析
  15. 大学生开学必备物品清单男生2022 大学生开学必备物品男生
  16. 论文笔记:Tip-Adapter: Training-free CLIP-Adapter for Better Vision-Language Modeling
  17. JASS萌新学习指南1.2
  18. 阿里NASA的深意:巨头正名还是其他?
  19. 使用类求出三个长方体的体积
  20. docker删除已停止的容器

热门文章

  1. Vodafone A/B测试实践
  2. AngularJS 初始化加载流程
  3. C++中四种类型装换
  4. matplotlib 和 pandas 两个包的安装
  5. 山寨山寨版手机安全卫士项目
  6. 第二十二回  基础才是重中之重~ThreadStatic静态字段在每个线程里的唯一性
  7. java基础---JVM---java内存区域与内存溢出问题
  8. Harbor: 跨数据中心复制Docker镜像的开源实现
  9. 完整的项目工程目录结构
  10. 英特尔近日发布最新版实感™ SDK R5 (v7)