和12岁小同志搞创客开发:如何驱动LED数码管?
LED数码管(LED Segment Displays)是由多个发光二极管封装在一起组成。
1
LED数码管分类和驱动原理
数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP),这个小数点可以更精确的表示数码管想要显示的内容。
数码管按能显示多少个,可分为 1 位、 2位、 3 位、 4 位、 5 位、 6 位、7 位等数码管。
4位数码管
8位数码管
按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。
共阳数码管:
将所有发光二极管的阳极(VCC)接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极 COM 接到VCC,当某一字段发光二极管的阴极为低电平时,相应字段就点亮, 当某一字段的阴极为高电平时, 相应字段就不亮。
共阴数码管:
指将所有发光二极管的阴极(GND)接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND,当 某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。
数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态数码管和动态数码管两类。
素材来源:博主big__C
静态数码管:
是每个数码管的每一个段码都由一个单片机的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时序信号就可以进行驱动,极大方便了新手开发者使用,但是还是需要各位掌握好数码管的驱动原理,知其然知其所以然,在开发的过程中才可以达到举一反三的效果。
代码如下所示: