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

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上課程設(shè)計(jì)報(bào)告課程設(shè)計(jì)名稱: 單片機(jī)課程設(shè)計(jì) 課程設(shè)計(jì)題目: DS1302 實(shí)時(shí)時(shí)鐘(3) 專業(yè)班級(jí): * 姓 名: * 學(xué) 號(hào): * 實(shí)驗(yàn)室號(hào):信息樓205/220 實(shí)驗(yàn)組號(hào): 實(shí)驗(yàn)時(shí)間: (11.7.4-11.7.15) 批閱時(shí)間: 指導(dǎo)教師: 成 績: 專心-專注-專業(yè)1. 題目名稱DS1302 實(shí)時(shí)時(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í),分

2、,秒由鍵盤設(shè)置年,月,日,時(shí),分,秒3. 由鍵盤設(shè)置定時(shí)時(shí)間,當(dāng)時(shí)鐘的時(shí)間和定時(shí)時(shí)間相同時(shí), 蜂鳴器響5 聲,數(shù)碼管閃爍3次4. 課設(shè)方案1、DS1302的結(jié)構(gòu)及工作原理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兼容,但增加了主電源/后背電源雙電源

3、引腳,同時(shí)提供了對(duì)后背電源進(jìn)行涓細(xì)電流充電的能力。1.1 引腳功能及結(jié)構(gòu)圖1示出DS1302的引腳排列,其中Vcc1為后備電源,VCC2為主電源。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc10.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ù)

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

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

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

7、及注釋主函數(shù) /*程序功能:實(shí)現(xiàn)DS1302功能并具有整點(diǎn)報(bào)時(shí),鬧鐘功能。C P U :STC12C5608AD晶 振:22.1184MHz調(diào)用文件:主函數(shù)時(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 ()init

8、CH451();iniDS1302();/initimer0();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) /檢測(cè)鍵盤按鍵 uchar If_Key_Press(void) /檢測(cè)后是否已經(jīng)按下

9、uchar Which_Key_Press(void) /檢測(cè)后按了那個(gè)鍵 uint address(uchar AD) /將地址翻譯機(jī)器碼 uchar Trans_Num(uchar d8) /將顯示位翻譯機(jī)器碼Author:時(shí) 間: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

10、=P23;sbit DOUT=P22;uchar code 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

11、(i=0;i<12;i+) DIN=CTRL&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;/0x580數(shù)碼管顯示BCD, 0B數(shù)碼管BCD顯示代碼delay();DIN= 1;delay();/初始化,令DIN先置低再置高。setCH451(ini);setCH45

12、1(sys);setCH451(CTRL);setCH451(ss);void CH451_wr(uint add,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ù)存儲(chǔ)器 command=0x07; /輸入讀451命令字 LOAD=0; for(i=0;i<4;i+)

13、DIN=command&1; /送入最低位 CLK=0; command>>=1; /往右移一位 CLK=1; /產(chǎn)生時(shí)鐘上升沿鎖通知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)生時(shí)鐘下升沿通知CH451輸出下一位 CLK=1; WKP=kp&0x40; WKP>>=6; kp&=0xBF;uchar

14、 If_Key_Press(void)return WKP;uchar Which_Key_Press(void)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

15、/函數(shù)作用:延時(shí)函數(shù) /晶 振:22.1184MHz /接口程序:void Delay_Ms(unsigned int T) /毫秒延時(shí)程序 / void delayu(unsigned int T)/作 者:pandawbp /時(shí) 間:2011年7月4日13:53:45 /#include<intrins.h>void Delay_Ms(unsigned int T) /毫秒延時(shí)程序/仿真300-1sunsigned int i;while (T-)for (i=0;i<566;i+);/STC12C5201為566 /1-9.775us 5-40.1us 10-78us

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

17、lude <reg52.h>#include <intrins.h>#include"CH451.h"#include"delay.h"#define uchar unsigned char#define uint unsigned int#define TH0set 0x00/按鍵掃描時(shí)間定時(shí)器0工作方式1sbit BUZZ=P26;sbit SCLK=P21;sbit IO=P20;sbit CE=P17;uchar sj3,flag=1;/sj為時(shí)間 sj2是小時(shí)=timer0uchar timer2;/鬧鐘緩沖區(qū)uchar

18、 ModeNow;/現(xiàn)行模式(0為時(shí)鐘模式,1為鬧鐘調(diào)節(jié)模式,2為年月日模式)void initimer0 (void) /初始化定時(shí)器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&

19、0x01;delay();SCLK=1;delay();dat>>=1;CE=0;uchar DS1302_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_w

20、r(0x8E,0x00);/DS1302_wr(0x80,0x00);/DS1302_wr(0x82,0x00);/DS1302_wr(0x84,0x00);uchar read1302(void) /返回一個(gè)整點(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(a

21、ddress(4),Trans_Num(sj1/16);sj2=DS1302_re(0x85);Delay_Ms(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;r

22、eturn n;uchar exchange210(uchar n)uchar i,j;i=n/10;j=n%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(add

23、ress(4),0x40); void Timer_hour(void) /鬧鐘小時(shí)設(shè)定if(ModeNow=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;

24、void date(void)sj0=DS1302_re(0x87);Delay_Ms(10);CH451_wr(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%

25、16);CH451_wr(address(7),Trans_Num(sj2/16);CH451_wr(address(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)da

26、te();Delay_Ms(60);if (flag)Delay_Ms(250);flag=0;void Time_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

27、);break;case 0x01:if (ModeNow=0)sj0=0;DS1302_wr(0x80,sj0);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);els

28、e if (ModeNow=2)date();setCH451(0x0600);void Timer_approach(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);BUZ

29、Z=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è)置年,月,日,時(shí),分,秒由鍵盤設(shè)置定時(shí)時(shí)間,當(dāng)時(shí)鐘的時(shí)間和定時(shí)時(shí)間相同時(shí),蜂鳴器響5 聲,數(shù)碼管閃爍3次6出現(xiàn)的問題及解決方法根據(jù)我在調(diào)試中遇到的問題,特作如下說明:DS1302與微處理器進(jìn)行數(shù)據(jù)交換時(shí),首先由微處理器向電路發(fā)送命令字節(jié),命令字節(jié)最高位MSB(D7)必須

溫馨提示

  • 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)論