单片机仿真课程设计基于51单片机的实时时钟Word文件下载.docx
- 文档编号:15502890
- 上传时间:2022-11-02
- 格式:DOCX
- 页数:9
- 大小:83.20KB
单片机仿真课程设计基于51单片机的实时时钟Word文件下载.docx
《单片机仿真课程设计基于51单片机的实时时钟Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机仿真课程设计基于51单片机的实时时钟Word文件下载.docx(9页珍藏版)》请在冰豆网上搜索。
4.32个外部双向输入/输出(I/O)口;
5.6个中断优先级;
2个16位可编程定时计数器;
6.可编程串行通道;
7.片内时钟振荡器。
DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟日历芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。
实时时钟可提供秒、分、时、日、星期、月和年,一个月小于31天时可以自动调整,且具有闰年补偿功能。
工作电压宽达2.5~5.5V。
采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。
有主电源和备份电源双引脚,而且备份电源可由大容量电容(>1F)来替代。
需要强调的是,DS1302需要使用32.768KHz的晶振。
四、原理图
五、程序源代码
#include<
REGX52.H>
#include"
LCD1602.h"
DS1302.h"
voidDelay1ms(unsignedintcount)
{
unsignedinti,j;
for(i=0;
i<
count;
i++)
for(j=0;
j<
120;
j++);
}
main()
SYSTEMTIMECurrentTime;
LCD_Initial();
Initial_DS1302();
GotoXY(0,0);
Print("
Date:
"
);
GotoXY(0,1);
Time:
while
(1)
{
DS1302_GetTime(&
CurrentTime);
DateToStr(&
TimeToStr(&
GotoXY(6,0);
Print(CurrentTime.DateString);
GotoXY(6,1);
Print(CurrentTime.TimeString);
Delay1ms(300);
}
#ifndef_REAL_TIMER_DS1302
#define_REAL_TIMER_DS1302
sbitDS1302_CLK=P1^6;
//实时时钟时钟线引脚
sbitDS1302_IO=P1^7;
//实时时钟数据线引脚
sbitDS1302_RST=P1^5;
//实时时钟复位线引脚
sbitACC0=ACC^0;
sbitACC7=ACC^7;
typedefstruct__SYSTEMTIME__
unsignedcharSecond;
unsignedcharMinute;
unsignedcharHour;
unsignedcharWeek;
unsignedcharDay;
unsignedcharMonth;
unsignedcharYear;
unsignedcharDateString[9];
unsignedcharTimeString[9];
}SYSTEMTIME;
//定义的时间类型
#defineAM(X) X
#definePM(X) (X+12) //转成24小时制
#defineDS1302_SECOND 0x80
#defineDS1302_MINUTE 0x82
#defineDS1302_HOUR 0x84
#defineDS1302_WEEK 0x8A
#defineDS1302_DAY 0x86
#defineDS1302_MONTH 0x88
#defineDS1302_YEAR 0x8C
#defineDS1302_RAM(X) (0xC0+(X)*2) //用于计算DS1302_RAM地址的宏
voidDS1302InputByte(unsignedchard) //实时时钟写入一字节(内部函数)
{
unsignedchari;
ACC=d;
for(i=8;
i>
0;
i--)
{
DS1302_IO=ACC0;
//相当于汇编中的RRC
DS1302_CLK=1;
DS1302_CLK=0;
ACC=ACC>
>
1;
}
unsignedcharDS1302OutputByte(void) //实时时钟读取一字节(内部函数)
1;
//相当于汇编中的RRC
ACC7=DS1302_IO;
return(ACC);
voidWrite1302(unsignedcharucAddr,unsignedcharucDa) //ucAddr:
DS1302地址,ucData:
要写的数据
DS1302_RST=0;
DS1302_CLK=0;
DS1302_RST=1;
DS1302InputByte(ucAddr);
//地址,命令
DS1302InputByte(ucDa);
//写1Byte数据
DS1302_CLK=1;
}
unsignedcharRead1302(unsignedcharucAddr) //读取DS1302某地址的数据
unsignedcharucData;
DS1302InputByte(ucAddr|0x01);
//地址,命令
ucData=DS1302OutputByte();
//读1Byte数据
return(ucData);
voidDS1302_SetProtect(bitflag)//是否写保护
if(flag)
Write1302(0x8E,0x10);
else
Write1302(0x8E,0x00);
voidDS1302_SetTime(unsignedcharAddress,unsignedcharValue)//设置时间函数
DS1302_SetProtect(0);
Write1302(Address,((Value/10)<
<
4|(Value%10)));
voidDS1302_GetTime(SYSTEMTIME*Time)
unsignedcharReadValue;
ReadValue=Read1302(DS1302_SECOND);
Time->
Second=((ReadValue&
0x70)>
4)*10+(ReadValue&
0x0F);
ReadValue=Read1302(DS1302_MINUTE);
Minute=((ReadValue&
ReadValue=Read1302(DS1302_HOUR);
Hour=((ReadValue&
ReadValue=Read1302(DS1302_DAY);
Day=((ReadValue&
ReadValue=Read1302(DS1302_WEEK);
Week=((ReadValue&
ReadValue=Read1302(DS1302_MONTH);
Month=((ReadValue&
ReadValue=Read1302(DS1302_YEAR);
Year=((ReadValue&
voidDateToStr(SYSTEMTIME*Time)
DateString[0]=Time->
Year/10+'
0'
;
DateString[1]=Time->
Year%10+'
DateString[2]='
-'
DateString[3]=Time->
Month/10+'
DateString[4]=Time->
Month%10+'
DateString[5]='
DateString[6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 仿真 课程设计 基于 51 实时 时钟