// 定義引腳
const int latchPin = 5; // Latch 引腳
const int clockPin = 6; // Clock 引腳
const int dataPin = 4; // Data 引腳
// 七段顯示器的控制段
byte a = 0x80; // Q0 控制 A 段
byte b = 0x40; // Q1 控制 B 段
byte c = 0x20; // Q2 控制 C 段
byte d = 0x10; // Q3 控制 D 段
byte e = 0x08; // Q4 控制 E 段
byte f = 0x04; // Q5 控制 F 段
byte g = 0x02; // Q6 控制 G 段
byte dp = 0x01; // Q7 控制 DP
byte leds = 0; // 用來存儲當前顯示的段的狀態
void setup() {
// 設置引腳為輸出
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
// 初始化串列通訊,波特率設定為 9600
Serial.begin(9600);
// 測試各段
testSegment(~a, "A"); // 測試 A 段
testSegment(~b, "B"); // 測試 B 段
testSegment(~c, "C"); // 測試 C 段
testSegment(~d, "D"); // 測試 D 段
testSegment(~e, "E"); // 測試 E 段
testSegment(~f, "F"); // 測試 F 段
testSegment(~g, "G"); // 測試 G 段
testSegment(~dp, "DP"); // 測試點段 DP
}
void loop() {
// 這裡可以放其他代碼,但目前測試段的部分已經在 setup 中進行過了
}
// 測試函數:逐個點亮各段
void testSegment(byte segment, String segmentName) {
Serial.print("Testing: ");
Serial.print(segmentName);
Serial.println(" segment");
leds = segment; // 設置為該段的二進制值
updateShiftRegister(); // 更新移位寄存器
delay(1000); // 顯示 1 秒鐘
}
// 更新 74HC595 移位寄存器,並控制七段顯示器
void updateShiftRegister() {
digitalWrite(latchPin, LOW); // 鎖存引腳設為低,準備更新
shiftOut(dataPin, clockPin, LSBFIRST, leds); // 輸出二進制數值到 74HC595
digitalWrite(latchPin, HIGH);// 鎖存引腳設為高,數據被傳送
leds = ~leds;
}