當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]DS1302 是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)31×8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后備電源雙電源引腳,同時(shí)提供了對后備電源進(jìn)行涓細(xì)電流充電的能力。

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

DS1302的引腳排列,其中Vcc1為后備電源,VCC2為主電源。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時(shí),Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時(shí),DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768kHz晶振。RST是復(fù)位/片選線,通過把RST輸入驅(qū)動(dòng)置高電平來啟動(dòng)所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)傳送的方法。當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對DS1302進(jìn)行操作。如果在傳送過程中RST置為低電平,則會終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在Vcc>2.0V之前,RST必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細(xì)說明。SCLK為時(shí)鐘輸入端。 下圖為DS1302的引腳功能圖

本程序只顯示時(shí)間,沒有年份和月份

C代碼

#include "my51.h"

#include "smg.h"

#include "ds1302.h"

void main() //ds1302顯示時(shí)鐘

{

ds1302_initSet();//初始化

//ds1302_stop(); 停掉1302,進(jìn)入省電模式

while(1)

{

ds1302_readRTC();_nop_(); //讀取時(shí)鐘數(shù)據(jù)

displaySMG(ds1302_processTimeData());//處理數(shù)據(jù)并送數(shù)碼管顯示

}

}

C代碼

 

 

#ifndef _DS1302_H

#define _DS1302_H

#include "my51.h"

sbit rst=P3^4; //片選總線

sbit sda=P3^5; //數(shù)據(jù)總線

sbit scl=P3^6; //時(shí)鐘線

extern u8 data smgWela[7]; //數(shù)碼管顯示參數(shù)

extern u8 data timeData[7]; //年,周,月,日,時(shí),分,秒的初值

//void ds1302_setUnCharger() //充電控制,禁止充電

//void ds1302_stop() ; //暫停ds1302,進(jìn)入超低功耗模式

u8* ds1302_processTimeData(); //處理時(shí)鐘數(shù)據(jù),送給數(shù)碼管顯示

void ds1302_readRTC(); //讀取所有時(shí)鐘數(shù)據(jù)的BCD碼

void ds1302_initSet() ; //設(shè)置初始化數(shù)據(jù)

u8 ds1302_readData(u8 addr); //從ds1302讀一個(gè)字節(jié),讀的時(shí)候會先寫地址

void ds1302_writeByte(u8 dat); //寫一個(gè)字節(jié)

void ds1302_writeData(u8 addr,u8 dat); //向指定地址寄存器寫數(shù)據(jù)

#endif

C代碼

 

 

#include "ds1302.h"

data u8 timeData[7]={10,6,4,17,11,20,55};

code u8 writeAddr[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};//寫年周月日時(shí)分秒寄存器地址指令

code u8 readAddr[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};//讀的指令地址

void ds1302_writeData(u8 addr,u8 dat) //向指定地址寄存器寫數(shù)據(jù)

{

rst=0; _nop_();

scl=0; _nop_();

rst=1; _nop_();

ds1302_writeByte(addr); //先寫入地址

ds1302_writeByte(dat);

rst=0;_nop_(); //關(guān)閉

sda=1; //釋放

scl=1;

}

void ds1302_writeByte(u8 dat) //寫一個(gè)字節(jié)

{

u8 i=0;

for(i=0;i<8;i++)

{

scl=0; //時(shí)鐘線拉低

sda=dat&0x01; //數(shù)據(jù)從最低位開始賦值

dat>>=1;

scl=1;_nop_(); //上升沿寫入一位

}

}

u8 ds1302_readData(u8 addr) //從ds1302讀一個(gè)字節(jié),讀的時(shí)候會先寫地址

{

u8 i,value=0;

rst=0;_nop_();

scl=0;_nop_();

sda=1;_nop_();

rst=1;_nop_();

ds1302_writeByte(addr); //先寫入要讀的地址

_nop_();

sda=1;_nop_();

for(i=0;i<8;i++)

{

value>>=1;

scl=0;_nop_(); //下降沿開始后提取有效數(shù)據(jù)

if(sda) //讀數(shù)據(jù)

{

value|=0x80;//高電平手動(dòng)置位保存數(shù)據(jù),

} //低電平數(shù)據(jù)value最高位默認(rèn)已經(jīng)是0

scl=1; //為下一次讀取數(shù)據(jù)做準(zhǔn)備

}

rst=0;

return value;

}

void ds1302_initSet() //設(shè)置初始化數(shù)據(jù)

{

u8 i,j;

for(i=0;i<7;i++)//將初始化數(shù)據(jù)處理成BCD碼

{

j = timeData[i] / 10;

timeData[i]=timeData[i]%10;

timeData[i]=timeData[i]+j*16;

}

ds1302_writeData(0x8e,0x00); //清除寫保護(hù)

for(i=0;i<7;i++)

{ //將時(shí)鐘日歷數(shù)據(jù)經(jīng)過轉(zhuǎn)換后的BCD碼寫到7個(gè)時(shí)鐘日歷寄存器中

ds1302_writeData(writeAddr[i],timeData[i]);

}

ds1302_writeData(0x90,0x5c); //禁止充電,降低功耗,針對不可充電電池

//ds1302_writeData(0x90, 0xa6);//開啟充電,用一個(gè)二極管,用4k電阻

ds1302_writeData(0x8e,0x80); //使能寫保護(hù)

}

