基于單片機的多功能萬年歷設(shè)計說明_第1頁
基于單片機的多功能萬年歷設(shè)計說明_第2頁
基于單片機的多功能萬年歷設(shè)計說明_第3頁
基于單片機的多功能萬年歷設(shè)計說明_第4頁
基于單片機的多功能萬年歷設(shè)計說明_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

./分類號密級UDC中國地質(zhì)大學江城學院畢業(yè)設(shè)計〔論文基于單片機的多功能萬年歷設(shè)計姓名:專業(yè):電子信息工程班級:學號:指導教師:榮講師論文外文題目:TheDesignofMultiFunctionCalendarBasedonMCU論文主題詞:多功能萬年歷單片機DS1302數(shù)碼管外文主題詞:MultiFunctionCalendarMCUDS1302LED論文答辯日期:答辯委員會主席:評閱教師:.原創(chuàng)性聲明本人呈交的畢業(yè)論文,是在導師的指導下,獨立進行研究工作所取得的成果,所有數(shù)據(jù)、圖片資料真實可靠。盡我所知,除文中已經(jīng)注明引用的容外,本畢業(yè)論文的研究成果不包含他人享有著作權(quán)的容。對本論文所涉及的研究工作做出貢獻的其他個人和集體,均已在文中以明確的方式標明。本畢業(yè)論文的知識產(chǎn)權(quán)歸屬于培養(yǎng)單位。本人簽名:日期:摘要隨著當今世界經(jīng)濟的快速發(fā)展和信息化時代的來臨,各種各樣的小型智能家電產(chǎn)品陸續(xù)出現(xiàn)在我們的生活當中。日歷是人們不可或缺的日常用品。但一般日歷都為紙制用品,使用不便,壽命不長。電子萬年歷是一種非常廣泛的日常計時工具,它采用智能電子控制和顯示技術(shù),改善了紙制日歷的缺陷。它可以對年、月、日、星期、時、分、秒進行計時,還具有閏年補償?shù)榷喾N功能。本設(shè)計采用STC89C52單片機為核心,構(gòu)成單片機控制電路,用DS1302時鐘芯片計時,完成時間的自動調(diào)整和掉電保護,DS18B20檢測溫度,再經(jīng)過單片機處理后把時間和溫度信號通過MAX7219和74HC573驅(qū)動20位共陰極數(shù)碼管顯示。日歷能顯示陽歷和陰歷年、月、日以及星期、時、分、秒、溫度。該萬年歷設(shè)有四個按鍵:S1、S2、S3、S4鍵,可以實現(xiàn)日期調(diào)整,鬧鐘功能,秒表功能。關(guān)鍵詞:多功能萬年歷單片機DS1302DS18B20數(shù)碼管ABSTRACTWiththerapiddevelopmentofworldeconomyandtheforthcomingofinformationera,manykindsofmini-typeintelligentdomesticelectricappliancesappearinourlifeoneafteranother.Calendarsarenecessarydailygoodsinpeople’slife.Buttheyaregenerallypapergoodswithinconvenientuseandshortlife.Electroniccalendarisaverywiderangeofdailytimingtool,itadoptsthetechnologyofintelligentelectroniccontrolanddisplay,andthenimprovesthedeficiencyofpapercalendars.Itcanbeyears,month,day,week,hour,minutesandsecondsfortime,butalsohasaleapyearcompensationandotherfunctions.ThedesignadoptsthecoreofAT89S52singlechipmicrocomputer,whichconstitutescontrollingcircuit,andintegratesDS1302clockchip,whichachieveself-adjustingoftimeandnopowerprotecting.DS18B20temperaturedetection,andthenthroughthesingle-chipprocessingtimeandtemperaturesignalanduse20commoncathodeledthatdrivenbyMAX7219and74HC573todisplay.Thecalendarcandisplaysolarandlunaryear,month,day,week,hour,minute,second.Thecalendarhasfourbuttons:S1,S2,S3,S4,canachievethedateofadjustment,alarmfunction,stopwatchfunction.Keywords:MultifunctioncalendarMCUDS1302DS18B20LED目錄TOC\o"1-3"\h\u1引言12系統(tǒng)方案選擇32.1控制模塊32.2時鐘模塊32.3顯示模塊42.4溫度檢測模塊42.5最終方案選擇53系統(tǒng)硬件電路的設(shè)計63.1系統(tǒng)核心部分——STC89C52主控模塊63.1.1STC89C52單片機特性63.1.2STC89C52單片機引腳及功能73.1.3STC89C52單片機最小系統(tǒng)設(shè)計83.2時鐘模塊103.3溫度檢測模塊113.4鍵盤模塊123.5顯示模塊123.6揚聲器模塊154系統(tǒng)軟件的設(shè)計164.1系統(tǒng)初始化164.2開機顯示函數(shù)174.3DS18B20溫度檢測函數(shù)174.3.1DS18B20的初始化174.3.2DS18B20的寫操作184.3.3DS18B20的讀操作184.3.4溫度檢測函數(shù)194.4按鍵函數(shù)204.5DS1302函數(shù)204.6陰歷函數(shù)214.7顯示函數(shù)224.8鬧鐘函數(shù)及整點報時函數(shù)224.9秒燈函數(shù)235調(diào)試中的問題與解決方法24結(jié)束語26致28參考文獻29附錄30.1引言隨著科技的不斷進步與發(fā)展,越來越多的電子類產(chǎn)品變得人性化與智能化,在這種大的變化趨勢下,鐘表類產(chǎn)品當然不會示弱。本次設(shè)計的多功能萬年歷即為生活中隨處可見的產(chǎn)品,不管是什么時候,時間總是很重要的,一個好的時鐘類產(chǎn)品就是可以讓人們一目了然地接受到時間的信息。而隨著時代的發(fā)展,時鐘類產(chǎn)品也從最先的機械式鐘表發(fā)展出了電子類鐘表,讓人們的生活變的更加的便捷。本次設(shè)計的多功能萬年歷,以STC89C52單片機為核心,加上DS1302時鐘芯片和DS18B20溫度傳感器,可以實現(xiàn)對陽歷年月日星期,時間以及陰歷月日和溫度的顯示。另外,通過本設(shè)計的4個按鍵還可以實現(xiàn)對時間的調(diào)整,還可以實現(xiàn)秒表和倒計時功能,以及鬧鐘功能。本次設(shè)計的結(jié)構(gòu)簡單,計時準確,可以廣泛的應(yīng)用于家庭以及社會上一些需要時鐘顯示的場所。而且還可以被用于學校學生的興趣設(shè)計,增強學生的動手能力,因此,本設(shè)計具有相當重要的現(xiàn)實意義和實用價值。1.1系統(tǒng)概述多功能萬年歷是一種利用數(shù)字電路計算并顯示時間等數(shù)據(jù)的設(shè)備,和機械式鐘表相比,其顯示更直觀,計時更精確,且由于沒有機械齒輪等磨損性器件,所以具有更長的使用壽命。而且萬年歷除了可以顯示時間外還可以顯示年月日星期等信息,如果加入外圍器件,還可以顯示溫度濕度信息等等。本設(shè)計是以單片機為核心加上一些外圍器件構(gòu)成,其中單片機選用的是STC89C52,而時鐘芯片選用了DS1302,另外加上溫度傳感器DS18B20感知溫度,通過程序處理后,由MAX7219和74HC573驅(qū)動20個共陰極數(shù)碼管顯示陽歷和陰歷,時間,還有溫度。在本設(shè)計中共設(shè)置了四個按鍵,還有一個蜂鳴器模塊,可以通過這四個按鍵實現(xiàn)對日歷時鐘信息的調(diào)整以及鬧鐘功能和秒表功能。同時,由于DS1302可以設(shè)置備用電池,所以可以很好的形成掉電保護,這樣等再次上電后,時間就是此刻,而不用再去校時。本次設(shè)計所用功能均通過軟件控制實現(xiàn),電路通過5V供電,直接用手機充電器即可實現(xiàn)穩(wěn)定工作。本設(shè)計的系統(tǒng)框圖如圖1.1所示,設(shè)計簡單,時間準確,可以廣泛的應(yīng)用于各種需要時鐘顯示的場所。顯示電路蜂鳴器電路顯示電路蜂鳴器電路單片機控制電路單片機控制電路電源電路軟件控制電源電路軟件控制DS1302時鐘電路操控電路溫度檢測電路DS1302時鐘電路操控電路溫度檢測電路圖1.1系統(tǒng)框圖2系統(tǒng)方案選擇由于現(xiàn)在市面上已經(jīng)有很多電子萬年歷產(chǎn)品,且分有很多種類,它們的性能和價格都不盡相同,所以電子萬年歷應(yīng)該如何設(shè)計才能具有競爭性就尤其重要。正確的方案選擇可以使開發(fā)的難度大幅降低,這樣就可以使開發(fā)周期縮短,并降低成本,使產(chǎn)品性能更好,功能接地氣,價格更親民,因而使人們更容易選擇這款產(chǎn)品,使它能更快的推向市場。根據(jù)本設(shè)計最終要實現(xiàn)的功能,可將本系統(tǒng)分為控制模塊,時鐘模塊,顯示模塊及溫度檢測模塊等。為了能較好的實現(xiàn)各個模塊的功能,我分別考慮了以下幾種方案,并通過比較分析,從中選擇了性價比較高的方案。2.1控制模塊方案1:采用STC89C52單片機作為系統(tǒng)控制芯片STC89C52單片機是STC公司生產(chǎn)的一種低功耗、高性能的CMOS8位微控制器,其使用了經(jīng)典的MSC-51核,但由于做了很多的改進所以使得芯片具備了傳統(tǒng)51單片機并不具備的功能。由于STC89C52單片機功耗低,體積較小,技術(shù)成熟,成本低,抗干擾性能好,且軟件編程靈活,可利用軟件編程實現(xiàn)各種算法和邏輯控制,在各個領(lǐng)域應(yīng)用廣泛。方案2:采用MSP430F169單片機作為系統(tǒng)控制芯片MSP430系列單片機是美國儀器公司推出的一種16位超低功耗、具有精簡指令集〔RISC的混合信號處理器〔MixedSignalProcessor。MSP430系列單片機可以實現(xiàn)各種復雜的邏輯功能,它將許多功能不同的外設(shè)都集成在一塊芯片上,模塊多,密度高,體積小,提升了穩(wěn)定性,降低了功耗,適合用于各種需要電池供電的便攜式設(shè)備中。其中,MSP430F169更是具備了多種工作模式,多個串行接口,硬件乘法器,AD轉(zhuǎn)換等等功能。總體而言,MSP430F169功能更強大,速度更快,與STC89C52對比來說,這些都是優(yōu)勢。但是,MSP430F169作為混合信號處理器,針對本次設(shè)計,許多功能未必有用,而且本次設(shè)計對處理速度的要求也不是很高,STC89C52同樣可以勝任,從成本和方便調(diào)試的角度考慮,本次設(shè)計選擇方案1。2.2時鐘模塊方案1:采用STC89C52單片機計時利用單片機的一個16位定時計數(shù)器使其每200us發(fā)生一次中斷,則當中斷250*20次后即可產(chǎn)生一個秒信號,然后就可以根據(jù)時間的遞進關(guān)系計算出分、時、日、星期、月、年。然而用單片機實現(xiàn)計時,雖然不用外接時鐘芯片,且充分的利用了單片機的資源,但是計時精度卻不夠高,容易產(chǎn)生誤差,而且一旦掉電就會失去所有的數(shù)據(jù)。方案2:采用DS1302為時鐘芯片DS1302是串行接口的時鐘芯片,綜合性能較好且價格便宜。其采用三線接口〔時鐘,數(shù)據(jù),復位與單片機進行同步通信,占用資源少,計時精確。而且它采用雙電源設(shè)計,當主電源斷掉時可以啟用備用電源〔如果設(shè)置了備用電源,這樣就實現(xiàn)了數(shù)據(jù)的掉電保護,當再次上電后,系統(tǒng)就可以調(diào)用到正確的時間數(shù)據(jù)。由于采用單片機計時會采用計數(shù)器,這樣就占用了硬件資源,而且還需要設(shè)置中斷與算法,也會占用單片機的資源,而采用DS1302計時單片機就可以避免計算時間所占用的資源,且DS1302計時更準確,又具有掉電保護,電路設(shè)計也較簡單,綜上所述,本次設(shè)計采用方案2——采用DS1302為時鐘芯片。2.3顯示模塊方案1:采用FYD12864-0402B液晶顯示模塊作為顯示器FYD12864-0402B是一種具備多種接口方式,且自帶字庫的點陣圖形液晶顯示器。該顯示器和其它同類型的顯示器相比,不管是周邊電路結(jié)構(gòu)設(shè)計,還是顯示程序設(shè)計都要簡單的多,而且它的價格也略低于相同規(guī)模的顯示器。利用此顯示器可以很靈活很方便的構(gòu)成全中文人機交互圖形界面。方案2:采用多位LED數(shù)碼管構(gòu)成顯示模塊采用LED數(shù)碼管用于顯示時,雖然說顯示的容有限,但是也可以顯示0到9的數(shù)字以及有限的幾個英文字母,而且驅(qū)動電路和程序的設(shè)計非常簡單,價格也比液晶顯示器要低得多。液晶顯示器可以顯示很豐富的容,且硬件設(shè)計不復雜,但是本設(shè)計中并不需要顯示多么復雜的容,而且相比數(shù)碼管而言,數(shù)碼管顯示更加清晰易見,液晶顯示器顯示容過小,對于電子萬年歷來說不太直觀,實用價值不高。故從經(jīng)濟和實用的角度考慮,本次設(shè)計選擇方案2.2.4溫度檢測模塊方案1:采用DS18B20數(shù)字溫度傳感器作為溫度檢測模塊DS18B20體積小、接線少且反應(yīng)靈敏,可以很方便的用于環(huán)境測溫。DS18B20是一線式數(shù)字溫度傳感器,只需要和單片機的一個I/O口相連就可以實現(xiàn)雙向通訊。它可以實現(xiàn)-55℃到+125℃之間的溫度測量,且測溫誤差不超過+/-0.5℃。方案2:采用DHT11數(shù)字溫濕度傳感器作為溫濕度檢測模塊DH11是一款可以同時測量溫濕度的傳感器,它采用了專用的傳感和數(shù)字采集技術(shù),具有很高的可靠性和穩(wěn)定性。DH11傳感器具有響應(yīng)快,抗干擾能力強,性價比高等特點,且由于其采用了單線串行接口,所以可以很方便的集成進系統(tǒng),這使得它在很多苛刻的場合都得到應(yīng)用。DH11可以實現(xiàn)0~50℃間的溫度測量以及20-90%RH間的濕度測量,其溫度測量誤差不超過+/-2℃,濕度測量誤差不超過+/-5%RH。由于本設(shè)計暫未考慮濕度顯示設(shè)計,且DS18B20的溫度檢測更為精確,所以本次設(shè)計選擇了方案1,采用DS18B20測溫。2.5最終方案選擇經(jīng)過反復考慮,最終確定了如下方案:采用STC89C52單片機作為系統(tǒng)控制芯片。采用DS1302作為時鐘芯片。采用多位LED數(shù)碼管構(gòu)成顯示模塊。采用DS18B20數(shù)字溫度傳感器作為溫度檢測模塊。3系統(tǒng)硬件電路的設(shè)計根據(jù)本次設(shè)計初設(shè)想要實現(xiàn)的功能,初步確定本系統(tǒng)由主控模塊、時鐘模塊、溫度檢測模塊、鍵盤模塊、顯示模塊、揚聲器模塊等6個模塊構(gòu)成,其電路方案構(gòu)成框圖如圖3.1所示。其中,主控芯片采用STC89C52單片機,時鐘芯片采用DS1302,溫度檢測器件采用DS18B20數(shù)字溫度傳感器,顯示模塊分別由MAX7219和74HC573驅(qū)動的共20個LED數(shù)碼管構(gòu)成。揚聲器模塊DS18B20溫度檢測STC89C52主控模塊DS1302揚聲器模塊DS18B20溫度檢測STC89C52主控模塊DS1302時鐘模塊數(shù)碼管顯示模塊鍵盤模塊鍵盤模塊圖3.1系統(tǒng)電路方案框圖3.1系統(tǒng)核心部分——STC89C52主控模塊STC89C52是一種以8051為核的單片機,它具有8位CPU,8KB的ROM,512字節(jié)RAM,且具有多種外設(shè)。與其它傳統(tǒng)51單片機相比,具有更多功能,能滿足多數(shù)對運算速度要求不高的電子產(chǎn)品的需求,為很多產(chǎn)品提供了一種性價比高的解決方案。3.1.1STC89C52單片機特性? 增強型8051單片機,指令代碼完全兼容傳統(tǒng)8051,可以自由選擇6T或是12T時鐘時鐘周期。? 工作電壓:5.5V~3.3V? 工作頻率圍:0~40MHz,相當于普通8051的0~80MHz,實際工作頻率可達48MHz? 8KB程序存儲器? 512字節(jié)RAM? 32條I/O口線? ISP程序下載,可以直接通過串口升級程序。? 具有EEPROM功能? 具有看門狗功能? 共3個16位定時器/計數(shù)器。即定時器T0、T1、T2? 外部中斷4路,下降沿中斷或低電平觸發(fā)電路,PowerDown模式可由外部中斷低電平觸發(fā)中斷方式喚醒? 通用異步串行口〔UART,還可用定時器軟件實現(xiàn)多個UART? 工作溫度圍:-40~+85℃〔工業(yè)級/0~75℃〔商業(yè)級? PDIP封裝STC89C52單片機引腳及功能STC89C52單片機的引腳分布如圖3.2所示。圖3.2STC89C52單片機STC89C52單片機引腳功能說明:〔1VCC和GND分別是STC89C52的電源輸入端和接地端?!?XTAL1和XTAL2是單片機的時鐘引腳,當采用外部時鐘信號時,XTAL1接晶振,XTAL2懸空,當采用部時鐘時,兩個引腳均要接上晶振,并在晶振兩端與地之間接上20~33pF的小電容,使時鐘起振,并使時鐘更穩(wěn)定。〔3RST為復位引腳,當需要復位單片機時,給這個引腳兩個機器周期以上的高電平,即可使單片機復位。EA引腳是單片機的外部存儲允許位,當單片機只需要訪問部存儲時,直接將EA引腳拉高即可。ALE/PROG和PSEN是單片機與外部存儲通訊的引腳。<4>P0、P1、P2、P3端口均可作普通I/O口使用,其中一些端口還具有第二功能,由于本次設(shè)計并沒有多少涉及第二功能的使用,此處就不介紹了。3.1.3STC89C52單片機最小系統(tǒng)設(shè)計單片機最小系統(tǒng)是一個控制系統(tǒng)的核心,主要有單片機以及晶振、復位電路和電源電路組成,單機最小系統(tǒng)可以通過I/O口和各種外圍電路結(jié)合,然后通過編寫程序?qū)崿F(xiàn)你想要實現(xiàn)的各種功能。STC89C52單片機構(gòu)成的最小系統(tǒng)簡單且可靠,在用STC89C52單片機設(shè)計最小系統(tǒng)時,只需要為單片機接入晶振電路、時鐘電路和復位電路即可,其結(jié)構(gòu)如圖3.3所示,由于STC89C52單片機自身的限制,此最小系統(tǒng)只能運用于對運算速度要求不高的設(shè)計。STC89C52單片機電源電路STC89C52單片機電源電路復位電路復位電路晶振電路晶振電路圖3.3STC89C52單片機最小系統(tǒng)結(jié)構(gòu)〔1電源電路STC89C52單片機采用5V供電,最初是準備利用變壓器產(chǎn)生18V電壓,然后通過7805三端穩(wěn)壓器降壓到5V給單片機供電,后來發(fā)現(xiàn)這樣本設(shè)計就會很笨重,于是就利用一般手機充電器輸出電壓為5V的特性,直接給電子萬年歷供電,但由于miniusb口不好固定在萬用板上,最后選取了DC電源接口,這樣既方便了供電口的固定,而且供電線在市面上也比較容易購買到。另外再在DC電源接口輸出端接上自鎖開關(guān),這樣就起到了隨心控制電源的功能。電源電路設(shè)計圖如圖3.4所示。圖3.4電源電路〔2晶振電路STC89C52單片機必須在時鐘信號的作用下才能正常工作,所以就必須有晶振電路,晶振電路上電啟動后會震蕩產(chǎn)生時鐘信號,而這個時鐘信號就是單片機有序工作的基準信號。STC89C52單片機晶振電路設(shè)計如圖3.5所示,在圖中,由12MHZ晶體振蕩器及30pF電容連接構(gòu)成電容三點式振蕩器,兩個30pF電容在其中起到了穩(wěn)定頻率和快速起振的作用,其中18、19分別對應(yīng)單片機的XTAL1和XTAL2引腳。圖3.5晶振電路〔3復位電路單片機復位即使單片機和其他模塊初始化為最初的狀態(tài),復位電路通常有上電復位和手動復位兩種方式,上電復位即通過電容的充放電實現(xiàn)單片機的復位,但有些情況下,采用手動復位是很有必要的,本設(shè)計即采用的是手動按鍵復位。本設(shè)計過按鍵開關(guān)和RC組合電路實現(xiàn)手動復位,其電路結(jié)構(gòu)簡單,如圖3.6所示,當按下開關(guān)時,RST引腳由低電平變?yōu)楦唠娖?單片機即實現(xiàn)復位。圖3.6復位電路〔4STC89C52最小系統(tǒng)STC89C52單片機最小系統(tǒng)如圖3.7所示。圖3.7STC89C52單片機最小系統(tǒng)3.2時鐘模塊本設(shè)計的時鐘系統(tǒng)采用的是Dallas公司生產(chǎn)的實時時鐘芯片DS1302,DS1302通過串行的方式可以寫入和讀出當前的時間信息。DS1302置的時鐘模塊可以獨立走時,可以向單片機提供秒、分、時、日、月、星期、年在的時間信息,而且具有閏年自動補償功能。同時DS1302還設(shè)計有雙電源引腳,電源圍為2.5~5.5V之間,當VCC2>VCC1時由VCC2供電,當VCC2<VCC1時由VCC1供電。本次設(shè)計即根據(jù)這個特性,將VCC2直接接入電源開關(guān)前,將VCC1接入3V紐扣電池,這樣只要萬年歷接入電源,即使沒有打開開關(guān)也可以給DS1302供電使其工作,而在主系統(tǒng)掉電后就會啟用備用電源,使DS1302在備用電源的作用下繼續(xù)運行,這樣當系統(tǒng)再次上電后,時間仍然是準確的,不用再重新設(shè)定時間,而且還節(jié)省了備用電源的電量。其中,X1和X2引腳是振蕩源,用于外接32.768KHZ晶振,從圖4.8可看出DS1302和單片機的連線只有三條,其中RST是復位/片選端,I/O是串行數(shù)據(jù)輸入/輸出端,SCLK是串行時鐘輸入端。時鐘電路設(shè)計如圖3.8所示。圖3.8DS1302時鐘電路3.3溫度檢測模塊本次設(shè)計使用的溫度檢測模塊是通過傳感器DS18B20實現(xiàn)的,DS18B20的一線制接法使環(huán)境溫度的檢測變的非常簡單。DS18B20檢測溫度的原理是將溫度通過芯片部轉(zhuǎn)化為數(shù)字信號,然后通過DQ引腳將數(shù)字信號傳到單片機,通過單片機的處理再讀出相應(yīng)的溫度。本次設(shè)計的溫度檢測電路如圖3.9所示。圖3.9溫度檢測模塊3.4鍵盤模塊鍵盤模塊可以設(shè)計成矩陣鍵盤或者是獨立鍵盤兩種形式,它們各有自己的優(yōu)點,如果選用矩陣鍵盤模式設(shè)計可以在減少I/O口使用的情況下設(shè)置盡可能多的按鍵,這樣一來也可以獲得更多的按鍵功能。但本次設(shè)計只需要能夠設(shè)置時間即可,并不需要太多的按鍵,在這種情況下,并不需要占用多少I/O口,于是就采用了獨立鍵盤的設(shè)計。其中S1為設(shè)置鍵,S2為+鍵,S3為-鍵,S4為功能鍵。鍵盤模塊如圖3.10所示。圖3.10鍵盤模塊3.5顯示模塊本次設(shè)計顯示模塊使用的是20位7段共陰極LED數(shù)碼管,顯示清晰,電路設(shè)計簡單。要使數(shù)碼管能夠穩(wěn)定清晰的顯示,就必須有電路驅(qū)動,初時本準備全用74HC573驅(qū)動數(shù)碼管顯示,但考慮到用74HC573驅(qū)動太多數(shù)碼管可能會使數(shù)碼管過暗,后來查到MAX7219芯片可以一次驅(qū)動8個數(shù)碼管,且顯示效果很好,于是決定使用2片MAX7219芯片驅(qū)動16個數(shù)碼管,2片74HC573芯片驅(qū)動4個數(shù)碼管。LED數(shù)碼管分為共陽極與共陰極兩種,本設(shè)計中使用的是20位共陰極7段數(shù)碼管。共陰極數(shù)碼管的陰極只有接低電平時才能使數(shù)碼管被點亮,而其它引腳分別對應(yīng)一段發(fā)光二極管,只有給它高電平時,對應(yīng)的段才能夠被點亮,利用這種原理即可顯示出數(shù)字或字符。當有多位數(shù)碼管時,就是利用公共陰極使數(shù)碼管逐一顯示,從而形成位選。MAX7219芯片是一種串行輸入/輸出共陰極數(shù)碼管顯示驅(qū)動芯片,它和單片機相連可驅(qū)動8位共陰極LED數(shù)碼管。該芯片通過三線串行接口于單片機相接,而且只需要外接一個10k電阻即可設(shè)置所有數(shù)碼管的電流,單片機通過MAX7219的串行數(shù)據(jù)線、串行時鐘線和芯片選通線即可實現(xiàn)控制多個數(shù)碼管顯示。MAX7219芯片的引腳功能如表3.1所示。表3.1MAX7219引腳功能74HC573是8進制數(shù)據(jù)鎖存器,是一種CMOS器件。其中OE為輸出使能端,當OE使能端接低電平時,則將使74HC573永久使能。LE為輸出鎖存端,當輸出鎖存端LE為高電平時,鎖存功能對數(shù)據(jù)是不存在的,即輸出同步。本次設(shè)計采用2個74HC573驅(qū)動四個數(shù)碼管顯示陰歷月日,其中一個74HC573通過7段碼使數(shù)碼管顯示,另一個74HC573則通過位選碼以掃描顯示數(shù)碼管。顯示模塊如圖3.11所示。圖3.11顯示模塊3.6揚聲器模塊揚聲器模塊,主要是用于支持在設(shè)置的鬧鈴到時間后發(fā)出聲音以及整點報時的功能。本次設(shè)計的揚聲器模塊在設(shè)計時考慮到此設(shè)計只是由于演示用,故而并沒有設(shè)計有聲音放大的功能,只是簡單的用蜂鳴器設(shè)計電路來發(fā)出聲音。當有需要發(fā)出聲音時,由單片機給出連續(xù)或者是變化的高電平,使蜂鳴器可以鳴叫甚至放出音樂。電路很簡單,由2.2k電阻、三極管9012以及蜂鳴器構(gòu)成,其中三極管起到了放大和開關(guān)的作用,電阻主要是起到限流的作用以避免三極管被燒毀。揚聲器模塊電路圖如圖3.12所示。圖3.12揚聲器模塊4系統(tǒng)軟件的設(shè)計在系統(tǒng)硬件電路方案設(shè)計完成后,接下來就要考慮整個系統(tǒng)軟件的設(shè)計,首先,要梳理清楚本次設(shè)計所要實現(xiàn)的功能具體有哪些,然后根據(jù)要實現(xiàn)的功能,建立系統(tǒng)軟件框架的流程圖,在設(shè)計出流程圖后,需要對整個系統(tǒng)進行功能模塊的劃分,這樣就可以把大的思路化為小的需求,從而逐個模塊的實現(xiàn)所要展現(xiàn)的功能,最后,在各個模塊實現(xiàn)后,就可以把各個模塊通過合理的串聯(lián),構(gòu)成完整的具備各種功能的系統(tǒng)程序。系統(tǒng)軟件流程框圖如圖4.1所示。系統(tǒng)初始化系統(tǒng)初始化讀取溫度讀取溫度是否有按鍵被按下是否有按鍵被按下是是按鍵函數(shù)按鍵函數(shù)否否秒表設(shè)置秒表模式時間更改秒表設(shè)置秒表模式時間更改顯示日歷時間及溫度顯示日歷時間及溫度圖4.1系統(tǒng)軟件流程框圖在系統(tǒng)流程框圖設(shè)計出來后,就要考慮各個模塊的設(shè)計,具體大概有系統(tǒng)初始化、開機顯示、DS18B20模塊、按鍵函數(shù)、DS1302函數(shù)、陰歷函數(shù)、顯示函數(shù)、鬧鐘函數(shù)、秒燈函數(shù)、整點報時函數(shù)等等。4.1系統(tǒng)初始化在程序設(shè)計中,系統(tǒng)初始化是很重要的,它將為使系統(tǒng)能正常運行提供初始條件,使一些模塊通電初始化運轉(zhuǎn),為整個系統(tǒng)奠基。在初始化函數(shù)voidinit<>中,首先開全局中斷,設(shè)置中斷允許,然后以方式1開兩個定時器的中斷,并將定時器0賦初值為50ms,定時器1賦初值為1ms,此處定時器0為時鐘計時用,而定時器1為秒表計時。然后還要初始化MAX7219和DS1302,需要注意的是,由于MAX7219的抗干擾能力稍差,所以每次調(diào)用MAX7219時都需要初始化MAX7219以避免出現(xiàn)亂碼。4.2開機顯示函數(shù)在眾多有顯示器件的電子產(chǎn)品中,大多都有在開機時設(shè)置開機畫面,這樣一是可以讓產(chǎn)品有個預(yù)熱的時間,讓系統(tǒng)可以初始化,二來也可以顯示品牌,提升用戶好感。本次設(shè)計雖然設(shè)計簡單,但也設(shè)置了開機顯示函數(shù)。由于本次設(shè)計采用的顯示模塊是LED數(shù)碼管,所以開機顯示很簡單,即使全部數(shù)碼管顯示8。4.3DS18B20溫度檢測函數(shù)單片機通過DS18B20檢測溫度時,需要向DS18B20發(fā)送指令,其中,DS18B20主要的命令有以下三條:0XCCH忽略ROM序列的讀取操作,直接向DS18B20發(fā)送其他命令,這命令僅僅適合只有一片DS18B20工作的情況;0X44H啟動DS18B20進行溫度轉(zhuǎn)換;0XBEH讀取溫度寄存器9個字節(jié)容。當然僅僅知道DS18B20工作命令是不夠的,還需要了解DS18B20的通訊協(xié)議,與DS18B20通訊必須有三個步驟:每次通訊時需對DS18B20進行初始化操作,在初始化完成后需要發(fā)送ROM尋址指令〔只有一片工作時不需要尋址,使用0XCC命令即可,然后再發(fā)送RAM指令,這樣才能使DS18B20進行相應(yīng)的工作。4.3.1DS18B20的初始化初始化DS18B20時,需要先將數(shù)據(jù)線置"1",然后稍作延時<這個時間盡可能短一點,幾十微秒就夠了>,然后再將數(shù)據(jù)線拉低到"0",這時要精確延時<最好在480到960微秒間>,最后再將數(shù)據(jù)線拉高,并延時一段時間后結(jié)束初始化。以下是DS18B20的初始化程序:/*****初始化DS18B20*****/voidInit_DS18B20<void>{DQ=1;//DQ復位Delay_DS18B20<8>;//稍做延時DQ=0;//單片機將DQ拉低Delay_DS18B20<80>;//精確延時,大于480usDQ=1;//拉高總線Delay_DS18B20<35>;//延時,結(jié)束初始化}4.3.2DS18B20的寫操作DS18B20進行寫操作時需將數(shù)據(jù)線拉低,然后先低位再高位向DS18B20寫入數(shù)據(jù),并延時,然后將數(shù)據(jù)線拉到高電平,如此重復直到將命令發(fā)送完為止〔在這里我設(shè)了8個循環(huán),最后再將數(shù)據(jù)線拉高。以下是DS18B20的寫操作程序:/*****寫一個字節(jié)*****/voidWriteOneChar<unsignedchardat>{unsignedchari=0;for<i=8;i>0;i-->{DQ=0;DQ=dat&0x01;Delay_DS18B20<5>;DQ=1;dat>>=1;}}4.3.3DS18B20的讀操作DS18B20讀操作時需要先將數(shù)據(jù)線拉低然后再將數(shù)據(jù)線拉并延時,這時可以讀取到數(shù)據(jù)的一個位,如此循環(huán)8次并將數(shù)據(jù)處理即可讀到一個字節(jié)的數(shù)據(jù)。以下是DS18B20的讀操作程序:/*****讀一個字節(jié)*****/unsignedcharReadOneChar<void>{unsignedchari=0;unsignedchardat=0;for<i=8;i>0;i-->{DQ=0;//給脈沖信號dat>>=1;DQ=1;//給脈沖信號if<DQ>dat|=0x80;Delay_DS18B20<4>;}return<dat>;}4.3.4溫度檢測函數(shù)由于讀數(shù)據(jù)時只能讀取一個字節(jié),所以讀取兩次分別都低8位和高8位,然后將高低位數(shù)據(jù)合并。讀出的數(shù)據(jù)還需要經(jīng)過處理才能輸出實際溫度,本次設(shè)計的函數(shù)只能正確輸出高于0的溫度,即先將數(shù)據(jù)乘于0.0625得出實際溫度,然后將溫度數(shù)字放大10倍以便輸出小數(shù)點后一位數(shù)值。以下即溫度檢測函數(shù):/*****讀取溫度*****/voidds18b20<>{unsignedchara=0;unsignedcharb=0;unsignedintt=0;floatft=0;Init_DS18B20<>;WriteOneChar<0xCC>;//跳過讀序號列號的操作WriteOneChar<0x44>;//啟動溫度轉(zhuǎn)換Init_DS18B20<>;WriteOneChar<0xCC>;//跳過讀序號列號的操作WriteOneChar<0xBE>;//讀取溫度寄存器a=ReadOneChar<>;//讀低8位b=ReadOneChar<>;//讀高8位t=b;t<<=8;t=t|a;ft=t*0.0625;wendu=ft*10+0.5;//放大10倍輸出并四舍五入}4.4按鍵函數(shù)本次設(shè)計采用的是獨立按鍵設(shè)計,所以判斷按鍵是否按下是很簡單的,只需讀取到按鍵I/O口電平置0即可確定案件被按下。由于本次設(shè)計只采用了4個按鍵,所以按鍵的多功能就很有必要了。其中S1為設(shè)置鍵,在程序里設(shè)置了按鍵計時參數(shù),這樣就可使用設(shè)置鍵的長按功能,本次設(shè)計將S1設(shè)為短按進入時間設(shè)置界面,長按進入鬧鐘設(shè)置界面,在設(shè)置界面長按S1即為退出設(shè)置并不保存結(jié)果。在時鐘設(shè)置和鬧鐘設(shè)置界面中,S2為加鍵,S3為減鍵。S4為秒表鍵,當進入秒表界面時S2為開始和停止鍵,S3為清除鍵,按S4進入倒計時設(shè)置,此時S2和S3為加減功能,退出設(shè)置后準備倒計時,此時S2為開始和停止鍵,S3為清除鍵。4.5DS1302函數(shù)DS1302的應(yīng)用流程如下。啟用寄存器讀寫:write_1302<0x8e,0x00>;寫入當前時間數(shù)據(jù)禁止寄存器讀寫:write_1302<0x8e,0x80>;讀出DS1302的時間數(shù)據(jù)圖4.2DS1302流程圖由于DS1302部編碼為BCD編碼,所以在單片機讀出和寫入時都要進行進制轉(zhuǎn)換。如果單片機向DS1302寫入了錯誤的數(shù)據(jù),DS1302是不會向單片機報錯的,所以使用DS1302時要特別注意轉(zhuǎn)換進制的算法。本次設(shè)計的BCD與十進制轉(zhuǎn)換算法如下所示:date=<<date/10>*16>+<date%10>;//十進制轉(zhuǎn)BCDtemp=temp/16*10+temp%16;//BCD轉(zhuǎn)十進制4.6陰歷函數(shù)剛開始寫陰歷程序時,是準備通過程序計算出陰歷時間的,后來經(jīng)過多方查找資料,發(fā)現(xiàn)由于陰歷是以月亮的周期為天文依據(jù),采用朔月望月為基本周期,每月的天數(shù)都不是固定的,有時是29天,有時又是30天,而且有時一年為12月,有時又是13月。和陽歷相比,兩種歷法都有著各自的規(guī)律,但它們間并沒有明確的轉(zhuǎn)換公式。陰歷歷法為了協(xié)調(diào)回歸年和陰歷年的矛盾,采用十九年七閏法,并且閏月的計算規(guī)則比較復雜,通過程序計算實現(xiàn)相當困難。那么究竟要如何計算陰歷時間呢?后來我發(fā)現(xiàn)還有另外一種查表法,即將萬年歷上已經(jīng)確定的陰歷時間信息通過通過建表匯集到一起,在需要計算陰歷時間時根據(jù)陽歷查找計算出來,這樣就簡單很多。確定使用查表法后,就需要思考如何存入陰歷信息才能使信息全部導入且占用空間最少。本次設(shè)計使用的數(shù)據(jù)表算是利用了比較變態(tài)的存儲方法,每個陽歷年所對應(yīng)的陰歷數(shù)據(jù)僅占用了三個字節(jié)。其中,第一字節(jié)中BIT7-4表示當年閏月的月份,如為0則表示無閏月,BIT3-0對應(yīng)陰歷1到4月的大小,第二字節(jié)中BIT7-0對應(yīng)了陰歷5到12月的大小,第三字節(jié)中BIT7為陰歷第十三月的大小,BIT6-5對應(yīng)春節(jié)的陽歷月份,BIT4-0對應(yīng)了春節(jié)的陽歷日期。如2015年的數(shù)據(jù)即是〔0x04,0xBA,0x53,從第一字節(jié)可以看出2015年沒有閏月,結(jié)合第二字節(jié)可以看出2015年陰歷月大小為010010111010,從第三字節(jié)可看出由于本年無閏月,所以BIT7為0,而春節(jié)對應(yīng)陽歷為2月19日。接下來介紹的是陰歷函數(shù)設(shè)計的思想,首先進入陰歷子函數(shù),然后是根據(jù)陽歷定位陰歷數(shù)據(jù)表的地址,定位后取出陰歷信息,然后計算當年春節(jié)距當年元旦的天數(shù)。接下來即要計算當前陽歷日距當年元旦的天數(shù),計算陽歷日距元旦的天數(shù)后就要判斷陽歷日是春節(jié)前還是春節(jié)后,再根據(jù)是春節(jié)前還是春節(jié)后設(shè)計相應(yīng)的算法計算出當前的陰歷日期。如需查出2015年03月29日時的陰歷,則首先定位數(shù)據(jù)表中2015年的起始地址〔15*3=45,此時可提取出春節(jié)日期2月19日,并計算出春節(jié)到元旦天數(shù)為31+19-1=49天。然后計算3月29日到元旦的天數(shù),這里我設(shè)了每月開始到元旦的天數(shù)day_code[],計算時只需取出前月到元旦的天數(shù)加上本月的日期再減去1即可得出,程序為temp4=day_code1[month_sun-1]+day_sun-1;則3月29到元旦的天數(shù)為0x3b+29-1=87天,由于2015年不是閏年,所以3月29到元旦的天數(shù)為87天。由87大于49,則3月29為春節(jié)后87-49=38天。這時首先得出陰歷1月為小29天,且2015年無閏月,由38大于29,則3月29為陰歷一月后38-29=9天,月加1得出陰歷二月大有30天,由9小于30,則退出運算,得出3月29日時陰歷月為2月,陰歷日為9+1=10日,即陰歷2月10日。4.7顯示函數(shù)顯示函數(shù)只需程序的邏輯清晰,把顯示條件寫清楚即可正確的顯示需要顯示的容,因此需要注意的是顯示驅(qū)動的程序。由于本設(shè)計用了兩種顯示驅(qū)動方法,所以寫程序時要把兩種驅(qū)動各自涉及到的LED數(shù)碼管分清楚,否則會顯示錯誤。本次設(shè)計采用了兩種驅(qū)動芯片,其中74HC573較為簡單,只需知道怎樣進行位選和段選即可,需要注意的是MAX7219。由于MAX7219規(guī)定一次接收16位數(shù)據(jù),但STC89C52是8位單片機,所以需要分兩次來發(fā)送數(shù)據(jù)。發(fā)送格式為MAX7219_1<0xf9,0x00>,其中,0xf9前4位數(shù)據(jù)沒有什么意義,所以可以任意寫入,后4位數(shù)據(jù)決定了你要選擇顯示哪一個數(shù)碼管,0x00中8位數(shù)據(jù)為需要顯示的數(shù)字段碼。在時鐘脈沖的作用下,數(shù)據(jù)將以串行的方式移入MAX7219部16位寄存器,需要注意的是MAX7219在接收時是先接受高位再接收低位,因此,程序發(fā)送數(shù)據(jù)時必須先發(fā)送高位,然后再循環(huán)移位發(fā)送數(shù)據(jù)。4.8鬧鐘函數(shù)及整點報時函數(shù)鬧鐘函數(shù)和整點報時函數(shù)的設(shè)計思想是差不多的,即在到整點或鬧鐘時間后,打開蜂鳴器開關(guān)即可,然后在相應(yīng)延時或不再是鬧鐘時間后關(guān)閉蜂鳴器。4.9秒燈函數(shù)每計時到500ms時,控制秒燈電平反轉(zhuǎn)即可實現(xiàn)秒燈的閃爍。5調(diào)試中的問題與解決方法由于本次設(shè)計是運用STC89C52單片機為核心設(shè)計的電子實物產(chǎn)品,所以在完成本設(shè)計的硬件電路部分,并為本設(shè)計編寫了匹配的單片機程序后,還需要將產(chǎn)品上電調(diào)試,以測試本產(chǎn)品能否正常工作,是否實現(xiàn)了預(yù)期的功能效果。在產(chǎn)品的調(diào)試過程中,并不會一帆風順,所以也遇到了一些問題。在將程序初步編寫完成后〔此時并沒有加入陰歷程序,本著先看看效果的想法,就將程序燒寫到了單片機中。在程序燒寫完成后將本產(chǎn)品通電測試,發(fā)現(xiàn)一切正常,數(shù)碼管的顯示效果很好,數(shù)字清晰明亮。在看完顯示效果后當然要測試一下各個功能是否正常,經(jīng)過按鍵測試后發(fā)現(xiàn)時鐘設(shè)置、鬧鐘設(shè)置、秒表功能均正常。于是將萬年歷斷電,過了大約5分鐘后再上電,結(jié)果發(fā)現(xiàn)時鐘并不是斷電前調(diào)整好的時間,然后又重復試驗了幾次,發(fā)現(xiàn)還是不能保存時間,于是初步將問題定位為掉電不能保存時間。在確定萬年歷存在問題后,就要分析為什么會存在這個問題。我初步確定了兩個方向,一是電路上的問題,一是程序上的問題。在程序設(shè)計上,我是利用了DS1302芯片,在時間設(shè)置好以后將時間數(shù)據(jù)寫入到DS1302上保存,于是將問題定位到了DS1302上,經(jīng)過多出查證,我在DS1302相關(guān)程序上應(yīng)該不存在設(shè)計問題,既然已證明本問題與程序無關(guān),那肯定就是電路方面的問題了。我剛開始設(shè)計DS1302電路模塊時沒有設(shè)計主電源,采用的是電池供電,在用萬用表測量后發(fā)現(xiàn)DS1302的VCC1引腳與地線間沒有壓降〔沒有電壓,初步懷疑是供電電池沒有電量了,然后我直接用電路VCC作為主電源接在了VCC2上,在經(jīng)過測試后,發(fā)現(xiàn)已經(jīng)能夠保存時間并且掉電走時了。這時就已經(jīng)可以斷定肯定是供電源的問題了,在將電池卸下來后,用萬用表測試電池發(fā)現(xiàn)有3V的電壓,就是說電池是沒有問題的,這就是說是供電電路的問題了,經(jīng)過查證后發(fā)現(xiàn)原來是供電電池的正負極焊接反了,在重新焊接后,我又測試了一遍,這次將主電源也斷電了,只留下了備用電源,再經(jīng)過10分鐘后再次上電,發(fā)現(xiàn)走時正常,問題解決。〔2在將陰歷程序編寫完成后,將總程序燒寫入單片機,發(fā)現(xiàn)陰歷顯示部分閃爍嚴重,無法看清,由于采用的是掃描顯示的方法,所以將問題定位為掃描延時過長,在將掃描延時時間適當減短后,數(shù)碼管不再閃爍,問題解決。〔3在將數(shù)碼管閃爍問題解決后,再次上電后發(fā)現(xiàn)陰歷部分顯示亂碼,這次我第一時間將陰歷顯示部分的電路查了一遍,發(fā)現(xiàn)沒有任何問題,于是將問題定位為程序問題。數(shù)碼管顯示亂碼肯定是顯示段碼的問題,經(jīng)過檢查后發(fā)現(xiàn)MAX7219和74HC573驅(qū)動數(shù)碼管的段碼順序有所不同,MAX7219的段碼順序為DP、A、B、C、D、E、F、G,而74HC573驅(qū)動數(shù)碼管的段碼順序為DP、G、F、E、D、C、B、A,而我在寫陰歷顯示段碼時是直接采用的MAX7219的段碼,但電路上陰歷顯示卻是74HC573驅(qū)動的,這就不難解釋為什么陰歷會顯示亂碼了。在將驅(qū)動段碼改正后,上電陰歷顯示正常,不再有亂碼,問題解決。〔4陰歷顯示亂碼問題解決后,繼續(xù)測試。在調(diào)整陽歷年月日的過程中,發(fā)現(xiàn)陰歷月日顯示的并不是正確的日期,然后我調(diào)整了連續(xù)幾個月的陽歷日期,發(fā)現(xiàn)當陽歷日期在15號以時,陰歷日期顯示的是正確的日期,但是一旦陽歷日期在15號以后,陰歷日期顯示就會比當前日期少6天。如當陽歷為3月15日時,陰歷為1月25日,但當陽歷為3月16日時,陰歷就會顯示為1月20日〔正確日期應(yīng)為1月26日,比當前日期少6天。于是通讀程序,發(fā)現(xiàn)原來是我在讀取DS1302時已經(jīng)將讀出的數(shù)據(jù)由BCD碼轉(zhuǎn)換為十進制了,但是在寫陰歷轉(zhuǎn)換程序時又一次將陽歷日期當作BCD碼轉(zhuǎn)換成了十進制,這樣就造成了陰歷轉(zhuǎn)換錯誤,在刪除這段轉(zhuǎn)換程序后,陰歷日期已可以正確顯示,問題解決。結(jié)束語本次設(shè)計的多功能萬年歷產(chǎn)品是生活中隨處可見的產(chǎn)品,人們不管是在閑暇時還是在忙碌時,總是會不斷亦或者說是不自覺的注意時間,由此可見時鐘類產(chǎn)品是生活中不可或缺的,不管是小型的腕帶手表,中小型的站立式鐘表,還是大型的壁掛式鐘表。而隨著科技的不斷進步與發(fā)展,鐘表類產(chǎn)品也由原先的機械式鐘表發(fā)展出了電子類鐘表。特別是近幾年,人們都提倡讓電子類產(chǎn)品變得人性化與智能化,鐘表類產(chǎn)品當然也加入了這種潮流。不管將來生活變得多么便捷,多么智能,我相信鐘表類產(chǎn)品都會與時俱進,而不論未來鐘表類產(chǎn)品如何變化,以何種形式存在,其核心算法也只會不斷優(yōu)化,這是生活中必須的產(chǎn)品。本次多功能萬年歷設(shè)計,通過以STC89C52單片機為核心,加上DS1302時鐘芯片和DS18B20溫度傳感器,成功的實現(xiàn)了陽歷年月日星期,時間和陰歷月日的顯示。另外,該產(chǎn)品還實現(xiàn)了溫度的檢測和顯示,還具有秒表和倒計時功能,以及鬧鐘功能。本次設(shè)計所用功能均通過軟件控制實現(xiàn),電路通過5V供電,直接用手機充電器即可實現(xiàn)穩(wěn)定工作。本設(shè)計的系統(tǒng)設(shè)計簡單,時間準確,可以廣泛的應(yīng)用于各種需要時鐘顯示的場所,也可用于電子愛好者或教育領(lǐng)域的DIY設(shè)計。本次萬年歷設(shè)計還可以擴展其他功能,比如空氣濕度的檢測,有害氣體的檢測,以及遙控控制等等?;仡櫞髮W四年的生活,由于平時并沒有怎么運用所學到的知識,一直以為這四年并沒有學到什么,直到完成這次畢業(yè)設(shè)計。通過這次畢業(yè)設(shè)計,我學到了不少東西,具體如下:〔1通過這次畢業(yè)設(shè)計,我將以前學到的與單片機和電路相關(guān)知識大多都利用了起來,而且還查閱了不少相關(guān)的資料,并最終完成了本次設(shè)計。但正所謂知道的越多,越能發(fā)現(xiàn)自己的不足,通過本次設(shè)計,我發(fā)現(xiàn)自己掌握的知識還是太少,越發(fā)體會到自我學習的重要性。在未來的工作生活中,我會不斷充實自己,畢竟,掌握的越多,辦事才會更全面,更順利?!?通過本次設(shè)計,我經(jīng)歷了一個項目從提出到完成的每一個階段。本次設(shè)計從最開始定題,到設(shè)計方案的研究,再到電路原理圖的設(shè)計,元器件的購買和電路的焊接,以及后面程序的編寫和調(diào)試均有我獨自完成。不僅使我鍛煉到了獨立設(shè)計的能力,而且使我熟悉了一個系統(tǒng)的設(shè)計流程,這都為我以后的工作生活提供了寶貴的經(jīng)驗,奠定了堅實的基礎(chǔ)。<3>在本次設(shè)計的過程中,我碰到了一些設(shè)計上的難題,通過查閱資料和與朋友交流,這些問題都逐步的解決了。通過本次設(shè)計,我學習到了遇到問題后解決問題的思路,如何思考才有可能解決問題。致本次畢業(yè)設(shè)計我得到了很多人的幫助,在這里,我要對老師,同學,學校表示最真摯的意。這次畢業(yè)設(shè)計得以順利完成,首先要感我的畢業(yè)設(shè)計指導老師老師,老師曾在我大三時教過我DSP課程,她有著很好的教學方式并對學生負責且工作認真嚴謹。盡管老師平時忙于自己的教學任務(wù),但在我的畢業(yè)設(shè)計過程中,她給予了我很多指導與幫助,因此,在論文即將結(jié)束之際,謹向敬愛的老師表示最衷心的感。其次我還要感我的朋友們,是他們在我遇到困難時鼓勵我,關(guān)心我,才使我能順利的完成本次畢業(yè)設(shè)計。最后,我要感學校給予我這樣的機會來檢驗我的學習成果,在這段即將離開學校的日子里,我學到了很多。再一次對我的母校表示感。參考文獻[1]黃翠翠.余良俊.杜麗芳.王立謙.MCS-51單片機原理及應(yīng)用..大學.2013:223-236.[2]薛楠.ProtelDXP2004原理圖與PCB設(shè)計實用教程..機械工業(yè).2012:18-97.[3]溫子祺.51單片機C語言創(chuàng)新教程..航空航天大學.2011.27-31:82-130.[4]譚浩強.C語言程序設(shè)計.第四版..清華大學.2010:37-290.[5]STC官網(wǎng).STC89C51RC/RD+系列單片機中文指南.2005:2-20.[6]王銳.基于單片機的萬年歷設(shè)計.信息技術(shù).2014.09:213-216.[7]麗麗.磊.清寶.一種公歷到農(nóng)歷日期轉(zhuǎn)換算法的實現(xiàn).微計算信息.2005.21<10>:74-76.[8]德法.洪林.串行時鐘芯片DS1302的原理與使用.信息技術(shù)與信息化.2006.01:92-94.[9]偉躍.基于時鐘芯片DS1302的萬年歷的設(shè)計.科技創(chuàng)新導報.2012.09:20-21.[10]段磊.基于AT89C51單片機控制的萬年歷探究.海峽科學.2012.02:26-28.[11]周穎.俞吉.基于AT89S52單片機的電子萬年歷系統(tǒng)設(shè)計.現(xiàn)代電子技術(shù).2012.35<13>:178-182.[12]暢.基于單片機控制的LCD顯示萬年歷制作.長江大學學報〔自科版.2013.10<22>:77-79.[13]揚.基于AT89S52單片機的電子萬年歷設(shè)計與實現(xiàn).無線互聯(lián)科技.2014.09:172-174.[13]MAXIM.MAX7219/MAX7221DataSheets.2003:1-13.[14]DALLAS.DS1302DataSheet.2015:1-11.[15]DALLAS.DS18B20DataSheet.2008:1-12.附錄1多功能萬年歷電路原理圖圖12多功能萬年歷實物圖圖2圖3圖4圖53多功能萬年歷源程序部分代碼DS1302時鐘函數(shù)/*****寫ds1302函數(shù)*****/voidwrite_1302<ucharadd,uchardate>{uchari;date=<<date/10>*16>+<date%10>;//將數(shù)據(jù)由十進制轉(zhuǎn)換為BCD碼rst_1302=0;clk_1302=0;rst_1302=1;for<i=0;i<16;i++>{if<i<8>//寫入地址{add=add>>1;}else//寫入數(shù)據(jù){date=date>>1;}io_1302=CY;clk_1302=0;clk_1302=1;}rst_1302=0;}/********讀1302函數(shù)********/ucharread_1302<ucharadd>{uchari,temp=0;rst_1302=0;clk_1302=0;rst_1302=1;for<i=0;i<8;i++>//寫入地址{add=add>>1;io_1302=CY;clk_1302=0;clk_1302=1;}for<i=0;i<8;i++>//讀取數(shù)據(jù){clk_1302=1;clk_1302=0;if<io_1302>{temp=temp|<0x01<<i>;}}temp=temp/16*10+temp%16;//將數(shù)據(jù)由BCD碼轉(zhuǎn)換為十進制rst_1302=0;returntemp;}voidds1302<>//讀取寫入ds1302函數(shù){if<<tt==1>&&<set==0>>//當退出時間設(shè)定時,首先將設(shè)定的時間寫入芯片*/{tt=0;write_1302<0x8e,0x00>; //啟動讀寫write_1302<0x82,min>;write_1302<0x84,hour>;write_1302<0x8a,week>;write_1302<0x86,day>;write_1302<0x88,mon>;write_1302<0x8c,year>;write_1302<0x8e,0x80>; //禁止讀寫}if<set==0//沒有在設(shè)置狀態(tài)時讀取時鐘芯片數(shù)據(jù){sec=read_1302<0x81>;min=read_1302<0x83>;hour=read_1302<0x85>;week=read_1302<0x8b>;day=read_1302<0x87>;mon=read_1302<0x89>;year=read_1302<0x8d>;}if<set!=0>//設(shè)置時讀取秒數(shù)據(jù){sec=read_1302<0x81>;}}MAX7219驅(qū)動函數(shù)//******MAX7219程序******//voidMAX7219_1<ucharmsb,ucharlsb>{ uchari;cs_7219_1=0;for<i=0;i<16;i++>//寫入16位數(shù)據(jù){if<i<8>//數(shù)碼管位選msb=msb<<1;else//數(shù)碼管段選lsb=lsb<<1;clk_7219_1=0;din_7219_1=CY;_nop_<>;clk_7219_1=1;}cs_7219_1=1;}陰歷計算函數(shù)/*函數(shù)功能:輸入十進制陽歷數(shù)據(jù),輸出陰歷數(shù)據(jù)<只允許2000-2099年>調(diào)用函數(shù)示例:Conversion<year_sun,month_sun,day_sun>如:計算2015年4月16日Conversion<15,04,16>;year_sun,month_sun,day_sun均為十進制數(shù)據(jù)調(diào)用函數(shù)后,原有數(shù)據(jù)不變,讀year_moon,month_moon,day_moon得出陰歷十進制數(shù)據(jù)*/voidConversion<ucharyear_sun,ucharmonth_sun,ucharday_sun>{uchartemp1,temp2,temp3,month_p;uinttemp4,table_addr;bitflag2,flag_y;//定位數(shù)據(jù)表地址table_addr=year_sun*0x3;//定位數(shù)據(jù)表地址完成//取當年春節(jié)所在的公歷月份temp1=year_code[table_addr+2]&0x60;temp1=_cror_<temp1,5>;//取當年春節(jié)所在的公歷月份完成//取當年春節(jié)所在的公歷日temp2=year_code[table_addr+2]&0x1f;//取當年春節(jié)所在的公歷日完成//計算當年春年離當

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論