DS3231高精度時(shí)鐘模塊程序_第1頁(yè)
DS3231高精度時(shí)鐘模塊程序_第2頁(yè)
DS3231高精度時(shí)鐘模塊程序_第3頁(yè)
DS3231高精度時(shí)鐘模塊程序_第4頁(yè)
DS3231高精度時(shí)鐘模塊程序_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)用文檔文案大全模塊參數(shù):1 .尺寸:38mm(長(zhǎng))*22mm(寬)*14mm(高)2 .重量:8g3 .工作電壓33-5.5V4 .時(shí)鐘芯片:高精度時(shí)鐘芯片 DS32315 .時(shí)鐘精度:0-40 C范圍內(nèi),精度2ppm,年誤差約1分鐘6 .帶2個(gè)日歷鬧鐘7 .可編程方波輸出8 .實(shí)時(shí)時(shí)鐘產(chǎn)生秒、分、時(shí)、星期、日期、月和年計(jì)時(shí),并提供有效期到2100年的閏年補(bǔ)償9 .芯片內(nèi)部自帶溫度傳感器,精度為士 3C10 .存儲(chǔ)芯片:AT24C32(存儲(chǔ)容量32K)11 .IIC總線接口,最高傳輸速度400KHz(工作電壓為5V時(shí))12 .可級(jí)聯(lián)其它IIC設(shè)備,24C32地址可通過(guò)短路 A0/A1/A2修

2、改,默認(rèn)地址為0x5713 .帶可充電電池LIR2032,保證系統(tǒng)斷電后,時(shí)鐘任然正常走動(dòng) 接線說(shuō)明,以 Arduino uno r3 為例:SCI A5SDM A4VCC> 5VGNA GND代碼部分:#include <reg51.h>#include <intrins.h>unsigned charunsigned int/模才I2C數(shù)據(jù)傳送位SDA/模才I2C時(shí)鐘控制位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;/應(yīng)答標(biāo)志位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/ 時(shí)0x03/星期0x04/ 日0x05/ 月0x06/ 年/秒/分/時(shí)/星期/日/分/時(shí)/星期/日/控制寄存器/狀態(tài)寄存器2/忙#define OSF/振蕩器停止標(biāo)志#define DS3231 XTAL0x10/晶體老化寄存器/溫度寄存器高字節(jié)(8位)/溫度寄存器低字節(jié)(高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轉(zhuǎn)換為Byte/B碼轉(zhuǎn)換為BC加/發(fā)送起始條件的數(shù)據(jù)信號(hào)/起始條件建立時(shí)間大于4.7us,延時(shí)SDA=0;delayus(5);SCL=0;據(jù)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;/判斷發(fā)送位elseSDA=0;delayus;SCL=1;/置時(shí)鐘線為高,通知被控器開(kāi)始接收數(shù)據(jù)位 delayus(5);證時(shí)鐘高電平周期大于4ds/發(fā)送起始信號(hào)/起始條件鎖定時(shí)間大于 4ds/鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)/發(fā)送結(jié)束條件的數(shù)據(jù)信號(hào)/發(fā)送結(jié)束條件的時(shí)鐘信號(hào)/結(jié)束條件建立時(shí)間大于4us/發(fā)送I2C總線結(jié)束信號(hào)/要傳送的數(shù)據(jù)長(zhǎng)度為8位/保SCL=0;delayus(2);SDA=1;/8位發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答位delayus(2);SCL=1;delayus(3);if(SDA=1)ack=0;

9、 elseack=1;/判斷是否接收到應(yīng)答信號(hào)SCL=0;delayus(2);uchar RcvByte() uchar retc; uchar BitCnt;retc=0;SDA=1;/置數(shù)據(jù)線為輸入方式for(BitCnt=0;BitCnt<8;BitCnt+) delayus; SCL=0;/置時(shí)鐘線為低,準(zhǔn)備接收數(shù)據(jù)位delayus(5);/時(shí)鐘低電平周期大于4.7 科 sSCL=1;/置時(shí)鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效delayus(3);retc=retc<<1;if(SDA=1)retc=retc+1;/讀數(shù)據(jù)位,接收的數(shù)據(jù)位放入retc中delayus(2);S

10、CL=0;delayus(2);return(retc); void Ack_12c(bit a) if(a=0)SDA=0;/在此發(fā)出應(yīng)答或非應(yīng)答信號(hào)elseSDA=1;delayus(3);SCL=1;delayus(5);/時(shí)鐘低電平周期大于 4科sSCL=0;/清時(shí)鐘線,鉗住I2C總線以便繼續(xù)接收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); / 修改時(shí)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;/時(shí)十位dis_buf6=dis

14、_codeDhour % 10;/時(shí)個(gè)位dis_buf4=dis_codeDmin / 10;/分十位dis_buf3=dis_codeDmin % 10;/分個(gè)位dis_buf1=dis_codeDsec / 10;/秒十位dis_buf0=dis_codeDsec % 10;/秒個(gè)位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;/ 年個(gè)位dis_buf4=dis_codeDmonth / 10;/ 月十位dis_buf3=dis_codeDmonth % 10;/ 月個(gè)位dis_buf1=dis_codeDday / 10;/ 天十位dis_buf0=dis_codeDday % 10;/ 天個(gè)位dis_buf2=0xbf;/ 顯示"-"dis_buf5=0xbf;void get_show_time(void)uchar Htemp1,Htemp2,Mtemp1,Mtemp2,Stemp1,Stemp2;Htemp1=read_random(DS3231_HOUR); / 時(shí) 24 小時(shí)

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);/ 溫度高字節(jié)Ttemp2=BC

18、D2HEX(Ttemp1);Ttemp3=read_random(DS3231_TEMPERATUREL);/ 溫度低字節(jié)Ttemp4=BCD2HEX(Ttemp3);DateDisplay(0,Ttemp2,Ttemp4); void timer0() interrupt 1 TH0=0xFC;TL0=0x17;P2=0xff;/先關(guān)閉所有數(shù)碼管P0=dis_bufdis_index;/ 顯示代碼傳送到 P0 口P2=dis_digit;if (dis_digit & 0x80) dis_digit=(dis_digit << 1) | 0x1;else dis_digit=(dis_digit

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論