基于AT89S52與C51的多功能電子時(shí)鐘設(shè)計(jì)_第1頁(yè)
基于AT89S52與C51的多功能電子時(shí)鐘設(shè)計(jì)_第2頁(yè)
基于AT89S52與C51的多功能電子時(shí)鐘設(shè)計(jì)_第3頁(yè)
基于AT89S52與C51的多功能電子時(shí)鐘設(shè)計(jì)_第4頁(yè)
基于AT89S52與C51的多功能電子時(shí)鐘設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、C51課程設(shè)計(jì)基于AT89S52與C51的多功能電子時(shí)鐘設(shè)計(jì)學(xué)校:南京信息工程大學(xué) 學(xué)院:電子與信息工程學(xué)院 專業(yè):信息工程 年級(jí):2010級(jí) 學(xué)號(hào):20121309021 姓名:楊峰宇 指導(dǎo)老師:夏景明 2012年12月10日 摘 要本設(shè)計(jì)采用LCD液晶屏幕顯示系統(tǒng),以AT89S52單片機(jī)為核心,由鍵盤(pán)、溫度采集、時(shí)鐘等功能模塊組成。本系統(tǒng)對(duì)時(shí)間顯示和溫度采集系統(tǒng)行了重點(diǎn)設(shè)計(jì)。其中時(shí)鐘芯片采用了有Dallas公司生產(chǎn)的DS1302時(shí)鐘芯片,溫度測(cè)控芯片采用的是由Dallas公司生產(chǎn)的DS18B20溫度測(cè)量芯片。其中時(shí)鐘可以通過(guò)按鍵模塊來(lái)進(jìn)行設(shè)置,即使掉電下一次上電時(shí)也不用再設(shè)置,溫度顯示和溫

2、度顯示通過(guò)按鍵切換。本系統(tǒng)大部分功能由軟件來(lái)實(shí)現(xiàn),吸收了硬件軟件化的思想,大部分功能通過(guò)軟件來(lái)實(shí)現(xiàn),使電路簡(jiǎn)單明了,系統(tǒng)穩(wěn)定性大大提高。關(guān)鍵詞:AT89S52、DS1302、DS18B20、LCD1602、電子時(shí)鐘、溫度測(cè)量多功能電子時(shí)鐘設(shè)計(jì)一、任務(wù)設(shè)計(jì):1、設(shè)計(jì)任務(wù):設(shè)計(jì)并制作一個(gè)多功能數(shù)字鐘。2、設(shè)計(jì)要求:l 設(shè)計(jì)能支持年、月、日、星期、時(shí)、分、秒的時(shí)鐘,時(shí)鐘有時(shí)間調(diào)整功能及鬧鐘功能;l 時(shí)鐘附帶有一個(gè)溫度計(jì)功能,溫度檢測(cè)精度高于2度,顯示精度為1度;l 時(shí)鐘具有裝卸電池時(shí)掉電保護(hù)功能,保護(hù)時(shí)間大于5分鐘;l 時(shí)鐘功耗小于0.5MA/5V。二、方案論證:1.顯示部分:顯示部分是本次設(shè)計(jì)的重

3、要部分,一般有以下兩種方案:方案一:采用LED顯示,分靜態(tài)顯示和動(dòng)態(tài)顯示。對(duì)于靜態(tài)顯示方式,所需的譯碼驅(qū)動(dòng)裝置很多,引線多而復(fù)雜,且可靠性也較低。而對(duì)于動(dòng)態(tài)顯示方式,雖可以避免靜態(tài)顯示的問(wèn)題,但設(shè)計(jì)上如果處理不當(dāng),易造成亮度低,有閃爍等問(wèn)題。方案二:采用LCD顯示。LCD液晶顯示具有豐富多樣性、靈活性、電路簡(jiǎn)單、易于控制而且功耗小等優(yōu)點(diǎn),對(duì)于信息量多的系統(tǒng),是比較適合的。鑒于上述原因,我們采用方案二。2.數(shù)字時(shí)鐘:數(shù)字時(shí)鐘是本設(shè)計(jì)的核心的部分。根據(jù)需要可采用以下兩種方案實(shí)現(xiàn):方案一:方案完全用軟件實(shí)現(xiàn)數(shù)字時(shí)鐘。原理為:在單片機(jī)內(nèi)部存儲(chǔ)器設(shè)三個(gè)字節(jié)分別存放時(shí)鐘的時(shí)、分、秒信息。利用定時(shí)器與軟件結(jié)

