和 12 岁小同志搞创客开发:如何驱动 LED 数码管?
机缘巧合在网上认识一位 12 岁小同志,从零开始系统辅导其创客开发思维和技巧。
项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html
LED 数码管(LED Segment Displays)是由多个发光二极管封装在一起组成。
1、LED 数码管分类和驱动原理
数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP),这个小数点可以更精确的表示数码管想要显示的内容;
数码管按能显示多少个,可分为 1 位、 2 位、 3 位、 4 位、 5 位、 6 位、7 位等数码管。
按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。
共阳数码管:将所有发光二极管的阳极(VCC)接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极 COM 接到 VCC,当某一字段发光二极管的阴极为低电平时,相应字段就点亮, 当某一字段的阴极为高电平时, 相应字段就不亮。
共阴数码管:指将所有发光二极管的阴极(GND)接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极 COM 接到地线 GND,当 某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。
数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态数码管和动态数码管两类。
静态数码管:是每个数码管的每一个段码都由一个单片机的 I/O 端口进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用 I/O 端口多,如驱动 5 个数码管静态显示则需要 5×8=40 根 I/O 端口来驱动,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
动态数码管:动态显示接口是单片机中应用最为广泛的一种显示方式之一。动态驱动是将所有数码管的 8 个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极 COM 增加位选通控制电路,位选通由各自独立的 I/O 线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通 COM 端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的 COM 端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为 1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的 I/O 端口,而且功耗更低。
2、LED 数码管驱动实践
DF 创客社区商城售卖的数码管是增加了 IIC 芯片,通过 IIC 时序信号就可以进行驱动,极大方便了新手开发者使用,但是还是需要各位掌握好数码管的驱动原理,知其然知其所以然,在开发的过程中才可以达到举一反三的效果。
代码如下所示:
版权声明: 本文为 InfoQ 作者【不脱发的程序猿】的原创文章。
原文链接:【http://xie.infoq.cn/article/21ed6a9d66d4b7a18d6b56ca6】。文章转载请联系作者。
评论