DS1302示例子程序
生活随笔
收集整理的這篇文章主要介紹了
DS1302示例子程序
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
總結(jié)一下一些模塊常用的子程序
DS1302讀寫時(shí)間數(shù)據(jù)
//DS1302寫入地址命令,順序?yàn)槊敕謺r(shí)日月周年,最低位讀寫位,讀取的地址在寫入的基礎(chǔ)上加1 uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; uchar year0=0x20;//年份頭兩位 //DS1302時(shí)鐘初始化2020年8月4日星期二12點(diǎn)00分00秒。存儲(chǔ)順序是秒分時(shí)日月周年,存儲(chǔ)格式是用BCD碼// uchar TIME[7] = {0, 0, 0x12, 0x04, 0x08, 0x02, 0x20}; /******************************************************************* 函數(shù)名稱:Ds1302Write() 函數(shù)功能:向DS1302命令(地址+數(shù)據(jù))。 輸入?yún)?shù):addr:寫入數(shù)據(jù)的地址 dat:寫入的數(shù)據(jù) 返回值: 無(wú) *******************************************************************/ void Ds1302Write(uchar addr, uchar dat) {uchar n;RST = 0;_nop_();SCLK = 0; //先將SCLK置低電平。_nop_();RST = 1; //然后將RST(CE)置高電平。_nop_();for (n=0; n<8; n++) //開(kāi)始傳送八位地址命令{DSIO = addr & 0x01; //數(shù)據(jù)從低位開(kāi)始傳送addr >>= 1;SCLK = 1; //數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù)_nop_();SCLK = 0;_nop_();}for (n=0; n<8; n++) //寫入8位數(shù)據(jù){DSIO = dat & 0x01;dat >>= 1;SCLK = 1; //數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù)_nop_();SCLK = 0;_nop_(); } RST = 0; //傳送數(shù)據(jù)結(jié)束_nop_(); } /******************************************************************* 函數(shù)名稱:Ds1302Read() 函數(shù)功能:讀取一個(gè)地址的數(shù)據(jù)。 輸入?yún)?shù):addr:需要讀取數(shù)據(jù)的地址 返回值: dat:讀出的數(shù)據(jù) *******************************************************************/ uchar Ds1302Read(uchar addr) {uchar n,dat,dat1;RST = 0;_nop_();SCLK = 0; //先將SCLK置低電平。_nop_();RST = 1; //然后將RST(CE)置高電平。_nop_();for(n=0; n<8; n++) //開(kāi)始傳送八位地址命令{DSIO = addr & 0x01; //數(shù)據(jù)從低位開(kāi)始傳送addr >>= 1;SCLK = 1; //數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù)_nop_();SCLK = 0; //DS1302下降沿時(shí),放置數(shù)據(jù)_nop_();}_nop_();for(n=0; n<8; n++) //讀取8位數(shù)據(jù){dat1 = DSIO; //從最低位開(kāi)始接收dat = (dat>>1) | (dat1<<7);SCLK = 1;_nop_();SCLK = 0; //DS1302下降沿時(shí),放置數(shù)據(jù)_nop_();}RST = 0;_nop_(); //以下為DS1302復(fù)位的穩(wěn)定時(shí)間,必須的。SCLK = 1;_nop_();DSIO = 0;_nop_();DSIO = 1;_nop_();return dat; }/******************************************************************* 函數(shù)名稱:Ds1302Init() 函數(shù)功能:初始化DS1302。 輸入?yún)?shù):無(wú) 返回值: 無(wú) *******************************************************************/ void Ds1302Init() {uchar n;Ds1302Write(0x8E,0X00); //關(guān)閉寫保護(hù)功能for (n=0; n<7; n++) //寫入7個(gè)字節(jié)的時(shí)鐘信號(hào):分秒時(shí)日月周年{Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]); } Ds1302Write(0x8E,0x80); //打開(kāi)寫保護(hù)功能 }/******************************************************************* 函數(shù)名稱:Ds1302ReadTime() 函數(shù)功能:讀取時(shí)鐘的日期、時(shí)間數(shù)據(jù)。 輸入?yún)?shù):無(wú) 返回值: 無(wú) *******************************************************************/ uchar DateString[11]; //讀取的日期數(shù)據(jù)存儲(chǔ)數(shù)組 uchar TimeString[9]; //讀取的時(shí)間數(shù)據(jù)存儲(chǔ)數(shù)組 void Ds1302ReadTime() {uchar second,minute,hour,day,month,week,year;second=Ds1302Read(WRITE_RTC_ADDR[0]|0x01); //讀取ds1302中的秒minute=Ds1302Read(WRITE_RTC_ADDR[1]|0x01); //讀取ds1302中的分hour=Ds1302Read(WRITE_RTC_ADDR[2]|0x01); //讀取ds1302中的時(shí)day=Ds1302Read(WRITE_RTC_ADDR[3]|0x01); //讀取ds1302中的天month=Ds1302Read(WRITE_RTC_ADDR[4]|0x01); //讀取ds1302中的月week=Ds1302Read(WRITE_RTC_ADDR[5]|0x01); //讀取ds1302中的周year=Ds1302Read(WRITE_RTC_ADDR[6]|0x01); //讀取ds1302中的年DateString[0] = year0/16+0x30 ; //分離得到十位并轉(zhuǎn)換成ASCII碼DateString[1] = year0%16+0x30 ; //分離得到各位,注意&0x0f卻無(wú)法實(shí)現(xiàn)DateString[2] = year/16+0x30 ; DateString[3] = year%16+0x30 ; DateString[4] = '-';DateString[5] = month/16+0x30;DateString[6] = month%16+0x30 ;DateString[7] = '-';DateString[8] = day/16+0x30 ;DateString[9] = day%16+0x30 ; DateString[10] = '\0'; //得到年月日顯示格式的字符串?dāng)?shù)組TimeString[0] = hour/16+0x30 ;TimeString[1] = hour%16+0x30 ;TimeString[2] = ':';TimeString[3] = minute/16+0x30 ;TimeString[4] = minute%16+0x30 ; TimeString[5] = ':'; TimeString[6] = second/16+0x30;TimeString[7] = second%16+0x30 ;TimeString[8] = '\0'; //得到時(shí)分秒顯示格式的字符串?dāng)?shù)組 }總結(jié)
以上是生活随笔為你收集整理的DS1302示例子程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LCD12864示例子程序
- 下一篇: 画原理图和PCB图该注意什么?