基于單片機(jī)的萬(wàn)年歷的設(shè)計(jì)(畢業(yè)論文)_第1頁(yè)
基于單片機(jī)的萬(wàn)年歷的設(shè)計(jì)(畢業(yè)論文)_第2頁(yè)
基于單片機(jī)的萬(wàn)年歷的設(shè)計(jì)(畢業(yè)論文)_第3頁(yè)
基于單片機(jī)的萬(wàn)年歷的設(shè)計(jì)(畢業(yè)論文)_第4頁(yè)
基于單片機(jī)的萬(wàn)年歷的設(shè)計(jì)(畢業(yè)論文)_第5頁(yè)
已閱讀5頁(yè),還剩32頁(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)介

萬(wàn)年歷設(shè)計(jì)PAGE34PAGE1畢業(yè)論文(設(shè)計(jì))論文題目:基于51單片機(jī)的萬(wàn)年歷的設(shè)計(jì)摘要隨著當(dāng)今世界經(jīng)濟(jì)的快速發(fā)展和信息化時(shí)代的來(lái)臨,各種各樣的小型智能家電產(chǎn)品陸續(xù)出現(xiàn)在我們的生活中。日歷是人們不可或缺的日常用品。但一般日歷都為紙制用品,使用不便,壽命不長(zhǎng)。本文借助電路仿真軟件Protues對(duì)基于AT89S51單片機(jī)的電子萬(wàn)年歷的設(shè)計(jì)方法及仿真進(jìn)行了全面的闡述。該電子萬(wàn)年歷在硬件方面主要采用AT89C51單片機(jī)作為主控核心,由DS1302時(shí)鐘芯片提供時(shí)鐘、1602LCM點(diǎn)陣液晶顯示屏顯示。時(shí)間、日期調(diào)整由三個(gè)按鍵來(lái)實(shí)現(xiàn),并可對(duì)鬧鈴開(kāi)關(guān)進(jìn)行設(shè)置。日歷能顯示陽(yáng)歷和陰歷年、月、日以及星期、時(shí)、分、秒。此萬(wàn)年歷具有讀取方便、顯示直觀、功能多樣、電路簡(jiǎn)潔、成本低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢(shì),具有廣闊的市場(chǎng)前景關(guān)鍵詞:?jiǎn)纹瑱C(jī)萬(wàn)年歷可調(diào)DS130212864AbstractWiththerapiddevelopmentofworldeconomyandtheforthcomingofinformationera,manykindsofmini-typeintelligentdomesticelectricappliancesappearinourlifeoneafteranother.Calendarsarenecessarydailygoodsinpeople’slife.ThispapermainlydiscussthedesignandsimulationofelectroniccalenderbasedonAT89S51withthehelpofProtues.Onthehardwareside,theelectroniccalendarusingAT89C51microcontrollerasthemaincontrolcenter,clockprovidedbytheDS1302clockchip,1602LEDdotmatrixLCDdisplay.Timeanddateadjustingiscarriedoutbythreekeys,whichcanalsosetthealarmclock.Tosumupthecalendarhasreadconvenient,directdisplay,functionaldiversity,simplecircuit,lowcost,andmanyotheradvantages,conformtothetrendofthedevelopmentofelectronicinstruments,andhasabroadmarketprospect.Keywords:SCMperpetualcalendarDS130212864青海民族大學(xué)畢業(yè)論文PAGE33萬(wàn)年歷設(shè)計(jì)2目錄TOC\o"1-3"\h\u24582前言 1291091.方案設(shè)計(jì) 2240491.1系統(tǒng)基本方案選擇和論證 2312481.1.1單片機(jī)芯片的選擇 PAGEREF_Toc312482299921.1.2顯示模塊選擇方案和論證 2326901.1.3時(shí)鐘芯片選擇方案與論證 2281781.2電路設(shè)計(jì)最終方案決定 3134882.系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn) 4144732.1電路設(shè)計(jì)框圖 4161442.2系統(tǒng)硬件概述 4270612.2.1AT89C52概述 445542.2.2DS1302概述 6146992.2.312684概述 7233193.系統(tǒng)的軟件設(shè)計(jì) 89833.1程序流程框圖 866543.2從1302讀取日期和時(shí)間流程圖 9146593.3時(shí)間調(diào)整程序流程圖 10157384.系統(tǒng)測(cè)試 10136154.1硬件測(cè)試 104394.2軟件測(cè)試 43911325385.結(jié)論 119260參考文獻(xiàn) 1219121致謝 133493附錄 14前言在日新月異的21世紀(jì)里,時(shí)間對(duì)現(xiàn)代人來(lái)說(shuō)更加緊迫,從觀太陽(yáng)、擺鐘到現(xiàn)在電子鐘,時(shí)間的記錄方式在不斷的更新進(jìn)步。然而,隨著社會(huì)、科技的發(fā)展,集直觀性,精度高,壽命長(zhǎng),功能全等為一體的記錄方式更為人們所需求。在電子產(chǎn)業(yè)高速發(fā)展這一時(shí)代背景下,大規(guī)模集成電路大量出現(xiàn),電子鐘也因讀取方便、顯示直觀、功能多樣、電路簡(jiǎn)潔等諸多優(yōu)點(diǎn)隨之誕生,它的出現(xiàn)極大地影響了人們的生活,我們的時(shí)間記錄更為全面和科學(xué)。因此,對(duì)萬(wàn)年歷的研究與探索是具有相當(dāng)重要的現(xiàn)實(shí)意義和實(shí)用價(jià)值。電子萬(wàn)年歷屬于小型智能電子產(chǎn)品,既可廣泛應(yīng)用于家庭,也可應(yīng)用于銀行、醫(yī)院、學(xué)校等公共場(chǎng)所。它利用單片機(jī)進(jìn)行控制,因?yàn)閱纹瑱C(jī)具有高可靠性、高性價(jià)比、低電壓、低功耗等一系列優(yōu)點(diǎn);利用DS1302實(shí)時(shí)時(shí)鐘芯片進(jìn)行記時(shí),因?yàn)槠渚哂懈咝阅?、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,可對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),同時(shí)具有閏年補(bǔ)償功能等優(yōu)點(diǎn);利用12864液晶顯示,因?yàn)槠渚哂酗@示功能強(qiáng)大、價(jià)格便宜等特點(diǎn),再外加一些基本系統(tǒng)即可實(shí)現(xiàn)時(shí)間的調(diào)整和顯示。因此,電子萬(wàn)年歷制作既有市場(chǎng)前景,又能培養(yǎng)單片機(jī)的運(yùn)用能力,無(wú)論從實(shí)用價(jià)值,還是從培養(yǎng)能力的角度來(lái)看這都是很有意義的畢業(yè)設(shè)計(jì)課題。本萬(wàn)年歷的設(shè)計(jì)要實(shí)現(xiàn)公歷年、月、日,農(nóng)歷年、月、日,星期,時(shí)、分、秒,顯示公歷節(jié)日,農(nóng)歷節(jié)日,生日,時(shí)間段提醒以及節(jié)日、生日與時(shí)間段的交替顯示,并在開(kāi)機(jī)時(shí)設(shè)置顯示作者的相關(guān)信息。最終在老師的指導(dǎo)和同學(xué)們的幫助下,經(jīng)過(guò)自己的努力完成了這個(gè)課題,并從中提高了實(shí)踐動(dòng)手、團(tuán)結(jié)合作和綜合運(yùn)用理論知識(shí)進(jìn)行工程實(shí)踐的能力。方案設(shè)計(jì)1.1系統(tǒng)基本方案選擇和論證1.1.1單片機(jī)芯片的選擇本設(shè)計(jì)采用AT89C52芯片作為硬件核心,該芯片內(nèi)有4K字節(jié)的在線編程Flash存儲(chǔ)器,可以擦寫(xiě)1000次,具有掉電模式,而且具有掉電狀態(tài)下的中斷恢復(fù)功能,對(duì)設(shè)計(jì)開(kāi)發(fā)非常實(shí)用。1.1.2顯示模塊選擇方案和論證方案一:采用點(diǎn)陣式數(shù)碼管顯示,點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對(duì)于顯示文字比較適合,如采用在顯示數(shù)字顯得太浪費(fèi),且價(jià)格也相對(duì)較高,所以不用此種作為顯示。方案二:LED數(shù)碼管顯示數(shù)碼管具有低能耗、低損耗、低壓、壽命長(zhǎng)、耐老化、防曬、防潮、防火、防高(低)溫,操作簡(jiǎn)單方案等優(yōu)點(diǎn)。但由于數(shù)碼管動(dòng)態(tài)掃描需要借助74LS164移位寄存器進(jìn)行移位,該芯片在電路調(diào)試時(shí)往往會(huì)有很多障礙,所以不采用LED數(shù)碼管作為顯示。方案三:LCD12864液晶顯示此液晶具有輕薄短小、低耗電量、無(wú)輻射危險(xiǎn),平面直角顯示以及影象穩(wěn)定不閃爍等優(yōu)勢(shì)和可視面積大,畫(huà)面效果好,分辨率高,抗干擾能力強(qiáng)等特點(diǎn),并且能夠方便的顯示文字和數(shù)字。所以最終選擇LCD12864。1.1.3時(shí)鐘芯片選擇方案與論證方案一:不使用芯片,采用單片機(jī)的定時(shí)計(jì)數(shù)器這種方法直接采用單片機(jī)定時(shí)計(jì)數(shù)器提供信號(hào),模擬時(shí)鐘的時(shí),分,秒。如:利用AT80C52芯片,定時(shí)器用工作方式1,每50ms產(chǎn)生一個(gè)中斷,循環(huán)20次,即1s周期。每一個(gè)周期加1,那么1min為60個(gè)周期,1h就是60*60=3600個(gè)周期。采用此種方案雖然可以減少時(shí)鐘芯片的使用,節(jié)約成本,但實(shí)現(xiàn)的時(shí)間誤差較大,所以不采用此方案。方案二:并行接口時(shí)鐘芯片DS12887采用單片機(jī)應(yīng)用系統(tǒng)并行總線(三總線)擴(kuò)展的接口電路,采用這種接口電路具有操作速度快,編程方便的優(yōu)點(diǎn)。但是對(duì)于80C52單片機(jī)來(lái)說(shuō),低位地址線要通過(guò)鎖存器輸出,還要地址譯碼器,而且并行口芯片的體積相對(duì)較大。方案三:串行接口時(shí)鐘芯片DS1302采用DS1302時(shí)鐘芯片實(shí)現(xiàn)時(shí)鐘,DS1302是美國(guó)DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V~5.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ì)電流充電的能力。主要特點(diǎn)是采用串行數(shù)據(jù)傳輸,可為掉電保護(hù)電源提供可編程的充電功能,并且可以關(guān)閉充電功能。采用普通32.768kHz晶振。所以,最終選擇串行時(shí)鐘芯片DS1302。1.2電路設(shè)計(jì)最終方案決定綜上各模塊的選擇方案與論證,確定最后的主要硬件資源如下:采用AT89C52作為主控制系統(tǒng);DS1302提供時(shí)鐘;12864液晶屏作為顯示。2.系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)2.1電路設(shè)計(jì)框圖單片機(jī)主控模塊從DS1302時(shí)鐘模塊讀取時(shí)間,通過(guò)片內(nèi)芯片處理,將顯示結(jié)果通過(guò)PO口床送至12684液晶顯示模塊顯示出最終的界面;同時(shí),單片機(jī)主控模塊對(duì)鍵盤(pán)進(jìn)行掃描,有按鍵按下時(shí)進(jìn)入調(diào)整狀態(tài),并在12684液晶上顯示狀態(tài)。2.2系統(tǒng)硬件概述2.2.1AT89C52概述AT89C52功能特性概述:8K字節(jié)Flash閃速存儲(chǔ)器,256字節(jié)內(nèi)部RAM,32個(gè)I/O口線,3個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量?jī)杉?jí)中斷結(jié)構(gòu),一個(gè)全雙工串行通信口,片內(nèi)振蕩器及時(shí)鐘電路;可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式;空閑方式停止CPU的工作,但允許RAM,定時(shí)/計(jì)數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作;掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其他所有部件工作直到下一個(gè)硬件復(fù)位。AT89C52的引腳定義及功能:Vcc:接+5V電源Vss:接地XTAL1和XTAL2:時(shí)鐘引腳,外接晶體引線端。當(dāng)使用芯片內(nèi)部時(shí)鐘時(shí),此兩引腳端用于外接石英晶體和微調(diào)電容;當(dāng)使用外部時(shí)鐘時(shí),用于接外部時(shí)鐘脈沖信號(hào)。RST:復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將使單片機(jī)復(fù)位。WDT溢出將使引腳輸出高電平,設(shè)置SFRAUXR的DISRT0(地址8EH)可打開(kāi)或關(guān)閉該功能。DISRT0位缺省為RESET輸出高電平打開(kāi)狀態(tài)。ALE/PROG:當(dāng)訪問(wèn)外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地址鎖存器允許)輸出脈沖用于鎖存地址的低8位字節(jié)。即使不訪問(wèn)外部存儲(chǔ)器,ALE仍以時(shí)鐘振蕩頻率的1/6輸出固定的正脈沖信號(hào),因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目的。PSEN:程序存儲(chǔ)允許(PSEN)輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng)AT89C51由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次PSEN有效,即輸出兩個(gè)脈沖。當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器,沒(méi)有兩次有效的PSEN信號(hào)。EA/VPP:外部訪問(wèn)允許。欲使CPU僅訪問(wèn)外部程序存儲(chǔ)器(地址為0000H—FFFFH),EA端必須保持低電平(接地)。需要注意的是:如果加密位LB1被編程,復(fù)位時(shí)內(nèi)部會(huì)鎖存EA端狀態(tài)。如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲(chǔ)器中的指令。Flash存儲(chǔ)器編程時(shí),該引腳加上+12V的變成電壓Vpp.POP1P2P3口:四個(gè)I/O口,其中P3口還具有第二功能:端口引腳第二功能端口引腳第二功能P3.0RXD(串行輸入口)P3.4T0(定時(shí)/計(jì)數(shù)器0)P3.1TXD(串行輸出口)P3.5T1(定時(shí)/計(jì)數(shù)器1)P3.2(外中斷0)P3.6(外部數(shù)據(jù)存儲(chǔ)器寫(xiě)通道)P3.3(外中斷1)P3.7(外部數(shù)據(jù)存儲(chǔ)器讀通道)AT89C52管腳圖及控制電路:2.2.2DS1302概述DS1302功能特性概述:提時(shí)鐘計(jì)數(shù)功能,可以對(duì)秒、分鐘、小時(shí)、日、月、年、星期的計(jì)數(shù);年計(jì)數(shù)可達(dá)到2100年;有31*8位的額外數(shù)據(jù)暫存寄存器;采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù);內(nèi)部有一個(gè)31×8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器;具有主電源/后背電源雙電源引腳,同時(shí)提供了對(duì)后背電源進(jìn)行涓細(xì)電流充電的能力。AT89C52的引腳定義及功能:Vcc1:備用電源Vcc2:主電源X1和X2:振蕩源,外接32.7、68KHz晶振I/O:串行數(shù)據(jù)輸入端(雙向)SCLK:輸入端RST:復(fù)位端DS1302管腳圖及控制電路:2.2.312684概述12684功能特性概述:顯示內(nèi)容128×64點(diǎn);全屏點(diǎn)陣;2MROM總共提供8192個(gè)漢字(16×16點(diǎn)陣);16KROM總共提供128個(gè)字符(16×8點(diǎn)陣);工作溫度:-20—70攝氏度,存儲(chǔ)溫度:-30—80攝氏度。引腳定義及功能:VSS:電源地VDD:電源正V0:液晶顯示器驅(qū)動(dòng)電器(可調(diào))RS:RS=“H”,表示DB0—DB7為顯示數(shù)據(jù);RS=“L”,表示DB0—DB7為控制指R/W:R/W=“H”,E=“H”,數(shù)據(jù)被督導(dǎo)DB0—DB7;R/W=“1”,E=“H→L”,DB0—的數(shù)據(jù)被寫(xiě)到IR或DRDB1-7:數(shù)據(jù)線PSB:串并口選擇NC:空腳RST:復(fù)位腳VOUT:倍壓輸出腳LEDA/K:背光電源,A正K負(fù)12864管腳圖及控制電路系統(tǒng)的軟件設(shè)計(jì)該系統(tǒng)的軟件設(shè)計(jì)方法與硬件設(shè)計(jì)相對(duì)應(yīng),按整體功能分成多個(gè)不同的程序模塊,分別進(jìn)行設(shè)計(jì)、編程和調(diào)試,最后通過(guò)主程序?qū)⒏鞒绦蚰K連接起來(lái)。電子萬(wàn)年歷的程序主要包括3個(gè)方面的內(nèi)容:一是DS1302從單片機(jī)中讀取數(shù)據(jù)進(jìn)行計(jì)數(shù),二是利用按鍵進(jìn)行時(shí)間的調(diào)整,三是單片機(jī)中讀取DS1302中的數(shù)據(jù)驅(qū)動(dòng)LED12684顯示時(shí)間。3.1程序流程框圖主程序流程框圖如下圖所示,12864,DS1302的數(shù)據(jù)讀取及指令寫(xiě)入函數(shù)均已在各自的頭文件中完成,在主程序中只須引用即可。3.2從1302讀取日期和時(shí)間流程圖3.3時(shí)間調(diào)整程序流程圖4.系統(tǒng)測(cè)試4.1硬件測(cè)試在Protues仿真結(jié)束后,于焊接板上完成了硬件組裝。在調(diào)試硬件時(shí)遇到過(guò)很多問(wèn)題,但只要細(xì)心、認(rèn)真檢查這些問(wèn)題都是可以避免的,主要問(wèn)題及解決辦法現(xiàn)列如下:接通電源后LCD12864沒(méi)有正確的顯示。在不通電狀態(tài)下用萬(wàn)用表檢測(cè)電路是否正常連接,在檢查回路時(shí)沒(méi)有發(fā)現(xiàn)問(wèn)題,懷疑是單片機(jī)驅(qū)動(dòng)電路有問(wèn)題,加載了所有端口的LED的驅(qū)動(dòng)程序,所有端口都能正常工作,排除是單片機(jī)驅(qū)動(dòng)電路有問(wèn)題這一可能性;再次對(duì)電路進(jìn)行檢查發(fā)現(xiàn)排阻太小,換成10K的排阻后,LCD正常顯示。電路工作一段時(shí)間之后有的芯片發(fā)熱嚴(yán)重。經(jīng)查發(fā)現(xiàn)原來(lái)是有尖銳的管腳刺破鄰近的漆包線造成短路,斷掉該線并再次連接可解決問(wèn)題。接通后液晶正常顯示了,但是在時(shí)間位置全部顯示“?”號(hào),初步判斷是時(shí)間未正確讀取,經(jīng)過(guò)仔細(xì)用萬(wàn)用表檢查,發(fā)現(xiàn)DS302接地端接觸不良,解決后顯示正常。4.2軟件測(cè)試(1)程序燒入后,開(kāi)機(jī)畫(huà)面正常,可是一進(jìn)入顯示界面就有未知符號(hào)出現(xiàn),后又恢復(fù)正常,且調(diào)時(shí)也沒(méi)問(wèn)題。初步判斷與顯示程序無(wú)關(guān),經(jīng)過(guò)反復(fù)調(diào)試,發(fā)現(xiàn)是開(kāi)機(jī)畫(huà)面結(jié)束后為對(duì)12864液晶進(jìn)行初始化,最后修改后問(wèn)題得以解決。(2)修改時(shí)間、日期時(shí)農(nóng)歷沒(méi)有自動(dòng)對(duì)應(yīng)上。把不相關(guān)的程序暫時(shí)屏蔽,地農(nóng)歷的子程序獨(dú)立調(diào)試,發(fā)現(xiàn)在調(diào)用農(nóng)歷自動(dòng)更新時(shí),對(duì)十進(jìn)制和十六進(jìn)制處理不好,所以會(huì)造成錯(cuò)亂。最后把相應(yīng)的十進(jìn)制進(jìn)行修改,使得可以與十六進(jìn)制對(duì)應(yīng),最后解決了此問(wèn)題。5.結(jié)論通過(guò)對(duì)電子萬(wàn)年歷的設(shè)計(jì),從中不僅學(xué)習(xí)到了新知識(shí),還豐富了許多的設(shè)計(jì)經(jīng)驗(yàn)。例如進(jìn)行程序編寫(xiě)時(shí),由于思路的不清晰,導(dǎo)致程序問(wèn)題不斷出現(xiàn),還不知從何而解,最后靜下心來(lái),仔細(xì)理了一下編程思路,再一步一步往下編寫(xiě),遇到問(wèn)題一個(gè)一個(gè)解決,這樣既鍛煉自己又節(jié)約了時(shí)間。經(jīng)過(guò)這一個(gè)多月的努力,從開(kāi)始準(zhǔn)備資料到硬件電路的制作,再到畢業(yè)論文的完成,其中有問(wèn)題不能得以解決的煩惱,也有收獲新知的快樂(lè)。而且,經(jīng)過(guò)這次設(shè)計(jì)真的理解了理論與實(shí)踐的差別,沒(méi)有扎實(shí)的理論,實(shí)踐過(guò)程要走很多彎路,而實(shí)踐中又會(huì)遇到很多理論上不曾提到過(guò)的問(wèn)題。所有,我們要有腳踏實(shí)地,認(rèn)真嚴(yán)謹(jǐn),實(shí)事求是的學(xué)習(xí)態(tài)度,也要有不怕困難、堅(jiān)持不懈、吃苦耐勞的精神去面對(duì)困難。參考文獻(xiàn)楊子文.單片機(jī)原理及應(yīng)用.西安:西安電子科技大學(xué)出版社,2006彭偉.單片機(jī)C語(yǔ)言程序設(shè)計(jì)實(shí)訓(xùn)100例.北京:電子工業(yè)出版社,2009閻石.數(shù)字電子技術(shù)基礎(chǔ).北京:高等教育出版社,2006陳正振.電子電路設(shè)計(jì)與制作.廣西:廣西交通職業(yè)技術(shù)學(xué)院信息工程系,2007胡漢才.單片機(jī)原理與接口技術(shù).北京:清華大學(xué)出版社,2004何小艇.電子系統(tǒng)設(shè)計(jì)[M].杭州:浙江大學(xué)出版社,2007李光飛.單片機(jī)課程設(shè)計(jì)實(shí)例指導(dǎo).北京:北京航空航天大學(xué)出版社,2004.馬忠梅.單片機(jī)的C語(yǔ)言應(yīng)用程序設(shè)計(jì).北京:北京航空航天大學(xué)出版社,2003侯玉寶.基于proteus的51系列單片機(jī)設(shè)計(jì)與仿真.北京:電子工業(yè)出版社,2008郭榮生.電子技術(shù)實(shí)驗(yàn)與實(shí)踐濟(jì)南:中國(guó)石油大學(xué)出版社,2007王法能.單片機(jī)原理及應(yīng)用.北京:科學(xué)出版社2004致謝我的大學(xué)生活將隨著這個(gè)畢業(yè)論文而隨之結(jié)束,在大學(xué)這四年的學(xué)習(xí)和生活中,我不僅學(xué)到了豐富的專業(yè)知識(shí),還學(xué)會(huì)了怎么為人處世,怎么面對(duì)困難,怎么奮發(fā)向上,怎么學(xué)會(huì)關(guān)心別人。在學(xué)校期間,有太多的感動(dòng)讓我們懷念,有太多的人讓我們難忘,有太多的笑聲與快樂(lè)。總之,有太多太多值得懷念的東西,它將是我們一生寶貴的財(cái)富。在這個(gè)畢業(yè)設(shè)計(jì)階段,我學(xué)習(xí)到了新知識(shí),豐富了實(shí)踐經(jīng)驗(yàn),還對(duì)我們這個(gè)專業(yè)的工藝流程有了更深刻的理解,對(duì)我們畢業(yè)后從事本專業(yè)工作打下了結(jié)實(shí)的基礎(chǔ)。因?yàn)檫@個(gè)過(guò)程,我們就擁有了比別人更多的專業(yè)體驗(yàn),在面試中我們就比別人多了一個(gè)砝碼。在大學(xué)最后的這個(gè)階段,經(jīng)過(guò)一個(gè)月的努力終于完成了電子萬(wàn)年歷設(shè)計(jì),在此要感謝的人有很多,首先感謝學(xué)校提供的優(yōu)越實(shí)驗(yàn)環(huán)境,使我能全身心的投入到我的設(shè)計(jì)中。感謝物理與電子工程學(xué)院,有大量量參考文獻(xiàn)供我們查閱。感謝我的指導(dǎo)老師孫老師給我的仔細(xì)檢查和改正。感謝同我一起探討學(xué)習(xí)的同學(xué)們。還要感謝實(shí)驗(yàn)室老師的大力支持,當(dāng)印制電路板生成后,借出各種調(diào)試工具,使系統(tǒng)在最短的時(shí)間里調(diào)試成功,使本系統(tǒng)能順利實(shí)現(xiàn)。附錄附錄一元器件明細(xì)表:元件名稱數(shù)量元件名稱數(shù)量AT89C521個(gè)10K電阻1個(gè)DS13021個(gè)22UF電解電容1個(gè)LCD128641個(gè)30PF電容2個(gè)排阻(10K)1個(gè)12M晶振1個(gè)按鈕5個(gè)32.768k晶振1個(gè)附錄二儀器設(shè)備清單儀器名稱數(shù)量?jī)x器名稱數(shù)量RF-2148USB智能編程器1個(gè)EDA實(shí)驗(yàn)箱1個(gè)附錄三電路原理圖附錄四PCB圖附錄五實(shí)物圖附錄六程序清單#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintucharsec,min,hour,day,month,year,week; bitw;ucharnext;voidDelayUs2x(unsignedchart){while(--t);}voidDelayMs(unsignedchart){while(t--){//大致延時(shí)1mSDelayUs2x(245); DelayUs2x(245);}}voiddelay(uintms)//延時(shí)子程序{uinta,b,c;//ms=1000為1.015sfor(a=2;a>0;a--)for(b=46;b>0;b--)for(c=ms;c>0;c--);}sbitRS=P2^4;sbitRW=P2^5;sbitE=P2^6;sbitRES=P2^1;sbitPSB=P2^0;sbitsclk=P1^0; //1302串行時(shí)鐘sbitI_O=P1^1; //1302數(shù)據(jù)端口sbitrst=P1^2; //1302復(fù)位sbit k1=P3^4; //功能健sbit k2=P3^5; //時(shí)間加sbit k3=P3^6; //時(shí)間減sbit k4=P3^7; //確定鍵#defineDataPortP0//單片機(jī)P0<>液晶DB0-DB7ucharcodeDayCode1[9]={0x00,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};uintcodeDayCode2[3]={0x111,0x130,0x14e};ucharLunarMonth,LunarDay,LunarYear;bitc_moon;ucharcodeYearCode[300]={0x0C,0x96,0x45,//20002970x4d,0x4A,0xB8,//20013000x0d,0x4A,0x4C,//20023030x0d,0xA5,0x41,//20033060x25,0xAA,0xB6,//20043090x05,0x6A,0x49,//20053120x7A,0xAd,0xBd,//20063150x02,0x5d,0x52,//20073180x09,0x2d,0x47,//20083210x5C,0x95,0xBA,//20093240x0A,0x95,0x4e,//20103270x0B,0x4A,0x43,//20110x4B,0x55,0x37,//20120x0A,0xd5,0x4A,//20130x95,0x5A,0xBf,//20140x04,0xBA,0x53,//20150x0A,0x5B,0x48,//20160x65,0x2B,0xBC,//20170x05,0x2B,0x50,//20180x0A,0x93,0x45,//20190x47,0x4A,0xB9,//20200x06,0xAA,0x4C,//20210x0A,0xd5,0x41,//20220x24,0xdA,0xB6,//20230x04,0xB6,0x4A,//20240x69,0x57,0x3d,//20250x0A,0x4e,0x51,//20260x0d,0x26,0x46,//20270x5e,0x93,0x3A,//20280x0d,0x53,0x4d,//20290x05,0xAA,0x43,//20300x36,0xB5,0x37,//20310x09,0x6d,0x4B,//20320xB4,0xAe,0xBf,//20330x04,0xAd,0x53,//20340x0A,0x4d,0x48,//20350x6d,0x25,0xBC,//20360x0d,0x25,0x4f,//20370x0d,0x52,0x44,//20380x5d,0xAA,0x38,//20390x0B,0x5A,0x4C,//20400x05,0x6d,0x41,//20410x24,0xAd,0xB6,//20420x04,0x9B,0x4A,//20430x7A,0x4B,0xBe,//20440x0A,0x4B,0x51,//20450x0A,0xA5,0x46,//20460x5B,0x52,0xBA,//20470x06,0xd2,0x4e,//20480x0A,0xdA,0x42,//20490x35,0x5B,0x37,//20500x09,0x37,0x4B,//20510x84,0x97,0xC1,//20520x04,0x97,0x53,//20530x06,0x4B,0x48,//20540x66,0xA5,0x3C,//20550x0e,0xA5,0x4f,//20560x06,0xB2,0x44,//20570x4A,0xB6,0x38,//20580x0A,0xAe,0x4C,//20590x09,0x2e,0x42,//20600x3C,0x97,0x35,//20610x0C,0x96,0x49,//20620x7d,0x4A,0xBd,//20630x0d,0x4A,0x51,//20640x0d,0xA5,0x45,//20650x55,0xAA,0xBA,//20660x05,0x6A,0x4e,//20670x0A,0x6d,0x43,//20680x45,0x2e,0xB7,//20690x05,0x2d,0x4B,//20700x8A,0x95,0xBf,//20710x0A,0x95,0x53,//20720x0B,0x4A,0x47,//20730x6B,0x55,0x3B,//20740x0A,0xd5,0x4f,//20750x05,0x5A,0x45,//20760x4A,0x5d,0x38,//20770x0A,0x5B,0x4C,//20780x05,0x2B,0x42,//20790x3A,0x93,0xB6,//20800x06,0x93,0x49,//20810x77,0x29,0xBd,//20820x06,0xAA,0x51,//20830x0A,0xd5,0x46,//20840x54,0xdA,0xBA,//20850x04,0xB6,0x4e,//20860x0A,0x57,0x43,//20870x45,0x27,0x38,//20880x0d,0x26,0x4A,//20890x8e,0x93,0x3e,//20900x0d,0x52,0x52,//20910x0d,0xAA,0x47,//20920x66,0xB5,0x3B,//20930x05,0x6d,0x4f,//20940x04,0xAe,0x45,//20950x4A,0x4e,0xB9,//20960x0A,0x4d,0x4C,//20970x0d,0x15,0x41,//20980x2d,0x92,0xB5,//2099};/***復(fù)位1302***/voidreset1302(){ sclk=0; rst=0; rst=1; }/***向1302寫(xiě)入1字節(jié)***/voidwrieteByte1302(ucharadd){ uchari; for(i=0;i<8;i++) { I_O=0; if(add&0x01)I_O=1; sclk=0; sclk=1; add>>=1; }}voidwriteClkBye(ucharadd,ucharnum){ reset1302(); wrieteByte1302(add); wrieteByte1302(num);}/***1302初始化***/voidinit1302(){ reset1302(); writeClkBye(0x8e,0); //允許寫(xiě)入 reset1302(); writeClkBye(0x90,0xaa); //慢充電 reset1302(); writeClkBye(0x80,00); //秒初值 reset1302(); writeClkBye(0x82,0x12); //分 reset1302(); writeClkBye(0x84,0x12); // 時(shí) reset1302(); writeClkBye(0x86,0x04); // 日 reset1302(); writeClkBye(0x88,0x03); // 月 reset1302(); writeClkBye(0x8a,0x07); // 星期 reset1302(); writeClkBye(0x8c,0x12); // 年 reset1302();}/***檢測(cè)忙位***/voidCheck_Busy(){RS=0;RW=1;E=1;DataPort=0xff;while((DataPort&0x80)==0x80);//忙則等待E=0;}/***寫(xiě)命令***/voidWrite_Cmd(unsignedcharCmd){ Check_Busy(); RS=0; RW=0; E=1; DataPort=Cmd; DelayUs2x(5); E=0; DelayUs2x(5);}/****寫(xiě)數(shù)據(jù)***/voidWrite_Data(unsignedcharData){ Check_Busy(); RS=1; RW=0; E=1; DataPort=Data; DelayUs2x(5); E=0; DelayUs2x(5);}/****液晶屏初始化***/voidInit_ST7920(){DelayMs(40);//大于40MS的延時(shí)程序PSB=1;//設(shè)置為8BIT并口工作模式DelayMs(1);//延時(shí)RES=0;//復(fù)位DelayMs(1);//延時(shí)RES=1;//復(fù)位置高DelayMs(10);Write_Cmd(0x30);//選擇基本指令集DelayUs2x(50);//延時(shí)大于100usWrite_Cmd(0x30);//選擇8bit數(shù)據(jù)流DelayUs2x(20);//延時(shí)大于37usWrite_Cmd(0x0c);//開(kāi)顯示(無(wú)游標(biāo)、不反白)DelayUs2x(50);//延時(shí)大于100usWrite_Cmd(0x01);//清除顯示,并且設(shè)定地址指針為00HDelayMs(15);//延時(shí)大于10msWrite_Cmd(0x06);//指定在資料的讀取及寫(xiě)入時(shí),設(shè)定游標(biāo)的移動(dòng)方向及指定顯示的移位,光標(biāo)從右向左加1位移動(dòng)DelayUs2x(50);//延時(shí)大于100us}/****從1302讀取***/ucharReadByte1302(){ uchari; ucharRByte; ucharTempByte; RByte=0x00; I_O=1; for(i=0;i<8;i++) { sclk=1; sclk=0; TempByte=(uchar)I_O; TempByte<<=7; RByte>>=1; RByte|=TempByte; } returnRByte;}ucharread1302(ucharadd){ ucharnum; reset1302(); wrieteByte1302(add); ReadByte1302(); num=ReadByte1302(); returnnum;}voidLCDTestWord(biti,ucharword){if(i==0){Write_Cmd(word); //i=0;則寫(xiě)入指令}else{Write_Data(word);//i=1;則寫(xiě)入數(shù)據(jù)}}/***向LCD發(fā)送一個(gè)字符串即寫(xiě)漢字***/voidLCDSendWord(uchar*p){while(*p>0){Write_Data(*p);p++;}}/***往LCD上填寫(xiě)年月日小時(shí)分鐘秒星期以及它們的數(shù)據(jù)***/voidDisplayYear(){ year=read1302(0x8d);//從1302的0X8D處讀出年數(shù)據(jù) LCDTestWord(0,0x81);//寫(xiě)指令在第一行第二個(gè)字符位置顯示年 LCDTestWord(1,(year/16)+0x30);//寫(xiě)數(shù)據(jù) LCDTestWord(1,year%16+0x30);//寫(xiě)數(shù)據(jù) LCDTestWord(0,0x82);//寫(xiě)指令第一行第三個(gè)字符位置 LCDSendWord("年");//顯示年LCDDDRAM第一行地址為80-87, //第二行為90-97,第三行為88-8F,第四行為98-9F}voidDisplayMonth(){ month=read1302(0x89);//從1302中讀取月份數(shù)據(jù) LCDTestWord(0,0x83);//寫(xiě)命令 if(month/16!=0) { LCDTestWord(1,(month/16)+0x30);//寫(xiě)數(shù)據(jù) } else { LCDTestWord(1,0x20);//寫(xiě)數(shù)據(jù) } LCDTestWord(1,month%16+0x30);//寫(xiě)數(shù)據(jù) LCDTestWord(0,0x84);//寫(xiě)指令 LCDSendWord("月");//顯示月}voidDisplayDay(){ day=read1302(0x87);//從1302中讀取日期數(shù)據(jù) LCDTestWord(0,0x85); if(day/16!=0) { LCDTestWord(1,(day/16)+0x30); } else { LCDTestWord(1,0x20); } LCDTestWord(1,day%16+0x30); LCDTestWord(0,0x86); LCDSendWord("日");}voidDisplayWeek(){ week=(read1302(0x8b))%16; //從1302中讀取星期數(shù)據(jù) LCDTestWord(0,0x95); LCDSendWord("星期"); LCDTestWord(0,0x97); if(week==7){LCDSendWord("日");} if(week==6){LCDSendWord("六");} if(week==5){LCDSendWord("五");} if(week==4){LCDSendWord("四");} if(week==3){LCDSendWord("三");} if(week==2){LCDSendWord("二");} if(week==1){LCDSendWord("一");}//顯示星期一到星期日}voidDisplayHour(){ hour=read1302(0x85); LCDTestWord(0,0x90); LCDTestWord(1,(hour/16)+0x30); LCDTestWord(1,hour%16+0x30);}voidDisplayMin(){ min=read1302(0x83); LCDTestWord(0,0x91); LCDTestWord(1,0x3a); //寫(xiě)入分割號(hào): LCDTestWord(1,(min/16)+0x30); LCDTestWord(1,min%16+0x30); LCDTestWord(1,0x3a); //寫(xiě)入分割號(hào):}voidDisplaySec(){ sec=read1302(0x81); LCDTestWord(0,0x93); LCDTestWord(1,(sec/16)+0x30); LCDTestWord(1,sec%16+0x30);}voidUpDate(){DisplayYear();//顯示年DisplayMonth();//顯示月DisplayDay();//顯示日DisplayWeek();//顯示星期DisplayHour();//顯示時(shí)DisplayMin();//顯示分DisplaySec();//顯示秒 }voidSetTime(ucharcount){unsignedcharaddress,item;unsignedcharmax,mini;LCDTestWord(0,0x98);LCDSendWord("設(shè)置");if(count==5){LCDSendWord("秒鐘");address=0x81;max=59;mini=0;}if(count==4){LCDSendWord("分鐘");address=0x83;max=59;mini=0;}if(count==3){LCDSendWord("小時(shí)");address=0x85;max=23;mini=0;}if(count==6){LCDSendWord("星期");address=0x8b;max=7;mini=1;}if(count==2){LCDSendWord("日期");address=0x87;max=31;mini=1;}if(count==1){LCDSendWord("月份");address=0x89;max=12;mini=1;}if(count==0){LCDSendWord("年份");address=0x8d;max=99;mini=0;}item=read1302(address);//讀取DS1302某地址上的數(shù)值賦給itemitem=(item/16)*10+item%16;if(k2==0)//加item++;//數(shù)加1if(k3==0)//-減item--;//數(shù)減1if(item>max)item=mini;//查看數(shù)值有效范圍if(item<mini)item=max;writeClkBye(0x8e,0x00);item=(item/10)*16+item%10;writeClkBye(address-1,item);//將調(diào)整好的item值寫(xiě)入DS1302UpDate();} /*鍵盤(pán)掃描*/voidkeyscan(){if(k1==0)//設(shè)置時(shí)間{DelayMs(10);//按鍵消抖if(k1==0&&w==0)//當(dāng)是正常狀態(tài)時(shí)就進(jìn)入調(diào)時(shí)狀態(tài){w=1;//進(jìn)入調(diào)時(shí)SetTime(next);//調(diào)整}if(k1==0&&w==1)//當(dāng)是調(diào)時(shí)狀態(tài)本鍵用于調(diào)整下一項(xiàng){next++;if(next>=7){next=0;}SetTime(next);//調(diào)整}while(k1==0);//等待鍵松開(kāi)}if(k4==0)//當(dāng)在調(diào)時(shí)狀態(tài)時(shí)就退出調(diào)時(shí){DelayMs(10);//按鍵消抖if(k4==0&&w==1){w=0;next=0; Write_Cmd(0x01);//清除LCD的顯示內(nèi)容}while(k4==0);//等待鍵松開(kāi)}if(k2==0)//加調(diào)整{DelayMs(10);//按鍵消抖if(k2==0&&w==1){SetTime(next);//調(diào)整}while(k2==0);//等待鍵松開(kāi)}if(k3==0)//減調(diào)整{DelayMs(10);//按鍵消抖if(k3==0&&w==1){SetTime(next);//調(diào)整}while(k3==0);//等待鍵松開(kāi)}}/***開(kāi)機(jī)畫(huà)面***/voidwelcome(){LCDTestWord(0,0x81); LCDSendWord("萬(wàn)年歷設(shè)計(jì)");LCDTestWord(0,0x91); LCDSendWord("指導(dǎo):…");LCDTestWord(0,0x89); LCDSendWord("制作:…");LCDTestWord(0,0x99); LCDSendWord("陽(yáng)光總在風(fēng)雨后");}bitGetMoonDay(ucharLunarMonth,uintTableAddr){uchartemp;switch(LunarMonth)//LunarMonth指向農(nóng)歷月份 {case1: { temp=YearCode[TableAddr]&0x08;//1月,對(duì)應(yīng)年份表里第一字節(jié)的BIT3位if(temp==0)return(0);//為0,月小 elsereturn(1);//為1,月大 }case2: { temp=YearCode[TableAddr]&0x04;//2月,對(duì)應(yīng)年份表里第一字節(jié)的BIT2位 if(temp==0)return(0);//為0,月小 elsereturn(1);//為1,月大 }case3: { temp=YearCode[TableAddr]&0x02; //3月,對(duì)應(yīng)第一字節(jié)的BIT1位 if(temp==0)return(0); //為0,月小 elsereturn(1); //為1,月大 }case4: { temp=YearCode[TableAddr]&0x01;//1月,對(duì)應(yīng)第一字節(jié)的BIT0位 if(temp==0)return(0); //為0,月小 elsereturn(1); //為1,月大 }case5: { temp=YearCode[TableAddr+1]&0x80;//5月,對(duì)應(yīng)第二字節(jié)的BIT7位 if(temp==0)return(0); //為0,月小 elsereturn(1); //為1,月大 }case6: { temp=YearCode[TableAddr+1]&0x40;//6月,對(duì)應(yīng)第二字節(jié)的BIT6位 if(temp==0)return(0); //為0,月小 elsereturn(1); //為1,月大 }case7: { temp=YearCode[TableAddr+1]&0x20;//7月,對(duì)應(yīng)第二字節(jié)的BIT5位 if(temp==0)return(0); //為0,月小 elsereturn(1); //為1,月大 }case8: { temp=YearCode[TableAddr+1]&0x10;//8月,對(duì)應(yīng)第二字節(jié)的BIT4位 if(temp==0)return(0); //為0,月小 elsereturn(1); //為1,月大 }case9: { temp=YearCode[TableAddr+1]&0x08;//9月,對(duì)應(yīng)第二字節(jié)的BIT3位 if(temp==0)return(0); //為0,月小 elsereturn(1); //為1,月大 }case10: { temp=YearCode[TableAddr+1]&0x04;//10月,對(duì)應(yīng)第二字節(jié)的BIT2位 if(temp==0)return(0);//為0,月小 elsereturn(1); //為1,月大 }case11: { temp=YearCode[TableAddr+1]&0x02;//11月,對(duì)應(yīng)第二字節(jié)的BIT1位 if(temp==0)return(0); //為0,月小 elsereturn(1); //為1,月大 }case12: { temp=YearCode[TableAddr+1]&0x01;//12月,對(duì)應(yīng)第二字節(jié)的BIT0位 if(temp==0)return(0); //為0,月小 elsereturn(1); //為1,月大 }case13: { temp=YearCode[TableAddr+2]&0x80;//13月,對(duì)應(yīng)第三字節(jié)的BIT7位 if(temp==0)return(0); //為0,月小 elsereturn(1); //為1,月大 }}}voidConversion(ucharyear,ucharmonth,ucharday){uchartemp1,temp2,temp3,MonthP;//temp3,temp4分別表示春節(jié)距元旦的天數(shù)uinttemp4,TableAddr; //公歷日離元旦的天數(shù)bitflag2,flag_y;temp1=year/16; //BCD->hex先把數(shù)據(jù)轉(zhuǎn)換為十六進(jìn)制高位temp2=year%16; //低位year=temp1*10+temp2; //把年數(shù)據(jù)轉(zhuǎn)換成16進(jìn)制temp1=month/16; //月份高位temp2=month%16; //月份低位month=temp1*10+temp2; //把月數(shù)據(jù)轉(zhuǎn)換成16進(jìn)制temp1=day/16; //日期高位temp2=da

溫馨提示

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