DS3231高精度时钟模块程序_第1页
DS3231高精度时钟模块程序_第2页
DS3231高精度时钟模块程序_第3页
DS3231高精度时钟模块程序_第4页
DS3231高精度时钟模块程序_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、模块参数:1 .尺寸:38mm(长)*22mm(宽)*14mm(高)2 .重量:8g3 .工作电压:3.3-5.5V4 .时钟芯片:高精度时钟芯片 DS32315 .时钟精度:0-40 C范围内,精度2ppm,年误差约1分钟6 .带2个日历闹钟7 .可编程方波输出8 .实时时钟产生秒、分、时、星期、日期、月和年计时,并提供有效期到2100年的闰年补偿9 .芯片内部自带温度传感器,精度为± 3 C10 .存储芯片:AT24C32(存储容量32K)11 .IIC总线接口,最高传输速度400KHz(工作电压为5V时)12 .可级联其它IIC设备,24C32地址可通过短路 A0/A1/A2修

2、改,默认地址为0x5713 .带可充电电池LIR2032,保证系统断电后,时钟任然正常走动接线说明,以 Arduino uno r3 为例:SCL5SDA 4VCCVGND WND代码部分:#include <reg51.h>#include <intrins.h> sbit INT=P3A2;#define ucharunsigned char#define uintunsigned intsbit SDA=P3A6;模拟I2C数据传送位SDAsbit SCL=P3”/模才I2C时钟控制位SCLsbit RESET=P3A3;sbit led0=P1A0;sbit l

3、ed1=P1A1;sbit led2=P1A2;sbit led3=P1A3;sbit led4=P1A4;sbit led5=P1A5;sbit led6=P1A6;sbit led7=P1A7;bit ack;应答标志位#define DS3231_WriteAddress 0xD0器件写地址#define DS3231_ReadAddress 0xD1器件读地址#define DS3231_SECOND0x00/ 秒#define DS3231_HOUR0x02时#define DS3231_WEEK0x03星期#define DS3231_DAY0x04日#define DS3231_

4、MONTH0x05月#define DS3231_YEAR0x06年闹铃1#define DS3231_SALARM1ECOND 0x07秒#define DS3231_ALARM1MINUTE 0x08分#define DS3231_ALARM1HOUR0x09时#define DS3231_ALARM1WEEK0x0A星期/日闹铃2#define DS3231_ALARM2MINUTE 0x0b分#define DS3231_ALARM2HOUR0x0c时#define DS3231_ALARM2WEEK0x0d星期/日#define DS3231_CONTROL0x0e控制寄存器#def

5、ine DS3231STATUS0x0f状态寄存器#define BSY2忙#define OSF7振荡器停止标志#define DS3231_XTAL0x10晶体老化寄存器#define DS3231_TEMPERATUREH 0x11温度寄存器高字节(8 位)#define DS3231_TEMPERATUREL 0x12温度寄存器低字节(高 2 位)精品资料uchar code dis_code11=0xc0,0xf9,0xa4,0xb0,/ 0,1,2,30x99,0x92,0x82,0xf8,0x80,0x90, 0xff;/4,5,6,7,8,9,off uchar data di

6、s_buf8;uchar data dis_index;uchar BCD2HEX(uchar val)/BCD 转换为Byteuchar temp;temp=val&0x0f;val>>=4;val&=0x0f;val*=10;temp+=val;return temp;uchar HEX2BCD(uchar val)/B码转换为BCD码uchar data dis_digit;精品资料uchar i,j,k;i=val/10;j=val;k=j+(i<<4);return k;void delayus(uint us)while (us-);void

7、 Start_I2C()SDA=1;发送起始条件的数据信号delayus;SCL=1;delayus(5);/起始条件建立时间大于4.7us,延时SDA=0;发送起始信号delayus(5);/起始条件锁定时间大于4 sSCL=0;钳住I2C总线,准备发送或接收数精品资料精品资料void Stop_I2C()SDA=0;delayus;SCL=1;delayus(5);SDA=1;delayus(4);void SendByte(uchar c)uchar BitCnt;for(BitCnt=0;BitCnt<8;BitCnt+)if(c<<BitCnt)&0x80)

8、SDA=1;发送结束条件的数据信号发送结束条件的时钟信号结束条件建立时间大于发送I2C总线结束信号/要传送的数据长度为判断发送位4uselseSDA=0;delayus;SCL=1;/置时钟线为高,通知被控器开始接收数据位delayus(5);保证时钟高电平周期大于 4的SCL=0;delayus(2);SDA=1;/8位发送完后释放数据线,准备接收应答位delayus(2);SCL=1;delayus(3);if(SDA=1)ack=0;elseack=1;判断是否接收到应答信号SCL=0;uchar RcvByte()uchar retc;uchar BitCnt;retc=0;SDA=1

9、;置数据线为输入方式for(BitCnt=0;BitCnt<8;BitCnt+)delayus(1);SCL=0;/置时钟线为低,准备接收数据位delayus(5);时钟低电平周期大于4.7的SCL=1;置时钟线为高使数据线上数据有效delayus(3);retc=retc<<1;精品资料if(SDA=1)retc=retc+1;放入retc中delayus(2);SCL=0;delayus(2);return(retc);读数据位,接收的数据位void Ack_12c(bit a)if(a=0)SDA=0;elseSDA=1;delayus(3);SCL=1;delayus

