Arduino官方提供了豐富的驅動庫來方便對外設進行操作,很多愛好者也在開源精神下提供了很多第三方庫。本篇介紹數碼管庫的使用,通過讀取電位器輸入,使用數碼管庫驅動數碼管顯示對應數據。
SevSeg庫是數碼管驅動庫,常用於對4位數碼管的驅動,該庫可從Arduino IDE管理庫中搜索安裝,也可從github中獲取,github地址。
1.數碼管庫安裝
1. 啓動Arduino IDE,點擊「項目」—「加載庫」—「管理庫」。
2. 查找「SevSeg」,可以找到兩個庫,我們選擇第一個,進行安裝。
2. 實驗材料
- Uno R3開發板
- 配套USB數據線
- 麪包板及配套連接線
- 共陰極數碼管
- 1個220Ω限流電阻
- 電位器
3. 實驗步驟
1. 根據原理圖搭建電路。
數碼管的A,B,C,D,E,F,G,DP引腳分別接入開發板的數字管腳7,6,5,10,11,8,9,4。數碼管公共端接限流電阻,電阻另一端接數字管腳3。電位器中間管腳接A0,兩端分別接5V和GND。
實驗原理圖如下圖所示:
實物連接圖如下圖所示:
2. 新建sketch,拷貝如下代碼替換自動生成的代碼並進行保存。
/*
* SevSeg
* 使用數碼管庫驅動數碼管,根據A0模擬輸入顯示對應數字
*/
#include "SevSeg.h"
SevSeg sevseg;
byte numDigits = 1; //數碼管位數
byte digitPins[] = {3, 2, 2, 2}; //數碼管公共極連接Arduino的引腳
byte segmentPins[] = {7, 6, 5, 10, 11, 8, 9, 4}; //數碼管a,b,c,d,e,f,g,dp對應引腳
byte hardwareConfig = COMMON_CATHODE ; // 共陰極數碼管
int readValue = 0; //保存讀到的模擬值
int showValue = 0; //需要顯示的數據
void setup() {
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins); //初始化數碼管
}
void loop() {
readValue = analogRead(A0); //讀取A0模擬口的數值(0-5V 對應0-1023取值)
showValue = map(readValue, 0, 1023, 0, 9); //將0-1023之間的數據映射成0到9之間的數據
sevseg.setNumber(showValue, 1); //數碼管顯示
sevseg.refreshDisplay(); // 必須重複運行刷新數碼管顯示
}
3. 連接開發板,設置好對應端口號和開發板類型,進行程序下載。
4. 實驗現象
隨着電位器的轉動,數碼管顯示0到9的數字。
5. 庫函數介紹
1. sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins)函數:
-
hardwareConfig:使用的是共陽極數碼管還是共陰極數碼管。
- COMMON_CATHODE:共陰極。
- COMMON_ANODE:共陽極。
- numDigits:數碼管位數,我們這裏使用的是一位數碼管,故其值設置爲1。
- digitPins:數組形式,用來存儲數碼管公共極連接的引腳號。此庫多用來驅動四位數碼管,本實驗中只用一位,故數組第一個成員爲3(對應實際電路連接),其他成員填入未使用的引腳即可。
- segmentPins:數組形式,用來存儲數碼管從a到dp所對應連接的引腳號。
2. sevseg.setNumber(numToShow, decPlaces)函數:
- numToShow:要顯示的數據,可以爲整數、浮點數。
- decPlaces:小數點顯示的位置,從最低有效位開始計算,若省略或者設置爲-1則表示不顯示小數點。
3. sevseg.refreshDisplay()函數:
此函數需要不斷重複執行,反覆刷新才能使數碼管顯示。若程序中有其他延時則會對顯示產生影響。
6. 實驗分析
程序中使用SevSeg驅動庫,根據實際電路連接進行庫的初始化。在loop()函數中,讀取A0模擬輸入引腳的數據,通過map()函數重新把數據映射成數字0到9,然後使用sevseg.setNumber()函數進行數據設置,然後通過顯示刷新函數進行刷新顯示。