# 單晶片微處理機實習 三月份報告
# 資訊二甲 25號 曾宥閎
## 主題: 使用四位七段顯示器進行上數計時和下數計時
### 實際畫面+電路圖:


### 程式碼:
```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