资源简介

用51单片机连接DS1302时钟芯片,即可在串口输出对应的时间,看到时间一直在走,有年与日时分秒星期和农历,其中星期和农历程序自动计算,下载解压即可用keil打开,编译0错误0警告,代码全部上备注,方便查阅,方便移植,是使用DS1302的友友们必选好文!

资源截图

代码片段和文件信息

#include “STC15W204S.h“	
#include   
#define uint unsigned int
#define u32 unsigned long int
#define uchar unsigned char

 
void Send_Byte_UART1(uchar dat) ;
#include “DS1302.h“

uint aa;
 
struct sTime Time;  //日期时间缓冲区

void Init_MCU()
{
EA  = 1; //开总中断 


// TMOD |= 0x22; //设定定时器1为16位自动重装方式
// TL1 = 0xfd; //设定定时初值
// TH1 = 0xfd; //设定定时初值
//
// ET1 = 0; //禁止定时器1中断 ==1允许
// TR1 = 1; //启动定时器1
//
// REN=1;
// SM0=0;
// SM1=1;

SCON = 0x50; //8位数据可变波特率
AUXR |= 0x04; //定时器2时钟为Fosc即1T
T2L = 0xE0; //设定定时初值
T2H = 0xFE; //设定定时初值
AUXR |= 0x01; //串口1选择定时器2为波特率发生器
AUXR |= 0x10; //启动定时器2

// TMOD|=0x01; //定時器0為模式1
// TH0=(65536-10000)/256; //裝高八位
// TL0=(65536-10000)%256; //裝低八位
// EA=1; //開總中斷
// ET0=1; //開定時器中斷
// TR0=1; //啟動定時器

// //100微秒@11.0592MHz
// AUXR |= 0x80; //定时器时钟1T模式
// TMOD &= 0xF0; //设置定时器模式
// TL0 = 0xAE; //设置定时初值
// TH0 = 0xFB; //设置定时初值
// TF0 = 0; //清除TF0标志
// TR0 = 1; //定时器0开始计时

//5毫秒@11.0592MHz
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0x28; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时

ET0 = 1;
P3M0=0;
P3M1=0;

}
/*串口发送数据*/
void Send_Byte_UART1(uchar dat)
{
ES=0;
SBUF=dat;
while(!TI);
TI=0;
// ES =1;
}
void main()
{
uchar sec;
struct sTime buftime;
Init_MCU();
Init_DS1302 ();
buftime.year=95; 
buftime.mon=1;  
buftime.day=6;   
buftime.hour=23;
buftime.min=59;   
buftime.sec=55;
Set_Time(&buftime);
while(1)
{        
Get_Time( &Time );

if(Time.sec!=sec)
{
sec=Time.sec;

Send_Byte_UART1(Time.year/10+0x30); 
Send_Byte_UART1(Time.year%10+0x30);
Send_Byte_UART1(‘ ‘);

Send_Byte_UART1(Time.mon/10+0x30); 
Send_Byte_UART1(Time.mon%10+0x30);    
Send_Byte_UART1(‘ ‘);
 
Send_Byte_UART1(Time.day/10+0x30); 
Send_Byte_UART1(Time.day%10+0x30);    
Send_Byte_UART1(‘ ‘); 

Send_Byte_UART1(Time.hour/10+0x30); 
Send_Byte_UART1(Time.hour%10+0x30);    
Send_Byte_UART1(‘ ‘);

Send_Byte_UART1(Time.min/10+0x30); 
Send_Byte_UART1(Time.min%10+0x30);    
Send_Byte_UART1(‘ ‘); 

Send_Byte_UART1(Time.sec/10+0x30); 
Send_Byte_UART1(Time.sec%10+0x30);    
Send_Byte_UART1(‘ ‘);

Send_Byte_UART1(Time.week/10+0x30); 
Send_Byte_UART1(Time.week%10+0x30);    
Send_Byte_UART1(‘ ‘);   

Send_Byte_UART1(Time.mon_CTC/10+0x30); 
Send_Byte_UART1(Time.mon_CTC%10+0x30);    
Send_Byte_UART1(‘ ‘);

Send_Byte_UART1(Time.day_CTC/10+0x30); 
Send_Byte_UART1(Time.day_CTC%10+0x30);

 
Send_Byte_UART1(‘\n‘);
}
}
}

/*定时器0中断服务程序*/
void Timer_0() interrupt 1
{  
if((aa++)>=10000){aa=0;} //定时器记数
}










 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-01-22 21:49  基于STC15W408AS的串口DS1302时钟\
     文件       17187  2015-09-26 15:51  基于STC15W408AS的串口DS1302时钟\DS1302.h
     文件       12805  2015-07-09 20:47  基于STC15W408AS的串口DS1302时钟\STC15W204S.h
     文件       26684  2019-01-22 21:49  基于STC15W408AS的串口DS1302时钟\xxxx
     文件        1003  2019-01-22 21:49  基于STC15W408AS的串口DS1302时钟\xxxx.build_log.htm
     文件        3086  2015-09-26 15:48  基于STC15W408AS的串口DS1302时钟\xxxx.c
     文件        8375  2019-01-22 21:49  基于STC15W408AS的串口DS1302时钟\xxxx.hex
     文件          40  2019-01-22 21:49  基于STC15W408AS的串口DS1302时钟\xxxx.lnp
     文件        8162  2019-01-22 21:49  基于STC15W408AS的串口DS1302时钟\xxxx.LST
     文件       26279  2019-01-22 21:49  基于STC15W408AS的串口DS1302时钟\xxxx.M51
     文件       30825  2019-01-22 21:49  基于STC15W408AS的串口DS1302时钟\xxxx.OBJ
     文件         190  2015-11-19 11:29  基于STC15W408AS的串口DS1302时钟\xxxx.plg
     文件       88506  2019-01-22 21:49  基于STC15W408AS的串口DS1302时钟\xxxx.uvgui.Administrator
     文件       81845  2015-09-26 15:26  基于STC15W408AS的串口DS1302时钟\xxxx.uvgui_Administrator.bak
     文件        6046  2019-01-22 21:49  基于STC15W408AS的串口DS1302时钟\xxxx.uvopt
     文件       14198  2019-01-22 21:49  基于STC15W408AS的串口DS1302时钟\xxxx.uvproj
     文件        6066  2015-09-26 15:26  基于STC15W408AS的串口DS1302时钟\xxxx_uvopt.bak
     文件           0  2015-09-25 14:43  基于STC15W408AS的串口DS1302时钟\xxxx_uvproj.bak

评论

共有 条评论