4、合實(shí)現(xiàn)1秒定時(shí)中斷,每產(chǎn)生一次中斷,存儲(chǔ)器內(nèi)相應(yīng)的秒值加1;若秒值達(dá)到60,則將其清零,并將相應(yīng)的分字節(jié)值加1;若分值達(dá)到60,則清零分字節(jié),并將時(shí)字節(jié)值加1;若時(shí)值達(dá)到24,則將時(shí)字節(jié)清零。該方案具有硬件電路簡(jiǎn)單的特點(diǎn),但當(dāng)單片機(jī)不上電,程序?qū)⒉粓?zhí)行。而且由于每次執(zhí)行程序時(shí),定時(shí)器都要重新賦初值,所以該時(shí)鐘精度不高。方案二:方案采用Dallas公司的專用時(shí)鐘芯片DS1302。該芯片內(nèi)部采用石英晶體振蕩器,其芯片精度不大于10ms/年,且具有完備的時(shí)鐘鬧鐘功能,因此,可直接對(duì)其以用于顯示或設(shè)置,使得軟件編程相對(duì)簡(jiǎn)單。為保證時(shí)鐘在電網(wǎng)電壓不足或突然掉電等突發(fā)情況下仍能正常工作,芯片內(nèi)部包含鋰電池

5、。當(dāng)電網(wǎng)電壓不足或突然掉電時(shí),可使系統(tǒng)自動(dòng)轉(zhuǎn)換到內(nèi)部鋰電池供電系統(tǒng)。而且即使系統(tǒng)不上電,程序不執(zhí)行時(shí),鋰電池也能保證芯片的正常運(yùn)行,以備隨時(shí)提供正確的時(shí)間?;跁r(shí)鐘芯片的上述優(yōu)點(diǎn),本設(shè)計(jì)采用方案二完成數(shù)字時(shí)鐘的功能。3.溫度采集:由于現(xiàn)在用品追求多樣化,多功能化,給系統(tǒng)加上溫度測(cè)量顯示模塊,能夠方便人們的生活,使該設(shè)計(jì)具有人性化。方案一:采用熱敏電阻,可滿足40攝氏度至90攝氏度測(cè)量范圍,但熱敏電阻精度、重復(fù)性、可靠性較差,對(duì)于檢測(cè)小于1攝氏度的信號(hào)是不適用的。方案二:采用溫度傳感器DS18B20。DS18B20可以滿足從-55攝氏度到+125攝氏度測(cè)量范圍,且DS18B20測(cè)量精度高,增值量

6、為0.5攝氏度,在一秒內(nèi)把溫度轉(zhuǎn)化成數(shù)字,測(cè)得的溫度值的存儲(chǔ)在兩個(gè)八位的RAM中,單片機(jī)直接從中讀出數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制就是溫度,使用方便?;贒S18B20的以上優(yōu)點(diǎn),我們決定選取DS18B20來(lái)測(cè)量溫度。三、總體方案:本設(shè)計(jì)采用AT89C52單片機(jī)作為本系統(tǒng)的控制模塊。單片機(jī)可把由DS18B20、DS1302中的數(shù)據(jù)利用軟件來(lái)進(jìn)行處理,從而把數(shù)據(jù)傳輸?shù)斤@示模塊,實(shí)現(xiàn)溫度、日歷的顯示。以LCD液晶顯示器為顯示模塊,把單片機(jī)傳來(lái)的數(shù)據(jù)顯示出來(lái),并且顯示多樣化。在顯示電路中,主要靠按鍵來(lái)實(shí)現(xiàn)各種顯示要求的選擇、設(shè)置與切換,系統(tǒng)框架圖見(jiàn)圖1。4、 系統(tǒng)硬件設(shè)計(jì)(單元電路設(shè)計(jì)及分析):1. AT89S5

