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*
相关推荐
吠品5 小时前
智谱开源 ZCode 之后,真正的考试才开始
单片机·嵌入式硬件·1024程序员节
Chery11406 小时前
高速ADC与精密DAC怎么选?DP9230D与DP8532D应用解析
嵌入式硬件·物联网·射频工程
小李不想当小白9 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
LCG米10 小时前
STM32驱动W5500以太网模块实测:TCP吞吐瓶颈定位、TX指针回绕陷阱与断线重连保活落地
stm32·单片机·嵌入式硬件·tcp/ip
尼喃11 小时前
662K/65Z5三脚稳压芯片规格书—PW6566B33/B30引脚功能
嵌入式硬件
创界工坊工作室11 小时前
63-基于STC89C52霍尔传感器的智能化电能表设计
stm32·单片机·嵌入式硬件·51单片机·proteus
智购科技自动售货机厂家12 小时前
让AI经营自动售货机:从Project Vend看工具权限与业务规则~YH
大数据·服务器·单片机·嵌入式硬件·深度学习
Zwawa14 小时前
从 printf 到曲线:把数据送上 VOFA+
c语言·单片机·嵌入式
意法半导体STM3214 小时前
【官方原创】LAT6048 如何扩大MP2的A35核和M33核共享内存
stm32·单片机·嵌入式硬件·内存映射·stm32mp2
en.en..14 小时前
STM32(F429)启动模式与两种烧录方式
stm32·单片机·嵌入式硬件