DS1302定時鬧鐘課程設(shè)計(jì)_第1頁
DS1302定時鬧鐘課程設(shè)計(jì)_第2頁
DS1302定時鬧鐘課程設(shè)計(jì)_第3頁
DS1302定時鬧鐘課程設(shè)計(jì)_第4頁
DS1302定時鬧鐘課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、課程設(shè)計(jì)報告課程設(shè)計(jì)名稱: 單片機(jī)課程設(shè)計(jì) 課程設(shè)計(jì)題目: DS1302 實(shí)時時鐘(3) 專業(yè)班級: * 姓 名: * 學(xué) 號: * 實(shí)驗(yàn)室號:信息樓205/220 實(shí)驗(yàn)組號: 實(shí)驗(yàn)時間: (-11.7.15) 批閱時間: 指導(dǎo)教師: 成 績: 1. 題目名稱DS1302 實(shí)時時鐘(3)2. 課設(shè)目的1.掌握KEILuV 下匯編語言的調(diào)試方法2.練習(xí)利用單片機(jī)小系統(tǒng)板編程實(shí)現(xiàn)一些簡單功能的方法。3. 課設(shè)內(nèi)容1. 掌握KEILuV 下匯編語言的調(diào)試方法2. 編寫軟件(或借鑒網(wǎng)絡(luò)共享的匯編語言程序)實(shí)現(xiàn)功能: 由鍵盤切換顯示年,月,日,時,分,秒由鍵盤設(shè)置年,月,日,時,分,秒3. 由鍵盤設(shè)置定

2、時時間,當(dāng)時鐘的時間和定時時間相同時, 蜂鳴器響5 聲,數(shù)碼管閃爍3次4. 課設(shè)方案1、DS1302的結(jié)構(gòu)及工作原理DS1302是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時時鐘電路,它可以對年、月、日、周日、時、分、秒進(jìn)行計(jì)時,具有閏年補(bǔ)償功能,工作電壓為2.5V5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個31×8的用于臨時性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后背電源雙電源引腳,同時提供了對后背電源進(jìn)行涓細(xì)電流充電的能力。1.

3、1 引腳功能及結(jié)構(gòu)圖1示出DS1302的引腳排列,其中Vcc1為后備電源,VCC2為主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc10.2V時,Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時,DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768kHz晶振。RST是復(fù)位/片選線,通過把RST輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時,所有的數(shù)據(jù)傳送被初始化

