DS1302的电子万年历_51单片机,年月日、星期、时分秒、农历和温度,带闹钟,全套资料

news/2025/3/20 11:52:49/

获取全套资源,请见后文说明~

设计要求
1.显示公历年、月、日、星期、时、分、秒;
2.可随时调校年、月、日、时、分、秒;
3.能显示农历时间,并能标明平润年;
4.具有闹钟设定提醒功能;
5.能够显示当前环境温度;

设计概述
电子万年历系统以AT89C52单片机为核心,构成单片机控制电路,结合DS1302时钟芯片和DS18B20温度传感器,完成时间和温度的读取,全部信息由LCD1602液晶实时显示。

日历时间的校准和闹钟的设定均由四个独立按键来实现,日历能显示公历和农历的年、月、日以及星期、时、分、秒,在显示农历年时,还能标明平润年。

整个系统的由以下几个模块组成,如下图所示。
在这里插入图片描述
原理图
在这里插入图片描述
仿真电路图
在这里插入图片描述
在这里插入图片描述
仿真结果分析
打开Proteus仿真文件,文件后缀名为DSN。双击单片机,加载WanNianLi.hex文件(位于Keil C程序文件夹中),运行仿真,结果如下图所示。
在这里插入图片描述
上图可以看出,LCD显示的时间信息与DS1302 Clock-U3窗口完全一致,表明单片机成功读取DS1302芯片数据。当前日期为2020年10月9日星期五,时间为21点30分39秒,温度为31.0℃。

设置时间的操作为:点击“设置”键,秒针闪烁,此时可以通过“加键”和“减键”进行增减调整,秒针设置如下所示。
在这里插入图片描述
秒针设置完成后,再次点击“设置”键,分针闪烁,继续通过加减键进行设置,以此类推,来设置小时、日、月和年,年(范围可到2099年)设置完成后,再次按下“设置”键,退出时间的设置,回到LCD正常显示界面。

点击“农历/闹钟”按键,显示当前日期的农历日期,以及平润年(平年:PING 闰年:RUN),如下图所示,公历2020年10月9日所对应的农历日为8月23,且2020年为闰年,公历农历转换信息准确无误。
在这里插入图片描述
再次点击“农历/闹钟”键,显示闹钟时间,以及闹钟的开关状态(ON:表示闹钟开,OFF:表示闹钟关),图中系统默认闹钟时间为01:01,闹钟处于打开状态ON。
在这里插入图片描述
设置闹钟操作为:在当前闹钟显示界面下,点击“设置”键,闹钟的小时数闪烁,通过“加键”和“减键”调整小时数,小时数设置好后,再次点击“设置”键,分钟闪烁,进入分钟数的设置。

同理,分钟数设置好后,再次点击“设置”键,需要注意的是,在设定闹钟开关时,没有光标闪烁。点击“加键”或“减键”,设置闹钟的打开与关闭,ON与OFF之间切换。

以上都设置好后,再点击“设置”键,ON或OFF闪烁一下,表示闹钟设定完成。此时按下“农历/闹钟”键退出闹钟界面,回到时间正常显示的界面。

例如,设置闹钟时间为早上8:30,闹钟打开,状态为ON,结果如下。
在这里插入图片描述
闹钟定时到后,蜂鸣器发声,闹钟响;闹钟可以通过点击“加键”或“减键”或“农历/闹钟”键来关闭。

通过点击DS18B20模块的红色向上、向下箭头,可以模拟温度的改变,LCD液晶实时显示当前温度值。例如设定温度22.0℃,如图所示。
在这里插入图片描述
综上所述,电子万年历Proteus仿真设计运行效果满足设计要求。

部分C代码

