日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DS1302示例子程序

發布時間:2025/5/22 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DS1302示例子程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

總結一下一些模塊常用的子程序

DS1302讀寫時間數據

//DS1302寫入地址命令,順序為秒分時日月周年,最低位讀寫位,讀取的地址在寫入的基礎上加1 uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; uchar year0=0x20;//年份頭兩位 //DS1302時鐘初始化2020年8月4日星期二12點00分00秒。存儲順序是秒分時日月周年,存儲格式是用BCD碼// uchar TIME[7] = {0, 0, 0x12, 0x04, 0x08, 0x02, 0x20}; /******************************************************************* 函數名稱:Ds1302Write() 函數功能:向DS1302命令(地址+數據)。 輸入參數:addr:寫入數據的地址 dat:寫入的數據 返回值: 無 *******************************************************************/ 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++) //開始傳送八位地址命令{DSIO = addr & 0x01; //數據從低位開始傳送addr >>= 1;SCLK = 1; //數據在上升沿時,DS1302讀取數據_nop_();SCLK = 0;_nop_();}for (n=0; n<8; n++) //寫入8位數據{DSIO = dat & 0x01;dat >>= 1;SCLK = 1; //數據在上升沿時,DS1302讀取數據_nop_();SCLK = 0;_nop_(); } RST = 0; //傳送數據結束_nop_(); } /******************************************************************* 函數名稱:Ds1302Read() 函數功能:讀取一個地址的數據。 輸入參數:addr:需要讀取數據的地址 返回值: dat:讀出的數據 *******************************************************************/ 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++) //開始傳送八位地址命令{DSIO = addr & 0x01; //數據從低位開始傳送addr >>= 1;SCLK = 1; //數據在上升沿時,DS1302讀取數據_nop_();SCLK = 0; //DS1302下降沿時,放置數據_nop_();}_nop_();for(n=0; n<8; n++) //讀取8位數據{dat1 = DSIO; //從最低位開始接收dat = (dat>>1) | (dat1<<7);SCLK = 1;_nop_();SCLK = 0; //DS1302下降沿時,放置數據_nop_();}RST = 0;_nop_(); //以下為DS1302復位的穩定時間,必須的。SCLK = 1;_nop_();DSIO = 0;_nop_();DSIO = 1;_nop_();return dat; }/******************************************************************* 函數名稱:Ds1302Init() 函數功能:初始化DS1302。 輸入參數:無 返回值: 無 *******************************************************************/ void Ds1302Init() {uchar n;Ds1302Write(0x8E,0X00); //關閉寫保護功能for (n=0; n<7; n++) //寫入7個字節的時鐘信號:分秒時日月周年{Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]); } Ds1302Write(0x8E,0x80); //打開寫保護功能 }/******************************************************************* 函數名稱:Ds1302ReadTime() 函數功能:讀取時鐘的日期、時間數據。 輸入參數:無 返回值: 無 *******************************************************************/ uchar DateString[11]; //讀取的日期數據存儲數組 uchar TimeString[9]; //讀取的時間數據存儲數組 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中的時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 ; //分離得到十位并轉換成ASCII碼DateString[1] = year0%16+0x30 ; //分離得到各位,注意&0x0f卻無法實現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'; //得到年月日顯示格式的字符串數組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'; //得到時分秒顯示格式的字符串數組 }

總結

以上是生活随笔為你收集整理的DS1302示例子程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。