这次我将和大家分享如何使用中科蓝讯 AB5602B 驱动五脚数码管。该数码管不同于常用的数码管由控制 IC 的八个 IO 配合锁存芯片驱动,它只有五个驱动引脚,更节省 IO 资源,并且不需要锁存芯片。下面我首先介绍五脚数码的工作原理,接着介绍驱动程序,最后点亮数码管显示自定义的字符。
一、数码管工作原理
1、数码管显示及引脚位置
一位数码管由A、B、C、D、E、F、G、DP 八根二极管构成;
将要示例驱动的数码管可显示两位字符,但只有五个驱动引脚;
2、数码管电路图
如数码管电路图所示,五个驱动引脚承担了点亮 16 根二极管的责任。这就产生一个问题,驱动引脚不但被用在二极管的阴极,亦被用作二极管的阳极,例如,A1 二极管和 E1 二极管,引脚 1 在 A1 二极管用作阴极,在 E1 二极管却被用作阳极,这样点亮 A1 二极管就无法点亮 E1 二极管了。
如果要显示的字符,恰好要 A1 和 E1 二极管都点亮应该如何操作呢?这是我们需要解决的关键问题,这也是五个引脚能驱动两位数码管的原因。我们知道人眼的视觉暂留时间是 20ms 左右,数码管有 5 个引脚,那么把需要显示的字符在 20ms 内分 5 次点亮即可。例如点亮全部二极管,分五次点亮就是,1 脚拉高时,拉低 2、3、4 脚;2 脚拉高时,拉低 1、3、4、5 脚,其余引脚同理,这样就可以解决前面所说的引脚 1 同时作 A1 阴极和 E1 阳极的矛盾问题了。
二、驱动程序
1、定义一个结构体存放需要的参数
2、蓝牙芯片 IO 初始化函数
蓝牙芯片 IO 初始化函数放在以下位置:
3、IO 置高或清零函数
写 5 个 IO 置高或清零函数,并且把函数名放进函数指针数 smg_pfunc[];
4、IO 输出关闭函数
IO 输出关闭函数放在点亮数码管函数中,作用是拉高下一个引脚前先关闭已经点亮的数码管,但又不清除拉高的引脚对应需要拉低的引脚。
5、点亮数码管函数
点亮数码管函数放在扫描函数中,作用是把传递进来需要拉高的引脚拉高,再拉低它对应需要拉低的引脚。
6、扫描函数
跑一次扫描函数,就是通过 smg_g.com_pin 传递一个需要拉高的引脚给 smg_set(seg_bits,com_pin) 函数去拉高;再通过seg_bits 记录拉高的引脚控制的二极管中对应需要拉低的引脚传递给smg_set(seg_bits,com_pin) 函数去拉低。最后,把扫描函数放在 1ms 定时处理函数中:
7、清零函数
将记录需要拉低的引脚清除。
三、示例数码管显示字符 00
在显示新的字符之前必须调用函数 smg_all_clr_led() 把之前记录的需要拉低的引脚清零。
参考数码管的电路图知道,要显示 00 字符,需要点亮的数码管是 A1、B1、C1、D1、E1、F1 和 A2、B2、C2、D2、E2、F2;因此 1 脚拉高时,需要拉低的是 2 脚和 3 脚;2 脚拉高时,需要拉低的是 1 脚、3 脚、4 脚和 5 脚;其余引脚同理。扫描函数跑一次,实际就是做一次这样的操作。注意,数组元素下标是从 0 开始的,因此 smg_g.buf[0] 记录的是 1 脚拉高后,对应需要拉低的引脚。
显示效果:
字符显示函数放在需要的调用的地方即可。
驱动五脚数码管的内容介绍到这里,欢迎大家批评指正。如果大家还有什么其他的问题或者功能想要询问,亦可以在评论区中提出,可以共同探讨,一起进步。