首页天道酬勤ds1302时钟显示农历,ds1302时钟芯片万年历

ds1302时钟显示农历,ds1302时钟芯片万年历

张世龙 05-12 23:32 109次浏览

要获得一套资源,请参考后面的说明~

设计要求

1 .显示公历年、月、日、星期、时、分、秒;

2 .随时可以调整年、月、日、时、分、秒;

3 .可以显示农历时间,可以注明平润年;

4 .有闹钟设置提醒功能;

5 .可显示当前环境温度;

设计概述

电子年历系统以AT89C52单片机为核心,组成单片机控制电路,结合DS1302时钟芯片和DS18B20温度传感器,完成时间和温度的读取,所有信息均由LCD1602液晶显示

日历时间的校准和闹钟的设定通过4个独立的按钮实现,日历上显示公历和农历年、月、日和星期、时、分、秒,显示农历年时还显示平润年。

整个系统的由以下模块构成,如下图所示。 3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com /

打开Proteus模拟文件。 文件扩展名为DSN。 双击单片机,加载WanNianLi.hex文件(位于Keil C程序文件夹中),执行模拟的结果如下图所示。

由上图可见,液晶屏上显示的时间信息与DS1302时钟- u3窗口完全匹配,表示单片机已成功读取DS1302芯片数据。 当前日期为2020年10月9日星期五,时间为21时30分39秒,温度为31.0。

设定时间的操作在点击“设定”键时秒针闪烁。 此时,可以通过“按下键”和“减少键”进行增减调整。 秒针的设定如下。

秒针设定完成后,再次点击“设定”按钮,分针闪烁,继续用加减按钮进行设定。 这样设定时间、日、月、年,在完成年(范围可以到2099年)的设定后,再次按下“设定”按钮,结束时间的设定,返回LCD的通常显示画面。

单击“农历/闹钟”按钮可显示当前日期的农历日期和平润年(常年) PING闰年(RUN )。 如下图所示,与公元2020年10月9日对应的农历日为8月23日,2020年为闰年,公历转换信息准确。

再次单击“农历/闹钟”按钮,闹钟时间和闹钟开关状态(ON )表示闹钟打开,OFF表示闹钟关闭),图中系统默认闹钟

报警的设定是在当前的报警显示画面中,单击“设定”键后报警的小时数闪烁,通过“按下键”和“减少键”调整小时数,小时数设定结束后,再次单击“设定”键,分钟闪烁后分数的设定

同样,设置分数后,再次单击“设置”按钮。 必须注意的是,设置闹钟开关时,光标没有闪烁。 单击“打开”或“减少”以打开和关闭报警,然后打开和关闭报警。

以上设定结束后,单击“设定”按钮,使ON或OFF闪烁,表示警报设定完成。 此时,按“农历/闹钟”按钮退出闹钟界面,返回正常显示时间的界面。

例如,如果将闹钟时间设置为早上8:30,然后打开闹钟,则:

闹钟响后,蜂鸣器响,闹钟响; 可以通过单击“按下键”、“减少键”或“农历/闹钟”键关闭闹钟。

通过单击DS18B20模块红色的向上和向下箭头,可以模拟温度的变化,液晶屏液晶将实时显示当前的温度值。 例如设定温度为22.0,如图所示。

综上所述,电子万年历Proteus仿真设计运行效果满足设计要求。

原理图

void main () {init_eeprom ); //开始初始化保存的数据P1=0x ff//flag=read temperature (; //Delay(2000 ); lcd_init (;//调用LCD初始化子函数ds1302_init (; 初始化子函数init (; //调用定时计数器设定子函数led1=0;//打开液晶屏背光电源buzzer=0; //蜂鸣器长按一次delay(100 ); buzzer=1; init_eeprom (; wile(1)//无限循环下的语句: { keyscan; //调用键盘扫描子函数led=led1的if(timeron==1) alarm ); //闹钟输出if((fen==0) ) miao==0) ) if ) Shi12 ) temp_hour=shi-12; ELSE{if(Shi==0) temp_hour=12; elsetemp_hour=shi; }上一庙=庙; 鲍世熙=1; (if ) Baoshi==1) {ZD_baoshi ); do keyscan (; while (上一个庙==Miao ); 上颐庙=庙; }}voidtimeR0(interrupt1//日历和时间({ //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)元器件知识介绍;

全套资源如下





重要的事情说三遍!!!

重要的事情说三遍!!!

重要的事情说三遍!!!

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

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

ds1302是什么芯片,时钟模块ds1302的使用 毕业设计是什么,vip看看