10、(5);/在此发出应答或非应答信号时钟低电平周期大于4小SCL=0;清时钟线,钳住I2C总线以便继续精品资料接收delayus(2);uchar write_byte(uchar addr, uchar write_data)Start_I2C();SendByte(DS3231_WriteAddress);if (ack = 0)return 0;SendByte(addr);if (ack = 0)return 0;SendByte(write_data);if (ack = 0)return 0;Stop_I2C();delayus(10);return 1;uchar read_cur

11、rent()uchar read_data;Start_I2C();SendByte(DS3231_ReadAddress);if(ack=0)return(0);read_data = RcvByte();Ack_12c(1);Stop_I2C();return read_data;uchar read_random(uchar random_addr)Start_I2C();SendByte(DS3231_WriteAddress);精品资料write_byte(DS3231_HOUR,temp);修改时if(ack=0)return(0);SendByte(random_addr);if

12、(ack=0)return(0);return(read_current();void ModifyTime(uchar yea,uchar mon,uchar da,uchar hou,uchar min,uchar sec) uchar temp=0;temp=HEX2BCD(yea);write_byte(DS3231_YEAR,temp);修改年temp=HEX2BCD(mon);write_byte(DS3231_MONTH,temp);修改月temp=HEX2BCD(da);write_byte(DS3231_DAY,temp);修改日temp=HEX2BCD(hou);精品资料t

13、emp=HEX2BCD(min);write_byte(DS3231_MINUTE,temp); 修改分temp=HEX2BCD(sec);write_byte(DS3231_SECOND,temp); 修改秒 void TimeDisplay(uchar Dhour,uchar Dmin,uchar Dsec)dis_buf7=dis_codeDhour / 10;dis_buf6=dis_codeDhour % 10;dis_buf4=dis_codeDmin / 10;dis_buf3=dis_codeDmin % 10;dis_buf1=dis_codeDsec / 10;dis_bu

14、f0=dis_codeDsec % 10;dis_buf2=0xbf;dis_buf5=0xbf;/时十位/时个位/分十位/分个位/秒十位/秒个位/显示void DateDisplay(uchar Dyear,uchar Dmonth,uchar Dday)dis_buf7=dis_codeDyear / 10;/ 年十位dis_buf6=dis_codeDyear % 10;/年个位dis_buf4=dis_codeDmonth / 10;/ 月十位dis_buf3=dis_codeDmonth % 10;/月个位dis_buf1=dis_codeDday / 10;/天十位dis_buf0

15、=dis_codeDday % 10;/ 天个位dis_buf2=0xbf;/ 显示”-dis_buf5=0xbf;void get_show_time(void)uchar Htemp1,Htemp2,Mtemp1,Mtemp2,Stemp1,Stemp2;Htemp1=read_random(DS3231_HOUR);时 24 小时制Htemp1&=0x3f;Htemp2=BCD2HEX(Htemp1);Mtemp1=read_random(DS3231_MINUTE); 分Mtemp2=BCD2HEX(Mtemp1);Stemp1=read_random(DS3231_SECON

16、D);秒Stemp2=BCD2HEX(Stemp1);TimeDisplay(Htemp2,Mtemp2,Stemp2);void get_show_date(void)uchar Ytemp1,Ytemp2,Mtemp1,Mtemp2,Dtemp1,Dtemp2;Ytemp1=read_random(DS3231_YEAR);年Ytemp2=BCD2HEX(Ytemp1);Mtemp1=read_random(DS3231_MONTH);月Mtemp2=BCD2HEX(Mtemp1);Dtemp1=read_random(DS3231_DAY);/ 日Dtemp2=BCD2HEX(Dtemp

17、1);DateDisplay(Ytemp2,Mtemp2,Dtemp2);精品资料void get_show_Temperature(void) uchar Ttemp1,Ttemp2,Ttemp3,Ttemp4;Ttemp1=read_random(DS3231_TEMPERATUREH);温度高字节Ttemp2=BCD2HEX(Ttemp1);Ttemp3=read_random(DS3231_TEMPERATUREL);温度低字节Ttemp4=BCD2HEX(Ttemp3);DateDisplay(0,Ttemp2,Ttemp4);void timer0() interrupt 1TH0

18、=0xFC;TL0=0x17;P2=0xff;/先关闭所有数码管P0=dis_bufdis_index;/ 显示代码传送到 P0 口P2=dis_digit;if (dis_digit & 0x80)dis_digit=(dis_digit << 1) | 0x1;elsedis_digit=(dis_digit << 1);dis_index+;dis_index&=0x07;/ 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描void main()uint ii = 0;RESET=0x1;/DS3231复位操作,正常操作下不需要每次都复位delayus(5000);led0=0;led1=0;led2=0;led3=0;led4=0;P0=0xff;P2=0xff;dis_digit=0xfe;dis_index=0;TimeDisplay(12, 5, 18);TMOD=0x11;/定时器0,1工作模式1,16位定时方式TH0=0xFC;TL0=0x17;TCON=0x01;IE=0x82;/ 使能 timer0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论