Arduino官方提供了豐富的驅(qū)動(dòng)庫(kù)來(lái)方便對(duì)外設(shè)進(jìn)行操作,很多愛(ài)好者也在開(kāi)源精神下提供了很多第三方庫(kù)。本篇介紹數(shù)碼管庫(kù)的使用,通過(guò)讀取電位器輸入,使用數(shù)碼管庫(kù)驅(qū)動(dòng)數(shù)碼管顯示對(duì)應(yīng)數(shù)據(jù)。
SevSeg庫(kù)是數(shù)碼管驅(qū)動(dòng)庫(kù),常用于對(duì)4位數(shù)碼管的驅(qū)動(dòng),該庫(kù)可從Arduino IDE管理庫(kù)中搜索安裝,也可從github中獲取,github地址。
1.數(shù)碼管庫(kù)安裝
1. 啟動(dòng)Arduino IDE,點(diǎn)擊「項(xiàng)目」—「加載庫(kù)」—「管理庫(kù)」。

2. 查找「SevSeg」,可以找到兩個(gè)庫(kù),我們選擇第一個(gè),進(jìn)行安裝。

2. 實(shí)驗(yàn)材料
- Uno R3開(kāi)發(fā)板
- 配套USB數(shù)據(jù)線
- 面包板及配套連接線
- 共陰極數(shù)碼管
- 1個(gè)220Ω限流電阻
- 電位器
3. 實(shí)驗(yàn)步驟
1. 根據(jù)原理圖搭建電路。
數(shù)碼管的A,B,C,D,E,F,G,DP引腳分別接入開(kāi)發(fā)板的數(shù)字管腳7,6,5,10,11,8,9,4。數(shù)碼管公共端接限流電阻,電阻另一端接數(shù)字管腳3。電位器中間管腳接A0,兩端分別接5V和GND。
實(shí)驗(yàn)原理圖如下圖所示:

實(shí)物連接圖如下圖所示:

2. 新建sketch,拷貝如下代碼替換自動(dòng)生成的代碼并進(jìn)行保存。
/*
* SevSeg
* 使用數(shù)碼管庫(kù)驅(qū)動(dòng)數(shù)碼管,根據(jù)A0模擬輸入顯示對(duì)應(yīng)數(shù)字
*/
#include "SevSeg.h"
SevSeg sevseg;
byte numDigits = 1; //數(shù)碼管位數(shù)
byte digitPins[] = {3, 2, 2, 2}; //數(shù)碼管公共極連接Arduino的引腳
byte segmentPins[] = {7, 6, 5, 10, 11, 8, 9, 4}; //數(shù)碼管a,b,c,d,e,f,g,dp對(duì)應(yīng)引腳
byte hardwareConfig = COMMON_CATHODE ; // 共陰極數(shù)碼管
int readValue = 0; //保存讀到的模擬值
int showValue = 0; //需要顯示的數(shù)據(jù)
void setup() {
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins); //初始化數(shù)碼管
}
void loop() {
readValue = analogRead(A0); //讀取A0模擬口的數(shù)值(0-5V 對(duì)應(yīng)0-1023取值)
showValue = map(readValue, 0, 1023, 0, 9); //將0-1023之間的數(shù)據(jù)映射成0到9之間的數(shù)據(jù)
sevseg.setNumber(showValue, 1); //數(shù)碼管顯示
sevseg.refreshDisplay(); // 必須重復(fù)運(yùn)行刷新數(shù)碼管顯示
}
3. 連接開(kāi)發(fā)板,設(shè)置好對(duì)應(yīng)端口號(hào)和開(kāi)發(fā)板類(lèi)型,進(jìn)行程序下載。

4. 實(shí)驗(yàn)現(xiàn)象
隨著電位器的轉(zhuǎn)動(dòng),數(shù)碼管顯示0到9的數(shù)字。

5. 庫(kù)函數(shù)介紹
1. sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins)函數(shù):
-
hardwareConfig:使用的是共陽(yáng)極數(shù)碼管還是共陰極數(shù)碼管。
- COMMON_CATHODE:共陰極。
- COMMON_ANODE:共陽(yáng)極。
- numDigits:數(shù)碼管位數(shù),我們這里使用的是一位數(shù)碼管,故其值設(shè)置為1。
- digitPins:數(shù)組形式,用來(lái)存儲(chǔ)數(shù)碼管公共極連接的引腳號(hào)。此庫(kù)多用來(lái)驅(qū)動(dòng)四位數(shù)碼管,本實(shí)驗(yàn)中只用一位,故數(shù)組第一個(gè)成員為3(對(duì)應(yīng)實(shí)際電路連接),其他成員填入未使用的引腳即可。
- segmentPins:數(shù)組形式,用來(lái)存儲(chǔ)數(shù)碼管從a到dp所對(duì)應(yīng)連接的引腳號(hào)。
2. sevseg.setNumber(numToShow, decPlaces)函數(shù):
- numToShow:要顯示的數(shù)據(jù),可以為整數(shù)、浮點(diǎn)數(shù)。
- decPlaces:小數(shù)點(diǎn)顯示的位置,從最低有效位開(kāi)始計(jì)算,若省略或者設(shè)置為-1則表示不顯示小數(shù)點(diǎn)。
3. sevseg.refreshDisplay()函數(shù):
此函數(shù)需要不斷重復(fù)執(zhí)行,反復(fù)刷新才能使數(shù)碼管顯示。若程序中有其他延時(shí)則會(huì)對(duì)顯示產(chǎn)生影響。
6. 實(shí)驗(yàn)分析
程序中使用SevSeg驅(qū)動(dòng)庫(kù),根據(jù)實(shí)際電路連接進(jìn)行庫(kù)的初始化。在loop()函數(shù)中,讀取A0模擬輸入引腳的數(shù)據(jù),通過(guò)map()函數(shù)重新把數(shù)據(jù)映射成數(shù)字0到9,然后使用sevseg.setNumber()函數(shù)進(jìn)行數(shù)據(jù)設(shè)置,然后通過(guò)顯示刷新函數(shù)進(jìn)行刷新顯示。