4、,允許對DS1302進(jìn)行操作。如果在傳送過程中RST置為低電平,則會終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時,在Vcc2.5V之前,RST必須保持低電平。只有在SCLK為低電平時,才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細(xì)說明。SCLK始終是輸入端。1.2 DS1302的控制字節(jié)DS1302的控制字如圖2所示。控制字節(jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作,控制字節(jié)總

5、是從最低位開始輸出。 1.3 數(shù)據(jù)輸入輸出(I/O)在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位到高位7。1.4 DS1302的寄存器DS1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時間寄存器及其控制字見表1。 此外,DS1302還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。DS1302與RAM

6、相關(guān)的寄存器分為兩類:一類是單個RAM單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為C0HFDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個字節(jié),命令控制字為FEH(寫)、FFH(讀)。 設(shè)置數(shù)碼管顯示和鍵盤掃描2、程序設(shè)計(jì)流程圖 DS1302實(shí)時時鐘顯示W(wǎng)hile(key=n)n=3n=1n=2 調(diào)節(jié)當(dāng)前時間顯示日期 顯示鬧鐘時間調(diào)節(jié)日期調(diào)節(jié)鬧鐘時間鬧鐘時間到? no yes 報警、閃爍3、m2t1原理圖 板號NO.19 DS1302接線圖5課設(shè)總結(jié)1、程序清單及注釋主函數(shù) /*程序功能:實(shí)現(xiàn)DS1302功能并具有

7、整點(diǎn)報時,鬧鐘功能。C P U :STC12C5608AD晶 振:22.1184MHz調(diào)用文件:主函數(shù)時 間:2011年7月10日20:13:41*/#include<reg52.h>#include<intrins.h>#include"delay.h"#include"DS1302.h"#include"CH451.h"#define uchar unsigned char#define uint unsigned intvoid main ()initCH451();iniDS1302();/initim

8、er0();while(1)mode();Timer_approach();Time_adjustment(); 子程序1/*程序功能:數(shù)碼管顯示和鍵盤掃描的程序C P U :STC12C5608AD晶 振:22.1184MHz調(diào)用文件:delay.h函數(shù)接口:void initCH451(void) /初始化CH451 void CH451_wr(uint add,uchar dat) /寫到數(shù)碼管add位dat數(shù)據(jù) void P_Key(void) /檢測鍵盤按鍵 uchar If_Key_Press(void) /檢測后是否已經(jīng)按下 uchar Which_Key_Press(void)

9、 /檢測后按了那個鍵 uint address(uchar AD) /將地址翻譯機(jī)器碼 uchar Trans_Num(uchar d8) /將顯示位翻譯機(jī)器碼Author:時 間:2011年7月11日11:41:*/#include <reg52.h>#include <intrins.h>#include"delay.h"#define uchar unsigned char#define uint unsigned intsbit CLK=P34;sbit DIN=P33;sbit LOAD=P23;sbit DOUT=P22;uchar co

10、de smg=0xBE,0x24,0xEA,0xE6,0x74,0xD6,0xDE,0xA4,0xFE,0xF4,0xFC,0x5E,0x9A,0x6E,0xDA,0xD8,0x01;uint code addr=0x0A00,0x0900,0x0B00,0x0800,0x0C00,0x0D00,0x0E00,0x0F00;uchar WKP=0,kp=0;void clock (void)delay();CLK = 0;delay();CLK = 1;delay();void setCH451(uint CTRL)uchar i;for (i=0;i<12;i+) DIN=CTRL&a

11、mp;0x01;clock();/判斷最低位CTRL >>= 1;/右移之后再判斷DIN = 1;LOAD = 0;delay();LOAD = 1;void initCH451(void)uint ini=0x0201,sys=0x0403,CTRL=0x0500; /ini芯片內(nèi)部復(fù)位;sys初始化系統(tǒng)參數(shù);uint ss=0x0628;DIN= 0;delay();DIN= 1;delay();/初始化,令DIN先置低再置高。setCH451(ini);setCH451(sys);setCH451(CTRL);setCH451(ss);void CH451_wr(uint a

12、dd,uchar dat)uchar i;add+=dat;for (i=0;i<12;i+)DIN=add&0x01;clock();DIN = 1;add>>=1;LOAD = 0;delay();LOAD = 1;void P_Key(void)unsigned char i; unsigned char command; /定義命令字,和數(shù)據(jù)存儲器 command=0x07; /輸入讀451命令字 LOAD=0; for(i=0;i<4;i+) DIN=command&1; /送入最低位 CLK=0; command>>=1; /往右

13、移一位 CLK=1; /產(chǎn)生時鐘上升沿鎖通知CH451輸入位數(shù)據(jù) LOAD=1; /產(chǎn)生加載上升沿通知CH451處理命令數(shù)據(jù) kp=0; /清除keycode for(i=0;i<7;i+) kp<<=1; /數(shù)據(jù)移入keycode,高位在前,低位在后 kp|=DOUT; /從高到低讀入451的數(shù)據(jù) CLK=0; /產(chǎn)生時鐘下升沿通知CH451輸出下一位 CLK=1; WKP=kp&0x40; WKP>>=6; kp&=0xBF;uchar If_Key_Press(void)return WKP;uchar Which_Key_Press(voi

14、d)return kp;uint address(uchar AD)uint ret;ret=addrAD;return ret;uchar Trans_Num(uchar d8)uchar ret;ret=smgd8;return ret;void clrD(void) /清屏uchar i;for (i=0;i<8;i+)CH451_wr(addri,0x00);子程序2:C51 COMPILER V9.00 DELAY 07/12/2011 11:15:03 PAGE 1 /函數(shù)作用:延時函數(shù) /晶 振:22.1184MHz /接口程序:void Delay_Ms(unsigned

15、 int T) /毫秒延時程序 / void delayu(unsigned int T)/作 者:pandawbp /時 間:2011年7月4日13:53:45 /#include<intrins.h>void Delay_Ms(unsigned int T) /毫秒延時程序/仿真300-1sunsigned int i;while (T-)for (i=0;i<566;i+);/STC12C5201為566 /1-9.775us 5-40.1us 10-78us 100-750usvoid delayu(unsigned int T)unsigned char i;whi

16、le(T-)for (i=6;i>0;i-);/STC12C5201為6void delay(void)/延時兩個機(jī)器周期 _nop_(); _nop_();子程序3:C51 COMPILER V9.00 DS1302 /*程序功能:DS1302實(shí)時時鐘以及、 按鍵調(diào)節(jié)時鐘C P U :STC12C5608AD晶 振:22.1184MHz調(diào)用文件:delay.h函數(shù)接口:修改內(nèi)容:TH0set/按鍵掃描時間定時器0工作方式1時 間:2011年7月11日11:41:03*/#include <reg52.h>#include <intrins.h>#include&

17、quot;CH451.h"#include"delay.h"#define uchar unsigned char#define uint unsigned int#define TH0set 0x00/按鍵掃描時間定時器0工作方式1sbit BUZZ=P26;sbit SCLK=P21;sbit IO=P20;sbit CE=P17;uchar sj3,flag=1;/sj為時間 sj2是小時=timer0uchar timer2;/鬧鐘緩沖區(qū)uchar ModeNow;/現(xiàn)行模式(0為時鐘模式,1為鬧鐘調(diào)節(jié)模式,2為年月日模式)void initimer0 (

18、void) /初始化定時器1(按鍵使用) EA=1; ET0=1; TH0=TH0set; TL0=0x00; TMOD=0x11; TR0=1;void DS1302_wr(uchar address,uchar dat)uchar i;CE=0;SCLK=0;CE=1;for (i=0;i<8;i+)SCLK=0;IO=address&0x01;SCLK=1;address>>=1;for (i=0;i<8;i+)SCLK=0;IO=dat&0x01;delay();SCLK=1;delay();dat>>=1;CE=0;uchar DS

