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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

DS1302时钟模块介绍及与USRAT HMI通信

發(fā)布時(shí)間:2023/12/10 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DS1302时钟模块介绍及与USRAT HMI通信 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、DS1302時(shí)鐘模塊

現(xiàn)在流行的串行時(shí)鐘電路很多,如DS1302、 DS1307、PCF8485等。這些電路的接口簡(jiǎn)單、價(jià)格低廉、使用方便,被廣泛地采用。

DS1302 是美國(guó)DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、周、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.0V~5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)31×8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級(jí)產(chǎn)品,與DS1202兼容,但增加了主電源/后備電源雙電源引腳,同時(shí)提供了對(duì)后備電源進(jìn)行涓細(xì)電流充電的能力,該芯片采用普通32.768kHz晶振,DS1302 工作時(shí)功耗很低保持?jǐn)?shù)據(jù)和時(shí)鐘信息時(shí)功率小于1mW。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖1 DS1302時(shí)鐘模塊實(shí)物圖

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖2 DS1302時(shí)鐘模塊封裝

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 表1 ?DS1302芯片引腳功能介紹表

VCC1

后備電源

GND

電源地

VCC2

工作電源

X1

晶振32.768kHz輸入

X2

SCLK

時(shí)鐘信號(hào)

I/O

數(shù)據(jù)輸入輸出

RST

復(fù)位信號(hào)|片選信號(hào)

?

?? DS1302時(shí)鐘模塊的引腳功能介紹如表1所示,而時(shí)序不再做陳述,需要再自行查找資料。

二、DS1302時(shí)鐘模塊驅(qū)動(dòng)代碼

1.頭文件

#ifndef _DS1302_H_#define _DS1302_H_#include "STC15F2K60S2.h"#ifndef UINT8#define UINT8 unsigned char#endif#ifndef DS1302_READ_BURST#define DS1302_READ_BURST 0xBF#endif#ifndef DS1302_WRITE_BURST#define DS1302_WRITE_BURST 0xBE#endifsbit DS1302_IO?? = P1^4;sbit DS1302_RST? = P1^5;sbit DS1302_SCLK = P1^3;extern UINT8 xdata time[9];extern UINT8 xdata date[11];extern UINT8 xdata current_day[2];//聲明全局變量void DS1302_WriteByte(UINT8 data_byte);//向ds1302寫(xiě)一個(gè)字節(jié)void DS1302_ReadByte(UINT8 *data_byte);//從ds1302讀一個(gè)字節(jié)void DS1302_Start();//操作起始信號(hào)void DS1302_Over();//操作結(jié)束信號(hào)void DS1302_ClearWriteProtection();//清除寫(xiě)保護(hù)void DS1302_SetWriteProtection();//設(shè)置寫(xiě)保護(hù)void DS1302_SetTime(UINT8 *ds1302_set_buffer);//設(shè)置ds1302的時(shí)間void DS1302_ReadTime(UINT8 *ds1302_build_buffer);//讀取ds1302的時(shí)間void Time_Build();//系統(tǒng)從ds1302讀取時(shí)間void Time_Set();//系統(tǒng)向ds1302設(shè)置時(shí)間void Time_Init();//系統(tǒng)時(shí)間初始化#endif

2.主程序

