仿真原理圖如下(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)
2024-3-10 10:30 上傳
點擊文件名下載附件
DS1302中文手冊及實例
DS1302中文手冊及實例
DS1302中文手冊.pdf
DS1302時鐘電路.pdsprj |