使用睿智开发板,设计一个带温度检测的24小时计时的时钟,在四位数码管上显示时分秒,显示格式为:时-分-秒(例如12-45-35),写出具体代码。 1.利用开发板上的LM75温度传感器,实时显示测量温度值 2.通过按键能够对显示时间进行校正; 3.通过LCD1602液晶显示器显示时分秒和温度值
时间: 2024-03-21 19:44:41 浏览: 137
好的,以下是完整的代码,请注意其中的注释。
```c
#include <LiquidCrystal.h> // 引入LCD1602液晶显示器的库
#include <Wire.h> // 引入I2C总线的库
// 定义使用的引脚
#define SDA_PIN 20
#define SCL_PIN 21
#define TEMP_SENSOR_ADDR 0x48 // LM75温度传感器的地址
#define LCD_RS 8
#define LCD_EN 9
#define LCD_D4 4
#define LCD_D5 5
#define LCD_D6 6
#define LCD_D7 7
#define KEY_PIN 2
// 创建液晶显示器对象
LiquidCrystal lcd(LCD_RS, LCD_EN, LCD_D4, LCD_D5, LCD_D6, LCD_D7);
// 定义变量
int seconds = 0;
int minutes = 0;
int hours = 0;
int temperature = 0;
bool key_pressed = false;
// 获取温度值
float getTemperature() {
Wire.beginTransmission(TEMP_SENSOR_ADDR);
Wire.write(0x00);
Wire.endTransmission();
Wire.requestFrom(TEMP_SENSOR_ADDR, 2);
byte msb = Wire.read();
byte lsb = Wire.read();
int temp_raw = (msb << 8) | lsb;
float temp = temp_raw / 32.0;
return temp;
}
// 校正时间
void correctTime() {
while (digitalRead(KEY_PIN) == HIGH) {
// 按键未按下,则等待
delay(10);
}
delay(10); // 消除按键抖动
if (digitalRead(KEY_PIN) == LOW) {
// 按键被按下
while (digitalRead(KEY_PIN) == LOW) {
// 等待按键释放
delay(10);
}
// 按键被释放
seconds = 0;
minutes = 0;
hours = 0;
}
}
void setup() {
// 初始化I2C总线
Wire.begin(SDA_PIN, SCL_PIN);
// 初始化液晶显示器
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Time: ");
lcd.setCursor(0, 1);
lcd.print("Temp: ");
// 设置按键引脚为输入模式
pinMode(KEY_PIN, INPUT);
}
void loop() {
// 更新温度值
temperature = getTemperature();
// 校正时间
if (digitalRead(KEY_PIN) == LOW && !key_pressed) {
key_pressed = true;
correctTime();
} else if (digitalRead(KEY_PIN) == HIGH) {
key_pressed = false;
}
// 更新时间
seconds++;
if (seconds == 60) {
seconds = 0;
minutes++;
}
if (minutes == 60) {
minutes = 0;
hours++;
}
if (hours == 24) {
hours = 0;
}
// 显示时间和温度值
lcd.setCursor(6, 0);
if (hours < 10) {
lcd.print("0");
}
lcd.print(hours);
lcd.print(":");
if (minutes < 10) {
lcd.print("0");
}
lcd.print(minutes);
lcd.print(":");
if (seconds < 10) {
lcd.print("0");
}
lcd.print(seconds);
lcd.setCursor(6, 1);
lcd.print(temperature);
lcd.print("C");
// 等待1秒
delay(1000);
}
```
阅读全文