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

下载本文档

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

文档简介

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

2、改,默认地址为0x5713 .带可充电电池LIR2032,保证系统断电后,时钟任然正常走动 接线说明,以 Arduino uno r3 为例:SCI A5SDM A4VCC> 5VGNA GND代码部分:#include <reg51.h>#include <intrins.h>unsigned charunsigned int/模才I2C数据传送位SDA/模才I2C时钟控制位SCL#define uchar#define uintsbit SDA=P3A6;sbit SCL=P3A7;sbit INT=P3A2;sbit RESET=P3A3;sbit led0

3、=P1A0;sbit led1=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#define DS3231_SECOND#define DS3231_MINUTE#define DS3231_HOUR#define DS3231_WEEK#define DS3231_DAY#define DS3231_MO

4、NTH#define DS3231_YEAR/闹铃1#define DS3231_SALARM1ECOND 0x07#define DS3231_ALARM1MINUTE 0x08#define DS3231_ALARM1HOUR#define DS3231_ALARM1WEEK/闹铃2#define DS3231_ALARM2MINUTE 0x0b#define DS3231_ALARM2HOUR#define DS3231_ALARM2WEEK#define DS3231_CONTROL#define DS3231_STATUS#define BSY0xD10x090x0A0x0c0x0d

5、0x0e0x0f/器件写地址/器件读地址0x00/ 秒0x01/ 分0x02/ 时0x03/星期0x04/ 日0x05/ 月0x06/ 年/秒/分/时/星期/日/分/时/星期/日/控制寄存器/状态寄存器2/忙#define OSF/振荡器停止标志#define DS3231 XTAL0x10/晶体老化寄存器/温度寄存器高字节(8位)/温度寄存器低字节(高2位)#define DS3231_TEMPERATUREH 0x11#define DS3231 TEMPERATUREL 0x12uchar code dis_code11=0xc0,0xf9,0xa4,0xb0,/ 0,1,2,3/0x9

6、9,0x92,0x82,0xf8,0x80,0x90, 0xff;4,5,6,7,8,9,offuchar data dis_buf8;uchar data dis_index;uchar data dis_digit;uchar BCD2HEX(uchar val) uchar temp;temp=val&0x0f;val>>=4;val&=0x0f;val*=10;temp+=val;return temp;uchar HEX2BCD(uchar val)uchar i,j,k;i=val/10;j=val;k=j+(i<<4); return k;

7、void delayus(uint us)while (us-);void Start_I2C()SDA=1;delayus(1);SCL=1;delayus(5);/BCD转换为Byte/B码转换为BC加/发送起始条件的数据信号/起始条件建立时间大于4.7us,延时SDA=0;delayus(5);SCL=0;据delayus(2);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+)

8、if(c<<BitCnt)&0x80) SDA=1;/判断发送位elseSDA=0;delayus;SCL=1;/置时钟线为高,通知被控器开始接收数据位 delayus(5);证时钟高电平周期大于4ds/发送起始信号/起始条件锁定时间大于 4ds/钳住I2C总线,准备发送或接收数/发送结束条件的数据信号/发送结束条件的时钟信号/结束条件建立时间大于4us/发送I2C总线结束信号/要传送的数据长度为8位/保SCL=0;delayus(2);SDA=1;/8位发送完后释放数据线,准备接收应答位delayus(2);SCL=1;delayus(3);if(SDA=1)ack=0;

9、 elseack=1;/判断是否接收到应答信号SCL=0;delayus(2);uchar RcvByte() uchar retc; uchar BitCnt;retc=0;SDA=1;/置数据线为输入方式for(BitCnt=0;BitCnt<8;BitCnt+) delayus; SCL=0;/置时钟线为低,准备接收数据位delayus(5);/时钟低电平周期大于4.7 科 sSCL=1;/置时钟线为高使数据线上数据有效delayus(3);retc=retc<<1;if(SDA=1)retc=retc+1;/读数据位,接收的数据位放入retc中delayus(2);S

10、CL=0;delayus(2);return(retc); void Ack_12c(bit a) if(a=0)SDA=0;/在此发出应答或非应答信号elseSDA=1;delayus(3);SCL=1;delayus(5);/时钟低电平周期大于 4科sSCL=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

11、)return 0;SendByte(write_data);if (ack = 0)return 0;Stop_I2C();delayus(10);return 1;uchar read_current()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(DS

12、3231_WriteAddress);if(ack=0)return(0);SendByte(random_addr);if(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

13、=HEX2BCD(da);write_byte(DS3231_DAY,temp);/ 修改日temp=HEX2BCD(hou);write_byte(DS3231_HOUR,temp); / 修改时temp=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

14、_codeDhour % 10;/时个位dis_buf4=dis_codeDmin / 10;/分十位dis_buf3=dis_codeDmin % 10;/分个位dis_buf1=dis_codeDsec / 10;/秒十位dis_buf0=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 %

15、 10;/ 年个位dis_buf4=dis_codeDmonth / 10;/ 月十位dis_buf3=dis_codeDmonth % 10;/ 月个位dis_buf1=dis_codeDday / 10;/ 天十位dis_buf0=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 小时

16、制Htemp1&=0x3f;Htemp2=BCD2HEX(Htemp1);Mtemp1=read_random(DS3231_MINUTE); / 分Mtemp2=BCD2HEX(Mtemp1);Stemp1=read_random(DS3231_SECOND); / 秒Stemp2=BCD2HEX(Stemp1);TimeDisplay(Htemp2,Mtemp2,Stemp2); void get_show_date(void)uchar Ytemp1,Ytemp2,Mtemp1,Mtemp2,Dtemp1,Dtemp2;Ytemp1=read_random(DS3231_YEAR

17、);/ 年Ytemp2=BCD2HEX(Ytemp1);Mtemp1=read_random(DS3231_MONTH);/ 月Mtemp2=BCD2HEX(Mtemp1);Dtemp1=read_random(DS3231_DAY);/ 日Dtemp2=BCD2HEX(Dtemp1);DateDisplay(Ytemp2,Mtemp2,Dtemp2); void get_show_Temperature(void)uchar Ttemp1,Ttemp2,Ttemp3,Ttemp4;Ttemp1=read_random(DS3231_TEMPERATUREH);/ 温度高字节Ttemp2=BC

18、D2HEX(Ttemp1);Ttemp3=read_random(DS3231_TEMPERATUREL);/ 温度低字节Ttemp4=BCD2HEX(Ttemp3);DateDisplay(0,Ttemp2,Ttemp4); void timer0() interrupt 1 TH0=0xFC;TL0=0x17;P2=0xff;/先关闭所有数码管P0=dis_bufdis_index;/ 显示代码传送到 P0 口P2=dis_digit;if (dis_digit & 0x80) dis_digit=(dis_digit << 1) | 0x1;else dis_digit=(dis_digit

温馨提示

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

评论

0/150

提交评论