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

下載本文檔

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

文檔簡介

設(shè)計說明書第51頁PAGE1緒論萬年歷就是記錄一定時間范圍內(nèi)的具體陽歷與陰歷的日期的年歷,方便有需要的人查詢使用。隨著人們生活水平的提高和生活節(jié)奏的加快,對時間的要求越來越高,精準數(shù)字計時的消費需求也是越來越多。二十一世紀的今天,最具代表性的計時產(chǎn)品就是電子萬年歷,它是近代世界鐘表業(yè)界的第三次革命。電子萬年歷的出現(xiàn)帶來了鐘表計時業(yè)界跨躍性的進步。近年來,電子鐘已成為人們?nèi)粘I钪斜夭豢缮俚奈锲?,廣泛用于個人家庭以及車站、碼頭、劇院、辦公室等公共場所,給人們的生活、學習、工作、娛樂帶來了極大的方便。隨著技術(shù)的發(fā)展,人們已不再滿足于鐘表原先簡單的計時功能,希望出現(xiàn)一些新的功能,諸如日歷的顯示、鬧鐘的應用等,以帶來更大的方便,而所有這些,又都是以數(shù)字化的電子時鐘為基礎(chǔ)的。因此,研究實用電子時鐘及其擴展應用,有著非常現(xiàn)實的意義,具有很大的實用價值。由于數(shù)字集成電路技術(shù)的發(fā)展和采用了先進的石英技術(shù),現(xiàn)代電子鐘具有走時準確、性能穩(wěn)定、制作簡單等優(yōu)點,彌補了傳統(tǒng)鐘表的許多不足之處。我們利用單片機技術(shù)設(shè)計制作的電子萬年歷,可以很方便的由軟件編程進行功能的調(diào)整和改進,使其在能夠準確顯示年、月、日、時間、星期的同時,還能具有其他的功能。如設(shè)定鬧鐘、語單報時、陰陽歷的轉(zhuǎn)換、二十四節(jié)氣的顯示等,有一定的新穎性和實用性,同時體積小,攜帶方便,使用也更為方便,具有技術(shù)更新周期短、成本低、開放靈活等優(yōu)點,具備一定的市場前景。以基于單片機的萬年歷作為設(shè)計課題,因為它具有很好的開放性和可發(fā)揮性,要求比較高,不僅考察了對單片機的掌握能力而且強調(diào)了對單片機的擴展的應用。另外液晶顯示的萬年歷已經(jīng)越來越流行,具有顯示清晰直觀、走時準確、可以進行夜視等功能,并且還可以擴展出其它多鐘功能。所以,電子萬年歷作設(shè)計課題很有價值。2系統(tǒng)設(shè)計方案2.1方案選擇和論證2.1.1單片機芯片的選擇方案和論證方案一:采用89C51芯片作為硬件核心,采用FlashROM,內(nèi)部具有4KBROM存儲空間,能于3V的超低壓工作,而且與MCS-51系列單片機完全兼容,但是運用于電路設(shè)計中時由于不具備ISP在線編程技術(shù),當在對電路進行調(diào)試時,由于程序的錯誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r,對芯片的多次拔插會對芯片造成一定的損壞。方案三:采用STC12C5A60S2單片機,定時器與傳統(tǒng)8051完全兼容,是標準的5V工作電壓,內(nèi)部程序存儲器為60K存儲空間,不需要外擴存儲器。同樣具有89C51的功能,且具有在線編程可擦除技術(shù),當在對電路進行調(diào)試時,由于程序的錯誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r,不需要對芯片多次拔插,所以不會對芯片造成損壞。STC12C5A60S2的灌電流是20mA,驅(qū)動能力超強,驅(qū)動大電流時不容易燒壞。相比之下,STC12C5A60S2單片機具有在線編程可擦除技術(shù)和大容量存儲空間,利于設(shè)計及調(diào)試,所以選擇采用STC12C5A60S2單片機作為主控制系統(tǒng)。2.1.2時鐘芯片的選擇方案和論證方案一:直接采用單片機定時計數(shù)器提供秒信號,使用程序?qū)崿F(xiàn)年、月、日、星期、時、分、秒計數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是,實現(xiàn)的時間誤差較大。所以不采用此方案。方案二:采用DS1302時鐘芯片來實現(xiàn)時鐘,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年以及閏年補償?shù)哪赀M行計數(shù),而且精度高,位的RAM做為數(shù)據(jù)暫存區(qū),工作電壓2.5V~5.5V范圍內(nèi),2.5V時耗電小于300nA.相比單片機定時計數(shù)器,DS1302芯片可自動計數(shù)且精度更高,所以選擇采用DS1302作為時鐘芯片。2.1.3顯示模塊的選擇方案和論證方案一:采用LED數(shù)碼管動態(tài)掃描,LED數(shù)碼管價格適中,對于顯示數(shù)字最合適。采用動態(tài)掃描法與單片機連接時,雖然占用的單片機口線少,但電路中的線路相對多,電路過于龐大。方案二:采用點陣式數(shù)碼管顯示,點陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對于顯示文字比較適合,如采用在顯示數(shù)字顯得太浪費,且價格也相對較高,所以也不用此種作為顯示。方案三:采用LCD液晶顯示屏,液晶顯示屏的顯示功能強大,可顯示大量文字、圖形,顯示多樣,清晰可見,雖然價格貴,但卻免了一些線路的麻煩,外觀優(yōu)美,且可以顯示內(nèi)容多。相比方案一和方案二,方案三可顯示大量內(nèi)容,且線路簡單,所以采用了LCD液晶顯示屏作為顯示。2.1.4溫度傳感器的選擇方案和論證方案一:使用熱敏電阻作為傳感器,用熱敏電阻與一個相應阻值電阻相串聯(lián)分壓,利用熱敏電阻阻值隨溫度變化而變化的特性,采集這兩個電阻變化的分壓值,并進行A/D轉(zhuǎn)換。。此設(shè)計方案需用A/D轉(zhuǎn)換電路,增加硬件成本而且熱敏電阻的感溫特性曲線并不是嚴格線性的,會產(chǎn)生較大的測量誤差。方案二:采用數(shù)字式溫度傳感器DS18B20,此類傳感器為數(shù)字式傳感器而且僅需要一條數(shù)據(jù)線進行數(shù)據(jù)傳輸,易于與單片機連接,可以去除A/D模塊,降低硬件成本,簡化系統(tǒng)電路。另外,數(shù)字式溫度傳感器還具有測量精度高、測量范圍廣等優(yōu)點。相比方案一,方案二不需要A/D,可簡化電路,精度更高,所以采用了DS18B20作為溫度傳感器。2.2系統(tǒng)最終方案綜上各方案所述,對此次設(shè)計的方案選定:采用STC12C5A60S2單片機作為主控制系統(tǒng);DS1302提供時鐘;采用數(shù)字式溫度傳感器DS18B20;LCD液晶顯示屏動態(tài)掃描作為顯示。3系統(tǒng)的硬件和軟件設(shè)計3.1系統(tǒng)的硬件設(shè)計3.1.1系統(tǒng)設(shè)計框圖圖3-1系統(tǒng)框圖3.1.2硬件概述本電路是由STC12C5A60S52單片機為控制核心,具有在線編程功能,低功耗,能在3V超低壓工作;時鐘電路由DS1302提供,它是一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個31*8的用于臨時性存放數(shù)據(jù)的RAM寄存器??僧a(chǎn)生年、月、日、周日、時、分、秒,具有使用壽命長,精度高和低功耗等特點,同時具有掉電自動保存功能;溫度的采集由DS18B20構(gòu)成;顯示部份由LCD液晶顯示屏顯示。3.1.3單元電路的設(shè)計單片機主控模塊設(shè)計單片機控制系統(tǒng)及其外圍電路設(shè)計采用由STC12C5A60S2單片機為控制核心。STC12C5A60S2單片機是宏晶科技生產(chǎn)的單時鐘單片機,是高速、低功耗、超強抗干擾的新一代8051單片機,具有60K的可編程Flash存儲器,指令代碼完全兼容傳統(tǒng)8051,但速度快8-12倍。片上Flash允許程序存儲器在線編程,亦適于常規(guī)編程器。STC12C5A60S2具有以下標準功能:60K字節(jié)Flash,1280字節(jié)RAM,36/40/44個I/O口線,看門狗定時器,4個16位定時器,片內(nèi)晶振及時鐘電路。(1)單片機控制系統(tǒng)復位電路如圖1所示。圖3-2復位電路設(shè)計(2)本次設(shè)計單片機采用DIP封裝,晶振為12MHZ。其中P3.0-P3.1為ISP下載程序使用,其最小系統(tǒng)電路如圖3-3所示。18引腳和19引腳接時鐘電路,XTAL1接外部晶振和微調(diào)電容的一端,在片內(nèi)它是振蕩器倒相放大器的輸入,XTAL2接外部晶振和微調(diào)電容的另一端,在片內(nèi)它是振蕩器倒相放大器的輸出.第9引腳為復位輸入端,接上電容,電阻及開關(guān)后形成電復位電路,20引腳為接地端,40引腳為電源端。圖3-3單片機主控模塊時鐘電路模塊設(shè)計時鐘芯片采用DS1302,晶振使用32.768KHZ。DS1302是DALLAS公司推出的涓流充電時鐘芯片內(nèi)含有一個實時時鐘/日歷和31字節(jié)靜態(tài)RAM通過簡單的串行接口與單片機進行通信實時時鐘/日歷電路提供年、月、日、時、分、秒、星期的信息,每月的天數(shù)和閏年的天數(shù)可自動調(diào)整,時鐘操作可通過AM/PM指示決定采用24或12小時格式。DS1302與單片機之間能簡單地采用同步串行的方式進行通信,僅需用到三個口線:RES復位、I/O數(shù)據(jù)線和SCLK串行時鐘。時鐘RAM的讀寫數(shù)據(jù)以一個字節(jié)或多達31個字節(jié)的字符組方式通信。DS1302工作時功耗很低,保持數(shù)據(jù)和時鐘信息時功率小于1mW。圖3-4顯示出DS1302的引腳排列,其中Vcc1為后備電源,Vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當Vcc2大于Vcc1+0.2V時,Vcc2給DS1302供電。當Vcc2小于Vcc1時,DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768KHz晶振。RST是復位/片選線,通過把RST輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。上電動行時,在Vcc大于等于2.5V之前,RST必須保持低電平。在SCLK為低電平時,才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入端(雙向)。SCLK始終是輸入端。圖3-4時鐘電路模塊顯示電路模塊設(shè)計KNY12864M是一種圖形點陣液晶顯示器,它主要由行驅(qū)動器、列驅(qū)動器及128×64全點陣液晶顯示器組成??赏瓿蓤D形顯示,也可以顯示8×4個(16×16點陣)漢字。與外部CPU接口可采用串行或并行方式控制。其顯示分辨率為128×64,內(nèi)置8192個中文漢字(16×16點陣)、128個字符(16×8點陣)及64X256點陣顯示RAM(GDRAM)。利用該模塊靈活的接口方式和簡單、方便的操作指令,可構(gòu)成全中文人機交互圖形界面。其與單片機的接口電路如圖3-5所示。圖3-5顯示電路模塊溫度采集模塊設(shè)計溫度采集采用Dallas半導體公司的數(shù)字化溫度傳感器DS18B20,DS18B20是單總線器件,線路簡單,體積小的特點,具有9-12為可編程分辨率,精度為±0.5℃。聲音功能采用5V蜂鳴器作為聲音報警器件,通過三極管進行放大輸出特定聲音。圖3-6溫度采集模塊雙電源供電電路設(shè)計系統(tǒng)采用雙電源,可以使用外接電源,也可直接使用USB5V電源,由自鎖開關(guān)切換輸入。電源電路如圖3-7所示。圖3-7雙電源模塊RS-232電路設(shè)計STC12C5A60S2單片機具有在線編程可擦除技術(shù),連接串口,通過電腦端的STC-ISP軟件控制下載用戶程序到STC單片機,即可實現(xiàn)程序的燒寫。如圖3-8所示即為RS-232轉(zhuǎn)換電路。圖3-8RS-232轉(zhuǎn)換電路3.1.4電路原理及說明(1)時鐘芯片DS1302的工作原理DS1302在每次進行讀、寫程序前都必須初始化,先把SCLK端置“0”,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫時序如下圖4所示。圖5為DS1302的控制字,此控制字的位7必須置1,若為0則不能把對DS1302進行讀寫數(shù)據(jù)。對于位6,若對程序進行讀/寫時RAM=1,對時間進行讀/寫時,CK=0。位1至位5指操作單元的地址。位0是讀/寫操作位,進行讀操作時,該位為1;該位為0則表示進行的是寫操作。控制字節(jié)總是從最低位開始輸入/輸出的。表6為DS1302的日歷、時間寄存器內(nèi)容:“CH”是時鐘暫停標志位,當該位為1時,時鐘振蕩器停止,DS1302處于低功耗狀態(tài);當該位為0時,時鐘開始運行。“WP”是寫保護位,在任何的對時鐘和RAM的寫操作之前,WP必須為0。當“WP”為1時,寫保護位防止對任一寄存器的寫操作。(2)DS1302的控制字節(jié)DS1302的控制字如表-1所示??刂谱止?jié)的高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進行寫操作,為1表示進行讀操作,控制字節(jié)總是從最低位開始輸出。表3-1DS1302的控制字格式RAMRD1/CKA4A3A2A1A0/WR(3)數(shù)據(jù)輸入輸出(I/O)在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位到高位7。如下圖3-9所示圖3-9DS1302讀/寫時序圖(4)DS1302的寄存器DS1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時間寄存器及其控制字見表3-2。表3-2DS1302的日歷、時間寄存器寫寄存器讀寄存器Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit080H81HCH10秒秒82H83H10分分84H85H12/24010時時AM/PM86H87H0010日日88H89H00010月月8AH8BH00000星期8CH8DH10年年8EH8FHWP0000000此外,DS1302還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個RAM單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個字節(jié),命令控制字為FEH(寫)、FFH(讀)。3.2系統(tǒng)軟件設(shè)計程序開始時先對系統(tǒng)初始化,并設(shè)置好各種中斷。首先要給時鐘芯片設(shè)置初值,時鐘芯片便自行計數(shù)。此時檢測是否有按鍵按下,按鍵是為了調(diào)整時鐘。有按鍵按下則執(zhí)行按鍵處理程序,沒有按鍵按下則執(zhí)行下一步的操作,即取時鐘芯片中的時鐘值,然后送顯示。程序流程圖如下。noYesnoYes圖3-10程序流程圖此處省略

