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

📄 ds1302.c

📁 电子时钟DS1302的程序
💻 C
字号:
#include  "config.h"

#define   SCLK	    0x00000002		/* P0.1 */
#define   IO	    0x00000004		/* P0.2 */
#define   RST   	0x00000008		/* P0.3 */

#define   OUT       0x0000000E
#define   IN        0x0000000A



#define ds1302_sec_reg        0x80 
#define ds1302_min_reg        0x82 
#define ds1302_hr_reg         0x84 
#define ds1302_date_reg       0x86 
#define ds1302_month_reg      0x88 
#define ds1302_day_reg        0x8A 
#define ds1302_year_reg       0x8C 
#define ds1302_control_reg    0x8E 
#define ds1302_charger_reg    0x90 
#define ds1302_clkburst_reg   0xBE 


void delay_1nop(uint32 x) 
{ uint32 j; 
  for(j=0;j<x;j++) ;
}

void write_data(uint8 command,uint8 data)
{  uint8  i; 
   IODIR=OUT;  
   IOCLR=RST;
   IOCLR=SCLK;
   IOSET=RST;		    
   for(i=0; i<8; i++)			
      { IOCLR=SCLK;  
        if((command&0x01)==0)
          { IOCLR=IO;
          }
          else
            { IOSET=IO;
            }
        delay_1nop(3);
        IOSET=SCLK;
        delay_1nop(5);
        command=command>>1;
      } 
   IOCLR=SCLK;  
   for(i=0; i<8; i++)			
      { IOCLR=SCLK;  
        if((data&0x01)==0)
          { IOCLR=IO;
          }
          else
            { IOSET=IO;
            }
        delay_1nop(3);
        IOSET=SCLK;
        delay_1nop(5);
       data=data>>1;
      } 
   IOCLR=SCLK;
   IOCLR=RST;
}
 
 uint8  ReadData(uint8 command)
 {  uint8  i;
    uint32 r=0;
    uint8 data=0x00;
    IODIR=OUT;   
    IOCLR=RST;
    IOCLR=SCLK; 
    IOSET=RST;
    
    for(i=0; i<8; i++)			
       { IOCLR=SCLK;  
         if((command&0x01)==0)
           { IOCLR=IO;
           }
           else
             { IOSET=IO;
             }
        delay_1nop(3);
        IOSET=SCLK;
        delay_1nop(5);
        command=command>>1;
      } 
   IODIR=IN;
   for(i=0; i<8; i++)	
      { IOCLR=SCLK;
        r=IOPIN;
       if((IOPIN&IO)!=0x00000004)
         { data|=0x00;
         }
         else
           { data|=0x80;
           }             
        delay_1nop(3);
        IOSET=SCLK;
        delay_1nop(5);
       data=data>>1;
     }
  IOCLR=SCLK;  
  IOCLR=RST;
  return(data);
  }
  
  void reset1302(void)   
  //1302初始化,写入秒,分,时,日,月,星期,年的数据
  { 
    write_data(0x8E,0x00);   //关闭写保护
  
    write_data(0x80,0x00);
    write_data(0x82,0x59);
    write_data(0x84,0x22);
    write_data(0x86,0x27);
    write_data(0x88,0x11);
    write_data(0x8A,0x06);
    write_data(0x8C,0x95);
  
    write_data(0x8E,0x80);  //打开写保护
    IOSET=SCLK;
    IOCLR=RST;
  }
  
  
  int main(void)
  { uint8 i;
    PINSEL0=0x00000000;
    PINSEL1=0x00000000;    
    IOCLR=RST;
    IOCLR=SCLK;
    
    reset1302();
            
    while(1)
      {
        i=ReadData(0x8C);  
       } 
                   
    return(0);
   }
                         	   

⌨️ 快捷键说明

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