ds1302初始化后打开写保护,之后按键调时再关闭写保护然后写数据,就写不了,应该是写保护没有关闭,请问要怎么关闭啊啊
#include<reg52.h>
#include<INTRINS.H>
#define uchar unsigned char
#define uint unsigned int
sbit SCK=P1^7;
sbit RST=P1^5;
sbit IO=P1^6;
sbit wei4=P1^4;
sbit wei3=P1^3;
sbit wei2=P1^2;
sbit wei1=P1^1;
sbit key1=P3^5;
sbit key2=P3^6;
sbit key3=P3^7;
sbit key4=P1^0;
sbit beep=P3^3;
void write_ds1302_byte(uchar temp);
void write_ds1302(uchar add,uchar dat);
uchar read_ds1302(uchar add);
void read_rct();
void set_rtc();
void time_pros();
void display();
void display2();
void delay(uint n);
void tiaoshi();
void PlayMusic();
void DelayMS(uint x);
void naozhong();
uchar tt,t,amm,bmm;
uchar time_data[7]={17,0,2,5,17,14,55};
uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};//年,周,月,日,时,分,秒
uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};//年,周,月,日,时,分,秒
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar pros[2];
uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,
212,212,106,126,159,169,190,119,119,126,159,142,159,0};
uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,
9,3,12,12,12,12,12,9,3,12,12,12,24,0};
void main()
{
uchar aa;
aa=0;
tt=0;
t=0;
amm=1;
bmm=1;
beep=0;
key1=1;
key2=1;
key3=1;
key4=1;
set_rtc();
while(1)
{
read_rct();
time_pros();
tiaoshi();
display();
}
}
void write_ds1302_byte(uchar temp)
{
uchar i;
for(i=0;i<8;i++)
{
SCK=0;
IO=temp&0x01;
temp>>=1;
SCK=1;
}
}
void write_ds1302(uchar add,uchar dat)
{
RST=0;
_nop_();
SCK=0;
_nop_();
RST=1;
_nop_();
write_ds1302_byte(add);
write_ds1302_byte(dat);
RST=0;
}
uchar read_ds1302(uchar add)
{
uchar i,value=0x00;
RST=0;
_nop_();
SCK=0;
_nop_();
RST=1;
_nop_();
write_ds1302_byte(add);
for(i=0;i<8;i++)
{
value=value>>=1;
SCK=0;
if(IO)
{
value=value|0x80;
}
SCK=1;
}
RST=0;
_nop_();
SCK=0;
_nop_();
SCK=1;
IO=1;
return value;
}
void set_rtc()
{
uchar i,j;
for(i=0;i<7;i++)
{
j=time_data[i]/10;
time_data[i]=time_data[i]%10;
time_data[i]=time_data[i]+j*16;
}
write_ds1302(0x8e,0x00);
for(i=0;i<7;i++)
{
write_ds1302(write_add[i],time_data[i]);
}
write_ds1302(0x8e,0x80);
}
void read_rct()
{
uchar i;
for(i=0;i<7;i++)
{
time_data[i]=read_ds1302(read_add[i]);
}
}
void time_pros()
{
pros[2]=time_data[6]%16+(time_data[6]/16)*10;
pros[1]=time_data[5]%16+(time_data[5]/16)*10;
pros[0]=time_data[4]%16+(time_data[4]/16)*10;
}
void display()
{
uchar j;
wei1=1;
wei2=1;
wei3=1;
wei4=1;
P2=0x00;
delay(1);
wei1=0;
delay(1);
P2=table[pros[1]%10];
delay(1);
wei1=1;
wei2=1;
wei3=1;
wei4=1;
P2=0x00;
delay(1);
wei2=0;
delay(1);
P2=table[pros[1]/10];
delay(1);
wei1=1;
wei2=1;
wei3=1;
wei4=1;
P2=0x00;
delay(1);
wei3=0;
delay(1);
P2=table[pros[0]%10];
delay(1);
wei1=1;
wei2=1;
wei3=1;
wei4=1;
P2=0x00;
delay(1);
wei4=0;
delay(1);
P2=table[pros[0]/10];
delay(1);
P2=0x00;
delay(1);
j=(pros[2]%10)%2;
if(j==0)
{
wei1=1;
wei2=1;
wei3=1;
wei4=1;
P2=0x00;
delay(1);
wei3=0;
delay(1);
P2=0x80;
delay(1);
P2=0x00;
delay(1);
}
}
void tiaoshi()
{
uchar i;
if(key4==0)//小时++
{
delay(200);
if(key4==1)
{
uchar j=0;
j=time_data[4]/16;
time_data[4]=time_data[4]%16+j*10;
time_data[4]++;
if(time_data[4]>=24)
time_data[4]=0;
j=time_data[4]/10;
time_data[4]=time_data[4]%10;
time_data[4]=time_data[4]+j*16;
write_ds1302(0x8e,0x00);
write_ds1302(write_add[4],time_data[4]);
write_ds1302(0x8e,0x80);
}
}
}
void delay(uint n)
{
uchar j;
while(n--)
{
for(j=0;j<125;j++);
}
}
#include<reg52.h>
#include<INTRINS.H>
#define uchar unsigned char
#define uint unsigned int
sbit SCK=P1^7;
sbit RST=P1^5;
sbit IO=P1^6;
sbit wei4=P1^4;
sbit wei3=P1^3;
sbit wei2=P1^2;
sbit wei1=P1^1;
sbit key1=P3^5;
sbit key2=P3^6;
sbit key3=P3^7;
sbit key4=P1^0;
sbit beep=P3^3;
void write_ds1302_byte(uchar temp);
void write_ds1302(uchar add,uchar dat);
uchar read_ds1302(uchar add);
void read_rct();
void set_rtc();
void time_pros();
void display();
void display2();
void delay(uint n);
void tiaoshi();
void PlayMusic();
void DelayMS(uint x);
void naozhong();
uchar tt,t,amm,bmm;
uchar time_data[7]={17,0,2,5,17,14,55};
uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};//年,周,月,日,时,分,秒
uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};//年,周,月,日,时,分,秒
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar pros[2];
uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,
212,212,106,126,159,169,190,119,119,126,159,142,159,0};
uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,
9,3,12,12,12,12,12,9,3,12,12,12,24,0};
void main()
{
uchar aa;
aa=0;
tt=0;
t=0;
amm=1;
bmm=1;
beep=0;
key1=1;
key2=1;
key3=1;
key4=1;
set_rtc();
while(1)
{
read_rct();
time_pros();
tiaoshi();
display();
}
}
void write_ds1302_byte(uchar temp)
{
uchar i;
for(i=0;i<8;i++)
{
SCK=0;
IO=temp&0x01;
temp>>=1;
SCK=1;
}
}
void write_ds1302(uchar add,uchar dat)
{
RST=0;
_nop_();
SCK=0;
_nop_();
RST=1;
_nop_();
write_ds1302_byte(add);
write_ds1302_byte(dat);
RST=0;
}
uchar read_ds1302(uchar add)
{
uchar i,value=0x00;
RST=0;
_nop_();
SCK=0;
_nop_();
RST=1;
_nop_();
write_ds1302_byte(add);
for(i=0;i<8;i++)
{
value=value>>=1;
SCK=0;
if(IO)
{
value=value|0x80;
}
SCK=1;
}
RST=0;
_nop_();
SCK=0;
_nop_();
SCK=1;
IO=1;
return value;
}
void set_rtc()
{
uchar i,j;
for(i=0;i<7;i++)
{
j=time_data[i]/10;
time_data[i]=time_data[i]%10;
time_data[i]=time_data[i]+j*16;
}
write_ds1302(0x8e,0x00);
for(i=0;i<7;i++)
{
write_ds1302(write_add[i],time_data[i]);
}
write_ds1302(0x8e,0x80);
}
void read_rct()
{
uchar i;
for(i=0;i<7;i++)
{
time_data[i]=read_ds1302(read_add[i]);
}
}
void time_pros()
{
pros[2]=time_data[6]%16+(time_data[6]/16)*10;
pros[1]=time_data[5]%16+(time_data[5]/16)*10;
pros[0]=time_data[4]%16+(time_data[4]/16)*10;
}
void display()
{
uchar j;
wei1=1;
wei2=1;
wei3=1;
wei4=1;
P2=0x00;
delay(1);
wei1=0;
delay(1);
P2=table[pros[1]%10];
delay(1);
wei1=1;
wei2=1;
wei3=1;
wei4=1;
P2=0x00;
delay(1);
wei2=0;
delay(1);
P2=table[pros[1]/10];
delay(1);
wei1=1;
wei2=1;
wei3=1;
wei4=1;
P2=0x00;
delay(1);
wei3=0;
delay(1);
P2=table[pros[0]%10];
delay(1);
wei1=1;
wei2=1;
wei3=1;
wei4=1;
P2=0x00;
delay(1);
wei4=0;
delay(1);
P2=table[pros[0]/10];
delay(1);
P2=0x00;
delay(1);
j=(pros[2]%10)%2;
if(j==0)
{
wei1=1;
wei2=1;
wei3=1;
wei4=1;
P2=0x00;
delay(1);
wei3=0;
delay(1);
P2=0x80;
delay(1);
P2=0x00;
delay(1);
}
}
void tiaoshi()
{
uchar i;
if(key4==0)//小时++
{
delay(200);
if(key4==1)
{
uchar j=0;
j=time_data[4]/16;
time_data[4]=time_data[4]%16+j*10;
time_data[4]++;
if(time_data[4]>=24)
time_data[4]=0;
j=time_data[4]/10;
time_data[4]=time_data[4]%10;
time_data[4]=time_data[4]+j*16;
write_ds1302(0x8e,0x00);
write_ds1302(write_add[4],time_data[4]);
write_ds1302(0x8e,0x80);
}
}
}
void delay(uint n)
{
uchar j;
while(n--)
{
for(j=0;j<125;j++);
}
}