中科藍訊 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