19、1302_re(uchar address)uchar i,value;CE=0;SCLK=0;CE=1;for(i=0;i<8;i+)SCLK=0;IO=(bit)(address&0x01);address>>=1;SCLK=1;for (i=0;i<8;i+)if (IO) value|=0x80;SCLK=1;value>>=1;SCLK=0;CE=0;return value;void iniDS1302(void)DS1302_wr(0x8E,0x00);/DS1302_wr(0x80,0x00);/DS1302_wr(0x82,0x00

20、);/DS1302_wr(0x84,0x00);uchar read1302(void) /返回一個整點(diǎn)數(shù)或0sj0=DS1302_re(0x81);Delay_Ms(10);CH451_wr(address(0),Trans_Num(sj0%16);CH451_wr(address(1),Trans_Num(sj0/16);sj1=DS1302_re(0x83);Delay_Ms(10);CH451_wr(address(3),Trans_Num(sj1%16);CH451_wr(address(4),Trans_Num(sj1/16);sj2=DS1302_re(0x85);Delay_M

21、s(10);CH451_wr(address(6),Trans_Num(sj2%16);CH451_wr(address(7),Trans_Num(sj2/16);CH451_wr(address(2),0x42);CH451_wr(address(5),0x42);if (sj0=0&&sj1=0) return sj2;else return 0;uchar exchange216(uchar n)uchar i,j;i=n/16;j=n%16;n=i*10+j;return n;uchar exchange210(uchar n)uchar i,j;i=n/10;j=n%

22、10;n=i*16+j;return n;void Timer_display(void)clrD();setCH451(0x0600);CH451_wr(address(6),Trans_Num(timer0/10);CH451_wr(address(5),Trans_Num(timer0%10);CH451_wr(address(3),Trans_Num(timer1/10);CH451_wr(address(2),Trans_Num(timer1%10);CH451_wr(address(4),0x40); void Timer_hour(void) /鬧鐘小時設(shè)定if(ModeNow=

23、1)timer0+;if (timer0=24) timer0=0;Timer_display();Delay_Ms(60);if (flag)Delay_Ms(250);flag=0;ModeNow=1;void Timer_min(void) /鬧鐘分鐘設(shè)定if(ModeNow=1)timer1+;if (timer1=60) timer1=0;Timer_display();Delay_Ms(60);if (flag)Delay_Ms(250);flag=0;ModeNow=1;void date(void)sj0=DS1302_re(0x87);Delay_Ms(10);CH451_w

24、r(address(0),Trans_Num(sj0%16);CH451_wr(address(1),Trans_Num(sj0/16);sj1=DS1302_re(0x89);Delay_Ms(10);CH451_wr(address(3),Trans_Num(sj1%16);CH451_wr(address(4),Trans_Num(sj1/16);sj2=DS1302_re(0x8d);Delay_Ms(10);CH451_wr(address(6),Trans_Num(sj2%16);CH451_wr(address(7),Trans_Num(sj2/16);CH451_wr(addr

25、ess(2),0x40);CH451_wr(address(5),0x40);void SwitchTime(uchar posi,uchar com,char bac)sjposi=exchange216(sjposi);if (sjposi=bac) sjposi=0;else sjposi+;sjposi=exchange210(sjposi);DS1302_wr(com,sjposi);if (ModeNow=0)read1302();else if (ModeNow=2)date();Delay_Ms(60);if (flag)Delay_Ms(250);flag=0;void Ti

26、me_adjustment(void)P_Key();if (If_Key_Press()switch(Which_Key_Press()case 0x00:if (ModeNow=0)SwitchTime(2,0x84,23);else if (ModeNow=2)SwitchTime(2,0x8c,99);break;case 0x03:if(ModeNow=0)SwitchTime(1,0x82,59);else if(ModeNow=2)SwitchTime(1,0x88,12);break;case 0x01:if (ModeNow=0)sj0=0;DS1302_wr(0x80,sj

27、0);else if(ModeNow=2)SwitchTime(0,0x86,31);break;case (0x09):ModeNow=0;break;case (0x0B):Timer_min();break;case (0x08):Timer_hour();break;case (0x0A):ModeNow=2;date();break;else flag=1;void mode(void)if (ModeNow=0)read1302();setCH451(0x0628);else if (ModeNow=2)date();setCH451(0x0600);void Timer_appr

28、oach(void)if(ModeNow=0)if (exchange216(sj2)=timer0&&exchange216(sj1)=timer1&&exchange216(sj0)=0)clrD();BUZZ=0;Delay_Ms(200);BUZZ=1;Delay_Ms(200);BUZZ=0;Delay_Ms(200);BUZZ=1;read1302();BUZZ=0;Delay_Ms(200);BUZZ=1;Delay_Ms(200);BUZZ=0;Delay_Ms(200);BUZZ=1;clrD();Delay_Ms(200);BUZZ=0;Delay_Ms(200);BUZZ=1;Delay_Ms(200);read1302();Delay_Ms(610);clrD();Delay_Ms(610); 2、上電實(shí)物照片截圖 3、程序?qū)崿F(xiàn)功能的描述實(shí)現(xiàn)功能: 由鍵盤切換顯示年,月,日,時,分,秒由鍵盤設(shè)置年,月,日,時,分,秒由鍵盤設(shè)置定時時間,當(dāng)時鐘的時間和定時時間相同時,蜂鳴器響5 聲,數(shù)碼管閃爍3次6出現(xiàn)的問題及解決方法根據(jù)我在調(diào)試中遇到的問題,特作如下說明:DS1302與微處理器進(jìn)行數(shù)據(jù)交換時,首先由微處理器向電路發(fā)送命令字節(jié),命令字節(jié)最高位MSB(D7)必須為邏輯1,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論