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

📄 ds1032.c

📁 这是一个和proteus结合的一用ds1032实现的例子
💻 C
字号:
#pragma small
#include <reg51.h>
#define uchar unsigned char 

sbit ds1032_clk=P1^0;
sbit ds1032_dat=P1^1;
sbit ds1032_rst=P1^2;

sbit ACC_0=ACC^0;
sbit ACC_1=ACC^1;
sbit ACC_2=ACC^2;
sbit ACC_3=ACC^3;
sbit ACC_4=ACC^4;
sbit ACC_5=ACC^5;
sbit ACC_6=ACC^6;
sbit ACC_7=ACC^7;


void write(void)    //写ds1032操作
  {
   ds1032_dat=ACC_0;
   ds1032_clk=1;ds1032_clk=0;
   ds1032_dat=ACC_1;
   ds1032_clk=1;ds1032_clk=0;
   ds1032_dat=ACC_2;
   ds1032_clk=1;ds1032_clk=0;
   ds1032_dat=ACC_3;
   ds1032_clk=1;ds1032_clk=0;
   ds1032_dat=ACC_4;
   ds1032_clk=1;ds1032_clk=0;
   ds1032_dat=ACC_5;
   ds1032_clk=1;ds1032_clk=0;
   ds1032_dat=ACC_6;
   ds1032_clk=1;ds1032_clk=0;
   ds1032_dat=ACC_7;
   ds1032_clk=1;ds1032_clk=0;
  }

void read(void)   //读ds1032操作
 {ACC_0=ds1032_dat;
  ds1032_clk=1;
  ds1032_clk=0;
  ACC_1=ds1032_dat;
  ds1032_clk=1;
  ds1032_clk=0;
  ACC_2=ds1032_dat;
  ds1032_clk=1;
  ds1032_clk=0;
  ACC_3=ds1032_dat;
  ds1032_clk=1;
  ds1032_clk=0;
  ACC_4=ds1032_dat;
  ds1032_clk=1;
  ds1032_clk=0;
  ACC_5=ds1032_dat;
  ds1032_clk=1;
  ds1032_clk=0;
  ACC_6=ds1032_dat;
  ds1032_clk=1;
  ds1032_clk=0;
  ACC_7=ds1032_dat;
  ds1032_clk=1;
  ds1032_clk=0;
 }

uchar readram_b(uchar address)  //从ram中读出一个字节
 {ds1032_rst=0;
  ds1032_clk=0;
  ds1032_rst=1;
  ACC=address;
  write();
  ds1032_dat=1;
  read();
  return ACC;
 }


