赞
踩
哔哩哔哩项目展示视频:https://www.bilibili.com/video/BV1VQ4y1M79K
资料下载链接:51单片机时钟设计.rar
百度网盘链接:https://pan.baidu.com/s/1gNqcw6sI5G0ggg6s2UxEww
提取码:abcd
取走点赞哦~
一、项目功能:
1、能够显示年、月、日、星期、时间、实时温度。
2、能够按键实现修改当前时间与日期。
3、能够同时设定闹钟,在指定时间蜂鸣器发出滴滴声响。
4、掉电走时,掉电闹钟设置数据不丢失,断开电源再上电依然是上一次设置的闹钟状态
二、项目思路:
利用STC89C52RC单片机作为主控芯片,LCD1602显示数据,DS1302提供日期时间信息,DS18B20作为温度传感器,利用纽扣电池提供DS1302掉电走时电源,利用单片机内部eeprom存储闹钟数据信息。用户输入电路采用4个按键,输出电路采用一个蜂鸣器。
三、主要的芯片与传感器介绍:
STC89C52RC:是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
LCD1602: 是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,即可以显示出图形
DS1302: 是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。
DS18B20: 是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。 DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。
四、准备材料
STC89C52RC、DS18B20、DS1302、LCD1602、洞洞板、三极管、电容、电阻、晶振、纽扣电池、蜂鸣器、按键、开关、LED、电位器、排座、芯片底座、电源插座、电源线等。
五、用proteus绘制仿真电路
由于纽扣电池掉电保存等功能不能仿真,这里没有画出,实物连接图参考下面DXP绘制的原理图为准
六、DXP原理图绘制
七、编写代码
由于代码过长只提供部分核心代码:
/********显示日期、时间、星期***********/ void display_data(void) { LcdWriteCom(0x80); LcdWritestr("20"); LcdWriteData(TIME[6]/16+0x30); //年 LcdWriteData(TIME[6]%16+0x30); LcdWriteData('-'); LcdWriteData(TIME[4]/16+0x30); //月 LcdWriteData(TIME[4]%16+0x30); LcdWriteData('-'); LcdWriteData(TIME[3]/16+0x30); //日 LcdWriteData(TIME[3]%16+0x30); LcdWritestr(" "); switch(TIME[5]) //显示星期 { case 0:LcdWritestr("Mon"); break; case 1:LcdWritestr("Tue"); break; case 2:LcdWritestr("Wed"); break; case 3:LcdWritestr("Thu"); break; case 4:LcdWritestr("Fri"); break; case 5:LcdWritestr("Sat"); break; case 6:LcdWritestr("Sun"); break; } if(alarmswitch==ON)LcdWriteData('.'); else LcdWriteData(' '); LcdWriteCom(0xC0); LcdWriteData(' '); LcdWriteData(TIME[2]/16+0x30); //时 LcdWriteData(TIME[2]%16+0x30); LcdWriteData(':'); LcdWriteData(TIME[1]/16+0x30); //分 LcdWriteData(TIME[1]%16+0x30); LcdWriteData(':'); LcdWriteData(TIME[0]/16+0x30); //秒 LcdWriteData(TIME[0]%16+0x30); LcdWritestr(" "); }
/**************main函数**************/ void main(void) { LcdInit(); //lcd初始化 //Ds1302Init(); //时钟初始化 Ds18b20Init(); //温度传感器初始化 SectorErase(0x2001); //擦除扇区 alarm_hour=byte_read(0x2601);//获取上一次保存的闹钟数据 alarm_min=byte_read(0x2201); alarmswitch=byte_read(0x2401); while(1) { switch(mode) //模式选择 { case DISPLAYDATA: //时间显示模式 Ds1302ReadTime(); //更新时间 display_data(); //显示时间 秒分时日月周年 displaytemp(Ds18b20ReadTemp());//显示温度 keypros(); //按键检测 if(alarmswitch==ON && alarm_hour==TIME[2] && alarm_min==TIME[1]) //闹钟 { mode = ALARMCLOCK; } break; case MODIFYDATA: //时间修改模式 modify(); break; case SETALARMCLOCK: //设置闹钟模式 setalarmclock(); break; case ALARMCLOCK: //闹钟模式 alarmclock(); break; } } }
八、实物展览
做了一两天,总算做好了,由于博主性子急,不想浪费时间和焊锡,就用了许多跳线,稍微有点不美观,但不影响使用
资料下载链接:51单片机时钟设计.rar
代码文件:
原理图文件:
仿真文件:
博主能力有限,不到之处还请批评指正。
求支持。
END…
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。