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*
相关推荐
不悔哥4 天前
开源OV-Watch:怎么做一个智能手表
单片机·开源·嵌入式
XiHongShi20164 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
深圳老胡4 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
女神下凡4 天前
嵌入式设计的各种存储芯片的硬件/软件设计规范,非常全面。
arm开发·单片机·嵌入式硬件
梅梅9664 天前
一款mipi转lvds的lcd调试(LT8912B)
单片机·计算机外设·电脑·显示器·pd芯片
开发笔记-阿牛5 天前
蓝牙音乐灯拆解,又一次拆到蓝牙音乐灯芯片CK6865L
人工智能·单片机·嵌入式硬件·音视频·音频
从零开始的嵌入式之旅5 天前
day47
arm开发·经验分享·笔记·嵌入式硬件
恒锐丰科技林技术员5 天前
EG1164 高压大电流升压同步整流芯片解析
经验分享·嵌入式硬件·硬件工程
CHENKONG_CK5 天前
破解制鞋打磨痛点:RFID赋能去毛刺工序自动化升级
网络·单片机·嵌入式硬件·网络协议·tcp/ip
祖力555 天前
ARM时钟
嵌入式硬件·arm·时钟·imx6ull