uchar shijian[7];
uchar ds[]={50,59,23,10,10,1,16};
//向DS1302写数据
void Write_Ds1302_Byte(unsigned char temp)
{
unsigned char i;
for (i=0;i<8;i++)
{
SCK=0;
SDA=temp&0x01;
temp>>=1;
SCK=1;
}
}
//读取DS1302指定地址中的数据
unsigned char Read_Ds1302 ( unsigned char address )
{
unsigned char i,temp=0x00;
uchar dat_low,dat_high;
RST=0;
NOP();
SCK=0;
NOP();
RST=1;
NOP();
Write_Ds1302_Byte(address);
for (i=0;i<8;i++)
{
SCK=0;
temp>>=1;
if(SDA)
temp|=0x80;
SCK=1;
}
RST=0;
NOP();
RST=0;
SCK=0;
NOP();
SCK=1;
NOP();
SDA=0;
NOP();
SDA=1;
NOP();
dat_high=temp/16;
dat_low=temp%16;
temp=dat_high*10+dat_low;
return (temp);
}
//向DS1302写地址和数据
void Write_Ds1302( unsigned char address,unsigned char dat )
{
uchar num;
RST=0;
NOP();
SCK=0;
NOP();
RST=1;
NOP();
Write_Ds1302_Byte(address);
num=(dat/10<<4)|(dat%10);
Write_Ds1302_Byte(num);
RST=0;
}
//将数据存储到指定数组中
void Read_Time()
{
uchar i;
uchar add=0x81;
Write_Ds1302(0x8e,0x00);
for(i=0;i<7;i++)
{
shijian[i]=Read_Ds1302(add);
add=add+2;
}
Write_Ds1302(0x8e,0x80);
}
void DSInit()
{
uchar i;
uchar add=0x80;
Write_Ds1302(0x8e,0x00);
for(i=0;i<7;i++)
{
Write_Ds1302(add,ds[i]);
add=add+2;
}
Write_Ds1302(0x8e,0x80);
}
main()
{
while(1){
Read_Time();
fen.DAT=shijian[0];
shi.DAT=shijian[1];
DisplayMainPage(1);//LCD液晶屏显示
CLRWDT();}
以上代码是DS1302读写程序
但是我在主函数读取不到数据,main函数我是简写,不用太关注main函数 |