用arduino、RX8025T、74CH595、HPDL-1414搭建一个四位显示的数字时钟,简洁的运行代码及注释
时间: 2024-01-26 19:04:55 浏览: 182
简单的数字时钟程序
以下是使用Arduino、RX8025T、74CH595、HPDL-1414搭建四位数字时钟的简洁运行代码及注释:
```C++
#include <Wire.h> // I2C通信库
#include <LiquidCrystal_I2C.h> // I2C LCD库
#include <DS1307RTC.h> // RTC库
#include <Time.h> // 时间库
// 定义连接到74HC595的数据、时钟和锁存引脚
const int DATA_PIN = 2;
const int CLOCK_PIN = 3;
const int LATCH_PIN = 4;
// 定义连接到HPDL-1414的段选引脚
const int SEG_A = 5;
const int SEG_B = 6;
const int SEG_C = 7;
const int SEG_D = 8;
const int SEG_E = 9;
const int SEG_F = 10;
const int SEG_G = 11;
const int SEG_DP = 12;
// 定义连接到74HC595的LED数码管的段码
const byte SEGMENT_MAP[] = {
B11111100, // 0
B01100000, // 1
B11011010, // 2
B11110010, // 3
B01100110, // 4
B10110110, // 5
B10111110, // 6
B11100000, // 7
B11111110, // 8
B11110110, // 9
B11101110, // A
B00111110, // b
B10011100, // C
B01111010, // d
B10011110, // E
B10001110 // F
};
// 定义连接到I2C LCD的对象
LiquidCrystal_I2C lcd(0x3F, 16, 2);
void setup() {
// 初始化I2C通信和LCD
Wire.begin();
lcd.init();
lcd.backlight();
// 设置74HC595的数据、时钟和锁存引脚为输出模式
pinMode(DATA_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
pinMode(LATCH_PIN, OUTPUT);
// 设置HPDL-1414的段选引脚为输出模式
pinMode(SEG_A, OUTPUT);
pinMode(SEG_B, OUTPUT);
pinMode(SEG_C, OUTPUT);
pinMode(SEG_D, OUTPUT);
pinMode(SEG_E, OUTPUT);
pinMode(SEG_F, OUTPUT);
pinMode(SEG_G, OUTPUT);
pinMode(SEG_DP, OUTPUT);
// 设置RTC时间
setSyncProvider(RTC.get);
if (timeStatus() != timeSet) {
lcd.print("RTC时间未设置");
}
}
void loop() {
// 获取当前时间
tmElements_t tm;
RTC.read(tm);
// 显示小时和分钟
displayDigits(tm.Hour, tm.Minute);
// 显示秒数
int seconds = tm.Second;
for (int i = 0; i < 10; i++) {
displayNumber(seconds);
delay(100);
}
// 清空显示
clearDisplay();
}
void displayDigits(int hour, int minute) {
// 将小时和分钟转换为LED数码管的段码
byte hourSegments = SEGMENT_MAP[hour / 10] << 1;
hourSegments |= SEGMENT_MAP[hour % 10];
byte minuteSegments = SEGMENT_MAP[minute / 10] << 1;
minuteSegments |= SEGMENT_MAP[minute % 10];
// 显示小时和分钟
displaySegments(hourSegments, minuteSegments);
}
void displayNumber(int number) {
// 显示数字
byte segments = SEGMENT_MAP[number % 10];
displaySegments(0x01, segments);
}
void displaySegments(byte leftSegments, byte rightSegments) {
// 将段码写入74HC595
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, rightSegments);
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, leftSegments);
// 锁存数据
digitalWrite(LATCH_PIN, HIGH);
digitalWrite(LATCH_PIN, LOW);
}
void clearDisplay() {
// 清空LED数码管
displaySegments(0x00, 0x00);
}
```
该代码使用DS1307RTC库从RTC读取时间,并将时间显示在HPDL-1414 LED数码管上。使用74HC595移位寄存器控制LED数码管,将数字转换为LED数码管的段码,然后将段码写入74HC595。此外,代码还包括清空LED数码管的函数。
阅读全文