NNNNNNNNNNNN字。如需要完整說明書和設(shè)計圖紙等.請聯(lián)系在線

扣扣:二五一一三三四零八另提供全套機械畢業(yè)設(shè)計下載!結(jié)論至此,關(guān)于畢業(yè)設(shè)計的所有內(nèi)容就介紹完了,進行這次畢業(yè)設(shè)計一切都是從頭開始,從最簡單的查資料、了解各個元件的功能起步,再確定設(shè)計方案、畫流程圖,編寫程序到最后進行調(diào)試,在我的個人角度下,這次畢業(yè)設(shè)計可以說是成功完成。系統(tǒng)的硬件、軟件設(shè)計合理,功能完備,運行穩(wěn)定、可靠。實驗結(jié)果表明此萬年歷實現(xiàn)后具有讀取方便、顯示直觀、功能多樣、電路簡潔等諸多優(yōu)點。在整個設(shè)計過程中,充分發(fā)揮了主觀能動性,自主學習,學到了許多沒學到的知識。程序編寫中,由于思路不清晰,開始時遇到了許多問題,經(jīng)過靜下心來思考,并請教了同學,理清了思路,才完成了對程序的編寫。但是由于時間和個人能力的原因,整個系統(tǒng)看起來還是顯得非常的簡單,只實現(xiàn)了一些基本的功能,還有許多不足之處和可以擴展的地方,例如實現(xiàn)鬧鐘報時等,這些有待以后來彌補,還望各位老師予以指正和修改。。致謝經(jīng)過這么長時間的設(shè)計,從選題、設(shè)計到現(xiàn)在的終稿完成;由于所設(shè)計的課題涉及到專業(yè)領(lǐng)域較廣,要用到很多陌生的知識,在整個過程中,得到許多老師和同學們的幫助。在這兩個月來的設(shè)計過程中我請教了系中的老師,特別是我的導師蔡超峰老師,他對我的畢業(yè)設(shè)計提供了很多條件,同時也有許多同學幫我收集了大量的資料,在設(shè)計上給予我很大的幫助,尤其是軟件上?,F(xiàn)在設(shè)計已結(jié)束,在這里一并向這些老師和同學們表示感謝。同時感謝關(guān)心我的和我關(guān)心的人。再次,我要感謝一直陪我走完大學四年求學之路的同宿舍的姐妹位,和其他在我學習和生活中幫助過我的人,謝謝他們平時對我無微不致的照顧和關(guān)心。我很興能生活在這樣一個充滿活力的集體中,從他們的身上我學到了很多,看到了自己的不足,在不斷的發(fā)現(xiàn)和改正錯誤中成長,同時他們給我的大學生活留下了許多美好的回憶,讓我受益終生。鑒于本人水平有限,難免存在一些錯誤和漏洞,望各位老師、同學不吝賜教,在此再次向大家表示衷心的感謝。參考文獻[1]王法能單片機原理及應用科學出版社2004[2]張毅剛單片機原理及應用高等教育出版社2006[3]李宗吾.中國萬年歷.北京:中國科學技術(shù)出版社.2006:115-191[4]夏墨英.中國天文年歷.北京:科學出版社.1984:1256-2581[5]周慈航.單片機應用程序設(shè)計技術(shù)[H].北京:北京航空航天大學出版社,1992[6]AnastasiosAlexiadis,IoannisRefanidis.DefiningaTask’sTemporalDomainforIntelligentCalendarApplications[7]余永權(quán).ATMEL89系列單片機原理及應用[M].西安:電子工業(yè)出版社,1999.[8]王毅平.MCS-51單片機原理及應用[H].北京:人民郵電出版社,1999[9]陳堅,李昕,黃櫻.CHENJian.LIXin.HUANYing51單片機最小化應用系統(tǒng)的Proteus仿真-電腦知識與技術(shù).2008,2(18)[10]陳正振電子電路設(shè)計與制作廣西交通職業(yè)技術(shù)學院信息工程系2007[11]竇振中單片機外圍器件實用手冊存儲器分冊北京航空航天大學出版社2006[12]JoeTullio,ElizabethD.Mynatt.UseandImplicationsofaShared,ForecastingCalendar.[13]王威,劉佳,張志雄等.基于Proteus和Keil的單片機虛擬仿真平臺的設(shè)計-上海電力學院學報.2009,25(6).[14]閆小坤編數(shù)字電路吉林大學出版社2004[15]朱定華,戴汝平.單片機微機原理與應用[M].北京:北京交通大學出版社,2003.[16]AshrafKhalil,KayConnelly.ImprovingCellPhoneAwarenessbyUsingCalendarInformation.[17]51單片機C語言應用開發(fā)技術(shù)大全龍脈工作室劉坤寧戈趙紅波張憲棟人民郵電出版社2008年9月附錄A原理圖附錄B程序清單#include<reg51.h>#include<intrins.h>#include<string.h>#defineucharunsignedchar#defineuintunsignedintbitw=0;//調(diào)時標志位sbitACC0=ACC^0;sbitACC7=ACC^7;unsignedcharYEAR,MONTH,DATE,WEEK,HR,MIN,SEC,SEC100;//DS1302子程序sbitDS1302_CLK=P3^5;sbitDS1302_IO=P3^6;sbitDS1302_RST=P3^7;voidDS1302InputByte(uchard){ uchari;ACC=d;for(i=8;i>0;i--){DS1302_IO=ACC0;DS1302_CLK=1;DS1302_CLK=0;ACC=ACC>>1;}}ucharDS1302OutputByte(void){uchari;for(i=8;i>0;i--){ACC=ACC>>1; ACC7=DS1302_IO;DS1302_CLK=1;DS1302_CLK=0;}return(ACC);}voidWrite1302(ucharucAddr,ucharucDa){DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;DS1302InputByte(ucAddr);//地址,命令DS1302InputByte(ucDa);//寫1Byte數(shù)據(jù)DS1302_CLK=1;DS1302_RST=0;}ucharRead1302(ucharucAddr)//讀取某地址的數(shù)據(jù){ucharucData;DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;DS1302InputByte(ucAddr);ucData=DS1302OutputByte();DS1302_CLK=1;DS1302_RST=0;return(ucData);}voidinit1302(void)//設(shè)置1302的初始時間{ucharcctt;cctt=Read1302(0x80); if(cctt&0x80) { Write1302(0x8e,0x00);//允許寫操作 Write1302(0x8c,0x0b);//年 Write1302(0x8a,0x01);//星期 Write1302(0x88,0x06);//月 Write1302(0x86,0x06);//日 Write1302(0x84,0x00);//小時 Write1302(0x82,0x00);//分鐘 Write1302(0x80,0x00);//秒 Write1302(0x8e,0x80);//禁止寫操作 }}/**************溫度************/#defineSKIP_ROM0xF0#defineCONVERT_T0x44#defineREAD_SCRATCHPAD0xBEsbitDQ=P2^4;//ds18B20信號線定義ucharTPH;ucharTPL;voidDelayT(intnum)//延時函數(shù){ while(num--);} unsignedInit_DS18B20(void)//初始化ds1820{ uintanswer_flag; DQ=0;//單片機將DQ拉低 DelayT(480); DQ=1; DelayT(15); answer_flag=DQ; DelayT(240); DelayT(180); return(answer_flag);}ucharReadBit(void){ bits; DQ=1; _nop_(); DQ=0; _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); DQ=1; s=DQ; DelayT(60); return(s);}ucharReadByte(void)//讀一個字節(jié){ uchari,j; uchardat=0; for(i=1;i<=8;i++) { j=ReadBit(); dat=(j<<7)|(dat>>1); } return(dat);}voidWriteByte(uchardat)//寫一個字節(jié){ uinti; bitn; for(i=1;i<=8;i++) { DQ=0; _nop_(); n=dat&0x01; dat=dat>>1; if(n)//寫1 { DQ=0; _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); DQ=1; DelayT(60); } else//寫0 { DQ=0; DelayT(90); DQ=1; _nop_();_nop_(); _nop_();_nop_(); } }}voidconvert(void)//溫度轉(zhuǎn)換{ Init_DS18B20(); if(Init_DS18B20()) { DelayT(100); WriteByte(SKIP_ROM); WriteByte(CONVERT_T); } }uintReadTemp(void)//讀取溫度{ uintt=0; floattt=0; convert(); DelayT(100000); Init_DS18B20(); if(Init_DS18B20()) { DelayT(100); WriteByte(0xcc); WriteByte(0xbe); TPL=ReadByte(); TPH=ReadByte(); } t=TPH; t<<=8; t=t|TPL; tt=t*0.0625; t=tt*10+0.5;//放大10倍輸出并四舍五入 return(t);}/***************12864****************/#definelcdP0sbitlcdrs=P1^2;sbitlcden=P1^0;sbitlcdpsb=P2^7;sbitlcdwr=P1^1;sbitbeep=P2^5;unsignedcharcodedis_char[]={"電子萬年歷"***welcome!***"};voiddelay(ucharz)//延時{ ucharx,y; for(x=0;x<z;x++) for(y=0;y<110;y++);}voidwritecom(ucharcom)//寫控制字{ delay(100); lcdrs=0; lcdwr=0; lcd=com; lcden=1; _nop_(); lcden=0;}voidwritedat(uchardat)//寫數(shù)據(jù){ delay(100); lcdrs=1; lcdwr=0; lcd=dat; lcden=1; _nop_(); lcden=0;}voidinitlcd()//初始化{ lcden=0; lcdpsb=1; writecom(0x30); writecom(0x0f); writecom(0x01); writecom(0x06); writecom(0x02);}voidclrlcd(void)//清屏{ writecom(0x30); writecom(0x01); delay(100);}voiddisplay(ucharcode*chn){ uchari,j; writecom(0x30); writecom(0x80); for(j=0;j<4;j++) { for(i=0;i<16;i++) writedat(chn[j*16+i]); }}//向LCM發(fā)送一個字符串,長度64字符之內(nèi)。//應用:LCM_WriteString("您好!");voidwritestring(uchar*str){ while(*str!='\0'){ writedat(*str++);} *str=0;}voidDelayM(unsignedinta)//延時函數(shù)1MS/次 { unsignedchari; while(--a!=0){ for(i=0;i<125;i++);//一個;表示空語句,CPU空轉(zhuǎn)。 } //i從0加到125,CPU大概就耗時1毫秒} bitc_MONTHon;dataucharyear_MONTHon,MONTHnth_MONTHon,day_MONTHon;voiddays(viod)//公歷節(jié)日數(shù)據(jù)庫{ writecom(0x80); writecom(0x98);// if(MONTH==0x01&&DATE==0x01){writestring("HappyNewYear!!");}//1月 if(MONTH==0x01&&DATE==0x28){writestring("世界麻風日");} if(MONTHnth_MONTHon==0x01&&day_MONTHon==0x01){writestring("今日春節(jié)");} if(MONTHnth_MONTHon==0x01&&day_MONTHon==0x15){writestring("元宵節(jié)快樂");}if(MONTHnth_MONTHon==0x02&&day_MONTHon==0x02){writestring("青龍節(jié)");} if(MONTH==0x02&&DATE==0x02){writestring("世界濕地日");}//2月 if(MONTH==0x02&&DATE==0x13){writestring("明天情人節(jié)了");} if(MONTH==0x02&&DATE==0x14){writestring("今天是情人節(jié)");}if(MONTH==0x03&&DATE==0x01){writestring("國際海豹日");}//3月 if(MONTH==0x03&&DATE==0x03){writestring("全國愛耳日");} if(MONTH==0x03&&DATE==0x08){writestring("3.8婦女節(jié)");} if(MONTH==0x03&&DATE==0x12){writestring("植樹節(jié)");} if(MONTH==0x03&&DATE==0x14){writestring("國際警察日");} if(MONTH==0x03&&DATE==0x15){writestring("消費者權(quán)益日");} if(MONTH==0x03&&DATE==0x17){writestring("國際航海日");} if(MONTH==0x03&&DATE==0x21){writestring("世界森林日");} if(MONTH==0x03&&DATE==0x22){writestring("世界水日");} if(MONTH==0x03&&DATE==0x23){writestring("世界氣象日");} if(MONTH==0x03&&DATE==0x24){writestring("世界防治結(jié)核病日");} if(MONTH==0x04&&DATE==0x01){writestring("愚人節(jié)小心上當");}// if(MONTH==0x04&&DATE==0x07){writestring("世界衛(wèi)生日");} if(MONTH==0x04&&DATE==0x08){writestring("復活節(jié)");} if(MONTH==0x04&&DATE==0x13){writestring("黑色星期五");}if(MONTHnth_MONTHon==0x05&&day_MONTHon==0x05){writestring("端午節(jié)");} if(MONTH==0x05&&DATE==0x01){writestring("勞動節(jié)放假");}//5 if(MONTH==0x05&&DATE==0x04){writestring("青年節(jié)");} if(MONTH==0x05&&DATE==0x08){writestring("世界紅十字日");} if(MONTH==0x05&&DATE==0x12){writestring("國際護士節(jié)");} if(MONTH==0x05&&DATE==0x05){writestring("近日注意母親節(jié)");} if(MONTH==0x05&&DATE==0x15){writestring("國際家庭日");} if(MONTH==0x05&&DATE==0x31){writestring("世界無煙日");} if(MONTH==0x06&&DATE==0x01){writestring("國際兒童節(jié)");}//6 if(MONTH==0x06&&DATE==0x05){writestring("世界環(huán)境日");} if(MONTH==0x06&&DATE==0x26){writestring("國際禁毒日");} if(MONTH==0x06&&DATE==0x06){writestring("全國愛眼日");} if(MONTH==0x06&&DATE==0x13){writestring("近日注意父親節(jié)");} if(MONTH==0x06&&DATE==0x15){writestring("近日注意父親節(jié)");} if(MONTHnth_MONTHon==0x07&&day_MONTHon==0x07){writestring("乞巧節(jié)中國情人節(jié)");}if(MONTHnth_MONTHon==0x07&&day_MONTHon==0x15){writestring("中元節(jié)");} if(MONTH==0x07&&DATE==0x01){writestring("香港回歸記念日");}//7 if(MONTH==0x07&&DATE==0x07){writestring("抗日戰(zhàn)爭記念日");} if(MONTH==0x07&&DATE==0x11){writestring("世界人口日");}if(MONTHnth_MONTHon==0x08&&day_MONTHon==0x15){writestring("中秋節(jié)快樂");} if(MONTH==0x08&&DATE==0x01){writestring("八一建軍節(jié)");}//8 if(MONTH==0x08&&DATE==0x08){writestring("中國男子節(jié)");} if(MONTH==0x08&&DATE==0x15){writestring("抗戰(zhàn)勝利記念日");} if(MONTHnth_MONTHon==0x09&&day_MONTHon==0x09){writestring("今日重陽節(jié)");} if(MONTH==0x09&&DATE==0x10){writestring("中國教師節(jié)");}//9 if(MONTH==0x09&&DATE==0x18){writestring("九·一八事變記念");} if(MONTH==0x09&&DATE==0x20){writestring("國際愛牙日");} if(MONTH==0x09&&DATE==0x27){writestring("世界旅游日");} if(MONTH==0x10&&DATE==0x01){writestring("中國國慶節(jié)");}//10 if(MONTH==0x10&&DATE==0x04){writestring("世界動物日");} if(MONTH==0x10&&DATE==0x24){writestring("聯(lián)合國日");} if(MONTH==0x10&&DATE==0x12){writestring("明天國際教師節(jié)");} if(MONTH==0x10&&DATE==0x13){writestring("國際教師節(jié)");} if(MONTH==0x11&&DATE==0x10){writestring("世界青年節(jié)");}//11 if(MONTH==0x11&&DATE==0x17){writestring("世界學生節(jié)");}if(MONTHnth_MONTHon==0x12&&day_MONTHon==0x08){writestring("今日臘八節(jié)");} if(MONTHnth_MONTHon==0x12&&day_MONTHon==0x15){writestring("過小年");} if(MONTHnth_MONTHon==0x12&&day_MONTHon==0x29){writestring("臘月二十九");} if(MONTHnth_MONTHon==0x12&&day_MONTHon==0x30){writestring("大年三十(^o^)");} if(MONTH==0x12&&DATE==0x01){writestring("世界艾滋病日");}//12 if(MONTH==0x12&&DATE==0x23){writestring("明晚平安夜");} if(MONTH==0x12&&DATE==0x24){writestring("今晚平安夜");} if(MONTH==0x12&&DATE==0x25){writestring("圣誕快樂");} if(MONTH==0x12&&DATE==0x31){writestring("明日新年");} else{ if(HR>=0x04&&HR<0x06){writestring("★★__▲▲__凌晨");} if(HR>=0x06&&HR<0x08){writestring("☆○__▲△__早晨");} if(HR>=0x08&&HR<0x12){writestring("__●__▲▲__上午");} if(HR==0x12){writestring("____▲●▲__中午");} if(HR>=0x13&&HR<0x18){writestring("__▲▲__●__下午");} if(HR>=0x18&&HR<0x22){writestring("△▲__●☆__晚上");} if(HR>=0x22&&HR<=0x23){writestring("△▲__★☆__夜里");} if(HR>=0x00&&HR<0x04){writestring("__★▲▲★__深夜");} }}/********陽歷轉(zhuǎn)換陰歷**************/codeucharyear_code[597]={0x04,0xAe,0x53,//190100x0A,0x57,0x48,//190230x55,0x26,0xBd,//190360x0d,0x26,0x50,//190490x0d,0x95,0x44,//1905120x46,0xAA,0xB9,//1906150x05,0x6A,0x4d,//1907180x09,0xAd,0x42,//1908210x24,0xAe,0xB6,//19090x04,0xAe,0x4A,//19100x6A,0x4d,0xBe,//19110x0A,0x4d,0x52,//19120x0d,0x25,0x46,//19130x5d,0x52,0xBA,//19140x0B,0x54,0x4e,//19150x0d,0x6A,0x43,//19160x29,0x6d,0x37,//19170x09,0x5B,0x4B,//19180x74,0x9B,0xC1,//19190x04,0x97,0x54,//19200x0A,0x4B,0x48,//19210x5B,0x25,0xBC,//19220x06,0xA5,0x50,//19230x06,0xd4,0x45,//19240x4A,0xdA,0xB8,//19250x02,0xB6,0x4d,//19260x09,0x57,0x42,//19270x24,0x97,0xB7,//19280x04,0x97,0x4A,//19290x66,0x4B,0x3e,//19300x0d,0x4A,0x51,//19310x0e,0xA5,0x46,//19320x56,0xd4,0xBA,//19330x05,0xAd,0x4e,//19340x02,0xB6,0x44,//19350x39,0x37,0x38,//19360x09,0x2e,0x4B,//19370x7C,0x96,0xBf,//19380x0C,0x95,0x53,//19390x0d,0x4A,0x48,//19400x6d,0xA5,0x3B,//19410x0B,0x55,0x4f,//19420x05,0x6A,0x45,//19430x4A,0xAd,0xB9,//19440x02,0x5d,0x4d,//19450x09,0x2d,0x42,//19460x2C,0x95,0xB6,//19470x0A,0x95,0x4A,//19480x7B,0x4A,0xBd,//19490x06,0xCA,0x51,//19500x0B,0x55,0x46,//19510x55,0x5A,0xBB,//19520x04,0xdA,0x4e,//19530x0A,0x5B,0x43,//19540x35,0x2B,0xB8,//19550x05,0x2B,0x4C,//19560x8A,0x95,0x3f,//19570x0e,0x95,0x52,//19580x06,0xAA,0x48,//19590x7A,0xd5,0x3C,//19600x0A,0xB5,0x4f,//19610x04,0xB6,0x45,//19620x4A,0x57,0x39,//19630x0A,0x57,0x4d,//19640x05,0x26,0x42,//19650x3e,0x93,0x35,//19660x0d,0x95,0x49,//19670x75,0xAA,0xBe,//19680x05,0x6A,0x51,//19690x09,0x6d,0x46,//19700x54,0xAe,0xBB,//19710x04,0xAd,0x4f,//19720x0A,0x4d,0x43,//19730x4d,0x26,0xB7,//19740x0d,0x25,0x4B,//19750x8d,0x52,0xBf,//19760x0B,0x54,0x52,//19770x0B,0x6A,0x47,//19780x69,0x6d,0x3C,//19790x09,0x5B,0x50,//19800x04,0x9B,0x45,//19810x4A,0x4B,0xB9,//19820x0A,0x4B,0x4d,//19830xAB,0x25,0xC2,//19840x06,0xA5,0x54,//19850x06,0xd4,0x49,//19860x6A,0xdA,0x3d,//19870x0A,0xB6,0x51,//19880x09,0x37,0x46,//19890x54,0x97,0xBB,//19900x04,0x97,0x4f,//19910x06,0x4B,0x44,//19920x36,0xA5,0x37,//19930x0e,0xA5,0x4A,//19940x86,0xB2,0xBf,//19950x05,0xAC,0x53,//19960x0A,0xB6,0x47,//19970x59,0x36,0xBC,//19980x09,0x2e,0x50,//19992940x0C,0x96,0x45,//20002970x4d,0x4A,0xB8,//20010x0d,0x4A,0x4C,//20020x0d,0xA5,0x41,//20030x25,0xAA,0xB6,//20040x05,0x6A,0x49,//20050x7A,0xAd,0xBd,//20060x02,0x5d,0x52,//20070x09,0x2d,0x47,//20080x5C,0x95,0xBA,//20090x0A,0x95,0x4e,//20100x0B,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};///月份數(shù)據(jù)表codeucharday_code1[9]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};codeuintday_code2[3]={0x111,0x130,0x14e};bitc_MONTHon;dataucharyear_MONTHon,MONTHnth_MONTHon,day_MONTHon;bitget_MONTHon_day(ucharMONTHnth_p,uinttable_aDATEr){ uchartemp;switch(MONTHnth_p) {case1:{temp=year_code[table_aDATEr]&0x08;if(temp==0)return(0);elsereturn(1);}case2:{temp=year_code[table_aDATEr]&0x04;if(temp==0)return(0);elsereturn(1);}case3:{temp=year_code[table_aDATEr]&0x02;if(temp==0)return(0);elsereturn(1);}case4:{temp=year_code[table_aDATEr]&0x01;if(temp==0)return(0);elsereturn(1);}case5:{temp=year_code[table_aDATEr+1]&0x80;if(temp==0)return(0);elsereturn(1);}case6:{temp=year_code[table_aDATEr+1]&0x40;if(temp==0)return(0);elsereturn(1);}case7:{temp=year_code[table_aDATEr+1]&0x20;if(temp==0)return(0);elsereturn(1);}case8:{temp=year_code[table_aDATEr+1]&0x10;if(temp==0)return(0);elsereturn(1);}case9:{temp=year_code[table_aDATEr+1]&0x08;if(temp==0)return(0);elsereturn(1);}case10:{temp=year_code[table_aDATEr+1]&0x04;if(temp==0)return(0);elsereturn(1);}case11:{temp=year_code[table_aDATEr+1]&0x02;if(temp==0)return(0);elsereturn(1);}case12:{temp=year_code[table_aDATEr+1]&0x01;if(temp==0)return(0);elsereturn(1);}case13:{temp=year_code[table_aDATEr+2]&0x80;if(temp==0)return(0);elsereturn(1);}}}voidConversion(bitc,ucharyear,ucharMONTHnth,ucharday){uchartemp1,temp2,temp3,MONTHnth_p;uinttemp4,table_aDATEr;bitflag2,flag_y;temp1=year/16;temp2=year%16;year=temp1*10+temp2;temp1=MONTHnth/16;temp2=MONTHnth%16;MONTHnth=temp1*10+temp2;temp1=day/16;temp2=day%16;day=temp1*10+temp2;if(c==0){table_aDATEr=(year+0x64-1)*0x3;}else{table_aDATEr=(year-1)*0x3;}temp1=year_code[table_aDATEr+2]&0x60;temp1=_cror_(temp1,5);temp2=year_code[table_aDATEr+2]&0x1f;if(temp1==0x1){temp3=temp2-1;}else{temp3=temp2+0x1f-1;}if(MONTHnth<10){temp4=day_code1[MONTHnth-1]+day-1;}else{temp4=day_code2[MONTHnth-10]+day-1;}if((MONTHnth>0x2)&&(year%0x4==0)){temp4+=1;}if(temp4>=temp3){temp4-=temp3;MONTHnth=0x1;MONTHnth_p=0x1;flag2=get_MONTHon_day(MONTHnth_p,table_aDATEr);flag_y=0;if(flag2==0)temp1=0x1d;elsetemp1=0x1e;temp2=year_code[table_aDATEr]&0xf0;temp2=_cror_(temp2,4);while(temp4>=temp1){temp4-=temp1;MONTHnth_p+=1;if(MONTHnth==temp2){flag_y=~flag_y;if(flag_y==0)MONTHnth+=1;}elseMONTHnth+=1;flag2=get_MONTHon_day(MONTHnth_p,table_aDATEr);if(flag2==0)temp1=0x1d;elsetemp1=0x1e;}day=temp4+1;}else{temp3-=temp4;if(year==0x0){year=0x63;c=1;}elseyear-=1;table_aDATEr-=0x3;MONTHnth=0xc;temp2=year_code[table_aDATEr]&0xf0;temp2=_cror_(temp2,4);if(temp2==0)MONTHnth_p=0xc;elseMONTHnth_p=0xd;//flag_y=0;flag2=get_MONTHon_day(MONTHnth_p,table_aDATEr);if(flag2==0)temp1=0x1d;elsetemp1=0x1e;while(temp3>temp1){temp3-=temp1;MONTHnth_p-=1;if(flag_y==0)MONTHnth-=1;if(MONTHnth==temp2)flag_y=~flag_y;flag2=get_MONTHon_day(MONTHnth_p,table_aDATEr);if(flag2==0)temp1=0x1d;elsetemp1=0x1e;}day=temp1-temp3+1;}c_MONTHon=c;temp1=year/10;temp1=_crol_(temp1,4);temp2=year%10;year_MONTHon=temp1|temp2;temp1=MONTHnth/10;temp1=_crol_(temp1,4);temp2=MONTHnth%10;MONTHnth_MON

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論