void main()
{init_eeprom();  //开始初始化保存的数据P1=0xff;
//	flag=ReadTemperature();
//	delay(2000);lcd_init();      //调用液晶屏初始化子函数ds1302_init();   //调用DS1302时钟的初始化子函数init();          //调用定时计数器的设置子函数led1=0;           //打开LCD的背光电源buzzer=0;		 //蜂鸣器长响一次delay(100);buzzer=1;init_eeprom();while(1)  //无限循环下面的语句:{		keyscan();      //调用键盘扫描子函数led=led1;		if(timerOn==1)alarm();	//闹钟输出if((fen==0)&&(miao==0)){if(shi>12)temp_hour=shi-12;else{if(shi==0)temp_hour=12;elsetemp_hour=shi;}shangyimiao=miao;baoshi=1;}if(baoshi==1){ZD_baoshi();do keyscan();while(shangyimiao==miao);	shangyimiao=miao;}}
}
void timer0() interrupt 1  //取得并显示日历和时间
{//Init_DS18B20();//温度传感器DS18b2初始化子函数,在头文件中
//   flag=ReadTemperature();//将18b2头文件运行返回的函数结果送到变量FLAG中,用于显示//读取秒时分周日月年七个数据(DS1302的读寄存器与写寄存器不一样):miao = BCD_Decimal(read_1302(0x81));fen = BCD_Decimal(read_1302(0x83));shi  = BCD_Decimal(read_1302(0x85));ri  = BCD_Decimal(read_1302(0x87));yue = BCD_Decimal(read_1302(0x89));nian=BCD_Decimal(read_1302(0x8d));//week=BCD_Decimal(read_1302(0x8b));     //不读取,直接通过日期计算得到if((led1==0)){if(temp_miao!=miao){temp_miao=miao;bltime++;}if(bltime==10){led1=1;bltime=0;}}if(T_NL_NZ==1)							//显示农历{uint nian_temp,temp12;temp12=nian;nian_temp=2000+(temp12&0xF0)*10+temp12&0x0F;if((nian_temp%400==0)||((nian_temp%100!=0)&&(nian_temp%4==0)))  //判断是否为闰年p_r=1;elsep_r=0;Conversion(0,nian,yue,ri);write_1602com(er);//时间显示固定符号写入位置?for(a=0;a<16;a++){if(p_r==0)write_1602dat(nlp[a]);//写显示时间固定符号,两个冒号else write_1602dat(nlr[a]);}write_nl(3,year_moon);//农历 年write_nl(6,month_moon);//农历 月write_nl(9,day_moon);//农历 日dokeyscan();while(T_NL_NZ==1);write_1602com(er);//时间显示固定符号写入位置,从第2个位置后开始显示for(a=0;a<16;a++){write_1602dat(qk[a]);//写显示时间固定符号,两个冒号}write_1602com(er);//时间显示固定符号写入位置,从第2个位置后开始显示for(a=0;a<8;a++){write_1602dat(tab2[a]);//写显示时间固定符号,两个冒号}}

分享的资源有

(1)基于51单片机的电子万年历设计论文完整版;
(2)Altium Designer原理图文件;
(3)Keil C程序;
(4)Proteus仿真文件;
(5)Visio程序设计流程图;
(6)毕设任务书;
(7)芯片技术手册;
(8)元器件清单;
(9)元器件知识介绍;

全套资源如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
重要的事情说三遍!!!

重要的事情说三遍!!!

重要的事情说三遍!!!

本设计为我的原创,获取以上电子万年历设计全套设计资料!

请微信搜索关注我的公众号:交院小智


http://www.ppmy.cn/news/861815.html

相关文章

单片机的电子万年历设计

设计功能 &#xff08;1&#xff09;主要采用51单片机最小系统LCD液晶显示模块DS1302时钟模块蜂鸣器提示音模块DS18B20温度采集模块按键模块。 &#xff08;2&#xff09;时钟芯片采用DS1302&#xff0c;温度传感器采用DS18B20。 &#xff08;3&#xff09;有一组闹钟和阴历显…

如何在51单片机实现电子万年历

如何在51单片机实现电子万年历 51单片机制作万年历的基本功能部分&#xff0c;软件特性可以在proteus上仿真&#xff0c;使用51单片机定时器T0做万年历计时信号源&#xff0c;电子万年历计时系统在timer模块&#xff0c;本模块主要是将年/月/日/星期/时/分/秒等信息输出到lcd1…

基于AT89C51单片机的电子万年历系统

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87708258 源码获取 主要内容&#xff1a; 电子万年历系统以实时时钟芯片DS1302和AT89C52单片机为主要研究对象&#xff0c;着重进行51单片机控制系统的设计研究和如…

基于单片机的电子万年历的设计

文末下载完整资料 基于51单片机的电子万年历的设计                                    摘 要    电子万年历是单片机系统的一个应用&#xff0c;由硬件和软件相配合使用。硬件由主控器、时钟电路、温度检测电路、显示电路、键盘接口5个模块组成。主控模块…

基于51单片机的电子万年历的设计-源代码

电子万年历的设计 设计要求&#xff1a; 利用51单片机、专用时钟芯片DS1302、DS18B20数字温度采集器及1602液晶显示器件设计一个万年历&#xff1b; 正确显示年月日&#xff0c;时分秒&#xff0c;星期等信息&#xff1b;显示环境温度&#xff1b;能够通过按键调整时间和设置…

电子万年历

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 一、实验内容&#xff08;简述&#xff09; 电子日历是通过单片机控制液晶显示器LCD1602实现电子日历功能。实验使用主要设备为计算机和单片机。在Keil软件平台上使用C51语言…

「电子万年历matlab仿真」——基于Matlab的电子万年历仿真实现

「电子万年历matlab仿真」——基于Matlab的电子万年历仿真实现 作为一种具有时间显示、日期查询、闹钟提醒等功能的电子产品&#xff0c;电子万年历已经成为了人们日常生活中不可或缺的一部分。而在现代科技的发展下&#xff0c;仿真技术的应用也越来越广泛&#xff0c;本篇文…

基于51单片机的电子万年历的设计

注意&#xff1a;全文word可在主页下载 摘 要 电子万年历是单片机系统的一个应用&#xff0c;由硬件和软件相配合使用。硬件由主控器、时钟电路、温度检测电路、显示电路、键盘接口5个模块组成。主控模块用AT89C52、时钟电路用时钟芯片DS1302、显示模块用LED数码管、温度检测采…