麵包版請放置在桌面上使用,
(懸空插麵包板使用時 金屬彈片因雙面膠支撐較低而發生掉落,進而產生故障)。
LED 為發光二極體,將其排列七個LED排列可成七段顯示器(一般實務上還有小數點或再添加時鐘的:符號,控制方法皆相同)
以下圖片來源:超圖解arduino互動設計入門,旗標圖書。
七段顯示器的 顯示設計
七段顯示的顯示 設定(數位邏輯 解碼器設計) ,以共陽極為例(因七段顯示社設計解碼器時會有BCD碼對應輸入,請省略)
共陽極七段顯示器,要點亮的部份給0=LOW 低電位。
動作分析表 如0~9顯示的LED編號位置與顯示關係。
七段顯示器與ESP32接線 <網路硬碟>
七段顯示器與ESP32的腳位使用係因使用fritzing繪圖的因素而安排(線路不交錯)。
七段 a >> 25
七段 b >> 26
七段 c >> 14
七段 d >> 16
七段 e >> 17
七段 f >> 33
七段 g >> 32
七段dp >> 27
共陽極接電阻,是簡易作法,會造長LED顯示亮度不均勻情況發生,正確應該是每個LED腳都要接上限劉電阻。
七段顯示器 與 程式 {簡單程式 直述方式} 7segLED_com0.ino
/*
7segLED_com0
for ESP32_NodeMCU-32s
七段顯示器 >>
*
*/
#define t 1000
#define a 25
#define b 26
#define c 14
#define d 16
#define e 17
#define f 33
#define g 32
#define p 27
#define x 1 // 1為共陽極 0為共陰極
void setup() {
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(p, OUTPUT);
for(int i =1;i<=3;i++)
{
digitalWrite(a, 1);
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 1);
digitalWrite(g, 1);
digitalWrite(p, 1);
delay(500);
digitalWrite(a, 0);
digitalWrite(b, 0);
digitalWrite(c, 0);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 0);
digitalWrite(g, 0);
digitalWrite(p, 0);
delay(500);
}
}
void loop() {
//short x=1;// 1為共陽極 0為共陰極
while(x==0){ //共陰極
//0
digitalWrite(a, 1);
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 1);
digitalWrite(g, 0);
digitalWrite(p, 0);
delay(t);
//1
digitalWrite(a, 0);
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 0);
digitalWrite(g, 0);
digitalWrite(p, 0);
delay(t);
//2
digitalWrite(a, 1);
digitalWrite(b, 1);
digitalWrite(c, 0);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 0);
digitalWrite(g, 1);
digitalWrite(p, 0);
delay(t);
//3
digitalWrite(a, 1);
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 1);
digitalWrite(e, 0);
digitalWrite(f, 0);
digitalWrite(g, 1);
digitalWrite(p, 0);
delay(t);
//4
digitalWrite(a, 0);
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 1);
digitalWrite(g, 1);
digitalWrite(p, 0);
delay(t);
//5
digitalWrite(a, 1);
digitalWrite(b, 0);
digitalWrite(c, 1);
digitalWrite(d, 1);
digitalWrite(e, 0);
digitalWrite(f, 1);
digitalWrite(g, 1);
digitalWrite(p, 0);
delay(t);
//6
digitalWrite(a, 1);
digitalWrite(b, 0);
digitalWrite(c, 1);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 1);
digitalWrite(g, 1);
digitalWrite(p, 0);
delay(t);
//7
digitalWrite(a, 1);
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 0);
digitalWrite(g, 0);
digitalWrite(p, 0);
delay(t);
//8
digitalWrite(a, 1);
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 1);
digitalWrite(g, 1);
digitalWrite(p, 0);
delay(t);
//9
digitalWrite(a, 1);
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 1);
digitalWrite(g, 1);
digitalWrite(p, 0);
delay(t);
//H
digitalWrite(a, 0);
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 0);
digitalWrite(e, 1);
digitalWrite(f, 1);
digitalWrite(g, 1);
digitalWrite(p, 0);
delay(t);
//L
digitalWrite(a, 0);
digitalWrite(b, 0);
digitalWrite(c, 0);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 1);
digitalWrite(g, 0);
digitalWrite(p, 0);
delay(t);
} //共陰極結束
while(x==1){ //共陽極
//0
digitalWrite(a, 0);
digitalWrite(b, 0);
digitalWrite(c, 0);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 0);
digitalWrite(g, 1);
digitalWrite(p, 1);
delay(t);
//1
digitalWrite(a, 1);
digitalWrite(b, 0);
digitalWrite(c, 0);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 1);
digitalWrite(g, 1);
digitalWrite(p, 1);
delay(t);
//2
digitalWrite(a, 0);
digitalWrite(b, 0);
digitalWrite(c, 1);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 1);
digitalWrite(g, 0);
digitalWrite(p, 1);
delay(t);
//3
digitalWrite(a, 0);
digitalWrite(b, 0);
digitalWrite(c, 0);
digitalWrite(d, 0);
digitalWrite(e, 1);
digitalWrite(f, 1);
digitalWrite(g, 0);
digitalWrite(p, 1);
delay(t);
//4
digitalWrite(a, 1);
digitalWrite(b, 0);
digitalWrite(c, 0);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 0);
digitalWrite(g, 0);
digitalWrite(p, 1);
delay(t);
//5
digitalWrite(a, 0);
digitalWrite(b, 1);
digitalWrite(c, 0);
digitalWrite(d, 0);
digitalWrite(e, 1);
digitalWrite(f, 0);
digitalWrite(g, 0);
digitalWrite(p, 1);
delay(t);
//6
digitalWrite(a, 0);
digitalWrite(b, 1);
digitalWrite(c, 0);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 0);
digitalWrite(g, 0);
digitalWrite(p, 1);
delay(t);
//7
digitalWrite(a, 0);
digitalWrite(b, 0);
digitalWrite(c, 0);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 1);
digitalWrite(g, 1);
digitalWrite(p, 1);
delay(t);
//8
digitalWrite(a, 0);
digitalWrite(b, 0);
digitalWrite(c, 0);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 0);
digitalWrite(g, 0);
digitalWrite(p, 1);
delay(t);
//9
digitalWrite(a, 0);
digitalWrite(b, 0);
digitalWrite(c, 0);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 0);
digitalWrite(g, 0);
digitalWrite(p, 1);
delay(t);
//H
digitalWrite(a, 1);
digitalWrite(b, 0);
digitalWrite(c, 0);
digitalWrite(d, 1);
digitalWrite(e, 0);
digitalWrite(f, 0);
digitalWrite(g, 0);
digitalWrite(p, 1);
delay(t);
//L
digitalWrite(a, 1);
digitalWrite(b, 1);
digitalWrite(c, 1);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 0);
digitalWrite(g, 1);
digitalWrite(p, 1);
delay(t);
} //共陽極結束
}
使用陣列與迴圈的目的
建立顯示陣列值>>直接透過迴圈建立七段顯示器查表法>>顯示對應的結果,如有需修正顯示狀態直接修正內容即可。
建立 七段顯示器使用的函數>>未來使用時只需要呼叫 "sevenSegWrite(顯示);"
//7seg_array_F.ino
// 七段顯示器製作倒數功能9>8>7>6>5>4>3>2>1>0 (v2)
// define the LED digit patterns, from 0 - 9
// 1 = LED on, 0 = LED off, in this order:
// Arduino uno pin: 2,3,4,5,6,7,8 (Mapping a,b,c,d,e,f,g,dp of Seven-Segment LED)
// Esp32s pin:25,26,27,12,13,33,32,27 (Mapping a,b,c,d,e,f,g,dp of Seven-Segment LED)
// p, g, f, e, d, c, b, a
char segpin[]={27,32,33,17,16,14,26,25};
// p,g,f,e,d,c,b,a 共陽極
byte seven_seg_digits[][8] = { { 1,1,0,0,0,0,0,0 }, // = 0
{ 1,1,1,1,1,0,0,1 }, // = 1
{ 1,0,1,0,0,1,0,0 }, // = 2
{ 1,0,1,1,0,0,0,0 }, // = 3
{ 1,0,0,1,1,0,0,1 }, // = 4
{ 1,0,0,1,0,0,1,0 }, // = 5
{ 1,0,0,0,0,0,1,1 }, // = 6
{ 1,1,1,1,1,0,0,0 }, // = 7
{ 1,0,0,0,0,0,0,0 }, // = 8
{ 1,0,0,1,1,0,0,0 } // = 9
};
// 在七段顯示器上顯示指定的一個數字
void sevenSegWrite(byte digit) {
for (byte seg = 0; seg <8; ++seg)
digitalWrite(segpin[seg], seven_seg_digits[digit][seg]);// 共陽極 // digitalWrite(segpin[seg], !seven_seg_digits[digit][seg]);// 共陰極
}
void setup() {
for(int i=0;i<8;i++){
pinMode(segpin[i], OUTPUT);
digitalWrite(segpin[i], 0);
}
delay(2000);
for(int i=0;i<3;i++){
for(int j=0;j<8;j++)
digitalWrite(segpin[j], 0);
delay(500);
for(int j=0;j<8;j++)
digitalWrite(segpin[j], 1);
delay(500);
}
}
void loop() {
for (byte digit = 10; digit > 0; --digit) {
delay(1000);
sevenSegWrite(digit - 1);
}
delay(4000);// 暫停 4 秒鐘
}
// 七段顯示器製作倒數功能 (v2)
// define the LED digit patterns, from 0 - 9
// 0 = LED on, 1 = LED off, in this order:
// Arduino uno pin: 2,3,4,5,6,7,8 (Mapping a,b,c,d,e,f,g,dp of Seven-Segment LED)
// Esp32s pin:25,26,27,12,13,33,32,27 (Mapping a,b,c,d,e,f,g,dp of Seven-Segment LED)
// p, g, f, e, d, c, b, a
char segpin[] = {27, 32, 33, 13, 12, 14, 26, 25};
// p,g,f,e,d,c,b,a 共陽極
byte seven_seg_digits[][8] = { { 1, 1, 0, 0, 0, 0, 0, 0 }, // = 0
{ 1, 1, 1, 1, 1, 0, 0, 1 }, // = 1
{ 1, 0, 1, 0, 0, 1, 0, 0 }, // = 2
{ 1, 0, 1, 1, 0, 0, 0, 0 }, // = 3
{ 1, 0, 0, 1, 1, 0, 0, 1 }, // = 4
{ 1, 0, 0, 1, 0, 0, 1, 0 }, // = 5
{ 1, 0, 0, 0, 0, 0, 1, 1 }, // = 6
{ 1, 1, 1, 1, 1, 0, 0, 0 }, // = 7
{ 1, 0, 0, 0, 0, 0, 0, 0 }, // = 8
{ 1, 0, 0, 1, 1, 0, 0, 0 } // = 9
};
// 在七段顯示器上顯示指定的一個數字
void sevenSegWrite(byte digit) {
for (byte seg = 0; seg < 8; ++seg)
digitalWrite(segpin[seg], seven_seg_digits[digit][seg]);// 共陽極 // digitalWrite(segpin[seg], !seven_seg_digits[digit][seg]);// 共陰極
}
void setup() {
Serial.begin(9600);
for (int i = 0; i < 8; i++) {
pinMode(segpin[i], OUTPUT);
digitalWrite(segpin[i], 0);
}
delay(2000);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 8; j++)
digitalWrite(segpin[j], 0);
delay(500);
for (int j = 0; j < 8; j++)
digitalWrite(segpin[j], 1);
delay(500);
}
}
int x;
void loop() {
if (Serial.available()) {
x = Serial.read();
Serial.write(x);
Serial.println();
Serial.print(" ascii= ");
Serial.println(x);
if (x >= 48 && x <= 57) //限制0~9的數字才會輸出到LED
sevenSegWrite(x - 48);
}
delay(1000);// 暫停 4 秒鐘
}
//7seg_array_AH.ino
// 七段顯示器製作倒數功能 (v2)
// define the LED digit patterns, from 0 - 9
// 1 = LED on, 0 = LED off, in this order:
// Arduino uno pin: 2,3,4,5,6,7,8 (Mapping a,b,c,d,e,f,g,dp of Seven-Segment LED)
// Esp32s pin:25,26,27,12,13,33,32,27 (Mapping a,b,c,d,e,f,g,dp of Seven-Segment LED)
// p, g, f, e, d, c, b, a
char segpin[]={27,32,33,17,16,14,26,25};
// p,g,f,e,d,c,b,a 共陽極
byte seven_seg_digits[][8] = { { 1,1,0,0,0,0,0,0 }, // = 0
{ 1,1,1,1,1,0,0,1 }, // = 1
{ 1,0,1,0,0,1,0,0 }, // = 2
{ 1,0,1,1,0,0,0,0 }, // = 3
{ 1,0,0,1,1,0,0,1 }, // = 4
{ 1,0,0,1,0,0,1,0 }, // = 5
{ 1,0,0,0,0,0,1,0 }, // = 6
{ 1,1,1,1,1,0,0,0 }, // = 7
{ 1,0,0,0,0,0,0,0 }, // = 8
{ 1,0,0,1,0,0,0,0 }, // = 9
{ 1,0,0,0,1,0,0,0 }, // = A
{ 1,0,0,0,0,0,1,1 }, // = B
{ 1,1,0,0,0,1,1,0 }, // = C
{ 1,0,1,0,0,0,0,1 }, // = D
{ 1,0,0,0,0,1,1,0 }, // = E
{ 1,0,0,0,1,1,1,0 }, // = F
{ 1,0,0,0,1,0,0,1 }, // = H
{ 1,1,0,0,0,1,1,1 } // = L
};
// 在七段顯示器上顯示指定的一個數字
void sevenSegWrite(byte digit) {
for (byte seg = 0; seg <8; ++seg)
digitalWrite(segpin[seg], seven_seg_digits[digit][seg]);// 共陽極 // digitalWrite(segpin[seg], !seven_seg_digits[digit][seg]);// 共陰極
}
void setup() {
for(int i=0;i<8;i++){
pinMode(segpin[i], OUTPUT);
digitalWrite(segpin[i], 0);
}
delay(2000);
for(int i=0;i<3;i++){
for(int j=0;j<8;j++)
digitalWrite(segpin[j], 0);
delay(500);
for(int j=0;j<8;j++)
digitalWrite(segpin[j], 1);
delay(500);
}
}
void loop() {
/*/
for (byte digit = 17; digit > 0; --digit) {
delay(1000);
sevenSegWrite(digit - 1);
}
/*/
for (byte i = 0; i <=17; ++i) {
delay(1000);
sevenSegWrite(i);
}
//*/
delay(4000);// 暫停 4 秒鐘
}
七段顯示器的程式(函數化)
// p, g, f, e, d, c, b, a 七段顯示函數
char segpin[]={27,32,33,17,16,14,26,25};
// p,g,f,e,d,c,b,a 共陽極
byte seven_seg_digits[][8] = { { 1,1,0,0,0,0,0,0 }, // = 0
{ 1,1,1,1,1,0,0,1 }, // = 1
{ 1,0,1,0,0,1,0,0 }, // = 2
{ 1,0,1,1,0,0,0,0 }, // = 3
{ 1,0,0,1,1,0,0,1 }, // = 4
{ 1,0,0,1,0,0,1,0 }, // = 5
{ 1,0,0,0,0,0,1,1 }, // = 6
{ 1,1,1,1,1,0,0,0 }, // = 7
{ 1,0,0,0,0,0,0,0 }, // = 8
{ 1,0,0,1,1,0,0,0 } // = 9
};
// 在七段顯示器上顯示指定的一個數字
void sevenSegWrite(byte digit) {
for (byte seg = 0; seg <8; ++seg)
digitalWrite(segpin[seg], seven_seg_digits[digit][seg]);// 共陽極 // digitalWrite(segpin[seg], !seven_seg_digits[digit][seg]);// 共陰極
}
void setup() {
for(int i=0;i<8;i++){
pinMode(segpin[i], OUTPUT);
digitalWrite(segpin[i], 0);
}
delay(2000);
}
void loop() {
sevenSegWrite(要顯示的內容);
}