DS3231高精度时钟模块程序.docx

上传人:b****3 文档编号:2285604 上传时间:2022-10-28 格式:DOCX 页数:10 大小:18.24KB
下载 相关 举报
DS3231高精度时钟模块程序.docx_第1页
第1页 / 共10页
DS3231高精度时钟模块程序.docx_第2页
第2页 / 共10页
DS3231高精度时钟模块程序.docx_第3页
第3页 / 共10页
DS3231高精度时钟模块程序.docx_第4页
第4页 / 共10页
DS3231高精度时钟模块程序.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

DS3231高精度时钟模块程序.docx

《DS3231高精度时钟模块程序.docx》由会员分享,可在线阅读,更多相关《DS3231高精度时钟模块程序.docx(10页珍藏版)》请在冰豆网上搜索。

DS3231高精度时钟模块程序.docx

DS3231高精度时钟模块程序

  模块参数:

  1.尺寸:

38mm(长)*22mm(宽)*14mm(高)

  2.重量:

8g

  3.工作电压:

3.3--5.5V

  4.时钟芯片:

高精度时钟芯片DS3231

  5.时钟精度:

0-40℃范围内,精度2ppm,年误差约1分钟

  6.带2个日历闹钟

  7.可编程方波输出

  8.实时时钟产生秒、分、时、星期、日期、月和年计时,并提供有效期到2100年的闰年补偿

  9.芯片内部自带温度传感器,精度为±3℃

  10.存储芯片:

AT24C32(存储容量32K)

  11.IIC总线接口,最高传输速度400KHz(工作电压为5V时)

  12.可级联其它IIC设备,24C32地址可通过短路A0/A1/A2修改,默认地址为0x57

  13.带可充电电池LIR2032,保证系统断电后,时钟任然正常走动

 

接线说明,以Arduinounor3为例:

  SCL→A5

  SDA→A4

  VCC→5V

  GND→GND

 

代码部分:

#include

#include

#defineuchar  unsignedchar  

#defineuint   unsignedint

sbitSDA=P3^6;    //模拟I2C数据传送位SDA        

sbitSCL=P3^7;    //模拟I2C时钟控制位SCL

sbitINT=P3^2;      

sbitRESET=P3^3;

sbitled0=P1^0;

sbitled1=P1^1;

sbitled2=P1^2;

sbitled3=P1^3;

sbitled4=P1^4;

sbitled5=P1^5;

sbitled6=P1^6;

sbitled7=P1^7;

bit ack;         //应答标志位

#defineDS3231_WriteAddress0xD0   //器件写地址 

#defineDS3231_ReadAddress 0xD1   //器件读地址

#defineDS3231_SECOND      0x00   //秒

#defineDS3231_MINUTE      0x01   //分

#defineDS3231_HOUR        0x02   //时

#defineDS3231_WEEK        0x03   //星期

#defineDS3231_DAY         0x04   //日

#defineDS3231_MONTH       0x05   //月

#defineDS3231_YEAR        0x06   //年

//闹铃1            

#defineDS3231_SALARM1ECOND0x07   //秒

#defineDS3231_ALARM1MINUTE0x08   //分

#defineDS3231_ALARM1HOUR  0x09   //时

#defineDS3231_ALARM1WEEK  0x0A   //星期/日

//闹铃2

#defineDS3231_ALARM2MINUTE0x0b   //分

#defineDS3231_ALARM2HOUR  0x0c   //时

#defineDS3231_ALARM2WEEK  0x0d   //星期/日

#defineDS3231_CONTROL     0x0e   //控制寄存器

#defineDS3231_STATUS      0x0f   //状态寄存器

#defineBSY                2      //忙

#defineOSF                7      //振荡器停止标志

#defineDS3231_XTAL        0x10   //晶体老化寄存器

#defineDS3231_TEMPERATUREH0x11   //温度寄存器高字节(8位)

#defineDS3231_TEMPERATUREL0x12   //温度寄存器低字节(高2位) 

 

