当前位置:文档之家› 单片机仿真课程设计——基于单片机的实时时钟

单片机仿真课程设计——基于单片机的实时时钟

7.片内时钟振荡器。
DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟日历芯片,附加31
字节静态RAM采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字
节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日星期、月和年,一个月
小于31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5〜5.5V。采用双
LCD_Initial();
Initial_DS1302();
GotoXY(0,0);
Print("Date:");
GotoXY(0,1);
Print("Time:");
while(1)
{
DS1302_GetTime(&CurrentTime);
DateToStr(&CurrentTime);
TimeToStr(&CurrentTime);
电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓 细电流充电的能力。有主电源和备份电源双引脚,而且备份电源可由大容量电容(>1F)
来替代。需要强调的是,DS1302需要使用32.768KHZ的晶振。
pDE
五、程序源代码
#i nclude <REGX52.H>
#i nclude "LCD1602.h"
{
unsigned char ucData;
DS1302_RST= 0;
DS1302_CLK= 0;
DS1302_RST= 1;
DS1302InputByte(ucAddr|0x01);
//地址,命令
ucData=DS1302OutputByte();
//读1Byte数据
DS1302_CLK= 1;
unsigned char Second; unsigned char Minute; unsigned char Hour; unsigned char Week; unsigned char Day; unsigned char Month; unsigned char Year; unsigned char DateString[9];
设置时间函数
{
DS1302_SetProtect(0);
Write1302(Address, ((Value/10)<<4|(Value%10)));}
DS1302_RST= 0;
}
return(ucData);
//是否写保护
void DS1302_SetProtect(bit flag){
if(flag)
Write1302(0x8E,0x10); else
Write1302(0x8E,0x00);
}
void DS1302_SetTime(unsigned char Address, unsigned char Value)//
要写的数据
DS1302_RST= 0;
DS1302_CLK= 0;
DS1302_RST= 1;
DS1302InputByte(ucAddr);
DS1302InputByte(ucDa);
DS1302_CLK= 1;
DS1302_RST= 0;
}
//地址,命令//写1Byte数据
unsigned char Read1302(unsigned char ucAddr)//读取DS1302某地址的数据
进行了比较和分析,最终确定了采用单片机技术实现电子时钟。本设计应用AT89C52芯片
作为核心,LCD显示屏,使用DS1302实时时钟日历芯片完成时钟/日历的基本功能。这种 实现方法的优点是电路简单,性能可靠,实时性好,时间精确,操作简单,I/O引脚的AT89C52单片机。AT89C52单片机是一款低功耗,低
一种功能强,灵活性高且价格合理的单片机,可方便的应用在各个控制领域。
AT89C52具有以下主要性能:
1.4KB可改编程序Flash存储器;
2.全静态工作:0——24Hz;
3.128X8字节内部RAM
4.32个外部双向输入/输出(I/O) 口;
5.6个中断优先级;2个16位可编程定时计数器;
6.可编程串行通道;
#i nclude "DS1302.h"
void Delay1ms( un sig ned int count) {
un sig ned int i,j;
for(i=0;i<co un t;i++)
for(j=0;j<120;j++);
} mai n()
{
SYSTEMTIME CurrentTime;
GotoXY(6,0);
Print(CurrentTime.DateString);
GotoXY(6,1);
Print(CurrentTime.TimeString);
Delay1ms(300);
}
}
#ifndef _REAL_TIMER_DS1302
#define _REAL_TIMER_DS1302 typedef struct__SYSTEMTIME__{
unsigned char TimeString[9]; }SYSTEMTIME/;/定义的时间类型
{
ACC=ACC>>1; //相当于汇编中的RRC ACC7=DS1302_IO;
DS1302_CLK= 1;
DS1302_CLK= 0;
}
return(ACC);
}
void Write1302(unsigned char ucAddr, unsigned char ucDa)//ucAddr: DS1302地址,ucData:
基于51系列单片机及DS1302时钟芯片的实时时钟仿真设计
一、课程设计目的意义
通过本次课程设计可以灵活运用单片机的基础知识,依据课程设计内容,能够完成从硬
件电路图设计,到软件编程及系统调试实现系统功能, 完成课程设计,加深对单片机基 础知识的理解并灵活运用。
二、实现目标
本设计主要为实现一款可正常显示时钟/日历的实时电子时钟。对当前电子钟开发手段
电压,高性能CMO$位单片机,片内含4KB(可经受1000次擦写周期)的FLASH可编程可
反复擦写的只读程序存储器(EPROM,器件采用CMO工艺和ATMEI公司的高密度、非易失
性存储器(NURAM技术制造,其输出引脚和指令系统都与MCS-52兼容。片内的FLASH存储
器允许在系统内可改编程序或用常规的非易失性存储器编程器来编程。因此,AT89C52是
相关主题