uchar readrtc_b(uchar address)  //从ds1032中读出一个字节
  {
   ds1032_rst=0;
   ds1032_clk=0;   //清时钟总线
   ds1032_rst=1;  
   ACC=address;
   write();
   ds1032_dat=1;
   read();
   return ACC;
  }

 void writeram_b(uchar address,uchar number)  //向RAM中写入一字节
  {ds1032_clk=0;
   ds1032_rst=0;
   ds1032_rst=1;
   ACC=address;
   write();
   ACC=number;
   write();
   ds1032_rst=0;
   ds1032_clk=1;
  }

 void writertc_b(uchar address,uchar number)   //向DS1032中写入一字节
   {ds1032_clk=0;
    ds1032_rst=0;
    ds1032_rst=1;
	ACC=address;
	write();
	ACC=number;
	write();
	ds1032_rst=0;
	ds1032_clk=1;
   }

  void readram(uchar data *buffer,uchar size)   //从RAM中读出多字节
   {register uchar a,b;
    ds1032_clk=0;
	ds1032_rst=0;
	ds1032_rst=1;
	ACC=0XFF;
    write();
	ds1032_dat=1;
	for(a=0;a<size;a++)      
	 {ACC_0=ds1032_dat;
	  ds1032_clk=1;ds1032_clk=0;ACC_1=ds1032_dat;
	  ds1032_clk=1;ds1032_clk=0;ACC_2=ds1032_dat;
	  ds1032_clk=1;ds1032_clk=0;ACC_3=ds1032_dat;
	  ds1032_clk=1;ds1032_clk=0;ACC_4=ds1032_dat;
	  ds1032_clk=1;ds1032_clk=0;ACC_5=ds1032_dat;
	  ds1032_clk=1;ds1032_clk=0;ACC_6=ds1032_dat;
	  ds1032_clk=1;ds1032_clk=0;ACC_7=ds1032_dat;
      b=ACC;
	  *(buffer+a)=b;
	  ds1032_clk=1;ds1032_clk=0;
	 }
    ds1032_rst=0;ds1032_clk=1;
   }



  void readrtc(uchar data *buffer,uchar size)   //从DS1032中读出多字节
   {register uchar a;
    uchar b;
    ds1032_clk=0;
	ds1032_rst=0;
	ds1032_rst=1;
	ACC=0Xbf;
    write();
	ds1032_dat=1;
	for(a=0;a<size;a++)   //读出DS1032数据
	 {ACC_0=ds1032_dat;
	  ds1032_clk=1;ds1032_clk=0;ACC_1=ds1032_dat;
	  ds1032_clk=1;ds1032_clk=0;ACC_2=ds1032_dat;
	  ds1032_clk=1;ds1032_clk=0;ACC_3=ds1032_dat;
	  ds1032_clk=1;ds1032_clk=0;ACC_4=ds1032_dat;
	  ds1032_clk=1;ds1032_clk=0;ACC_5=ds1032_dat;
	  ds1032_clk=1;ds1032_clk=0;ACC_6=ds1032_dat;
	  ds1032_clk=1;ds1032_clk=0;ACC_7=ds1032_dat;
      b=ACC;
	  *(buffer+a)=b;
	  ds1032_clk=1;ds1032_clk=0;
	 }
    ds1032_rst=0;ds1032_clk=1;
   }

 void writeram(uchar data *buffer,uchar size)  //向RAM中写入多字节
   {register uchar a;
    ds1032_clk=0;
	ds1032_rst=0;
	ds1032_rst=1;
	ACC=0XFE;
	write();
	for(a=0;a<size;a++)
	 {ACC=*(buffer+a);
	  write();
	 }
	ds1032_rst=0;
	ds1032_clk=1;
   }
  void writertc(uchar data *buffer,uchar size) //向DS1032中写入多字节
      {register uchar a;
    ds1032_clk=0;
	ds1032_rst=0;
	ds1032_rst=1;
	ACC=0Xbe;
	write();
	for(a=0;a<size;a++)
	 {ACC=*(buffer+a);
	  write();
	 }
	ds1032_rst=0;
	ds1032_clk=1;
   }

  uchar readsec(void)                //从DS1032中读出秒字节
   {return readrtc_b(0x81);}


  uchar readmin(void)//从DS1032中读出分字节
   {return readrtc_b(0x83);}

    uchar readhr(void)                //从DS1032中读出时字节
   {return readrtc_b(0x85);}

    uchar readday(void)               //从DS1032中读出日字节
   {return readrtc_b(0x87);}

    uchar readmonth(void)             //从DS1032中读出月字节
   {return readrtc_b(0x89);}

    uchar readweek(void)               //从DS1032中读星秒字节
   {return readrtc_b(0x8b);}

    uchar readyear(void)             //从DS1032中读出年字节
   {return readrtc_b(0x8d);}

    uchar writesec(uchar number)      //向DS1032中写入秒字节
	 {writertc_b(0x80,number);} 

    uchar writemin(uchar number)      //向DS1032中写入秒字节
	 {writertc_b(0x82,number);} 

      uchar writehr(uchar number)      //向DS1032中写入秒字节
	 {writertc_b(0x84,number);} 

       uchar writeday(uchar number)      //向DS1032中写入秒字节
	 {writertc_b(0x86,number);} 

       uchar writemonth(uchar number)    //向DS1032中写入秒字节
	 {writertc_b(0x88,number);} 

       uchar writeweek(uchar number)      //向DS1032中写入秒字节
	 {writertc_b(0x8a,number);} 

       uchar writeyear(uchar number)      //向DS1032中写入秒字节
	 {writertc_b(0x8c,number);} 

       uchar writecontrol(uchar number)            //向慢速充电控制寄存器写入控制字
	 	 {writertc_b(0x90,number);} 

	   void disablewp(void)                       //禁止写保护
	     {writertc_b(0x80,0);}

       void enablewp(void)                         //允许写保护
	     {writertc_b(0x8e,0x80);}

      void main(void)
	   {uchar sec,min,hr,day,month,week,year;
	    uchar data buffer1[32]={32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
		 uchar data buffer2[8]={45,45,15,13,3,2,01,0};
            
		                           //读DS1032
		 disablewp();                                  //禁止写保护  
        writecontrol(0xaa);                           //向慢充电控制寄存器写入控制字节
		writeram(buffer1,31);                         //读DS1032RAM
	     
       	writertc(buffer2,8);                           //向DS1032写时钟  
		enablewp();                                   //允许写保护
		readram(buffer1,31);                           //读DS1032RAM
		readrtc(buffer2,8);                            //读DS1032时钟
	    writesec(11);
		sec=readsec();                                 //读秒 
		min=readmin();                                  //读分
		hr=readhr();                                    //读时
		day=readday();                                   //读日
		month=readmonth();                                //读月
		week=readweek();
	//	year=readyear();
		ACC=0;
	   }
	
     








   

⌨️ 快捷键说明

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