搜尋程式碼

ESP32 教學 10/55 - 使用七段顯示器 74HC595 嘅數字計數器 - ESP32 IoT 學習套件

ESP32 教學 10/55 - 使用七段顯示器 74HC595 嘅數字計數器 - ESP32 IoT 學習套件

喺呢個教學入面,我哋會用ESP32微控制器控制一個七段顯示器嚟整一個數字計數器。個計數器會由0數到9,然後再倒數返去0,清楚咁展示成個計數過程。我哋仲會探討點樣逐個段開著,同埋喺七段顯示器上面顯示英文字母。

ESP32_Animte7Segment-segments

呢個項目用咗一個74HC595移位暫存器嚟控制個顯示器,等我哋可以有效率咁管理啲段,唔使用到ESP32太多GPIO腳位。透過將二進制數值送去移位暫存器,我哋可以點亮相應嘅段嚟顯示數字同字母。想深入了解個過程嘅話,可以參考條片(片入面03:15嘅位置)。

ESP32_Animte7Segment-letters

硬件解說

呢個項目嘅主要零件包括ESP32微控制器、一個74HC595移位暫存器,同埋一個七段顯示器。ESP32係一個功能強大嘅微控制器,內置Wi-Fi同藍牙功能,好啱用喺物聯網項目。74HC595係一個移位暫存器,等我哋可以用好少輸入腳位嚟控制好多個輸出。佢嘅原理係將串行數據轉換成並行輸出,啱晒用嚟驅動七段顯示器。

七段顯示器由七粒獨立LED組成,排成一個8字形。每一段都可以透過向移位暫存器發送相應嘅二進制數值嚟開或關。例如,要顯示數字0,除咗中間嗰段(G)之外,所有段都要點亮。

ESP32_Animte7Segment-counter-up-down
ESP32_Animte7Segment-counter-1

數據手冊細節

製造商 Texas Instruments
零件編號 74HC595
邏輯/IO電壓 2 V 至 6 V
供電電壓 2 V 至 6 V
輸出電流(每通道) 6 mA
峰值電流(每通道) 35 mA
PWM頻率指引 最高 1 kHz
輸入邏輯閾值 0.3 VCC 至 0.7 VCC
電壓降 / RDS(on) / 飽和 最高 0.2 V
熱限制 125 °C
封裝 DIP-16
備註 / 變體 有多種封裝可供選擇

 

  • 確保供電電壓正確(2 V 至 6 V)。
  • 限制輸出電流以防過熱。
  • 每一段用獨立電阻嚟達到最佳亮度。
  • 小心接線,避免短路同錯誤連接。
  • 小心跟住引腳定義,避免配置錯誤。

接線指示

ESP32-10-seven-segment-wiring

首先設定好你嘅麵包板。連接接地軌(藍線)同電源軌(紅線)。接地應該連接去麵包板一邊嘅藍線,而電源就連接去另一邊嘅紅線。用一條黑線將ESP32嘅接地連接去接地軌,再用一條紅線將ESP32嘅3.3V腳連接去電源軌。

跟住,將74HC595移位暫存器插入麵包板,確保凹口方向正確。將第11腳(DS)連接去ESP32嘅第25腳,第12腳(SH_CP)連接去第26腳,第14腳(ST_CP)連接去第27腳。將移位暫存器嘅接地(第8腳)連接去接地軌,第10腳(MR)連接去電源軌嚟啟動佢。

至於七段顯示器,將對應段(a-g)嘅腳連接去移位暫存器嘅輸出腳。每一段串聯一個電阻(220歐姆)嚟限制電流。確保公共腳連接正確,根據你嘅顯示器類型,可以係共陽極或者共陰極。

代碼示例同講解

喺setup函數入面,我哋首先將連接去移位暫存器嘅腳定義為輸出。咁樣確保我哋嘅ESP32可以控制發送去顯示器嘅數據。

void setup ()
{
  //將腳設為輸出
  pinMode(STcp,OUTPUT);
  pinMode(SHcp,OUTPUT);
  pinMode(DS,OUTPUT);
}

呢度,我哋定義STcpSHcpDS分別係連接去移位暫存器ST_CP、SH_CP同DS嘅腳。將呢啲腳設為輸出,等我哋可以控制個移位暫存器。

程式嘅主循環由0數到9,用shiftOut函數將相應嘅數值發送去顯示器。

for(int num = 0; num <10; num++)
{
    digitalWrite(STcp,LOW); //接地ST_CP,傳輸期間保持低電平
    shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
    digitalWrite(STcp,HIGH); //拉高ST_CP嚟儲存數據
    delay(1000);
}

呢個迴圈會遞增num變數,每秒將datArray入面對應嘅值發送去顯示器。shiftOut函數會將數據傳送去移位暫存器,然後點亮相應嘅段。

示範/預期效果

接好線並上載代碼之後,你應該會見到七段顯示器由0數到9,短暫停頓之後再倒數返去0。每個數字會顯示一秒。如果你想加快數數速度,可以調整迴圈入面嘅延遲(影片15:30有講)。

當你單獨控制每一段嘅時候,記得要傳送正確嘅二進制值嚟顯示字母或者特定嘅段。如果顯示器睇落好暗,可以考慮為每一段加獨立電阻,確保成個顯示器嘅亮度一致。

影片時間戳

  • 00:00 開始
  • 1:53 七段顯示器介紹
  • 4:38 接線講解
  • 13:15 Arduino代碼-1
  • 17:01 選擇COM端口同ESP32開發板
  • 18:43 示範-1
  • 20:13 只顯示一個數字
  • 21:38 上落計數器
  • 23:07 逐段開/關
  • 24:53 顯示A、B、C、D、E同F

圖片

ESP32_Animte7Segment-counter-1
ESP32_Animte7Segment-counter-1
ESP32_Animte7Segment-counter-up-down
ESP32_Animte7Segment-counter-up-down
ESP32_Animte7Segment-letters
ESP32_Animte7Segment-letters
ESP32_Animte7Segment-segments
ESP32_Animte7Segment-segments
ESP32-10-seven-segment-schematic
ESP32-10-seven-segment-schematic
ESP32-10-seven-segment-wiring
ESP32-10-seven-segment-wiring
809-ESP32 Tutorial 10/55 - Arduino code for 2.5 7 segment
語言: C++
const int STcp = 27;//ST_CP
const int SHcp = 26;//SH_CP 
const int DS = 25; //DS 

int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void setup ()
{
  //set pins to output
  pinMode(STcp,OUTPUT);
  pinMode(SHcp,OUTPUT);
  pinMode(DS,OUTPUT);
}
void loop()
{
  for(int num = 0; num <10; num++)
  {
    digitalWrite(STcp,LOW); //ground ST_CP and hold low for as long as you are transmitting
    shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
    digitalWrite(STcp,HIGH); //pull the ST_CPST_CP to save the data
    delay(1000);
  }
}

資源與參考資料

文件📁

冇文件可用。