定时器控制八位流水灯和其引脚的数码管,两者分时运行
时间: 2024-05-09 07:18:53 浏览: 7
这里提供一种基于Arduino的代码实现方式:
```
// 定义引脚和延时时间
const int LATCH_PIN = 8;
const int CLOCK_PIN = 9;
const int DATA_PIN = 10;
const int DIGIT1_PIN = 2;
const int DIGIT2_PIN = 3;
const int DIGIT3_PIN = 4;
const int DIGIT4_PIN = 5;
const int DELAY_TIME = 100;
// 定义流水灯的状态
byte lightState = 1;
// 定义数码管的显示值
int digitValue = 0;
void setup() {
// 初始化引脚
pinMode(LATCH_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
pinMode(DATA_PIN, OUTPUT);
pinMode(DIGIT1_PIN, OUTPUT);
pinMode(DIGIT2_PIN, OUTPUT);
pinMode(DIGIT3_PIN, OUTPUT);
pinMode(DIGIT4_PIN, OUTPUT);
}
void loop() {
// 控制流水灯
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, lightState);
digitalWrite(LATCH_PIN, HIGH);
digitalWrite(LATCH_PIN, LOW);
lightState = lightState << 1;
if (lightState == 0) {
lightState = 1;
}
// 控制数码管
digitalWrite(DIGIT1_PIN, HIGH);
digitalWrite(DIGIT2_PIN, LOW);
digitalWrite(DIGIT3_PIN, LOW);
digitalWrite(DIGIT4_PIN, LOW);
digitValue++;
if (digitValue > 9999) {
digitValue = 0;
}
displayDigit(digitValue % 10);
digitalWrite(DIGIT1_PIN, LOW);
digitalWrite(DIGIT2_PIN, HIGH);
displayDigit(digitValue / 10 % 10);
digitalWrite(DIGIT2_PIN, LOW);
digitalWrite(DIGIT3_PIN, HIGH);
displayDigit(digitValue / 100 % 10);
digitalWrite(DIGIT3_PIN, LOW);
digitalWrite(DIGIT4_PIN, HIGH);
displayDigit(digitValue / 1000 % 10);
// 延时
delay(DELAY_TIME);
}
void displayDigit(int num) {
// 数码管显示字型表
byte digitTable[10] = {
B11111100, // 0
B01100000, // 1
B11011010, // 2
B11110010, // 3
B01100110, // 4
B10110110, // 5
B10111110, // 6
B11100000, // 7
B11111110, // 8
B11110110 // 9
};
// 在数码管上显示数字
byte digit = digitTable[num];
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, digit);
digitalWrite(LATCH_PIN, HIGH);
digitalWrite(LATCH_PIN, LOW);
}
```
该代码中,通过 `shiftOut` 函数控制流水灯的状态,通过 `digitalWrite` 函数控制数码管的引脚状态,通过 `delay` 函数实现分时运行。其中,`displayDigit` 函数用于在数码管上显示数字,通过查表找到对应的字型数据并写入到数码管的引脚上。该代码中流水灯和数码管的更新速度是相同的,如果需要调整可以修改 `DELAY_TIME` 常量的值。