#include <REGX52.H>
sbit DS1302_sclk=P3^6;
sbit DS1302_io=P3^4;
sbit DS1302_ce=P3^5;
#define wp 0x8E //,,,,,,,,
#define sec 0x80
#define min 0x82
#define hour 0x84
#define day 0x86
#define mon 0x88
#define year 0x8C
unsigned char TIME[]={00,00,00,00,00,00};//year mon day hour min sec
void DS1302_init(void)
{
DS1302_ce=0;
DS1302_sclk=0;
}
void DS1302_write(unsigned char commond,Data)
{
unsigned char i;
DS1302_ce=1;
for(i=0;i<8;i++)
{
DS1302_io=commond&(0x01<<i);
DS1302_sclk=1;
DS1302_sclk=0;
}
for(i=0;i<8;i++)
{
DS1302_io=Data&(0x01<<i);
DS1302_sclk=1;
DS1302_sclk=0;
}
DS1302_ce=0;
}
unsigned char DS1302_read(unsigned char commond)
{
unsigned i,DATA=0X00;
commond|=0x01;
DS1302_ce=1;
for(i=0;i<8;i++)
{
DS1302_io=commond&(0x01<<i);
DS1302_sclk=0;//I don't understand why this is set to 0
DS1302_sclk=1;//This command is similar to the write command and may have errors
}
for(i=0;i<8;i++)
{
DS1302_sclk=1;
DS1302_sclk=0;
if(DS1302_io)//cant understand
{
DATA|=(0x01<<i);
}
}
DS1302_ce=0;
DS1302_io==0;
return DATA;
}
void writecommond()
{
DS1302_write(wp,0x00);
DS1302_write(year,TIME[0]/10*16+TIME[0]%10);
DS1302_write(mon,TIME[1]/10*16+TIME[1]%10);
DS1302_write(day,TIME[2]/10*16+TIME[2]%10);
DS1302_write(hour,TIME[3]/10*16+TIME[3]%10);
DS1302_write(min,TIME[4]/10*16+TIME[4]%10);
DS1302_write(sec,TIME[5]/10*16+TIME[5]%10);
DS1302_write(wp,0x80);
}
void readcommond()
{
unsigned char Temp;
Temp=DS1302_read(year);
TIME[0]=Temp/16*10+Temp%16;//BCD????????
Temp=DS1302_read(mon);
TIME[1]=Temp/16*10+Temp%16;
Temp=DS1302_read(day);
TIME[2]=Temp/16*10+Temp%16;
Temp=DS1302_read(hour);
TIME[3]=Temp/16*10+Temp%16;
Temp=DS1302_read(min);
TIME[4]=Temp/16*10+Temp%16;
Temp=DS1302_read(sec);
TIME[5]=Temp/16*10+Temp%16;
}
#include <REGX52.H>
#include "lcd1602.h"
#include "DS1302.h"
void main()
{
LCD_Init();
DS1302_init();
writecommond();
while(1)
{
readcommond();
LCD_ShowNum(1,1,TIME[0],2);
LCD_ShowNum(1,4,TIME[1],2);
LCD_ShowNum(1,7,TIME[2],2);
LCD_ShowNum(2,1,TIME[3],2);
LCD_ShowNum(2,4,TIME[4],2);
LCD_ShowNum(2,7,TIME[5],2);
}
}
应该是时序的问题
请问你解决了吗,因为我现在也是这样子