⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1302.c

📁 红外控制万年历
💻 C
字号:

void  DS1302_limit(void)                                  //初始化
{
 DS1302_WriteEnable();
 DS1302_OscEnable(); 
 for(ds1302_b=0;ds1302_b<7;ds1302_b++)
   DS1302_SendByte(ds_sec+2*ds1302_b,d1302[ds1302_b]);    //赋值初始化
}


uchar DS1302_Read(uchar address)                          //读时钟
{
 uchar dat;
 DS1302_WriteEnable();
 switch(address)
  {case 0:dat=DS1302_ReceiveByte(ds_sec+1);
          break;
   case 1:dat=DS1302_ReceiveByte(ds_min+1);
          break;
   case 2:dat=DS1302_ReceiveByte(ds_hour+1);
          break;
   case 3:dat=DS1302_ReceiveByte(ds_day+1);
          break;
   case 4:dat=DS1302_ReceiveByte(ds_week+1);
          break;
   case 5:dat=DS1302_ReceiveByte(ds_month+1);
          break;
   case 6:dat=DS1302_ReceiveByte(ds_year+1);
          break;
  }
 DS1302_WriteDisable();
 return(dat);
}



void DS1302_Write(uchar address,uchar dat)
{ 
 DS1302_WriteEnable();
 switch(address)
  {
   case 0:DS1302_SendByte(ds_sec,dat);
          break;
   case 1:DS1302_SendByte(ds_min,dat);
          break;
   case 2:DS1302_SendByte(ds_hour,dat);
          break;
   case 3:DS1302_SendByte(ds_day,dat);
          break;
   case 4:DS1302_SendByte(ds_week,dat);
          break;
   case 5:DS1302_SendByte(ds_month,dat);
          break;
   case 6:DS1302_SendByte(ds_year,dat);
          break;
  }
 DS1302_WriteDisable();
}



ds1302pro()                                                //读出数据
{
   nian01=DS1302_ReceiveByte(ds_year+1);
   yue01=DS1302_ReceiveByte(ds_month+1);
   ri01=DS1302_ReceiveByte(ds_day+1);
   xiaoshi01=DS1302_ReceiveByte(ds_hour+1);
   sec01=DS1302_ReceiveByte(ds_sec+1);                     //读秒信息
   min01=DS1302_ReceiveByte(ds_min+1);                     //读分信息
   zhouxingqi=DS1302_ReceiveByte(ds_week+1);
   d1302_transfer();                                       //数值处理提取出待显示的值 


}


void DS1302_SendByte(uchar Command,uchar XmtDat)           // 发送数据程序,发送1个字节给被控器DS1302
{
 uchar i;
 RST=0;
 _nop_();
 SCLK=0;
 _nop_();
 RST=1;
 for(i=0;i<8;i++)
 {
  IO_DATA= (bit)(Command&0x01);
  Command = Command >> 1;
  SCLK=1; 
  _nop_();
  SCLK=0; 
 }     
for(i=0;i<8;i++)
 {
  IO_DATA= (bit)(XmtDat&0x01);
  XmtDat = XmtDat >> 1;
  SCLK=1; 
  _nop_();
  SCLK=0; 
 }
 RST=0;     
}


uchar DS1302_ReceiveByte(uchar Command)                  // 接收数据程序;从被控器DS1302 接收1个字节数据
{
 uchar i, RcvDat=0;
 RST=0;
 _nop_();
 SCLK=0;
 _nop_();
 RST=1;
 for(i=0;i<8;i++)
 {
  IO_DATA= (bit)(Command&0x01);
  Command = Command >> 1;
  SCLK=1; 
  _nop_();
  SCLK=0; 
 }     
for(i=0;i<7;i++)
 {
  if(IO_DATA)RcvDat|=0x80;
  RcvDat= RcvDat >> 1;
  SCLK=1;
  _nop_();
  SCLK=0; 
 }
 if(IO_DATA)RcvDat|=0x80;
 RST=0;
return  RcvDat;
}


void DS1302_WriteEnable(void)            //允许数据写入寄存器
{ 
  DS1302_SendByte(ds_com,00);
}


void DS1302_WriteDisable(void)           //禁止数据写入寄存器
{
  DS1302_SendByte(ds_com,0x80);
}

void DS1302_OscEnable(void)             //起动时钟操作
{
  DS1302_SendByte(ds_sec,0x00);
}

void DS1302_OscDisable(void)           //停止时钟操作
{
  DS1302_SendByte(ds_sec,0x80);
}


void d1302_transfer(void)             //数据转换函数
{
  nian02=nian01&0x0f;
  nian01=nian01>>4;
  yue02=yue01&0x0f;
  yue01=yue01>>4;
  ri02=ri01&0x0f;
  ri01=ri01>>4;
  xiaoshi02=xiaoshi01&0x0f;
  xiaoshi01=xiaoshi01>>4;
  min02=min01&0x0f;                    
  min01=min01>>4;                         
  sec02=sec01&0x0f;                    //取miao信号的低四位
  sec01=sec01>>4;                      //取高四位               
}


void delay1302(int i)                  //延时函数
{
 uchar x,j;
 for(x=0;x<i;x++)
 {
  for(j=0;j<125;j++){;}
 }
}




⌨️ 快捷键说明

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