Basic Tutorial for Arduino, 入門篇

【Arduino入門教學】第15篇:七段顯示器原理、接線圖與程式範例(共陽/共陰極解說)

前言:什麼是七段顯示器?

在 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 的連接方式,七段顯示器分為兩種主要類型:

  1. 共陰極(Common Cathode):

    • 所有 LED 的負極(GND)連接在一起接地。

    • 控制方式: 控制引腳給 高電位(HIGH / 5V) 時,對應的 LED 段點亮。

  2. 共陽極(Common Anode):

    • 所有 LED 的正極(VCC)連接在一起接 5V。

    • 控制方式: 控制引腳給 低電位(LOW / 0V) 時,對應的 LED 段點亮。

💡 本範例以常見的共陰極一位八段顯示器進行實作示範。

二、 實驗所需材料與接線圖

在開始編寫程式之前,請先準備以下電子零件與工具:

🛠️ 所需材料清單

  • Arduino Uno R3 開發板 × 1

  • 一位八段顯示器(共陰極) × 1

  • 220Ω ~ 330Ω 限流電阻 × 8(保護 LED)

  • 實驗麵包板 × 1

  • 麵包板跳線(杜邦線) × 若干

  • USB 傳輸線 × 1

🛍️ 還沒有硬體材料嗎? 推薦購買:米羅科技 – Arduino 程式學習爆款套件組(一次購足所有基礎感測器與模組)

👍爆款推薦:程式學習套件組

購買網址:shop.mirotek.com.tw

🔌 引腳接線對照表 (Pin Mapping)

將 Arduino 數位腳位(Digital Pins)與七段顯示器引腳連接如下:

七段顯示器段別Arduino Uno 腳位說明
aPin 7上筆劃
bPin 6右上筆劃
cPin 5右下筆劃
dPin 11下筆劃
ePin 10左下筆劃
fPin 8左上筆劃
gPin 9中間筆劃
dpPin 4小數點
GNDGND共用接地端

三、 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Ω 的限流電阻,避免發光二極體因過載燒毀。

🔗 延伸閱讀與推薦課程

 

 

 

 

 

相關文章