單片機(jī)課程設(shè)計(jì)報(bào)告-電子時(shí)鐘(DS1302芯片)_第1頁
單片機(jī)課程設(shè)計(jì)報(bào)告-電子時(shí)鐘(DS1302芯片)_第2頁
單片機(jī)課程設(shè)計(jì)報(bào)告-電子時(shí)鐘(DS1302芯片)_第3頁
單片機(jī)課程設(shè)計(jì)報(bào)告-電子時(shí)鐘(DS1302芯片)_第4頁
單片機(jī)課程設(shè)計(jì)報(bào)告-電子時(shí)鐘(DS1302芯片)_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、.課 程 設(shè) 計(jì) 報(bào) 告課程名稱 單片機(jī)課程設(shè)計(jì) 課題名稱 電子時(shí)鐘(DS1302芯片)專 業(yè) 電子信息工程 班 級(jí) 學(xué) 號(hào) 姓 名 指導(dǎo)教師 .目 錄1、設(shè)計(jì)題目及要求12、設(shè)計(jì)方案12. 1、 DS1302介紹及其特性12. 2、 電路連接12. 3、 DS1302的內(nèi)部結(jié)構(gòu)12. 4、 單字節(jié)數(shù)據(jù)輸入32. 5、 存儲(chǔ)器映射表32. 6、 流程圖33、程序調(diào)試33. 1、 源程序34、總結(jié)45. 調(diào)試仿真圖5*;1設(shè)計(jì)題目及要求利用單片機(jī)芯片,和DS1302芯片,使得數(shù)碼管7SEG-MPX8-CA-BLUE顯示年月日和時(shí)間,時(shí)間和年月日分開顯示,屏幕顯示時(shí)間。2. 設(shè)計(jì)方案 2.1 DS

2、1302介紹及其特性DS1302 是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V5.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ì)電流充電的能力。特性: 實(shí)時(shí)時(shí)鐘,可對(duì)秒、分、時(shí)、日、周、月以及帶閏年補(bǔ)償?shù)哪赀M(jìn)行計(jì)數(shù) 用于高速數(shù)據(jù)暫存的 31&

3、#215;8 RAM 2引腳的串行 I/O 2.5-5.5V滿度工作范圍 用于時(shí)鐘或RAM數(shù)據(jù)讀寫的單字節(jié)或 多字節(jié)數(shù)據(jù)傳送 雙電源引腳 可選慢速充電至VCC12.2電路連接:2.3 DS1302的內(nèi)部結(jié)構(gòu)2.4單字節(jié)數(shù)據(jù)輸入:0 0 0 0 0 1 1 1 0 1 0 1 0 0 0 12.5存儲(chǔ)器映射表:1時(shí)鐘/日歷存儲(chǔ)區(qū)(CONTROL)命令字節(jié)1 0 00111 1/0無效位1:寫保護(hù)0:可寫入2時(shí)鐘/日歷存儲(chǔ)區(qū)(時(shí)分秒)3時(shí)鐘/日歷存儲(chǔ)區(qū)(日期、星期)2.6 流程圖:3. 程序設(shè)計(jì) 3.1源程序#include<reg52.h>#define uchar unsigned

4、 char#define uint unsigned int/蜂鳴器位定義sbit beep = P33 ;/DS1302相關(guān)操作線定義sbit RST = P11 ;sbit SCK = P12 ;sbit SDA = P13 ; /按鍵定義,key1切換鍵,key2加,key3減,key4鬧鐘,年月日周sbit key1 = P14 ;sbit key2 = P15 ;sbit key3 = P16 ;sbit key4 = P17 ;uchar i,j,mod,flag,flag1=1 ;/控制定時(shí)器動(dòng)態(tài)掃描數(shù)碼管的第幾位,j是定時(shí)讀取時(shí)間。mod是對(duì)key1按下次數(shù)計(jì)數(shù)。flag切換鬧

5、鐘,日期,和周.flag1為鬧鐘標(biāo)志位/uchar code write_addr7=0x80,0x82,0x84,0x86,0x88,0x8a,0x8c; /秒分時(shí)日月周年 寫地址/uchar code read_addr7=0x81,0x83,0x85,0x87,0x89,0x8b,0x8d; /秒分時(shí)日月周年 讀地址/共陽數(shù)碼管碼表,表示0-9和-。-表示時(shí)分秒的間隔.uchar code LED11 = 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,;uchar disbuf8 = 0x62,0xa2,0xf7,0x7a,0x28,

