實驗說明:
- 7段顯示器(Seven-segment display),是學習Arduino非常基礎的範例,本實驗會將每個數字寫成一個子程序。在主程序中每隔1s 顯示一個數字,讓顯示器循環顯示1~8 數字。
- 數碼管按段數分為七段顯示器和八段顯示器,八段顯示器比七段顯示器多一個發光二極管單元(多一個小數點顯示)。
- 八段顯示器分成共陽極和共陰極兩種,不管是哪一種,內部構造都是由 8 個 LED 發光二極體所組成,其中七個是筆劃,另外一個是小數點,如下圖所示,依順時針方向分別為 a, b, c, d, e, f, g 以及小數點 dp (decimal point)
材料:
- Arduino Uno R3
- USB 傳輸線
- 一位八段顯示器
- 麵包板
- 麵包板跳線
程式:
//設置控制各段的數位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);
}
}