#include "ds1302.h"void DS1302_WriteByte(UINT8 data_byte)//向ds1302寫(xiě)一個(gè)字節(jié){UINT8 i;for (i=0;i<8;i++){DS1302_IO = data_byte & 0x01;DS1302_SCLK = 1;data_byte >>= 1;DS1302_SCLK = 0;}}void DS1302_ReadByte(UINT8 *data_byte) //從ds1302讀一個(gè)字節(jié){UINT8 i;for (i=0;i<8;i++){??????*data_byte >>= 1;if (DS1302_IO){*data_byte |= 0x80;}DS1302_SCLK = 1;DS1302_SCLK = 0;}}void DS1302_Start()//操作起始信號(hào){DS1302_RST? = 0;DS1302_SCLK = 0;DS1302_RST? = 1;}void DS1302_Over()//操作結(jié)束信號(hào){DS1302_IO? = 0;DS1302_RST = 0;}void DS1302_ClearWriteProtection()//清除寫(xiě)保護(hù){DS1302_Start();DS1302_WriteByte(0x8E);DS1302_WriteByte(0x00);DS1302_Over();}void DS1302_SetWriteProtection()//設(shè)置寫(xiě)保護(hù){DS1302_Start();DS1302_WriteByte(0x8E);DS1302_WriteByte(0x80);DS1302_Over();}void DS1302_SetTime(UINT8 *ds1302_set_buffer)//突發(fā)模式下設(shè)置時(shí)間{UINT8 i;DS1302_ClearWriteProtection();DS1302_Start();DS1302_WriteByte(DS1302_WRITE_BURST);for (i=0; i<7; i++){DS1302_WriteByte(ds1302_set_buffer[i]);}DS1302_WriteByte(0x80);//突發(fā)模式一次要寫(xiě)8個(gè)字節(jié),第八個(gè)字節(jié)是寫(xiě)保護(hù)字節(jié)DS1302_Over();}void DS1302_ReadTime(UINT8 *ds1302_read_buffer)//突發(fā)模式下讀取時(shí)間{UINT8 i,Temp;DS1302_ClearWriteProtection();DS1302_Start();DS1302_WriteByte(DS1302_READ_BURST);for (i=0; i<7; i++){DS1302_ReadByte(ds1302_read_buffer+i);}DS1302_ReadByte(&Temp);//突發(fā)模式一次讀8個(gè)字節(jié),最后一字節(jié)讀出來(lái)沒(méi)用DS1302_Over();DS1302_SetWriteProtection();}void Time_Build()//讀取時(shí)間后轉(zhuǎn)換成需要的格式{UINT8 xdata ds1302_build_buffer[7];DS1302_ReadTime(ds1302_build_buffer);time[7] = (ds1302_build_buffer[0]&0x0f)+'0';time[6] = ((ds1302_build_buffer[0]&0x70)>>4)+'0';time[4] = (ds1302_build_buffer[1]&0x0f)+'0';time[3] = ((ds1302_build_buffer[1]&0x70)>>4)+'0';time[1] = (ds1302_build_buffer[2]&0x0f)+'0';time[0] = ((ds1302_build_buffer[2]&0x30)>>4)+'0';date[9] = (ds1302_build_buffer[3]&0x0f)+'0';date[8] = ((ds1302_build_buffer[3]&0x30)>>4)+'0';date[6] = (ds1302_build_buffer[4]&0x0f)+'0';date[5] = ((ds1302_build_buffer[4]&0x10)>>4)+'0';date[3] = (ds1302_build_buffer[6]&0x0f)+'0';date[2] = ((ds1302_build_buffer[6]&0xf0)>>4)+'0';}void Time_Set()//將時(shí)間轉(zhuǎn)化為對(duì)應(yīng)格式存入ds1302{UINT8 xdata ds1302_set_buffer[7];ds1302_set_buffer[0]? = time[7]-'0';ds1302_set_buffer[0] |= ((time[6]-'0')&0x07)<<4;ds1302_set_buffer[1]? = time[4]-'0';ds1302_set_buffer[1] |= ((time[3]-'0')&0x07)<<4;ds1302_set_buffer[2]? = time[1]-'0';ds1302_set_buffer[2] |= ((time[0]-'0')&0x03)<<4;ds1302_set_buffer[3]? = date[9]-'0';ds1302_set_buffer[3] |= ((date[8]-'0')&0x03)<<4;ds1302_set_buffer[4]? = date[6]-'0';ds1302_set_buffer[4] |= ((date[5]-'0')&0x01)<<4;ds1302_set_buffer[6]? = date[3]-'0';ds1302_set_buffer[6] |= ((date[2]-'0')&0x0f)<<4;ds1302_set_buffer[5] = 0x01;DS1302_SetTime(ds1302_set_buffer);}void Time_Init()//開(kāi)機(jī)時(shí)間初始化{Time_Build();current_day[0] = date[8];current_day[1] = date[9];//保存當(dāng)前日期,用于檢測(cè)日期變化}

三、DS1302時(shí)鐘模塊與USRAT HMI通信

uchar a=0,b=0,c=0,d=0,e=0,f=0;/**********顯示時(shí)間**********/ a = date[2]; //發(fā)送年數(shù)據(jù)b = date[3];c = date[5]; //發(fā)送月數(shù)據(jù)d = date[6];e = date[8]; //發(fā)送日數(shù)據(jù)f = date[9];write_txt("t0.txt="); //發(fā)送文本write_COM(34); //雙引號(hào)write_COM(a);write_COM(b);write_COM(34);write_END(); //結(jié)束符 write_txt("t1.txt="); //發(fā)送文本write_COM(34); //雙引號(hào)write_COM(c);write_COM(d);write_COM(34);write_END(); //結(jié)束符 write_txt("t2.txt="); //發(fā)送文本write_COM(34); //雙引號(hào)write_COM(e);write_COM(f);write_COM(34);write_END(); //結(jié)束符 a = time[0]; //發(fā)送時(shí)數(shù)據(jù)b = time[1];c = time[3]; //發(fā)送分鐘數(shù)據(jù)d = time[4];e = time[6]; //發(fā)送秒鐘數(shù)據(jù)f = time[7];write_txt("t3.txt="); //發(fā)送文本write_COM(34); //雙引號(hào)write_COM(a);write_COM(b);write_COM(34);write_END(); //結(jié)束符 write_txt("t4.txt="); //發(fā)送文本write_COM(34); //雙引號(hào)write_COM(c);write_COM(d);write_COM(34);write_END(); //結(jié)束符write_txt("t5.txt="); //發(fā)送文本write_COM(34); //雙引號(hào)write_COM(e);write_COM(f);write_COM(34);write_END(); //結(jié)束符write_txt("t9.txt="); //發(fā)送文本write_COM(34);if(week==1) //發(fā)送星期數(shù)據(jù)write_txt("一");if(week==2)write_txt("二");if(week==3)write_txt("三");if(week==4)write_txt("四");if(week==5)write_txt("五");if(week==6)write_txt("六");if(week==7)write_txt("日"); write_COM(34);write_END();

?

總結(jié)

以上是生活随笔為你收集整理的DS1302时钟模块介绍及与USRAT HMI通信的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。