仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
DS1302中文手册:
单片机源程序如下:
- //-----------------------main.c------------------------
- //DS1302实时时钟显示程序
- //-----------------------------------------------------
- #include<reg51.h>
- #include<intrins.h>
- #include<string.h>
- #define UCHAR unsigned char
- #define UINT unsigned int
- #include <lcd1602.h>
- #include <ds1302.h>
- UCHAR *WEEK[] = {"SUN","MON","TUS","WEN","THU","FRI","SAT"};
- //1-7对应SUN TO SAT
- UCHAR code inittime[] ={0x00,0x00,0x12,0x01,0x01,0x07,0x22};
- //以上七个初始值对应于0秒,0分,12点,1号,1月,周六,22年)
- //即2022年1月1日12点00分00秒周日
- UCHAR Dis_Buf1[] = "Date 00-00-00 ";
- UCHAR Dis_Buf2[] = "Time 00:00:00 ";
- //-----------------------------------------------------------
- //初始化日期和时间
- //------------------------------------------------------------
- void InitDateTime()
- {
- UCHAR i, addr = 0x80;
- Write_1302(0x8E,0x00); //取消写保护
- for(i = 0; i < 7; i++ ,addr += 2)
- {
- Write_1302(addr,inittime[i]);
- }
- Write_1302(0x8E,0x80); //取消写保护
- }
- //-----------------------------------------------------------
- //日期与时间转换为数字字符
- //-----------------------------------------------------------
- void Format_DateTime(UCHAR d,UCHAR *a)
- {
- *a = (d>>4)+'0';
- *(a+1) = (d & 0x0F) + '0';
- }
- void main()
- {
- Initialize_LCD1602();
- InitDateTime();
- while(1)
- {
- ReadDateTime(); //从1302读取日期和时间
- Format_DateTime(DateTime[6],Dis_Buf1+5);
- Format_DateTime(DateTime[4],Dis_Buf1+8);
- Format_DateTime(DateTime[3],Dis_Buf1+11);
- //格式化年月日
- strcpy(Dis_Buf1+13,WEEK[DateTime[5] - 1]);
- //格式化时星期
- Format_DateTime(DateTime[2],Dis_Buf2+5);
- Format_DateTime(DateTime[1],Dis_Buf2+8);
- Format_DateTime(DateTime[0],Dis_Buf2+11);
- //格式化时分秒
- LCD1602_Display(0,0,Dis_Buf1);
- LCD1602_Display(0,1,Dis_Buf2);
- }
- }
复制代码
仿真程序资料51hei附件下载:
DS1302.zip
(1.57 MB, 下载次数: 23)
DS1302中文手册及实例
DS1302中文手册.pdf
DS1302时钟电路.pdsprj |