7、2單片機(jī)最小系統(tǒng):最小系統(tǒng)包括晶體振蕩電路、復(fù)位開(kāi)關(guān)和電源部分。圖2為AT89S52單片機(jī)的最小系統(tǒng)。圖22.溫度測(cè)量模塊:溫度測(cè)量傳感器采用DALLAS公司DS18B20的單總線數(shù)字化溫度傳感器,測(cè)溫范圍為-55125,采用寄生電源工作方式,CPU只需一根口線便能與DS18B20通信,占用CPU口線少,可節(jié)省大量引線和邏輯電路。接口電路如圖3所示。圖33.時(shí)鐘模塊:時(shí)鐘模塊采用DS1302芯片,DS1302是DALLAS公司推出的涓流充電時(shí)鐘芯片內(nèi)含有一個(gè)實(shí)時(shí)時(shí)鐘/日歷和31字節(jié)靜態(tài)RAM通過(guò)簡(jiǎn)單的串行接口與單片機(jī)進(jìn)行通信實(shí)時(shí)時(shí)鐘/日歷電路提供秒分時(shí)日日期月年的信息每月的天數(shù)和閏年的天數(shù)可自

8、動(dòng)調(diào)整時(shí)鐘操作可通過(guò)AM/PM指示決定采用24或12小時(shí)格式DS1302與單片機(jī)之間能簡(jiǎn)單地采用同步串行的方式進(jìn)行通信僅需用到三個(gè)口線:RST復(fù)位、I/O數(shù)據(jù)線、SCLK串行時(shí)鐘。時(shí)鐘/RAM的讀/寫(xiě)數(shù)據(jù)以一個(gè)字節(jié)或多達(dá)31個(gè)字節(jié)的字符組方式通信。DS1302工作時(shí)功耗很低,保持?jǐn)?shù)據(jù)和時(shí)鐘信息時(shí)功率小于1mW,其接線電路如圖4所示:圖44.LCD液晶顯示模塊:LCD液晶顯示模塊采用LCD1602型號(hào),具有很低的功耗,正常工作時(shí)電流僅2.0mA/5.0V。通過(guò)編程實(shí)現(xiàn)自動(dòng)關(guān)閉屏幕能夠更有效的降低功耗。LCD1602分兩行顯示,每行可顯示多達(dá)16個(gè)字符。LCD1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(

9、CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,通過(guò)內(nèi)部指令可實(shí)現(xiàn)對(duì)其顯示多樣的控制,并且還能利用空余的空間自定義字符。其接線如圖6所示:圖55. 整體電路:系統(tǒng)整體電路如圖6所示:圖6五、系統(tǒng)軟件設(shè)計(jì)流程:1.主程序流程如圖7所示:圖72.時(shí)間設(shè)定程序流程如圖8所示:圖83. 溫度測(cè)量流程圖如圖9所示:圖96、 系統(tǒng)主程序(由于篇幅關(guān)系其他驅(qū)動(dòng)模塊代碼不再給出)#include#includeDS1302_Drive.h#includeLCD_Drive.h#includeKey_Drive.h#includeDS18B20_Drive.hbit Temperature_flag; /溫度

10、正負(fù)標(biāo)志,0為正,1為負(fù)volatile bit choose_again_flag;/返回主界面的標(biāo)志,主函數(shù)與中斷函數(shù)公用這一變量,為1表示要返回,0表示不返回volatile bit Set_Time_Flag;/時(shí)間設(shè)置標(biāo)志,主函數(shù)與中斷函數(shù)公用這一變量,為1表示要設(shè)置,0表示不設(shè)置code unsigned char ch=0123456789;static void delay() unsigned char i;for(i=0;i20;i+);static void delaynms(unsigned int n)unsigned int i,j;for(i=0;in;i+)fo

11、r(j=0;j4)&0x0f)|(TH4)*10+(temp&0x0f);display(year);WriteAddr(0x09);temp=ReadSet1302(0x89);mouth=(temp4)*10+(temp&0x0f);display(mouth);WriteAddr(0x0c);temp=ReadSet1302(0x87);date=(temp4)*10+(temp&0x0f);display(date);WriteAddr(0x46);temp=ReadSet1302(0x85);hours=(temp4)*10+(temp&0x0f);display(hours);Wr