6、0xf7,0x7e,0x7e ;/定義時(shí)間日期的結(jié)構(gòu)類型struct time uchar second ; uchar minute ; uchar hour ; uchar week ; uchar day ; uchar month ; uchar year ;current_time ;#define ctime current_time/定義鬧鐘的時(shí)分秒變量uchar asec,amin,ahour ;void delay(uint ms) uchar i ; while(ms-) for(i=135;i>0;i-);/滴一聲,用來按鍵伴音void di() uchar i ;

7、 for(i=0;i<40;i+) beep = 0 ; delay(1) ; beep = 1 ; delay(1) ; /滴滴,連續(xù)響兩下。用來鬧鐘提醒。void didi() uchar i ; for(i = 2; i>0; i-) di(); delay(140); /DS1302的寫驅(qū)動(dòng),傳入?yún)?shù)為一個(gè)地址和數(shù)據(jù)void write(uchar addr,uchar dat) uchar i ; RST = 0 ; SCK = 0 ; RST = 1 ; for(i=0;i<8;i+) SCK = 0 ; SDA = (bit)(addr&0x01) ;

8、addr >>=1 ; SCK = 1 ; for(i=0;i<8;i+) SCK = 0 ; SDA = (bit)(dat&0x01); dat >>= 1 ; SCK = 1 ; RST = 0 ;/DS1302的讀驅(qū)動(dòng),傳入?yún)?shù)為一個(gè)地址,返回參數(shù)為讀到的數(shù)據(jù)uchar read(uchar addr) uchar i,dat ; RST = 0 ; SCK = 0 ; RST = 1 ; for(i=0;i<8;i+) SCK = 0 ; SDA =(bit)(addr&0x01); addr>>=1 ; SCK = 1

9、 ; for(i=0;i<8;i+) SCK=0 ; dat>>=1 ; if(SDA) dat|=0x80 ; SCK=1 ; RST=0 ; dat=(dat/16*10)+(dat&0x0f); return dat ;/讀取DS1302的時(shí)間和日期void read_time() ctime.second = read(0x81); ctime.minute = read(0x83); ctime.hour = read(0x85); ctime.day = read(0x87); ctime.month = read(0x89); ctime.week =

