基于ds1302的51单片机简易实时时钟 1602显示 源程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

==================主程序=================

#include

#include "ds1302.h"

#include "LCD1602.h"

void change();

uchar times[9];

uchar date[9];

main()

{LCD_init();//LCD初始化

init_1302(time_1302);

gotoxy(1,1);

LCD_display("Time:");

gotoxy(1,2);

LCD_display("Date:");

times[8]='\0';//

date[8]='\0';

while(1)

{get_1302(time_1302);

change();

gotoxy(7,1);

LCD_display(times);

gotoxy(7,2);

LCD_display(date);

}

}

/*=========================== 转换子程序

===========================*/

void change()

{

// 时间的转换

times[0]=time_1302[2]/10+'0'; times[1]=time_1302[2]%10+'0'; times[2]=':';

times[3]=time_1302[1]/10+'0'; times[4]=time_1302[1]%10+'0'; times[5]=':';

times[6]=time_1302[0]/10+'0'; times[7]=time_1302[0]%10+'0';

// 日期的转换

date[0]=time_1302[6]/10+'0'; date[1]=time_1302[6]%10+'0'; date[2]='-';

date[3]=time_1302[4]/10+'0'; date[4]=time_1302[4]%10+'0';

date[5]='-';

date[6]=time_1302[3]/10+'0';

date[7]=time_1302[3]%10+'0';

}

========================================

==============DS1302驱动程序=============

#define uchar unsigned char

uchar time_1302[7]={0x00,0x00,0x00,0x03,0x07,0x03,0x08};//设置时间初始值数组// 秒分时号月份星期年

sbit T_IO=P1^0; //与硬件相关的连线clk为DS1302的时钟信号线sbit T_CLK=P1^1; //DAT为DS1302的I/O数据线

sbit T_RST=P1^2; //RST为DS1302的RST信号线ucharbdatadatbyte;

sbit datbyte0=datbyte^0;

sbit datbyte7=datbyte^7;

void get_1302(uchar time[]);

void write_ds1302(uchardat);

uchar r_1302(uchar add);

void w_1302(ucharadd,uchardat);

uchar read_ds1302(void);

void init_1302(uchar *time);

/*==========================================

D S 1 3 0 2 初始化

===========================================*/

void init_1302(uchar *time)

{uchar i, add;

//uchartime_bcd[7];

add=0x80;//0写入,1读出

w_1302(0x8e,0x00);

for(i=0;i<7;i++)

{w_1302(add,*time);

add+=2;

time++;

}

w_1302(0x8e,0x80);

}

//===========================

// 读取当前时间

//===========================

void get_1302(uchar time[])

{uchar i;

uchar add=0x81;

w_1302(0x8e,0x00);

for(i=0;i<7;i++)

{

time[i]=r_1302(add);

add+=2;

}

w_1302(0x8e,0x80);

}

/*================================= DS1302写入一个字节(上升沿有效)

=================================*/

void write_ds1302(uchardat)

{uchar i;

datbyte=dat;

for(i=0;i<8;i++)

{T_IO=datbyte0;

T_CLK=1;

T_CLK=0;

datbyte=datbyte>>1;

}

}

/*======================================= DS1302读取一个字节(下降沿有效)

=======================================*/

uchar read_ds1302(void)

{uchar i;

for(i=0;i<8;i++)

{datbyte=datbyte>>1;

datbyte7=T_IO;

T_CLK=1;

T_CLK=0;

}

相关文档
最新文档