第一個實驗程式碼
byte SevenSLED[10][7] = { { 0,0,0,0,0,0,1 }, // = 0
{ 1,0,0,1,1,1,1 }, // = 1
{ 0,0,1,0,0,1,0 }, // = 2
{ 0,0,0,0,1,1,0 }, // = 3
{ 1,0,0,1,1,0,1 }, // = 4
{ 0,1,0,0,1,0,0 }, // = 5
{ 0,1,0,0,0,0,0 }, // = 6
{ 0,0,0,1,1,1,1 }, // = 7
{ 0,0,0,0,0,0,0 }, // = 8
{ 0,0,0,1,1,0,0 } // = 9
};
void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
digitalWrite(9, 0); // 關閉小數點
}
// 在七段顯示器上顯示指定的一個數字
void SevenSWrite(byte digit) {
byte pin = 2;
for (byte seg = 0; seg < 7; ++seg) {
digitalWrite(pin, SevenSLED[digit][seg]);
++pin;
}
}
void loop()
{
for (byte digit = 10; digit > 0; --digit) {
delay(1000);
SevenSWrite(digit - 1);
}
delay(2000); // 暫停 2 秒鐘
}
第二個實驗程式碼
#define As 2
#define Bs 3
#define Cs 4
#define Ds 5
#define Es 6
#define Fs 7
#define Gs 8
// 定義共陽極與 Arduino 的腳位對應關係
#define CA1 10
#define CA2 11
#define CA3 12
#define CA4 13
// 定義七個節段的腳位,將 A, B, C, D, E, F, G 依序放入陣列byte segs[7] = { As, Bs, Cs, Ds, Es, Fs, Gs };
// 定義共陽極七段顯示器的字型(digit pattern)
byte seven_seg_digits[10][7] = { { 0,0,0,0,0,0,1 }, // = 0
{ 1,0,0,1,1,1,1 }, // = 1
{ 0,0,1,0,0,1,0 }, // = 2
{ 0,0,0,0,1,1,0 }, // = 3
{ 1,0,0,1,1,0,0 }, // = 4
{ 0,1,0,0,1,0,0 }, // = 5
{ 0,1,0,0,0,0,0 }, // = 6
{ 0,0,0,1,1,1,1 }, // = 7
{ 0,0,0,0,0,0,0 }, // = 8
{ 0,0,0,1,1,0,0 } // = 9
};
// 定義每個七段顯示器顯示的時間 (延遲時間), 預設 1ms
int delay_time = 1;
void setup() {
pinMode(As, OUTPUT);
pinMode(Bs, OUTPUT);
pinMode(Cs, OUTPUT);
pinMode(Ds, OUTPUT);
pinMode(Es, OUTPUT);
pinMode(Fs, OUTPUT);
pinMode(Gs, OUTPUT);
pinMode(CA1, OUTPUT);
pinMode(CA2, OUTPUT);
pinMode(CA3, OUTPUT);
pinMode(CA4, OUTPUT);
}
void loop()
{
// 從 0000 計數到 9999
for (unsigned int number = 0; number < 10000; number++)
{
// 每一秒鐘計數一次
unsigned long startTime = millis();
for (unsigned long elapsed=0; elapsed < 1000; elapsed = millis() - startTime)
{
// 多工掃瞄,輪流點亮個、十、百、以及千位數的七段顯示器
// 顯示個位數
lightDigit1(number%10);
delay(delay_time);
// 顯示十位數
lightDigit2((number/10)%10);
delay(delay_time);
// 顯示百位數
lightDigit3((number/100)%10);
delay(delay_time);
// 顯示千位數
lightDigit4((number/1000)%10);
delay(delay_time);
}
}
}
// 選擇顯示的位數 (4:千、3:百、2:十、或 1:個位數)
void pickDigit(int x)
{
digitalWrite(CA1, HIGH);
digitalWrite(CA2, HIGH);
digitalWrite(CA3, HIGH);
digitalWrite(CA4, HIGH);
switch(x)
{
case 1: digitalWrite(CA1, LOW); break;
case 2: digitalWrite(CA2, LOW); break;
case 3: digitalWrite(CA3, LOW); break;
case 4: digitalWrite(CA4, LOW); break;
}
}
// 點亮個位數
void lightDigit1(byte number) {
pickDigit(1);
lightSegments(number);
}
// 點亮十位數
void lightDigit2(byte number) {
pickDigit(2);
lightSegments(number);
}
// 點亮百位數
void lightDigit3(byte number)
{
pickDigit(3);
lightSegments(number);
}
// 點亮千位數
void lightDigit4(byte number)
{
pickDigit(4);
lightSegments(number);
}
// 點亮七段顯示器
void lightSegments(byte number)
{
for (int i = 0; i < 7; i++) {
digitalWrite(segs[i], seven_seg_digits[number][i]);
}
}
您若是接共陰極的四位數七段顯示器的話,您的數值對照陣列則得改成下列才能正常顯示:
byte seven_seg_digits[10][7] = { { 1,1,1,1,1,1,0 }, // = 0
{ 0,1,1,0,0,0,0 }, // = 1
{ 1,1,0,1,1,0,1 }, // = 2
{ 1,1,1,1,0,0,1 }, // = 3
{ 0,1,1,0,0,1,1 }, // = 4
{ 1,0,1,1,0,1,1 }, // = 5
{ 1,0,1,1,1,1,1 }, // = 6
{ 1,1,1,0,0,0,0 }, // = 7
{ 1,1,1,1,1,1,1 }, // = 8
{ 1,1,1,0,0,1,1 } // = 9
};