前言:什麼是七段顯示器?
在 Arduino 實作與電子DIY專案中,七段顯示器(Seven-Segment Display) 是最常見且基礎的數字顯示模組,常用於電子鐘、計數器、溫度顯示器等裝置。
本篇教學將詳細介紹 七段顯示器的運作原理、共陽極與共陰極的差別,並透過 Arduino Uno 板 實作 1 到 8 的數字循環顯示程式。
一、 七段顯示器結構與工作原理
七段顯示器(或稱數碼管)本質上是由 8 個 LED 發光二極體 所組成:
7 個筆劃段(a, b, c, d, e, f, g): 用來拼湊出數字 0~9 與部分英文字母。
1 個小數點段(dp / decimal point): 用於顯示小數點。
這些 LED 依照順時針方向排列,具體引腳名稱如下圖所示:
共陽極(Common Anode)與 共陰極(Common Cathode)差別
根據內部 LED 的連接方式,七段顯示器分為兩種主要類型:
共陰極(Common Cathode):
所有 LED 的負極(GND)連接在一起接地。
控制方式: 控制引腳給 高電位(HIGH / 5V) 時,對應的 LED 段點亮。
共陽極(Common Anode):
所有 LED 的正極(VCC)連接在一起接 5V。
控制方式: 控制引腳給 低電位(LOW / 0V) 時,對應的 LED 段點亮。
💡 本範例以常見的共陰極一位八段顯示器進行實作示範。
二、 實驗所需材料與接線圖
在開始編寫程式之前,請先準備以下電子零件與工具:
🛠️ 所需材料清單
Arduino Uno R3 開發板 × 1
一位八段顯示器(共陰極) × 1
220Ω ~ 330Ω 限流電阻 × 8(保護 LED)
實驗麵包板 × 1
麵包板跳線(杜邦線) × 若干
USB 傳輸線 × 1
🛍️ 還沒有硬體材料嗎? 推薦購買:米羅科技 – Arduino 程式學習爆款套件組(一次購足所有基礎感測器與模組)
🔌 引腳接線對照表 (Pin Mapping)
將 Arduino 數位腳位(Digital Pins)與七段顯示器引腳連接如下:
三、 Arduino 控制七段顯示器程式範例
本程式範例目標為:讓七段顯示器每隔 1 秒依序循環顯示數字 1 到 8。
💻 完整程式碼(使用二維陣列優化版)
//設置控制各段的數位IO脚
int a=7;//定義數位接口7 連接a 七段顯示器
int b=6;// 定義數位接口6 連接b 七段顯示器
int c=5;// 定義數位接口5 連接c 七段顯示器
int d=11;// 定義數位接口11 連接d 七段顯示器
int e=10;// 定義數位接口10 連接e 七段顯示器
int f=8;// 定義數位接口8 連接f 七段顯示器
int g=9;// 定義數位接口9 連接g 七段顯示器
int dp=4;// 定義數位接口4 連接dp 七段顯示器
void digital_1(void) //顯示數字1
{
unsigned char j;
digitalWrite(c,HIGH);//给數位接口5高電位,點亮c段
digitalWrite(b,HIGH);//點亮b段
for(j=7;j<=11;j++)//熄滅其余段
digitalWrite(j,LOW);
digitalWrite(dp,LOW);//熄滅小數點DP段
}
void digital_2(void) //顯示數字2
{
unsigned char j;
digitalWrite(b,HIGH);
digitalWrite(a,HIGH);
for(j=9;j<=11;j++)
digitalWrite(j,HIGH);
digitalWrite(dp,LOW);
digitalWrite(c,LOW);
digitalWrite(f,LOW);
}
void digital_3(void) //顯示數字3
{
unsigned char j;
digitalWrite(g,HIGH);
digitalWrite(d,HIGH);
for(j=5;j<=7;j++)
digitalWrite(j,HIGH);
digitalWrite(dp,LOW);
digitalWrite(f,LOW);
digitalWrite(e,LOW);
}
void digital_4(void) //顯示數字4
{
digitalWrite(c,HIGH);
digitalWrite(b,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(dp,LOW);
digitalWrite(a,LOW);
digitalWrite(e,LOW);
digitalWrite(d,LOW);
}
void digital_5(void) //顯示數字5
{
unsigned char j;
for(j=7;j<=9;j++)
digitalWrite(j,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(dp,LOW);
digitalWrite(b,LOW);
digitalWrite(e,LOW);
}
void digital_6(void) //顯示數字6
{
unsigned char j;
for(j=7;j<=11;j++)
digitalWrite(j,HIGH);
digitalWrite(c,HIGH);
digitalWrite(dp,LOW);
digitalWrite(b,LOW);
}
void digital_7(void) //顯示數字7
{
unsigned char j;
for(j=5;j<=7;j++)
digitalWrite(j,HIGH);
digitalWrite(dp,LOW);
for(j=8;j<=11;j++)
digitalWrite(j,LOW);
}
void digital_8(void) //顯示數字8
{
unsigned char j;
for(j=5;j<=11;j++)
digitalWrite(j,HIGH);
digitalWrite(dp,LOW);
}
void setup()
{
int i;//定义变量
for(i=4;i<=11;i++)
pinMode(i,OUTPUT);//設置4~11 引脚為輸出模式
}
void loop()
{
while(1)
{
digital_1();//顯示數字1
delay(2000);
digital_2();//顯示數字2
delay(1000);
digital_3();//顯示數字3
delay(1000);
digital_4();//顯示數字4
delay(1000);
digital_5();//顯示數字5
delay(1000);
digital_6();//顯示數字6
delay(1000);
digital_7();//顯示數字7
delay(1000);
digital_8();//顯示數字8
delay(1000);
}
}
四、 常見問題與除錯 (FAQ)
Q1: 為什麼顯示器上的數字顯示不完整或缺筆畫?
解答: 請檢查杜邦線接線是否鬆脫,並確認腳位是否與程式中
segmentPins定義的數字完全一致。
Q2: 顯示器亮度太高或有發熱現象?
解答: 請務必在 Arduino 腳位與七段顯示器引腳之間串聯 220Ω~330Ω 的限流電阻,避免發光二極體因過載燒毀。
🔗 延伸閱讀與推薦課程