12、iteAddr(0x49);temp=ReadSet1302(0x83);minute=(temp4)*10+(temp&0x0f);display(minute);WriteAddr(0x4c);temp=ReadSet1302(0x81);second=(temp4)*10+(temp&0x0f);display(second);/0010 1001void ShowTimeInfo()/調(diào)用函數(shù)前初始化LCDWriteAddr(0x01);WriteString(data);WriteAddr(0x41);WriteString(time);WriteAddr(0x08);WriteDa

13、ta(-);WriteAddr(0x0b);WriteData(-);WriteAddr(0x48);WriteData(:);WriteAddr(0x4b);WriteData(:);unsigned char SetTime() /時(shí)間設(shè)置函數(shù)unsigned char temp,Key_Value,j=0;/數(shù)據(jù)轉(zhuǎn)存變量、按鍵鍵值、計(jì)數(shù)器unsigned char Addr_LCD=0x4d,0x4c,0x4a,0x49,0x47,0x46,0x0d,0x0c,0x0a,0x09,0x07,0x06;Unsigned char second0,minute0,hours0,date0,m

14、onth0,year0,second1,minute1,hours1,date1,month1,year1;/*相關(guān)硬件操作*/temp=ReadSet1302(0x81)|0x80;WriteSet1302(0x80,temp);/關(guān)閉時(shí)鐘WriteSet1302(0x8e,0x00);/關(guān)閉寫(xiě)保護(hù)WriteCom(0x0f);/打開(kāi)光標(biāo)/*以下為給各個(gè)時(shí)間中轉(zhuǎn)變量賦初值*/temp=ReadSet1302(0x81)&0x7f;second0=temp&0x0f;/=(temp4)*10+(temp&0x0f);/個(gè)位second1=(temp4)&0x0f; /十位temp=ReadSe

15、t1302(0x83);minute0=temp&0x0f;/(temp4)*10+(temp&0x0f);minute1=(temp4)&0x0f;temp=ReadSet1302(0x85);hours0=temp&0x0f;/(temp4)*10+(temp&0x0f);hours1=(temp4)&0x0f;temp=ReadSet1302(0x87);date0=temp&0x0f;/(temp4)*10+(temp&0x0f);date1=(temp4)&0x0f;temp=ReadSet1302(0x89);month0=temp&0x0f;/(temp4)*10+(temp&0

16、x0f);month1=(temp4)&0x0f;temp=ReadSet1302(0x8d);year0=temp&0x0f;year1=(temp4)&0x0f;/*/while(1)WriteAddr(Addr_LCDj);while(1)/等待按鍵,有按鍵按下,繼續(xù),有中斷INT1,硬件恢復(fù),返回Key_Value=KeyScan();if(Key_Value!=-1)break;/有按鍵按下,繼續(xù)if(Set_Time_Flag=1)delaynms(10);/消抖while(INT1=0);/等待釋放delaynms(10); /消抖Set_Time_Flag=0;WriteSet

17、1302(0x80,(second14)|second0);WriteSet1302(0x82,(minute14)|minute0);WriteSet1302(0x84,(hours14)|hours0);WriteSet1302(0x86,(date14)|date0);WriteSet1302(0x88,(month14)|month0);WriteSet1302(0x8c,(year14)|year0);WriteSet1302(0x90,0xa5);/*相關(guān)硬件恢復(fù)*/WriteCom(0x0c); /恢復(fù)光標(biāo)temp=ReadSet1302(0x81)&0x7f; /打開(kāi)時(shí)鐘Wri

