1302.h

来自「AT89S52的万年历程序源码」· C头文件 代码 · 共 125 行

H
125
字号
#define uchar unsigned char
#define uint unsigned int
sbit ds1302_RST =P1^3;
sbit ds1302_IO  =P1^2;
sbit ds1302_SCLK=P1^1;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;

idata uchar  initial_time[]={0x00,0x00,0x12};
idata uchar  now_time[6],now_week,ring_time[3];
void init_ds1302();
void get_ds1302() ;
void set_ds1302(uchar taddr,uchar *P1302);
uchar read_data_ds1302(uchar taddr);
void write_data_ds1302(uchar taddr,uchar tdata);
void  write_Byte(uchar tdata);
uchar  read_Byte();
void read_ring();



uchar  read_Byte()
{
   uchar i;
   for(i=8;i>0;i--)
   {
     ACC=ACC>>1;
     ACC7=ds1302_IO;
     ds1302_SCLK=1;
     ds1302_SCLK=0;					
   } 
   return(ACC);
}



void  write_Byte(uchar tdata)
{
   uchar i;
   ACC=tdata;
   for(i=8;i>0;i--)
   {
     ds1302_IO=ACC0;
     ds1302_SCLK=1;
     ds1302_SCLK=0;
     ACC=ACC>>1;
   }

}


void write_data_ds1302(uchar taddr,uchar tdata)
{
   ds1302_RST=0;
   ds1302_SCLK=0;
   ds1302_RST=1;
   write_Byte(taddr);
   write_Byte(tdata); 
   ds1302_RST=0;
   ds1302_SCLK=1;
}


uchar read_data_ds1302(uchar taddr)
{  
   uchar tdata;
    
   ds1302_RST=0;
   ds1302_SCLK=0;
   ds1302_RST=1;
   write_Byte(taddr);
   tdata=read_Byte(); 
   ds1302_RST=0;
   ds1302_SCLK=1;
   return(tdata);
}



void set_ds1302(uchar taddr,uchar *P1302)
{
    uchar i;
    write_data_ds1302(0x8e,0x00);          
    for(i =3; i>0; i--)
    { 
       write_data_ds1302(taddr,*P1302);    
        P1302++;
        taddr+=2;
    }
   write_data_ds1302(0x8e,0x80);          
}


void get_ds1302() 
{
    uchar k;
    uchar taddr = 0x81;
    for (k=0; k<5; k++)
    {
        now_time[k] = read_data_ds1302(taddr);
        taddr+=2;

    }
    taddr+=2;
    now_time[k]=read_data_ds1302(taddr);
}

void read_ring()
{
	uchar k;
	uchar taddr=0xc1;
	for(k=0;k<3;k++)
	{
		ring_time[k]=read_data_ds1302(taddr);
		taddr+=2;
	}
}
void init_ds1302()
{
    ds1302_RST=0;
    ds1302_SCLK=0;
}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?