我们学习研究Arduino、树莓派或者其他控制器时,一般进行的第一个实验就是点亮LED。在数字逻辑中,单个LED只能控制亮或灭,也就是对应呈现1和0两种状态,表达的信息十分有限。但将8个LED按照一定顺序排列、呈“8”字型封装在一起,便组成了常见的LED数码管。
数码管的外观 每一个组成“8”字形的LED,我们称之为“段”,一般而言,数码管按段数可分为七段数码管和八段数码管,一段就对应一个LED,八段数码管比七段数码管多一个LED,也就是多一个小数点(DP),这个小数点可以更精确的表示数码管想要显示的内容,八段数码管的每段按照一定的顺序标注为"a,b,c,d,e,f,g,dp "。当然有些LED数码管会按照实际需要增加“段”或减少“段”。在应用中,可以将多个数码管封装在一起,每组所包含的数码管个数称之为“位”,常见的封装形式有1位、2位、4位、6位、8位等。
LED数码管的“段” LED数码管按照内部结构分为两大类,一类是共阴极接法,另一类是共阳极接法。以八段数码管为例,共阴极就是8个LED共用一个电源的负极,高电平点亮,共阳极就是8个LED共用一个电源的正极,也就是低电平点亮。只要控制其中各段LED的亮灭,即可显示相应的数字、字母或符号。
LED数码管要正常显示,就要用控制器或驱动电路来驱动数码管的各个段,从而显示出我们需要的数字、字母等,根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。 数码管静态驱动显示时,每个数码管的每一个段码都由控制器的一个I/O口进行驱动,或者使用特定的转换器进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O口多。要知道一个Arduino UNO控制器可用的数字I/O口只有14个,而使用I/O口多的控制器无疑会增加成本。所以实际应用时必须依靠驱动器进行驱动,这也增加了硬件电路设计的复杂性。 数码管动态驱动显示是应用最为广泛的一种显示方式,是将所有数码管的相同名字的段连在一起,共同连接一个I/O口,而每个数码管的“位”选通由各自独立连接的I/O口控制。当控制器输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于控制器对“位”选通端电路的控制,所以我们只要打开需要显示的数码管的“位”选通端,这一位就会显示出字形,没有选通的数码管也就不会亮。 通过分时轮流控制各个LED数码管的“位”端,各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人眼的视觉暂留现象及发光二极体的余辉效应,尽管各位数码管并非同时点亮,但只要扫描的速度足够快,给人的感觉就是一组同时显示的稳定数据,不会出现闪烁。动态显示的效果和静态显示是一样的,但动态显示能够节省大量的I/O口,并且每一时刻只会有一只数码管点亮,因而功耗更低。
4位LED数码管的动态显示接线方法 虽然动态驱动LED数码管能够节省控制器I/O资源,但我们还是希望有更加便捷的使用方式,那就是将LED数码管与驱动芯片集成在一起,使用特定的通讯协议与控制器进行连接通讯。比如SPI LED 数码管扩展显示模块,除去电源正负极引脚,只需与控制器的3个I/O引脚相连接,编写程序即可实现显示功能,如图 所示就是使用了SPI数码管显示模块搭建的“定时炸弹”。
使用SPI数码管显示模块搭建的“定时炸弹” 除了SPI LED数码管扩展显示模块,使用IIC接口的4位共阳数码管也是不错的选择(见图7)。它只需要四根数据连接线,除去电源与地线外,另外两根为SCK与SDA接口,即时钟与数据接口,仅占用两个I/O。而且只需要调用库函数进行编程,即可实现对数码管的控制,以显示数字和字母。
IIC接口的4位共阳数码管时间显示 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|