![51單片機(jī)實(shí)戰(zhàn)指南-使用DS1302設(shè)計(jì)數(shù)字時(shí)鐘_第1頁(yè)](http://file4.renrendoc.com/view10/M01/2B/19/wKhkGWXWfrGAVsGkAAIMEzb86e8291.jpg)
![51單片機(jī)實(shí)戰(zhàn)指南-使用DS1302設(shè)計(jì)數(shù)字時(shí)鐘_第2頁(yè)](http://file4.renrendoc.com/view10/M01/2B/19/wKhkGWXWfrGAVsGkAAIMEzb86e82912.jpg)
![51單片機(jī)實(shí)戰(zhàn)指南-使用DS1302設(shè)計(jì)數(shù)字時(shí)鐘_第3頁(yè)](http://file4.renrendoc.com/view10/M01/2B/19/wKhkGWXWfrGAVsGkAAIMEzb86e82913.jpg)
![51單片機(jī)實(shí)戰(zhàn)指南-使用DS1302設(shè)計(jì)數(shù)字時(shí)鐘_第4頁(yè)](http://file4.renrendoc.com/view10/M01/2B/19/wKhkGWXWfrGAVsGkAAIMEzb86e82914.jpg)
![51單片機(jī)實(shí)戰(zhàn)指南-使用DS1302設(shè)計(jì)數(shù)字時(shí)鐘_第5頁(yè)](http://file4.renrendoc.com/view10/M01/2B/19/wKhkGWXWfrGAVsGkAAIMEzb86e82915.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
使用DS1302設(shè)計(jì)數(shù)字時(shí)鐘51單片機(jī)實(shí)戰(zhàn)指南本章內(nèi)容:2DS1302芯片介紹1封裝的編程思想和結(jié)構(gòu)體類型22DS1302讀寫操作的編程實(shí)現(xiàn)3DS1302讀寫實(shí)戰(zhàn)412.1.1DS1302芯片特點(diǎn)DS1302實(shí)時(shí)時(shí)鐘芯片具有功耗低、精確度高、軟件編程較簡(jiǎn)單,且芯片體積小、成本低等特點(diǎn)提供秒、分、小時(shí)、日期、月、年等信息,可以通過(guò)配置AM/PM來(lái)決定采用24小時(shí)格式還是12小時(shí)格式
擁有31*8位的額外數(shù)據(jù)暫存寄存器(即RAM,掉電丟失)串行I/O通信方式工作電壓比較寬,在2.0~5.5V的范圍內(nèi)都可以正常工作功耗很低,它在工作電壓2.0V的時(shí)候,工作電流小于300nA提供主電源和備用電源共兩個(gè)電源,保證系統(tǒng)掉電的情況下仍繼續(xù)工作12.1.2DS1302芯片引腳功能引腳編號(hào)引腳名稱引腳功能1VCC2主電源引腳,當(dāng)VCC2比VCC1高0.2V以上時(shí),DS1302由VCC2供電,當(dāng)VCC2低于VCC1時(shí),由VCC1供電。2X1這兩個(gè)引腳需要接一個(gè)32.768K的晶振,給DS1302提供一個(gè)基準(zhǔn)。3X24GND接地引腳。5CE使能引腳。當(dāng)讀寫DS1302時(shí),這個(gè)引腳必須是高電平。6I/O串行數(shù)據(jù)輸入/輸出端(雙向)。7SCLKSerialClock輸入引腳,用來(lái)作為通信的時(shí)鐘信號(hào)。8VCC1備用電源引腳。12.1.2DS1302芯片寄存器功能寄存器名命令字取值范圍各位內(nèi)容寫操作讀操作76543210秒寄存器80H81H00-59CH10SECSEC分鐘寄存器82H83H00-59010MINMIN小時(shí)寄存器84H85H00-12/00-2312/010/PHRHR日期寄存器86H87H01-310010DATEDATE月份寄存器88H89H01-1200010MMONTH星期寄存器8AH8BH01-0700000DAY年份寄存器8CH8DH00-9910YEARYEAR控制寄存器8EH8FH—WP0000000bit7bit6bit5bit4bit3bit2bit1bit01RAM/CKA4A3A2A1A0R/W本章內(nèi)容:2DS1302芯片介紹1封裝的編程思想和結(jié)構(gòu)體類型22DS1302讀寫操作的編程實(shí)現(xiàn)3DS1302讀寫實(shí)戰(zhàn)412.2.1封裝的編程思想封裝是面向?qū)ο缶幊倘筇匦裕ǚ庋b、繼承、多態(tài))之一核心思想就是盡可能地隱藏內(nèi)部的細(xì)節(jié),只保留一些對(duì)外接口使之與外部發(fā)生聯(lián)系就C語(yǔ)言而言,封裝的體現(xiàn)就是函數(shù)的編寫(小封裝)和模塊文件的編寫(大封裝)如LCD,IIC總線,EEPROM,鍵盤等都進(jìn)行了模塊文件的編寫lcd1602.c、i2c.c、EEPROM.c、keyboard.c,包括它們各自的頭文件(.h)12.2.2結(jié)構(gòu)體的應(yīng)用1.結(jié)構(gòu)體類型的定義DS1302的日歷時(shí)鐘寄存器可以如下定義:structsCalenda{
//日歷結(jié)構(gòu)體定義
unsigned
intyear;
//年,加上了‘2’‘0’,所以int類型
unsigned
charmon;
//月
unsigned
charday;
//日
unsigned
charhour;
//時(shí)
unsigned
charmin;
//分
unsigned
charsec;
//秒
unsigned
charweek;
//星期};12.2.2結(jié)構(gòu)體的應(yīng)用2.結(jié)構(gòu)體變量的定義結(jié)構(gòu)體變量的定義有三種方法先結(jié)構(gòu)體先定義結(jié)構(gòu)體類型,再定義變量名;定義結(jié)構(gòu)體類型同時(shí)定義結(jié)構(gòu)體類型變量;直接定義結(jié)構(gòu)體類型變量。structsCalendacalenda;
calenda.mon=0x07; //7月Calenda.day=0x19; //19日structsCalenda*calenda;calenda->mon=0x07;calenda->day=0x19;12.2.2結(jié)構(gòu)體的應(yīng)用3.結(jié)構(gòu)體變量作為函數(shù)的參數(shù)指針變量作為函數(shù)參數(shù),實(shí)際上傳遞的是結(jié)構(gòu)體變量的地址,并不是結(jié)構(gòu)體變量本身voidGetCurrentTime(structsCalenda*calenda);本章內(nèi)容:2DS1302芯片介紹1封裝的編程思想和結(jié)構(gòu)體類型22DS1302讀寫操作的編程實(shí)現(xiàn)3DS1302讀寫實(shí)戰(zhàn)412.3.1操作DS1302寄存器函數(shù)的實(shí)現(xiàn)1.寫DS1302寄存器函數(shù)12.3.1操作DS1302寄存器函數(shù)的實(shí)現(xiàn)1.寫DS1302寄存器函數(shù)voidDS1302WriteReg(unsigned
charreg,
unsigned
chardat){
unsigned
charn; DS1302_CE=
1;
//將CE置高電平,使能通信
for
(n=0;n<8;n++)
//開始傳送八位地址命令
{ DS1302_IO=reg&
0x01;
//數(shù)據(jù)從低位開始傳送 reg>>=
1; DS1302_CK=
1;//數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù) DS1302_CK=
0;
}
for
(n=0;n<8;n++)
//寫入8位數(shù)據(jù)
{ DS1302_IO=dat&
0x01; dat>>=
1; DS1302_CK=
1;//數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù) DS1302_CK=
0;
}
DS1302_CE=
0;
//傳送數(shù)據(jù)結(jié)束}12.3.1操作DS1302寄存器函數(shù)的實(shí)現(xiàn)1.讀DS1302寄存器函數(shù)12.3.1操作DS1302寄存器函數(shù)的實(shí)現(xiàn)1.讀DS1302寄存器函數(shù)unsigned
charDS1302ReadReg(unsigned
charreg){
unsigned
charn,temp;unsigned
chardat=0; DS1302_CE=
1;
//然后將CE)高電平。
for
(n=0;n<8;n++)
//開始傳送八位地址命令
{ DS1302_IO=reg&
0x01;
//數(shù)據(jù)從低位開始傳送 reg>>=
1; DS1302_CK=
1;//數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù) DS1302_CK=
0;
}
for(n=0;n<8;n++)
//讀取8位數(shù)據(jù)
{ temp=DS1302_IO;
//從最低位開始接收,上升沿之前讀 dat=
(dat>>1)
|
(temp<<7); DS1302_CK=
1; //產(chǎn)生上升沿 DS1302_CK=
0;//DS1302下降沿輸出數(shù)據(jù),完成一個(gè)位的操作
} DS1302_CE=
0;
//傳送數(shù)據(jù)結(jié)束
returndat;}12.3.2讀寫函數(shù)的封裝-DS1302WriteByte/*發(fā)送一個(gè)字節(jié)到DS1302通信總線上*/voidDS1302WriteByte(unsigned
chardat){
unsigned
chari;
for
(i=0;i<8;i++)
//低位在前,逐位移出
{DS1302_IO=dat&
0x01;dat>>=
1;DS1302_CK=
1;
//然后拉高時(shí)鐘DS1302_CK=
0;
//再拉低時(shí)鐘,完成一個(gè)位的操作
}DS1302_IO=
1;
//最后確保釋放IO引腳}12.3.2讀寫函數(shù)的封裝-DS1302WriteReg/*用單次寫操作向某一寄存器寫入一個(gè)字節(jié),reg:寄存器地址,dat:待寫入字節(jié)*/voidDS1302WriteReg(unsigned
charreg,
unsigned
chardat){DS1302_CE=
1;
//使能片選信號(hào)DS1302WriteByte((reg<<1)|0x80); //發(fā)送寫寄存器指令DS1302WriteByte(dat);
//寫入字節(jié)數(shù)據(jù)DS1302_CE=
0;
//除能片選信號(hào)}12.3.2讀寫函數(shù)的封裝-DS1302ReadByte/*由DS1302通信總線上讀取一個(gè)字節(jié)*/unsigned
charDS1302ReadByte(){
unsigned
chari,temp;
unsigned
chardat=
0;
for
(i=0;i<8;i++)
//低位在前,逐位讀取
{temp=DS1302_IO; dat=
(dat>>1)
|
(temp<<7);DS1302_CK=
1;
//然后拉高時(shí)鐘DS1302_CK=
0;
//再拉低時(shí)鐘,完成一個(gè)位的操作
}
returndat;
//最后返回讀到的字節(jié)數(shù)據(jù)}12.3.2讀寫函數(shù)的封裝-DS1302ReadReg/*用單次讀操作從某一寄存器讀取一個(gè)字節(jié),reg:寄存器地址,返回值為讀到的字節(jié)*/unsigned
charDS1302ReadReg(unsigned
charreg){
unsigned
chardat;DS1302_CE=
1;
//使能片選信號(hào)DS1302WriteByte((reg<<1)|0x81);
//發(fā)送讀寄存器指令dat=DS1302ReadByte();
//讀取字節(jié)數(shù)據(jù)DS1302_CE=
0;
//除能片選信號(hào)
returndat;}本章內(nèi)容:2DS1302芯片介紹1封裝的編程思想和結(jié)構(gòu)體類型22DS1302讀寫操作的編程實(shí)現(xiàn)3DS1302讀寫實(shí)戰(zhàn)412.4DS1302讀寫實(shí)戰(zhàn)【例12.1】在開發(fā)板上編程實(shí)現(xiàn)如下功能:先將2009年7月19號(hào)星期日14點(diǎn)00分00秒這個(gè)時(shí)間寫到DS1302內(nèi)部,讓DS1302正常運(yùn)行,然后再每隔200ms讀取一次DS1302的當(dāng)前時(shí)間,并顯示在我們的液晶屏上。本開發(fā)板使用了P4.0~P4.2分別連接DS1302芯片的RST復(fù)位及使能引腳(CE)、DSIO數(shù)據(jù)線引腳及SCLK時(shí)鐘引腳。需要特別注意的是,開發(fā)板與步進(jìn)電機(jī)復(fù)用了此三個(gè)引腳,因此在使用該芯片時(shí)請(qǐng)注意跳線的正確連接。12.4DS1302讀寫實(shí)戰(zhàn)【例12.1】在開發(fā)板上編程實(shí)現(xiàn)如下功能:先將2009年7月19號(hào)星期日14點(diǎn)00分00秒這個(gè)時(shí)間寫到DS1302內(nèi)部,讓DS1302正常運(yùn)行,然后再每隔200ms讀取一次DS1302的當(dāng)前時(shí)間,并顯示在我們的液晶屏上。本開發(fā)板使用了P4.0~P4.2分別連接DS1302芯片的RST復(fù)位及使能引腳(CE)、DSIO數(shù)據(jù)線引腳及SCLK時(shí)鐘引腳。需要特別注意的是,開發(fā)板與步進(jìn)電機(jī)復(fù)用了此三個(gè)引腳,因此在使用該芯片時(shí)請(qǐng)注意跳線的正確連接。12.4DS1302讀寫實(shí)戰(zhàn)-ds1302.c#include<reg52.h>
#include"lcd1602.h"#include"DS1302.h"
bitflag200ms=
0;
//200ms定時(shí)標(biāo)志unsigned
charT0RH=
0;
//T0重載值的高字節(jié)unsigned
charT0RL=
0;
//T0重載值的低字節(jié)voidConfigTimer0(unsigned
intms);12.4DS1302讀寫實(shí)戰(zhàn)-ds1302.cvoidmain(){
//秒備份,初值A(chǔ)A確保首次讀取時(shí)間后會(huì)刷新顯示unsigned
charsecBackup=0xAA;
unsigned
charstr[12];
//字符串轉(zhuǎn)換緩沖區(qū)
structsCalendabufTime;
//日歷緩沖區(qū)
EA=
1;
//開總中斷ConfigTimer0(1);
//T0定時(shí)1msInitDS1302();
//初始化實(shí)時(shí)時(shí)鐘InitLcd1602();
//初始化液晶
while
(1)
{
if(flag200ms)
{12.4DS1302讀寫實(shí)戰(zhàn)-ds1302.c flag200ms=
0; GetCurrentTime(&bufTime); //傳遞是地址
if(secBackup!=bufTime.sec)
{
//顯示年月日信息 str[0]
=
'2'; str[1]
=
'0'; str[2]
=
(bufTime.year>>
4)
+
'0'; str[3]
=
(bufTime.year&
0x0F)
+
'0'; str[4]
=
'-'; str[5]
=
(bufTime.mon>>
4)
+
'0'; str[6]
=
(bufTime.mon&
0x0F)
+
'0'; str[7]
=
'-'; str[8]
=
(bufTime.day>>
4)
+
'0'; str[9]
=
(bufTime.day&
0x0F)
+
'0'; str[10]
=
'\0'; LcdShowStr(0,
0,str);
//顯示星期信息 str[0]
=
(bufTime.week&
0x0F)
+
'0'; str[1]
=
'\0'; LcdShowStr(11,
0,
"week"); LcdShowStr(15,
0,str);12.4DS1302讀寫實(shí)戰(zhàn)-ds1302.c
//顯示時(shí)分秒信息 str[0]
=
(bufTime.hour>>
4)
+
'0'; str[1]
=
(bufTime.hour&
0x0F)
+
'0'; str[2]
=
':'; str[3]
=
(bufTime.min>>
4)
+
'0'; str[4]
=
(bufTime.min&
0x0F)
+
'0'; str[5]
=
':'; str[6]
=
(bufTime.sec>>
4)
+
'0'; str[7]
=
(bufTime.sec&
0x0F)
+
'0'; str[8]
=
'\0'; LcdShowStr(4,
1,str);
secBackup=bufTime.sec;
//更新秒備份
}
}
}}12.4DS1302讀寫實(shí)戰(zhàn)-Timer0voidTimer0()interrupt1{
static
unsigned
chartmr200ms=
0;
TH0=T0RH;
//重新加載重載值TL0=T0RL;tmr200ms++;
if
(tmr200ms>=
200)
//定時(shí)200ms
{tmr200ms=
0;flag200ms=
1;
}}12.4DS1302讀寫實(shí)戰(zhàn)-ds1302.h#include<reg52.h>
#ifndef__DS1302_H_#define__DS1302_H_
sbitDS1302_CE=P4^1;
//本書配套開發(fā)板所接引腳sbitDS1302_IO=P4^2;
//本開發(fā)板此三引腳為復(fù)用引腳,注意需跳線sbitDS1302_CK=P4^3;
structsCalenda{
//日歷結(jié)構(gòu)體定義
unsigned
intyear;
//年
unsigned
charmon;
//月
unsigned
charday;
//日
unsigned
charhour;
//時(shí)
unsigned
charmin;
//分
unsigned
charsec;
//秒
unsigned
charweek;
//星期};
voidGetCurrentTime(structsCalenda*calenda);voidInitDS1302();unsigned
charDS1302ReadReg(unsigned
charreg);
#endif12.4DS1302讀寫實(shí)戰(zhàn)-DS1302BurstWrite/*用突發(fā)模式連續(xù)寫入8個(gè)寄存器數(shù)據(jù),dat:待寫入數(shù)據(jù)指針*/voidDS1302BurstWrite(unsigned
char
*dat){
unsigned
chari;
DS1302_CE=
1;DS1302WriteByte(0xBE);
//發(fā)送突發(fā)寫寄存器指令
for
(i=0;i<8;i++)
//連續(xù)寫入8字節(jié)數(shù)據(jù)
{DS1302WriteByte(dat[i]);
}DS1302_CE=
0;}12.4DS1302讀寫實(shí)戰(zhàn)-DS1302BurstRead/*用突發(fā)模式連續(xù)讀取8個(gè)寄存器的數(shù)據(jù),dat:讀取數(shù)據(jù)的接收指針*/voidDS1302BurstRead(unsigned
char
*dat){
unsigned
chari;
DS1302_CE=
1;DS1302WriteByte(0xBF);
//發(fā)送突發(fā)讀寄存器指令
for
(i=0;i<8;i++)
//連續(xù)讀取8個(gè)字節(jié)
{dat[i]
=DS1302ReadByte();
}DS1302_CE=
0;}12.4DS1302讀寫實(shí)戰(zhàn)-GetCurrentTime/*獲取當(dāng)前時(shí)間,即讀取DS1302當(dāng)前時(shí)間并轉(zhuǎn)換為時(shí)間結(jié)構(gòu)體格式*/voidGetCurrentTime(structsCalenda*calenda){
unsigned
charbuf[8];
DS1302BurstRead(buf);calenda->year=buf[6]
+
0x2000;calenda->mon=buf[4];calenda->day=buf[3];calenda->hour=buf[2];calenda->min=buf
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國(guó)手工帽行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國(guó)塑料鎖口袋行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2030年中國(guó)雪茄煙刀片數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)果仁羹數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)圓形細(xì)磨石數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 隴南輕鋼房屋施工方案
- 工業(yè)化假山假樹施工方案
- 2025年中國(guó)TELIDES不停車收費(fèi)系統(tǒng)市場(chǎng)調(diào)查研究報(bào)告
- 26《西門豹治鄴》(教學(xué)設(shè)計(jì))2024-2025學(xué)年-統(tǒng)編版語(yǔ)文四年級(jí)上冊(cè)
- 比例的基本性質(zhì)(教學(xué)設(shè)計(jì))-2023-2024學(xué)年數(shù)學(xué)六年級(jí)下冊(cè)人教版
- 大模型在航空航天領(lǐng)域的應(yīng)用:智能探索宇宙的無(wú)限可能
- 地下礦山安全教育課件
- 國(guó)際市場(chǎng)營(yíng)銷教案
- 全球變暖對(duì)工業(yè)企業(yè)的影響
- 《中醫(yī)藥健康知識(shí)講座》課件
- 2024年中國(guó)陪診服務(wù)行業(yè)市場(chǎng)發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告-智研咨詢重磅發(fā)布
- 藝術(shù)欣賞與實(shí)踐(高職)全套教學(xué)課件
- 轉(zhuǎn)基因調(diào)查分析報(bào)告
- 英語(yǔ)-時(shí)文閱讀-7年級(jí)(8篇)
- 只有偏執(zhí)狂才能生存讀書心得
- 數(shù)據(jù)挖掘(第2版)全套教學(xué)課件
評(píng)論
0/150
提交評(píng)論