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

51单片机从零到实战(15)——数字时钟温度计 第 15 篇综合项目——数字时钟 温度计这是本专栏的毕业设计——把定时器、LCD、DS18B20、按键、EEPROM 全部整合到一个项目里。1. 项目功能LCD1602 第一行HH:MM:SS 实时时钟 LCD1602 第二行Temp: XX.X°C 每秒刷新 按键 K1进入/退出时间设置模式 按键 K2在设置模式下小时1 按键 K3在设置模式下分钟1 断电再上电时间从 EEPROM 恢复精度依赖于晶振2. 软件架构// ═══ 中断服务 ═══// 定时器 050ms → 时钟基准 数码管扫描如果用了数码管// 在本项目中50ms 仅做时间基准unsignedcharsec,min,hour;unsignedinttick_50ms0;voidtimer0_isr(void)interrupt1{TH00x4C;TL00x00;tick_50ms;}// ═══ 主循环 ═══voidmain(){lcd_init();timer0_init();// 从 EEPROM 恢复时间houreeprom_read(0x00);mineeprom_read(0x01);seceeprom_read(0x02);while(1){// 时钟更新 if(tick_50ms20){// 1 秒tick_50ms0;sec;if(sec60){sec0;min;}if(min60){min0;hour;}if(hour24){hour0;}// 每小时存一次时间到 EEPROMif(min0sec0){eeprom_write(0x00,hour);eeprom_write(0x01,min);}}// 按键处理 if(KEY10){delay(20);if(KEY10){setting_mode!setting_mode;while(KEY10);}}if(setting_mode){if(KEY20){delay(20);if(KEY20){hour(hour1)%24;while(KEY20);}}if(KEY30){delay(20);if(KEY30){min(min1)%60;while(KEY30);}}}// 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?spm1001.2014.3001.5503--- *下一篇进阶指南——从这里走向 ARM*