中科蓝讯 AB5602B 驱动五脚数码管示例

哈喽,大家好。

这次我将和大家分享如何使用中科蓝讯 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 脚拉高后,对应需要拉低的引脚。

显示效果:

     

字符显示函数放在需要的调用的地方即可。

驱动五脚数码管的内容介绍到这里,欢迎大家批评指正。如果大家还有什么其他的问题或者功能想要询问,亦可以在评论区中提出,可以共同探讨,一起进步。

  

参考文档:

1、中科蓝讯蓝皮书

2、BT8922D DataSheet.pdf

技术文档

类型标题档案
硬件Schematics

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论