本篇介紹數碼管顯示器件,通過控制一位共陰極數碼管動態顯示數字0到9來了解數碼管的使用。
1. 數碼管介紹
數碼管,又稱LED數碼管,是常見的用來顯示數字的電子器件。通常由八段發光二極管封裝在一起組成“8”字形狀,外加一個小數點。數碼管每一段都是一個獨立的LED,通過控制相應段LED的亮滅使其組成相應數字形狀來顯示數字。
數碼管的8個LED並聯在一起,根據公共管腳的不同,分爲共陽極數碼管和共陰極數碼管兩種。其區別就是公共管腳是LED燈的正極還是負極。
如上圖,數碼管8個段分別命名爲A,B,C,D,E,F,G,DP,其封裝共10個引腳,其中上下方正中間的是公共極,其他引腳分別對應8個LED的另一端。
2. 實驗材料
- Uno R3開發板
- 配套USB數據線
- 麪包板及配套連接線
- 共陰極數碼管
- 1個220Ω限流電阻
那麼如何讓數碼管來顯示數字呢?比如顯示數字0,我們只需要點亮A,B,C,D,E,F段LED,熄滅G,DP段LED即可。
3. 實驗步驟
1. 根據原理圖搭建電路。
數碼管的A,B,C,D,E,F,G,DP引腳分別接入開發板的數字管腳7,6,5,10,11,8,9,4。數碼管公共端接限流電阻,電阻另一端接GND。
實驗原理圖如下圖所示:
實物連接圖如下圖所示:
2. 新建sketch,拷貝如下代碼替換自動生成的代碼並進行保存。
/*
NixieTube
控制共陰極數碼管顯示數字0到9
*/
//設置控制各段的數字IO腳,具體幾號引腳對應哪一段,來源爲數碼管官方引腳圖。
int pin_a = 7;
int pin_b = 6;
int pin_c = 5;
int pin_d = 10;
int pin_e = 11;
int pin_f = 8;
int pin_g = 9;
int pin_p = 4;
//根據共陰極數碼管段碼錶定義0~9顯示的各段開關狀態
int numTable[10][8] = {
//1爲點亮,0爲關閉
//a b c d e f g dp
{1, 1, 1, 1, 1, 1, 0, 0}, //0
{0, 1, 1, 0, 0, 0, 0, 0}, //1
{1, 1, 0, 1, 1, 0, 1, 0}, //2
{1, 1, 1, 1, 0, 0, 1, 0}, //3
{0, 1, 1, 0, 0, 1, 1, 0}, //4
{1, 0, 1, 1, 0, 1, 1, 0}, //5
{1, 0, 1, 1, 1, 1, 1, 0}, //6
{1, 1, 1, 0, 0, 0, 0, 0}, //7
{1, 1, 1, 1, 1, 1, 1, 0}, //8
{1, 1, 1, 1, 0, 1, 1, 0}, //9
};
void setup()
{
for (int i = 4; i <= 11; i++)
{
pinMode(i, OUTPUT); //設置4~11引腳爲輸出模式
}
}
void loop()
{
for (int i = 0; i < 10; i++)//以此顯示數字0到9
{
digitalWrite(pin_a, numTable[i][0]); //設置a 引腳的電平
digitalWrite(pin_b, numTable[i][1]); //設置b 引腳的電平
digitalWrite(pin_c, numTable[i][2]); //設置c 引腳的電平
digitalWrite(pin_d, numTable[i][3]); //設置d 引腳的電平
digitalWrite(pin_e, numTable[i][4]); //設置e 引腳的電平
digitalWrite(pin_f, numTable[i][5]); //設置f 引腳的電平
digitalWrite(pin_g, numTable[i][6]); //設置g 引腳的電平
digitalWrite(pin_p, numTable[i][7]); //設置dp引腳的電平
delay(200);
}
}
3. 連接開發板,設置好對應端口號和開發板類型,進行程序下載。
3. 實驗現象
數碼管循環顯示數字0到9。
4. 實驗分析
程序中定義了一個二位數組用來存儲0到9的段碼顯示。然後在loop中通過for()循環遍歷顯示0到9,每個數字分別讀取對應的段碼錶來控制相應段LED的亮滅。
根據使用場所和需求的不同,LED被封裝成不同類型的數碼管,但其基本原理都是相同的,都需要控制每一個LED的亮滅最終拼湊成需要顯示的數字、字母甚至是漢字。