ucharcodedis_code[11]={0xc0,0xf9,0xa4,0xb0,  //0,1,2,3

           0x99,0x92,0x82,0xf8,0x80,0x90,0xff};      //4,5,6,7,8,9,off

uchardatadis_buf[8];

uchardatadis_index;

uchardatadis_digit;

 

ucharBCD2HEX(ucharval)   //BCD转换为Byte

{

   uchartemp;

   temp=val&0x0f;

   val>>=4;

   val&=0x0f;

   val*=10;

   temp+=val;

   

   returntemp;

}

ucharHEX2BCD(ucharval)   //B码转换为BCD码

{

   uchari,j,k;

   i=val/10;

   j=val;

   k=j+(i<<4);

   returnk;

}

voiddelayus(uintus) 

{

   while(us--);

}

voidStart_I2C()

{

   SDA=1;                 //发送起始条件的数据信号

   delayus

(1);

   SCL=1;

   delayus(5);            //起始条件建立时间大于4.7us,延时

   

   SDA=0;                 //发送起始信号

   delayus(5);            //起始条件锁定时间大于4μs

       

   SCL=0;                 //钳住I2C总线,准备发送或接收数据

   delayus

(2);

}

voidStop_I2C()

{

   SDA=0;                 //发送结束条件的数据信号

   delayus

(1);            //发送结束条件的时钟信号

   SCL=1;                 //结束条件建立时间大于4us

   delayus(5);

   

   SDA=1;                 //发送I2C总线结束信号

   delayus(4);

}

voidSendByte(ucharc)

{

   ucharBitCnt;

   

   for(BitCnt=0;BitCnt<8;BitCnt++)        //要传送的数据长度为8位

   {

       if((c<

           SDA=1;                         //判断发送位

       else 

           SDA=0;               

         delayus

(1);

         SCL=1;                           //置时钟线为高,通知被控器开始接收数据位

         delayus(5);                      //保证时钟高电平周期大于4μs   

         SCL=0;

   }

   

   delayus

(2);

   SDA=1;                                 //8位发送完后释放数据线,准备接收应答位

   delayus

(2);  

   SCL=1;

   delayus(3);

   if(SDA==1)

       ack=0;    

   else

       ack=1;                             //判断是否接收到应答信号

   SCL=0;

   delayus

(2);

}

ucharRcvByte()

{

  ucharretc;

  ucharBitCnt;

 

  retc=0;

  SDA=1;                          //置数据线为输入方式

  for(BitCnt=0;BitCnt<8;BitCnt++)

  {

       delayus

(1);  

       SCL=0;                     //置时钟线为低,准备接收数据位

       

       delayus(5);                //时钟低电平周期大于4.7μs

      

       SCL=1;                     //置时钟线为高使数据线上数据有效

       delayus(3);

       retc=retc<<1;

       if(SDA==1)

           retc=retc+1;           //读数据位,接收的数据位放入retc中

       delayus

(2);

  }

  SCL=0;

  delayus

(2);

  return(retc);

}

 

voidAck_I2C(bita)

{

 

   if(a==0)

       SDA=0;             //在此发出应答或非应答信号

   else

       SDA=1;

   delayus(3);     

   SCL=1;

   

   delayus(5);            //时钟低电平周期大于4μs

   

   SCL=0;                 //清时钟线,钳住I2C总线以便继续接收

   delayus

(2);   

}

 

ucharwrite_byte(ucharaddr,ucharwrite_data)

{

   Start_I2C();

   SendByte(DS3231_WriteAddress);

   if(ack==0)

       return0;

   

   SendByte(addr);   

   if(ack==0)

       return0;

   

   SendByte(write_data);

   if(ack==0)

       return0;

   

   Stop_I2C();

   delayus(10);      

   return1;

}

 

ucharread_current()

{

   ucharread_data;

   Start_I2C();

   SendByte(DS3231_ReadAddress)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 自然景观

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1