void ds1302_readRTC() //讀取所有時(shí)鐘數(shù)據(jù)的BCD碼

{

u8 i;

for(i=0;i<7;i++)

{ //讀取的時(shí)候會把時(shí)鐘日歷的7個(gè)寄存器中的數(shù)據(jù)全部讀取,并保存到timeData[]

timeData[i]=ds1302_readData(readAddr[i]);

}

}

u8* ds1302_processTimeData() //顯示時(shí)鐘,暫時(shí)只顯示時(shí)間

{

smgWela[5]

smgWela[5]=timeData[6] & 0x0f;//提取低4位

smgWela[4]=timeData[6] >> 4;//提取高4位

smgWela[3]=timeData[5]& 0x0f;

smgWela[2]=timeData[5]>> 4;

smgWela[1]=timeData[4]& 0x0f;

smgWela[0]=timeData[4]>> 4;

smgWela[6]=0xf5; //0xf5是小數(shù)點(diǎn)的位置

return smgWela;

}

/*

void ds1302_stop() //暫停ds1302

{

ds1302_writeData(0x8e,0x00); //清除寫保護(hù)

ds1302_writeData(writeAddr[6],0x80); //暫停ds1302,進(jìn)入超低功耗模式

ds1302_writeData(0x8e,0x80); //使能寫保護(hù)

} */

/*

void ds1302_setUnCharger() //充電控制,禁止充電

{

ds1302_writeData(0x8e,0x00); //清除寫保護(hù)

ds1302_writeData(0x90,0x5c); //禁止充電,降低功耗

ds1302_writeData(0x8e,0x80); //使能寫保護(hù)

}*/

C代碼

 

 

#ifndef _51SMG_H_

#define _51SMG_H_

#include "my51.h"

sbit dula =P2^6; //段選鎖存器控制 控制筆段

sbit wela =P2^7; //位選鎖存器控制 控制位置

extern u8 data smgWela[7]; //第一位到第六位,最后一個(gè)是小數(shù)點(diǎn)位置控制

#define dark 0x11//在段中,0x11是第17號元素,0x00是低電平,數(shù)碼管不亮,即table[17]

#define dotDark 0xff//小數(shù)點(diǎn)全暗

void displaySMG(u8* pWela); //數(shù)碼管顯示函數(shù),參數(shù)是數(shù)組指針

#endif

C代碼

 

 

#include "smg.h"

#include "my51.h"

static u8 code table[]= { //0~F外加小數(shù)點(diǎn)和空輸出的數(shù)碼管編碼

0x3f , 0x06 , 0x5b , 0x4f , // 0 1 2 3

0x66 , 0x6d , 0x7d , 0x07 , // 4 5 6 7

0x7f , 0x6f , 0x77 , 0x7c , // 8 9 A B

0x39 , 0x5e , 0x79 , 0x71 , // C D E F

0x80 , 0x00 ,0x40 // . 空 負(fù)號 空為第17號元素

};

/* 由于此表只能一次顯示一個(gè)小數(shù)點(diǎn),故已注釋掉,僅供查詢

例如想要第一個(gè)和第六個(gè)數(shù)碼管小數(shù)點(diǎn)同時(shí)點(diǎn)亮,

則執(zhí)行 pWela->dot = 0xfe & 0xdf 即可

u8 code dotTable[]={ //小數(shù)點(diǎn)位置,某一位置0時(shí),小數(shù)點(diǎn)亮

0xff , //全暗

0xfe , 0xfd , 0xfb , //1 2 3

0xf7 , 0xef , 0xdf //4 5 6

};*/

u8 data smgWela[7]={0,0,0,0,0,0,0}; //第一位到第六位,最后一個(gè)是小數(shù)點(diǎn)位置控制

//P0口的數(shù)碼管位選控制鎖存器只用了低6位,我們保留高2位的數(shù)據(jù),留作它用

void displaySMG(u8* pWela)

{

u8 i=0;

//控制6位數(shù)碼管顯示函數(shù),不顯示的位用參數(shù)dark

u8 preState=P0|0x3f; //保存高2位狀態(tài),其中最高位是ADC0804的片選信號

wela=0;dula=0;_nop_();//先鎖定數(shù)據(jù),防止吳亮及位選鎖存器高2位數(shù)據(jù)被改變

P0=0; //由于數(shù)碼管是共陰極的,陽極送低電平,燈不亮

dula=1;_nop_();

dula=0; //段選數(shù)據(jù)清空并鎖定

P0=preState; //共陰極數(shù)碼管是陰極置高不亮,低6位置1,高2位保留

wela=1;_nop_(); //注:wela和dula上電默認(rèn)為1

wela=0; //位選鎖定,初始保留高2位的數(shù)據(jù),低6位置高不亮

for(i=0;i<6;i++) //顯示6位數(shù)碼管

{

P0=table[pWela[i]]|(((1<

dula=1;_nop_(); //送段數(shù)據(jù),疊加小數(shù)點(diǎn)的顯示,0x00點(diǎn)亮小數(shù)點(diǎn)

dula=0;

P0=preState&~(1<

wela=1; _nop_(); //送位選號

wela=0;

delayms(1); //稍作延時(shí),讓燈管亮起來

{ //消除疊影及誤亮,陰極置1不亮,低6位置1,高2位保留并鎖定

P0=preState;

wela=1; _nop_();

wela=0;

}

}

}

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