10、read(0x8b); ctime.year = read(0x8d);/設(shè)定時(shí)間和日期void set_time() if(!flag) write(0x8e,0x00); write(0x80,(ctime.second/10)<<4|(ctime.second%10); write(0x82,(ctime.minute/10)<<4|(ctime.minute%10); write(0x84,(ctime.hour/10)<<4|(ctime.hour%10); write(0x8e,0x80); else write(0x8e,0x00); writ

11、e(0x86,(ctime.day/10)<<4|(ctime.day%10); write(0x88,(ctime.month/10)<<4|(ctime.month%10); write(0x8a,(ctime.week/10)<<4|(ctime.week%10); write(0x8c,(ctime.year/10)<<4|(ctime.year%10); write(0x8e,0x80); flag1=1 ;/刷新顯示緩沖區(qū)void refbuf() switch(flag) case 1 : disbuf0 = LEDctime.da

12、y%10; disbuf1 = LEDctime.day/10; disbuf2 = 0xbf ; disbuf3 = LEDctime.month%10; disbuf4 = LEDctime.month/10; disbuf5 = 0xbf ; disbuf6 = LEDctime.year%10; disbuf7 = LEDctime.year/10; break ; case 2 : disbuf0 = 0xbf ; disbuf1 = 0xbf ; disbuf2 = 0xbf ; disbuf3 = 0xbf ; disbuf4 = LEDctime.week ; disbuf5

13、= 0xbf ; disbuf6 = 0xbf ; disbuf7 = 0xbf ; break ; case 3 : disbuf0 = LEDasec%10; disbuf1 = LEDasec/10; disbuf2 = 0xbf ; disbuf3 = LEDamin%10; disbuf4 = LEDamin/10; disbuf5 = 0xbf ; disbuf6 = LEDahour%10; disbuf7 = LEDahour/10; break ; default : disbuf0 = LEDctime.second%10; disbuf1 = LEDctime.secon

14、d/10; disbuf2 = 0xbf ; disbuf3 = LEDctime.minute%10; disbuf4 = LEDctime.minute/10; disbuf5 = 0xbf ; disbuf6 = LEDctime.hour%10; disbuf7 = LEDctime.hour/10; /鍵盤掃描void keyscan() if(key1 = 0) delay(5); if(key1 = 0) while(!key1); /key1用來調(diào)節(jié)時(shí)間和日期、鬧鐘 mod+;/mod標(biāo)示調(diào)節(jié)時(shí)間的時(shí)候?qū)?yīng)的閃爍位,mod=1秒位或天或鬧鐘的秒,mod=2是分位,mod=3是小

15、時(shí)位 di();/退出調(diào)節(jié)功能,返回正常顯示 if(mod = 4) set_time(); mod = 0 ; /調(diào)節(jié)加1,因?yàn)樯婕暗綍r(shí)分秒,年月日周和鬧鐘的調(diào)節(jié),所以寫的比較復(fù)雜,應(yīng)該有更精簡(jiǎn)的代碼。 if(key2=0) delay(5); if(key2=0) while(!key2); di(); switch(mod) case 1 : ctime.second+; if(ctime.second=60) ctime.second=0 ; break ; case 2 : ctime.minute+; if(ctime.minute=60) ctime.minute=0 ; bre

16、ak ; case 3 : ctime.hour+; if(ctime.hour=24) ctime.hour=0 ; break ; /flag=0時(shí)默認(rèn)調(diào)節(jié)時(shí)分秒,=1時(shí)調(diào)節(jié)年月日,=2時(shí)調(diào)節(jié)周,=3時(shí)調(diào)節(jié)鬧鐘,=4時(shí)就返回正常顯示,flag又key4來控制。 if(flag=1) switch(mod) case 1 : ctime.day+; if(ctime.day=32) ctime.day=0 ; break ; case 2 : ctime.month+; if(ctime.month=13) ctime.month=0 ; break ; case 3 : ctime.yea

17、r+; if(ctime.year=100) ctime.year=0 ; break ; if(flag=2) if(mod=1) ctime.week+; if(ctime.week=8) ctime.week=1 ; if(flag=3) switch(mod) case 1 : asec+; if(asec=60) asec=0 ; break ; case 2 : amin+; if(amin=60) amin=0 ; break ; case 3 : ahour+; if(ahour=24) ahour=0 ; break ; /調(diào)節(jié)減1,功能與key2相似。 if(key3=0)

18、 delay(5); if(key3=0) while(!key3); di(); switch(mod) case 1 : if(ctime.second=0) ctime.second=60 ; ctime.second-; break ; case 2 : if(ctime.minute=0) ctime.minute=60 ; ctime.minute-; break ; case 3 : if(ctime.hour=0) ctime.hour=24 ; ctime.hour-; break ; if(flag=1) switch(mod) case 1 : if(ctime.day=

19、0) ctime.day=32 ; ctime.day-; break ; case 2 : if(ctime.month=0) ctime.month=13 ; ctime.month-; break ; case 3 : if(ctime.year=0) ctime.year=100 ; ctime.year-; break ; if(flag=2) if(mod=1) if(ctime.week=1) ctime.week=8 ; ctime.week-; if(flag=3) switch(mod) case 1 : if(asec=0) asec=60 ; asec-; break

20、; case 2 : if(amin=0) amin=60 ; amin-; break ; case 3 : if(ahour=0) ahour=24 ; ahour-; break ; if(key4=0) delay(5); if(key4=0) while(!key4); di(); flag+; if(flag=3) flag=0 ; flag1=1 ; /初始化,定時(shí)器定時(shí)3ms用來動(dòng)態(tài)掃描數(shù)碼管顯示void init() TMOD = 0X01 ; TH0 = (65536-3000)/256 ; TL0 = (65536-3000)%256 ; TR0 = 1 ; ET0 =

21、1 ; EA = 1 ; /*write(0x8e,0x00); /第一次寫DS1302芯片,不然開始顯示亂碼,只需要初始化一次就行了,以后就屏蔽掉 write(0x80,0X10); write(0x82,0X10); write(0x84,0X10); write(0x86,0x23); write(0x88,0x07); write(0x8a,0x06); write(0x8c,0x11); write(0x8e,0x80);*/ read_time(); /每次初始化的時(shí)候都讀取時(shí)鐘芯片的時(shí)間,用來顯示。void main() init(); while(1) keyscan(); /鬧鐘判斷,默認(rèn)響1min,同時(shí)按下key2和key3關(guān)掉鬧

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論