51单片机从零到实战(15)——数字时钟温度计

第 15 篇:综合项目------数字时钟 + 温度计

这是本专栏的"毕业设计"------把定时器、LCD、DS18B20、按键、EEPROM 全部整合到一个项目里。


1. 项目功能

复制代码
LCD1602 第一行:HH:MM:SS (实时时钟)
LCD1602 第二行:Temp: XX.X°C (每秒刷新)

按键 K1:进入/退出时间设置模式
按键 K2:在设置模式下,小时+1
按键 K3:在设置模式下,分钟+1

断电再上电:时间从 EEPROM 恢复(精度依赖于晶振)

2. 软件架构

c 复制代码
// ═══ 中断服务 ═══
// 定时器 0:50ms → 时钟基准 + 数码管扫描(如果用了数码管)
// 在本项目中,50ms 仅做时间基准

unsigned char sec, min, hour;
unsigned int tick_50ms = 0;

void timer0_isr(void) interrupt 1 {
    TH0 = 0x4C; TL0 = 0x00;
    tick_50ms++;
}

// ═══ 主循环 ═══
void main() {
    lcd_init();
    timer0_init();

    // 从 EEPROM 恢复时间
    hour = eeprom_read(0x00);
    min  = eeprom_read(0x01);
    sec  = eeprom_read(0x02);

    while (1) {
        // === 时钟更新 ===
        if (tick_50ms >= 20) {  // 1 秒
            tick_50ms = 0;
            sec++;
            if (sec >= 60) { sec=0; min++; }
            if (min >= 60) { min=0; hour++; }
            if (hour >= 24) { hour=0; }

            // 每小时存一次时间到 EEPROM
            if (min==0 && sec==0) {
                eeprom_write(0x00, hour);
                eeprom_write(0x01, min);
            }
        }

        // === 按键处理 ===
        if (KEY1 == 0) {
            delay(20); if (KEY1 == 0) {
                setting_mode = !setting_mode;
                while (KEY1 == 0);
            }
        }
        if (setting_mode) {
            if (KEY2 == 0) { delay(20); if (KEY2==0) { hour=(hour+1)%24; while(KEY2==0); } }
            if (KEY3 == 0) { delay(20); if (KEY3==0) { min=(min+1)%60;  while(KEY3==0); } }
        }

        // === LCD 显示 ===
        lcd_set_cursor(0, 0);
        printf_lcd("%02d:%02d:%02d", hour, min, sec);

        lcd_set_cursor(1, 0);
        printf_lcd("Temp: %.1f", ds18b20_read_temp());
        lcd_write_data(0xDF);
        lcd_print("C");
    }
}

剩下代码放在资源中了,免费获取。

https://download.csdn.net/download/Lumos6fly/93126071?spm=1001.2014.3001.5503

复制代码
---

*下一篇:进阶指南------从这里走向 ARM*
相关推荐
LCG元2 分钟前
STM32 定时器编码器接口模式电机测速实战:从 CubeMX 配置到 M 法转速计算与溢出处理
stm32·单片机·嵌入式硬件
星河单片机3 小时前
STM32驱动WaterSensor水位传感器+OLED显示完整原理与实验
stm32·单片机·嵌入式硬件
子文雨3 小时前
基于 uC3845 与 ATtiny13 双芯片架构的 8.4V/2.5Ah 锂电池智能充电器设计
单片机·嵌入式硬件·算法
快秃头的码农4 小时前
esp32-s3移植lvgl总结
嵌入式硬件·esp32-s3
恒锐丰科技林技术员5 小时前
EG1191 宽压降压 DC‑DC 芯片解析:高性价比工业电源方案
经验分享·嵌入式硬件·硬件工程
智购科技无人售货机工厂店5 小时前
2026自动售货机大屏交互设计原则:从信息层级到视觉动线的工程实践~YH
运维·python·单片机·嵌入式硬件·自动化·交互
艾芯微科技8 小时前
SKY13370‑374LF|0.5‑6GHz SPDT 射频开关,WLAN/LTE 射频前端实用器件
网络·单片机·嵌入式硬件·集成测试·51单片机
jianqiang.xue10 小时前
收官:从v0.1到“研发新常态“,一套嵌入式智能体的落地与边界
stm32·单片机·物联网·架构·esp32
HUI-47410 小时前
EG1131|SOT23‑6 30V/1.5A 电流模式同步降压 DC‑DC,小体积消费类电源优选
嵌入式硬件·硬件工程
天空'之城11 小时前
单片机基础核心知识点汇总(三十)
单片机·嵌入式硬件