1.首先根据底层程序代码:
写出读和写数据,根据地址加数据来写,根据地址来读
#include <reg52.h>
#include <intrins.h>
#include "ds1302.h"
sbit SCK=P1^7;
sbit SDA=P2^3;
sbit RST = P1^3;
void Write_Ds1302(unsigned char temp) //先建立一个读8位
{
unsigned char i;
for (i=0;i<8;i++)
{
SCK = 0;
SDA = temp&0x01;
temp>>=1;
SCK=1;
}
}
//
void Write_Ds1302_Byte( unsigned char address,unsigned char dat )
{
RST=0; _nop_();//利用读八位子函数,写数据1地址2数据
SCK=0; _nop_();
RST=1; _nop_();
Write_Ds1302(address);
Write_Ds1302(dat);
RST=0;
}
//
unsigned char Read_Ds1302_Byte ( unsigned char address )//读的话只需要地址
{
unsigned char i,temp=0x00;
RST=0; _nop_();
SCK=0; _nop_();
RST=1; _nop_();
Write_Ds1302(address);
for (i=0;i<8;i++)
{
SCK=0;
temp>>=1;
if(SDA)//sda是每个位
temp|=0x80;
SCK=1;
}
RST=0; _nop_();
SCK=0; _nop_();
SCK=1; _nop_();
SDA=0; _nop_();
SDA=1; _nop_();
return (temp);
}
//接下来自己写的东西(怎么显示时钟)
//分3个位小时,分钟,秒//利用string库的函数
void Set_Rtc(unsigned char* clock )//这里三个数据放到数组里数组定义的方法有2种这是利用指针
{
unsigned char i; //先设定再读
Write_Ds1302_Byte(0x8e,0x00);
for(i=0;i<3;i++)
Write_Ds1302_Byte(0x84-2*i,clock[i]);
Write_Ds1302_Byte(0x8e,0x80);
}
void Read_Rtc(unsigned char*clock)
{
unsigned char i;
for(i=0;i<3;i++)
clock[i]=Read_Ds1302_Byte(0x85-2*i);
}
最后再在模块化数码管显示中添加 Set_Rct(clock)
以及初始化中显示Read_Rtc(clock)