# 單晶片微處理機實習 三月份報告 # 資訊二甲 25號 曾宥閎 ## 主題: 使用四位七段顯示器進行上數計時和下數計時 ### 實際畫面+電路圖: ![](https://i.imgur.com/m16DiLG.gif) ![](https://i.imgur.com/3yNc1rr.png) ### 程式碼: ```cpp=! #include <math.h> int led[] = {13,12,14,27,26,25,33}; // LED腳位 int dig[] = {5,4,2,15}; //LED 選擇腳位 int btn = 35; //PushButton 腳位 #define btnRead digitalRead(btn) int tag[] = {0x3f, 0x06,0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x00}; //0-9十六進制 int k=0; int state = 0; int ledShowDelay = 50; //3-1001111 void setup() { //Initial for(int i=0;i<7;i++){ pinMode(led[i], OUTPUT); digitalWrite(led[i], HIGH); } for(int i=0;i<2;i++){ pinMode(dig[i], OUTPUT); } pinMode(btn, INPUT_PULLUP); } void loop() { if(state == 0){ //上數計時 if(k >= 20){ k=20; out2(); sw(); return; } for(int i=0;i<ledShowDelay;i++){ out2(); } k++; } else if(state == 1){ //下數計時 if(k==0) k = 36; for(int i=0;i<ledShowDelay;i++){ out2(); } k--; } sw(); delay(50); } void sw(){ //按鈕切換 if(btnRead == 0){ while(btnRead == 0); state++; } if(state > 1) state = 0; } void display(int number){ //顯示數字 for(int i = 0; i < 7; i++){ if(number % 2 == 0){ digitalWrite(led[i], HIGH); } else{ digitalWrite(led[i], LOW); } number /= 2; } } void out2(){ //迴圈設計 for(int i=0;i<2;i++){ for(int j=0;j<2;j++){ if(j==i){ digitalWrite(dig[j], HIGH); } else{ digitalWrite(dig[j], LOW); } } display(tag[int(k/pow(10,i))%10]); delay(2); display(tag[10]); } } void old_out4(){ //無迴圈設計 digitalWrite(dig[0], HIGH); digitalWrite(dig[1], LOW); digitalWrite(dig[2], LOW); digitalWrite(dig[3], LOW); display(tag[k%10]); delay(2); display(tag[10]); digitalWrite(dig[0], LOW); digitalWrite(dig[1], HIGH); digitalWrite(dig[2], LOW); digitalWrite(dig[3], LOW); display(tag[(k/10)%10]); delay(2); display(tag[10]); digitalWrite(dig[0], LOW); digitalWrite(dig[1], LOW); digitalWrite(dig[2], HIGH); digitalWrite(dig[3], LOW); display(tag[(k/100)%10]); delay(2); display(tag[10]); digitalWrite(dig[0], LOW); digitalWrite(dig[1], LOW); digitalWrite(dig[2], LOW); digitalWrite(dig[3], HIGH); display(tag[(k/1000)%10]); delay(2); display(tag[10]); } ``` ### 製作 ESP32 的四位七段顯示器需要以下相關知識: 1. ESP32 基礎知識:了解 ESP32 的硬體結構、引腳功能、編程方式等基本概念。 1. 電子元件知識:了解七段顯示器的原理、引腳配置、操作方式、以及需要使用的其他電子元件如電阻等。 1. 編程技能:能夠使用 Arduino IDE 或其他相關編程軟體進行 ESP32 程序開發,並熟練掌握 C 或 C++ 編程語言。 1. 電路設計技能:能夠將 ESP32 和七段顯示器連接起來,設計適當的電路,並了解電路中各個元件的作用和選擇。 ### 製作 ESP32 的四位七段顯示器的心得: 當我學習如何做 ESP32 的四位七段顯示器時,我首先需要了解七段顯示器的原理和操作方式,並熟悉 ESP32 的硬體結構和編程方式。然後,我開始進行具體的實作。 在實作過程中,我選擇了四位的七段顯示器和其他電子元件,並按照腳位位置將它們連接起來。接著,我使用 Arduino IDE 編寫 ESP32 程序,控制七段顯示器顯示數字。我編寫的程式可以讓七段顯示器上數到20,下數0~36。 實作中最重要的是切換功能的實現。為了實現上下切換,我使用了按鈕開關state變量來檢測按鈕狀態的變化。當按鈕被按下時,調用相應的函數sw(),從而切換顯示模式。切換模式後,我需要更新顯示器的數值,這可以通過修改 ESP32 程序中的變量值來實現。 在完成實作後,我進行了測試和調試,以確保計時器和計數器顯示的數字和功能都正確。 總之,做 ESP32 的四位七段顯示器需要結合電子元件知識、程式編寫能力、電路設計技能以及實踐經驗,通過多次嘗試和調試,最終實現上下數計時的切換功能。這是一個很好的學習過程,讓我掌握了更多的技能和知識。 #### 實作網址: https://wokwi.com/projects/360335221996874753 #### 資料網址: https://hackmd.io/@nQh0bG6bQgqQCVvWz0EinA/Sybv0igbn