18、teSet1302(0x80,temp);WriteSet1302(0x8e,0x80); /打開(kāi)寫(xiě)保護(hù)return 0;if(Key_Value=4)if(j=0)j=11;else j-;if(Key_Value=3) /按下3,則進(jìn)入下一次循環(huán) j+;if(j=12)j=0;/Key_Value=KeyScan();/接收此時(shí)按鍵鍵值,檢測(cè)按鍵是否釋放/while(Key_Value!=-1); /等待釋放按鍵if(Key_Value=2)/Key_Value=KeyScan();/接收此時(shí)按鍵鍵值,檢測(cè)按鍵是否釋放/while(Key_Value!=-1); /等待釋放按鍵switch

19、(j)case 0:if(second0=0)second0=9;else -second0;WriteData(chsecond0);break;case 1:if(second1=0)second1=5;else -second1;WriteData(chsecond1);break;case 2:if(minute0=0)minute0=9;else -minute0;WriteData(chminute0);break;case 3:if(minute1=0)minute1=5;else -minute1;WriteData(chminute1);break;case 4:if(hou

20、rs1=2)&hours0=0)hours0=3;else if(hours13&hours1=0)hours1=1;elseif(hours0=3&hours1=0)hours1=2;else -hours1;WriteData(chhours1);break;case 6:if(date1=3&date0=0)date0=1;elseif(date11&date1=0)date1=2;else if(date0=1&date1=0)date1=3;else -date1;WriteData(chdate1);break;case 8:if(month1=0&month0=0)month0=

21、9;elseif(month1=1&month0=0)month0=2;else -month0;WriteData(chmonth0);break;case 9:if(month02&month1=0)month1=0;else -month1;WriteData(chmonth1);break;case 10:if(year0=0)year0=9;else -year0;WriteData(chyear0);break;case 11:if(year1=0)year1=9;else -year1;WriteData(chyear1);break;if(Key_Value=1)/Key_Va

22、lue=KeyScan();/接收此時(shí)按鍵鍵值,檢測(cè)按鍵是否釋放/while(Key_Value!=-1); /等待釋放按鍵switch(j)case 0:+second0;if(second0=10)second0=0;WriteData(chsecond0);break;case 1:+second1;if(second1=6)second1=0;WriteData(chsecond1);break;case 2:+minute0;if(minute0=10)minute0=0;WriteData(chminute0);break;case 3:+minute1;if(minute1=6)

23、minute1=0;WriteData(chminute1);break;case 4:+hours0;if(hours0=4&hours1=2)|(hours0=10)&(hours13)hours1=0;if(hours1=3)hours1=0;WriteData(chhours1);break;case 6:+date0;if(date0=10)&(date11)date1=0;if(date1=4)date1=0;WriteData(chdate1);break;case 8:+month0;if(month0=10)&(month1=0)|(month0=3)&(month1=1)m

24、onth0=0;WriteData(chmonth0);break;case 9:+month1;if(month1=1)&(month02)month1=0;if(month1=2)month1=0;WriteData(chmonth1);break;case 10:+year0;if(year0=10)year0=0;WriteData(chyear0);break;case 11:+year1;if(year1=10)year1=0;WriteData(chyear1);break; /*/*以下為中斷相關(guān)函數(shù)*/void INT0_ON()/打開(kāi)外部中斷EX0=1;IT0=0;/觸發(fā)類

25、型為電平觸發(fā)void INT0_OFF()/關(guān)閉外部中斷EX0=0;void INT_0(void) interrupt 0 choose_again_flag=1;/把返回界面標(biāo)志置位/*/void INT1_ON()/打開(kāi)外部中斷EX1=1;IT1=0;/觸發(fā)類型為電平觸發(fā)void INT1_OFF()/關(guān)閉外部中斷EX1=0;void INT_1(void) interrupt 2Set_Time_Flag=1;/時(shí)間設(shè)置標(biāo)志置位/*/void main()/*相關(guān)設(shè)備初始化*/unsigned char KeyValue;LCDInit();Init1302();KeyInit();DS18B20Init();EA=1;/使能總中斷wh

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論