51单片机从零到实战(15)——数字时钟温度计
2026/7/24 21:17:38 网站建设 项目流程

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

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


1. 项目功能

LCD1602 第一行:HH:MM:SS (实时时钟) LCD1602 第二行:Temp: XX.X°C (每秒刷新) 按键 K1:进入/退出时间设置模式 按键 K2:在设置模式下,小时+1 按键 K3:在设置模式下,分钟+1 断电再上电:时间从 EEPROM 恢复(精度依赖于晶振)

2. 软件架构

// ═══ 中断服务 ═══// 定时器 0:50ms → 时钟基准 + 数码管扫描(如果用了数码管)// 在本项目中,50ms 仅做时间基准unsignedcharsec,min,hour;unsignedinttick_50ms=0;voidtimer0_isr(void)interrupt1{TH0=0x4C;TL0=0x00;tick_50ms++;}// ═══ 主循环 ═══voidmain(){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;}// 每小时存一次时间到 EEPROMif(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*

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询