请用arduino写一个两个二位数码管的时钟,只使用基本的digitalwrite
时间: 2024-02-03 18:12:33 浏览: 61
好的,以下是基于Arduino的两个二位数码管时钟代码:
```
// 定义引脚
const int digitPins[] = {2, 3, 4, 5}; // 数码管段选择引脚,低电平有效
const int segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; // 数码管段输出引脚,高电平有效
// 数码管字符数组(0~9)
byte digits[] = {
B11111100, // 0
B01100000, // 1
B11011010, // 2
B11110010, // 3
B01100110, // 4
B10110110, // 5
B10111110, // 6
B11100000, // 7
B11111110, // 8
B11110110 // 9
};
// 定义变量
int hour = 12; // 小时数
int minute = 30; // 分钟数
int second = 0; // 秒数
void setup() {
// 设置引脚模式
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
}
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
}
}
void loop() {
// 更新时间
updateClock();
// 显示时间
displayTime();
}
void updateClock() {
// 每秒更新一次时间
second++;
if (second == 60) {
second = 0;
minute++;
if (minute == 60) {
minute = 0;
hour++;
if (hour == 24) {
hour = 0;
}
}
}
}
void displayTime() {
// 分离小时和分钟
int hour1 = hour / 10;
int hour2 = hour % 10;
int minute1 = minute / 10;
int minute2 = minute % 10;
// 数码管显示
for (int i = 0; i < 4; i++) {
digitalWrite(digitPins[i], LOW);
switch (i) {
case 0:
digitalWrite(segmentPins[0], bitRead(digits[hour1], 0));
digitalWrite(segmentPins[1], bitRead(digits[hour1], 1));
digitalWrite(segmentPins[2], bitRead(digits[hour1], 2));
digitalWrite(segmentPins[3], bitRead(digits[hour1], 3));
break;
case 1:
digitalWrite(segmentPins[0], bitRead(digits[hour2], 0));
digitalWrite(segmentPins[1], bitRead(digits[hour2], 1));
digitalWrite(segmentPins[2], bitRead(digits[hour2], 2));
digitalWrite(segmentPins[3], bitRead(digits[hour2], 3));
break;
case 2:
digitalWrite(segmentPins[0], bitRead(digits[minute1], 0));
digitalWrite(segmentPins[1], bitRead(digits[minute1], 1));
digitalWrite(segmentPins[2], bitRead(digits[minute1], 2));
digitalWrite(segmentPins[3], bitRead(digits[minute1], 3));
break;
case 3:
digitalWrite(segmentPins[0], bitRead(digits[minute2], 0));
digitalWrite(segmentPins[1], bitRead(digits[minute2], 1));
digitalWrite(segmentPins[2], bitRead(digits[minute2], 2));
digitalWrite(segmentPins[3], bitRead(digits[minute2], 3));
break;
}
digitalWrite(digitPins[i], HIGH);
}
}
```
这个代码使用了常见的多路复用方式,通过控制数码管的段选择引脚和段输出引脚来实现显示不同的数字。每秒钟更新一次时间,然后将小时和分钟拆分为两个二位数码管,通过循环依次显示在数码管上。
阅读全文