電子萬年臺(tái)歷的設(shè)計(jì)制作_第1頁
電子萬年臺(tái)歷的設(shè)計(jì)制作_第2頁
電子萬年臺(tái)歷的設(shè)計(jì)制作_第3頁
電子萬年臺(tái)歷的設(shè)計(jì)制作_第4頁
電子萬年臺(tái)歷的設(shè)計(jì)制作_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、儀征技師學(xué)院 學(xué)生課程設(shè)計(jì)項(xiàng)目儀 征 技 師 學(xué) 院 課 程 設(shè) 計(jì) 報(bào) 告 項(xiàng)目名稱:電子萬年臺(tái)歷的設(shè)計(jì)制作指導(dǎo)老師; 朱 明 東 制 作 者:羅貞 李飛 李松 趙強(qiáng) 謝雪晨 吳業(yè)強(qiáng) 趙祥龍 韓恒志 馬友友 所在系別: 電子信息系 班 級(jí): 11電子高級(jí)班 摘 要隨著科技與技術(shù)的發(fā)展,目前設(shè)計(jì)電子萬年歷的方法有多種,本設(shè)計(jì)介紹了一種基于stc89c52單片機(jī)設(shè)計(jì)萬年歷的方法。首先介紹了電路的工作原理、stc89c52單片機(jī)的性能和特點(diǎn)、并概述了用單片機(jī)實(shí)現(xiàn)萬年歷的硬件框圖及軟件實(shí)現(xiàn)方法。本設(shè)計(jì)以stc89c52單片機(jī)為核心,輔以必要的外圍電路,設(shè)計(jì)了一個(gè)簡易的萬年歷。實(shí)現(xiàn)了年、月、日、時(shí)間一

2、起顯示,并帶有測溫度和星期顯示功能。該萬年歷具有硬件成本低、計(jì)時(shí)準(zhǔn)確、調(diào)整時(shí)間容易等特點(diǎn)。在設(shè)計(jì)的軟件平臺(tái)是以protues7為仿真平臺(tái),使用c語言編程編寫了該設(shè)計(jì)的應(yīng)用軟件;包括主程序模塊、顯示模塊、溫度測試模塊、時(shí)鐘模塊。最后,實(shí)際制作了一臺(tái)萬年歷產(chǎn)品,在實(shí)驗(yàn)室里進(jìn)行了測試,結(jié)果表明該萬年歷的功能和指標(biāo)達(dá)到了設(shè)計(jì)要求。關(guān)鍵詞:萬年歷;單片機(jī);液晶; ds1302芯片;18b20目 錄1前言.41.1設(shè)計(jì)背景.41.2設(shè)計(jì)目的.41.3設(shè)計(jì)的主要內(nèi)容和要求.41.3.1主要內(nèi)容.41.3.2主要要求.52整體設(shè)計(jì)方案.52.1方案比較.52.1.1時(shí)鐘電路.52.1.2顯示部分.52.1.3

3、測溫部分.62.2實(shí)際方案.63硬件電路的設(shè)計(jì).73.1單片機(jī)電路的設(shè)計(jì).73.2實(shí)時(shí)時(shí)鐘電路的設(shè)計(jì).83.3獨(dú)立鍵盤的設(shè)計(jì).93.4顯示部分的設(shè)計(jì).104軟件設(shè)計(jì).104.1主程序設(shè)計(jì).104.2鍵盤服務(wù)子程序設(shè)計(jì).114.3 lcd顯示子程序設(shè)計(jì).125系統(tǒng)測試.13附錄.14附錄一.14附錄二.146總結(jié).151前言1.1設(shè)計(jì)背景萬年歷已成為人們?nèi)粘I钪斜夭豢缮俚谋匦杵?,廣泛用于個(gè)人家庭以及辦公室等公共場所,給人們的生活、學(xué)習(xí)、工作、娛樂帶來極大的方便。由于數(shù)字集成電路技術(shù)的發(fā)展和采用了先進(jìn)的石英技術(shù),使萬年歷具有走時(shí)準(zhǔn)確、性能穩(wěn)定、攜帶方便等優(yōu)點(diǎn),它還用于計(jì)時(shí)、自動(dòng)報(bào)時(shí)及自動(dòng)控制等各

4、個(gè)領(lǐng)域。盡管目前市場上已有現(xiàn)成的萬年歷集成電路芯片出售,價(jià)格便宜、使用也方便,但鑒于單片機(jī)的定時(shí)器功能也可以完成萬年歷電路的設(shè)計(jì),因此進(jìn)行萬年歷的設(shè)計(jì)是必要的。在這里我們將已學(xué)過的比較零散的數(shù)字電路的知識(shí)有機(jī)的、系統(tǒng)的聯(lián)系起來用于實(shí)際,來培養(yǎng)我們的綜合分析和設(shè)計(jì)電路、寫程序、調(diào)試電路的能力。單片機(jī)具有體積小、功能強(qiáng)可靠性高、價(jià)格低廉等一系列優(yōu)點(diǎn),不僅已成為工業(yè)測控領(lǐng)域普遍采用的智能化控制工具,而且已滲入到人們工作和和生活的各個(gè)角落,有力地推動(dòng)了各行業(yè)的技術(shù)改造和產(chǎn)品的更新?lián)Q代,應(yīng)用前景廣闊。1.2設(shè)計(jì)目的 通過本研究性學(xué)習(xí),進(jìn)一步了解研究性學(xué)習(xí)的要求和寫作過程,了解此類設(shè)計(jì)的研究方法,培養(yǎng)文獻(xiàn)

5、檢索能力、創(chuàng)新能力、文字表達(dá)能力等。本設(shè)計(jì)主電路都采用目前流行的簡單的典型電路接法,簡單實(shí)用、穩(wěn)定廉價(jià)。本設(shè)計(jì)可起到一個(gè)很好的教學(xué)目的和實(shí)驗(yàn)?zāi)康?,?duì)于認(rèn)識(shí)pic單片機(jī)也有一定的好處,能更加熟悉單片機(jī)和其它芯片之間的通信。1.3 設(shè)計(jì)的主要內(nèi)容和要求1.3.1主要內(nèi)容1) mcs51單片機(jī)是由美國intel公司生產(chǎn)的一系列單片機(jī)的總稱。單片機(jī)即集成在一塊芯片上的計(jì)算機(jī),集成了中央處理器cpu(central processing unit)、隨機(jī)存儲(chǔ)器ram(random access memory)、只讀存儲(chǔ)器(read only memory)、定時(shí)器/計(jì)數(shù)器以及i/o接口電路等主要計(jì)算機(jī)部

6、件。采用精簡指令集結(jié)構(gòu)(risc)的高性價(jià)比嵌入式控制器,其總線結(jié)構(gòu)采取數(shù)據(jù)總線和指令線分離獨(dú)立的哈佛(harvard)結(jié)構(gòu)。實(shí)時(shí)時(shí)鐘芯片ds1302和溫度傳感芯片ds18b20都是dallas公司出產(chǎn)的,都采用單總線數(shù)據(jù)傳送方式,所以我們先要弄懂單總線傳送方式是一個(gè)什么樣的傳送方式。2)1602液晶芯片是一款常見的lcd液晶屏幕,對(duì)它的讀寫我們要注意讀寫時(shí)序,還有pic單片機(jī)速度比8051單片機(jī)要快,以前對(duì)1602寫操作前不會(huì)檢查忙否,但pic一定要確認(rèn)1602不忙才進(jìn)行寫操作。1.3.2主要要求1) 設(shè)計(jì)要做到操作簡單實(shí)用廉價(jià);2) 要能顯示秒、分、時(shí)、天、月、周、年、溫度等信息,并能調(diào)整

7、以上信息;3) 鍵盤控制調(diào)整時(shí)鐘信息和顯示要靈敏不能出現(xiàn)較大的延時(shí),靈活,可移植性強(qiáng),能夠隨時(shí)對(duì)電路進(jìn)行改進(jìn);4) 可觀性強(qiáng),輕巧耐用。2 整體設(shè)計(jì)方案2.1方案比較2.1.1時(shí)鐘電路方案一:使用單片機(jī)內(nèi)部的定時(shí)器,實(shí)現(xiàn)時(shí)間的顯示。方案二:使用時(shí)鐘芯片ds1302。它是一種高性能、低功耗、帶ram的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能。 考慮到軟件的簡單方便,以及時(shí)間穩(wěn)定等因素。本設(shè)計(jì)采用方案二。2.1.2顯示部分方案一:使用常用的數(shù)碼管。方案二:使用液晶(1602)進(jìn)行顯示。由于使用數(shù)碼管顯示,硬件電路復(fù)雜,接線太多,并且顯示效果不理想。所以本設(shè)計(jì)選擇

8、方案二。2.1.3測溫電路方案一:使用半導(dǎo)體測溫模塊方案二:使用18b20測溫雖然半導(dǎo)體測溫模塊測量溫度精確,但由于它價(jià)格較高,考慮到此設(shè)計(jì)的成本,所以選著方案二。2.2 實(shí)際方案 為提高設(shè)計(jì)效率,使設(shè)計(jì)思路清晰,本設(shè)計(jì)擬將整個(gè)系統(tǒng)模塊化。采用的整體設(shè)計(jì)方案如圖2.1所示,整個(gè)系統(tǒng)由單片機(jī)1、顯示電路2,獨(dú)立鍵盤電路3、ds1302實(shí)時(shí)時(shí)鐘電路4、復(fù)位電路等部分組成。圖2.1 整體設(shè)計(jì)框圖當(dāng)電源開關(guān)打開后,系統(tǒng)電路初始化,一從ds1302實(shí)時(shí)時(shí)鐘電路中讀取一串時(shí)鐘信息,二從ds18b20溫度傳感電路讀取一串溫度信息,然后單片機(jī)系統(tǒng)對(duì)采集到的數(shù)據(jù)進(jìn)行變換和處理,再通過lcd顯示出來,完成一次顯示

9、過程。然后,通過鍵盤設(shè)置準(zhǔn)確時(shí)間并確認(rèn)。獨(dú)立鍵盤作為外部中斷連接,當(dāng)有鍵盤按下時(shí),觸發(fā)中斷,進(jìn)入中斷服務(wù)子程序,子程序?qū)?huì)判斷哪個(gè)鍵被按下了,有什么作用,要進(jìn)行怎樣的處理,本電路按鍵可進(jìn)行時(shí)間的增減,以及確認(rèn)和跳出功能。復(fù)位電路中,當(dāng)復(fù)位鍵按下時(shí),系統(tǒng)將重新初始化,并再按上面所述重新執(zhí)行下來。3 硬件電路的設(shè)計(jì)3.1 單片機(jī)電路的設(shè)計(jì)主要元器件:stc89c52單片機(jī),12mhz晶振、30pf電容、10k電阻、開關(guān)。stc89c52單片機(jī)是宏晶科技公司推出的新一代高速、低功耗、超強(qiáng)抗干擾的單片機(jī),指令代碼完全兼容傳統(tǒng)8051單片機(jī)。hd版本和90c版本內(nèi)部集成max810專用復(fù)位電路。其采用精

10、簡指令集結(jié)構(gòu)(risc)的高性價(jià)比嵌入式控制器,其總線結(jié)構(gòu)采取數(shù)據(jù)總線和指令線分離獨(dú)立的哈佛(harvard)結(jié)構(gòu),哈佛結(jié)構(gòu)是數(shù)據(jù)存儲(chǔ)器與程序存儲(chǔ)器獨(dú)立編址,也就是兩種存儲(chǔ)器位于不同的邏輯空間里,使得它在執(zhí)行一條指令的同時(shí),就可以提取下一條指令,因此具有很高的流水處理速度。其高速度、低電壓工作,低功耗,強(qiáng)大驅(qū)動(dòng)能力,低價(jià)otp技術(shù),體積小巧等都體現(xiàn)了單片機(jī)工業(yè)的新趨勢;同時(shí)第三方開發(fā)的c語言開發(fā)工具,更使得研發(fā)工程師能夠快速地開發(fā)升級(jí)產(chǎn)品, 滿足市場不斷變化的需求。其節(jié)約成本的最優(yōu)化設(shè)計(jì),適于用量大、檔次低、價(jià)格敏感的產(chǎn)品4。stc89c51有40根接腳,每根接腳都有其特定功能。設(shè)計(jì)中以stc

11、89c52單片機(jī)為主芯片,ds1302、ds18b20等為輔芯片,將結(jié)果在lcd上顯示。具體總原理圖如圖3.1。圖3.1 總原理圖電路圖圖3.2 單片機(jī)電路圖3.2 實(shí)時(shí)時(shí)鐘電路的設(shè)計(jì)主要元器件:ds1302、電容、5k10k20k電阻。ds1302是dallas公司推出的涓流充電時(shí)鐘芯片,內(nèi)含有一個(gè)實(shí)時(shí)時(shí)鐘/日歷和31字節(jié)靜態(tài)ram,通過簡單的串行接口與單片機(jī)進(jìn)行通信。實(shí)時(shí)時(shí)鐘/日歷電路秒、分、時(shí)、日期、月、年的信息,時(shí)鐘操作是二十四小時(shí)制的顯示。ds1302與單片機(jī)之間能簡單地采用同步串行的方式進(jìn)行通信,需用到三個(gè)口線:(1) res(復(fù)位),(2) i/o(數(shù)據(jù)線),(3)sclk(串行

12、時(shí)鐘)。時(shí)鐘ram的讀/寫數(shù)據(jù)以一個(gè)字節(jié)或多達(dá)31個(gè)字節(jié)的字符組方式通信。ds1302工作時(shí)功耗很低,保持?jǐn)?shù)據(jù)和時(shí)鐘信息時(shí)功率小于1mw。ds1302是由ds1202改進(jìn)而來,vcc1為可編程涓流充電電源,附加七個(gè)字節(jié)存儲(chǔ)器。實(shí)時(shí)時(shí)鐘具有能計(jì)算2100年之前的秒、分、時(shí)、日期、星期、月、年的能力、還有閏年調(diào)整的能力,這就使本來要通過復(fù)雜的算法來計(jì)算出的星期的計(jì)算簡單了許多。設(shè)計(jì)中我們要設(shè)計(jì)一個(gè)高穩(wěn)定晶振電路,這里我們用二片電容和一個(gè)32.768mhz的晶振。具體電路連接如圖3.3 所示。圖3.3 實(shí)時(shí)時(shí)鐘電路圖3.3 獨(dú)立鍵盤的設(shè)計(jì) 主要元器件:鍵盤、10千歐和100歐電阻、電源和地等等。鍵盤

13、電路一般都是讓端口檢測低電平,有用掃描的方法檢測哪個(gè)鍵有按下,也有用中斷的方法檢測。本設(shè)計(jì)中的獨(dú)立鍵盤是前者,一般鍵盤可直接接地,但這里為了穩(wěn)定起見,在掛鍵盤的端口用了個(gè)上拉電阻。具體電路連接如圖3.4所示。圖3.4 獨(dú)立鍵盤電路圖3.4顯示部分的設(shè)計(jì)主要元件:電阻、滑動(dòng)變阻器、1602液晶、電源和地等。液晶顯示器是利用液晶經(jīng)過處理后能夠改變光線傳輸方向的特性,達(dá)到顯示字符或者圖形的目的。其特點(diǎn)是體積小、重量輕、功耗極低、顯示內(nèi)容豐富等特點(diǎn),在單片機(jī)應(yīng)用中有著日益廣泛的應(yīng)用。1602芯片主要用于顯示時(shí)間和定時(shí)時(shí)間。1602芯片由點(diǎn)陣字符液晶顯示器件和專用的行、列驅(qū)動(dòng)器、控制及必要的鏈接件、結(jié)構(gòu)

14、件組裝而成,可以顯示數(shù)字和西文字符,但不能顯示圖形,已經(jīng)可以滿足本次設(shè)計(jì)的需要。1602型lcd可以顯示2行16個(gè)字符,有8位數(shù)據(jù)總線d0d7和rs,r/w,en三個(gè)控制端口,工作電壓為5v,并且具有字符對(duì)比度調(diào)節(jié)和背光功能。為了顯示的穩(wěn)定,本部分在液晶屏的數(shù)據(jù)線端口每個(gè)上面都連接了上拉電阻?,F(xiàn)實(shí)電路中屏幕的背光電源也已經(jīng)接上,使得顯示更加清晰美觀。其中第三引腳連接了一個(gè)10k的滑動(dòng)變阻器,這樣可以調(diào)節(jié)屏幕上顯示信息的清晰度,最終使得此設(shè)計(jì)更加完善。具體電路如圖3.5所示。圖3.5 液晶顯示電路4 軟件設(shè)計(jì)4.1 主程序設(shè)計(jì)在主程序中,需要完成整體的功能構(gòu)架并對(duì)各芯片的初始化,另外,在主程序模

15、塊中還需要設(shè)置定時(shí)器0,并對(duì)它們進(jìn)行初始化。主程序一次循環(huán)流程圖如圖5.1所示。當(dāng)打開電源開關(guān)時(shí),各個(gè)模塊初始化,然后顯示固定在液晶上的用于美化顯示的圖形。之后讀取溫度信息,定時(shí)器0初始化,讀取時(shí)間等信息,冒號(hào)閃爍,讀取星期、農(nóng)歷信息,顯示所有信息,結(jié)束一次循環(huán)。在實(shí)際運(yùn)行時(shí),顯示完所有信息后,將返回到讀取溫度子函數(shù)前再往循環(huán)下執(zhí)行。圖4.1 主程序流程圖4.2 鍵盤服務(wù)子程序設(shè)計(jì)在主程序中,進(jìn)入鍵盤服務(wù)子程序后,開始掃描鍵盤情況,如果設(shè)置鍵沒有鍵按下或是按下次數(shù)k=k%10=0,則本次掃描結(jié)束;若設(shè)置鍵按下次數(shù)k=k%10=1,則掃描加減鍵是否按下,若按下則可進(jìn)行加減調(diào)節(jié)秒;若設(shè)置鍵按下次數(shù)

16、k=k%10=2,則可通過加、減鍵調(diào)節(jié)分;若設(shè)置鍵按下次數(shù)k=k%10=3,則可通過加、減鍵調(diào)節(jié)時(shí);若設(shè)置鍵按下次數(shù)k=k%10=4,則可通過加、減鍵調(diào)星期;若設(shè)置鍵按下次數(shù)k=k%10=5,則可通過加、減鍵調(diào)節(jié)天;若設(shè)置鍵按下次數(shù)k=k%10=6,則可通過加、減鍵調(diào)節(jié)月;若設(shè)置鍵按下次數(shù)k=k%10=7,則可通過加、減鍵調(diào)節(jié)年;設(shè)置鍵按下次數(shù)k=k%10=8,將回到初始顯示界面。在次掃描過程中,如果檢測到跳出鍵按下,則直接回到顯示界面。圖4.2 獨(dú)立鍵盤服務(wù)流程圖4.3 lcd顯示子程序設(shè)計(jì)在lcd顯示子程序中,初始化后,從lcd中讀狀態(tài)字,判斷l(xiāng)cd是否忙狀態(tài),不是則可向lcd寫控制命令,

17、再寫數(shù)據(jù),即顯示數(shù)據(jù)。 圖4.3 lcd顯示流程圖5系統(tǒng)測試(1)測試原理:在系統(tǒng)設(shè)計(jì)中,以mcs-51單片機(jī)為核心的萬年歷,將18b20采集到的溫度傳送到單片機(jī)經(jīng)過換算轉(zhuǎn)化成對(duì)應(yīng)的數(shù)值由液晶屏顯示,同時(shí)將時(shí)鐘芯片ds1302的信號(hào)送入單片機(jī),經(jīng)單片機(jī)處理后通過1602一起顯示。以protues7為仿真平臺(tái),畫出實(shí)物圖,進(jìn)行仿真操作。使用c語言編程編寫了系統(tǒng)應(yīng)用程序;包括主程序模塊、顯示模塊、溫度測試模塊。(2)測試方法:以成功顯示時(shí)間、日期、溫度且可調(diào)為最終目的。首先,主要是在仿真軟件中進(jìn)行初步測試,檢測電路的設(shè)計(jì)問題。然后在實(shí)物上,檢測電路的焊接以及有沒有錯(cuò)誤連線等問題。(3)測試儀器:萬

18、用表,計(jì)算機(jī)。(4)測試結(jié)果:通過按鍵,實(shí)現(xiàn)其按鍵所對(duì)應(yīng)的功能,并觀察測試結(jié)果,對(duì)設(shè)計(jì)進(jìn)一步的進(jìn)行校正和對(duì)實(shí)現(xiàn)功能的可靠性的確認(rèn),并記錄觀察結(jié)果。本設(shè)計(jì)測試結(jié)果成功完成了設(shè)計(jì)要求,達(dá)到設(shè)計(jì)目的。附 錄附錄一 器材元件清單元件器材:lcd1602 一個(gè) 單片機(jī)stc89c52 一個(gè) 滑動(dòng)變阻器 一個(gè) ds1302 一個(gè)底座 一個(gè)萬用版 若干電池 三個(gè)電池盒 一個(gè)晶振12mhz 一個(gè)18b20 一個(gè) 32768hz的晶振 一個(gè) 30pf的電容 二個(gè) 10k的電阻 若干 1k的電阻 若干 button按鍵 四個(gè)導(dǎo)線 若干焊錫 若干附錄二 源程序#include #include /#include

19、lcd1602.h/#include ds1302.h#define uint unsigned int#define uchar unsigned charsbit ds1302_clk = p17; /實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳 sbit ds1302_io = p16; /實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳 sbit ds1302_rst = p15; /實(shí)時(shí)時(shí)鐘復(fù)位線引腳sbit wireless_1 = p30;sbit wireless_2 = p31;sbit wireless_3 = p32;sbit wireless_4 = p33;sbit acc0 = acc0;sbit acc7 = acc7

20、;char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; /秒,分,時(shí)到日,月,年位閃的計(jì)數(shù)sbit set = p20; /模式切換鍵sbit up = p21; /加法按鈕sbit down = p22; /減法按鈕sbit out = p23; /立刻跳出調(diào)整模式按鈕sbit dq = p10; /溫度傳送數(shù)據(jù)io口char done,count,temp,flag,up_flag,down_flag;uchar temp_value; /溫度值uchar tempbuffer5,week_val

21、ue2;void show_time(); /液晶顯示程序/*1602液晶顯示部分子程序*/port definitions*sbit lcdrs= p25;sbit lcdrw= p26;sbit lcden = p27;sfr dbport = 0x80;/p0=0x80,p1=0x90,p2=0xa0,p3=0xb0.數(shù)據(jù)端口/內(nèi)部等待函數(shù)*unsigned char lcd_wait(void)lcdrs=0;lcdrw=1;_nop_();lcden=1;_nop_(); lcden=0;return dbport;/寫lcd寫命令或數(shù)據(jù)#define lcd_command0 /

22、command#define lcd_data1 / data#define lcd_clear_screen0x01 / 清屏#define lcd_homing 0x02 / 光標(biāo)返回原點(diǎn)void lcd_write(bit style, unsigned char input)lcden=0;lcdrs=style;lcdrw=0;_nop_();dbport=input;_nop_();/注意順序lcden=1;_nop_();/注意順序lcden=0;_nop_();lcd_wait(); /設(shè)置顯示模式#define lcd_show0x04 /顯示開#define lcd_hid

23、e0x00 /顯示關(guān) #define lcd_cursor0x02 /顯示光標(biāo)#define lcd_no_cursor0x00 /無光標(biāo) #define lcd_flash0x01 /光標(biāo)閃動(dòng)#define lcd_no_flash0x00 /光標(biāo)不閃動(dòng)void lcd_setdisplay(unsigned char displaymode) lcd_write(lcd_command, 0x08|displaymode);/設(shè)置輸入模式#define lcd_ac_up0x02#define lcd_ac_down0x00 / default#define lcd_move0x01 /

24、畫面可平移#define lcd_no_move0x00 /defaultvoid lcd_setinput(unsigned char inputmode) lcd_write(lcd_command, 0x04|inputmode); /初始化lcdvoid lcd_initial()lcden=0;lcd_write(lcd_command,0x38); /8位數(shù)據(jù)端口,2行顯示,5*7點(diǎn)陣lcd_write(lcd_command,0x38);lcd_setdisplay(lcd_show|lcd_no_cursor); /開啟顯示, 無光標(biāo)lcd_write(lcd_command,

25、lcd_clear_screen); /清屏lcd_setinput(lcd_ac_up|lcd_no_move); /ac遞增, 畫面不動(dòng) /液晶字符輸入的位置*void gotoxy(unsigned char x, unsigned char y)if(y=0)lcd_write(lcd_command,0x80|x);if(y=1)lcd_write(lcd_command,0x80|(x-0x40); /將字符輸出到液晶顯示void print(unsigned char *str)while(*str!=0)lcd_write(lcd_data,*str);str+;/*ds130

26、2時(shí)鐘部分子程序*/typedef struct _systemtime_unsigned char second;unsigned char minute;unsigned char hour;unsigned char week;unsigned char day;unsigned char month;unsigned char year;unsigned char datestring11;unsigned char timestring9;systemtime;/定義的時(shí)間類型systemtime currenttime;#define am(x)x#define pm(x)(x+1

27、2) / 轉(zhuǎn)成24小時(shí)制#define ds1302_second0x80 /時(shí)鐘芯片的寄存器位置,存放時(shí)間#define ds1302_minute0x82#define ds1302_hour0x84 #define ds1302_week0x8a#define ds1302_day0x86#define ds1302_month0x88#define ds1302_year0x8c void ds1302inputbyte(unsigned char d) /實(shí)時(shí)時(shí)鐘寫入一字節(jié)(內(nèi)部函數(shù)) unsigned char i; acc = d; for(i=8; i0; i-) ds1302

28、_io = acc0; /相當(dāng)于匯編中的 rrc ds1302_clk = 1; ds1302_clk = 0; acc = acc 1; unsigned char ds1302outputbyte(void) /實(shí)時(shí)時(shí)鐘讀取一字節(jié)(內(nèi)部函數(shù)) unsigned char i; for(i=8; i0; i-) acc = acc 1; /相當(dāng)于匯編中的 rrc acc7 = ds1302_io; ds1302_clk = 1; ds1302_clk = 0; return(acc); void write1302(unsigned char ucaddr, unsigned char uc

29、da)/ucaddr: ds1302地址, ucdata: 要寫的數(shù)據(jù) ds1302_rst = 0; ds1302_clk = 0; ds1302_rst = 1; ds1302inputbyte(ucaddr); / 地址,命令 ds1302inputbyte(ucda); / 寫1byte數(shù)據(jù) ds1302_clk = 1; ds1302_rst = 0; unsigned char read1302(unsigned char ucaddr)/讀取ds1302某地址的數(shù)據(jù) unsigned char ucdata; ds1302_rst = 0; ds1302_clk = 0; ds1

30、302_rst = 1; ds1302inputbyte(ucaddr|0x01); / 地址,命令 ucdata = ds1302outputbyte(); / 讀1byte數(shù)據(jù) ds1302_clk = 1; ds1302_rst = 0; return(ucdata);void ds1302_gettime(systemtime *time) /獲取時(shí)鐘數(shù)據(jù)到自定義的結(jié)構(gòu)型數(shù)組unsigned char readvalue;readvalue = read1302(ds1302_second);time-second = (readvalue&0x70)4)*10 + (readvalu

31、e&0x0f);readvalue = read1302(ds1302_minute);time-minute = (readvalue&0x70)4)*10 + (readvalue&0x0f);readvalue = read1302(ds1302_hour);time-hour = (readvalue&0x70)4)*10 + (readvalue&0x0f);readvalue = read1302(ds1302_day);time-day = (readvalue&0x70)4)*10 + (readvalue&0x0f);readvalue = read1302(ds1302_w

32、eek);time-week = (readvalue&0x70)4)*10 + (readvalue&0x0f);readvalue = read1302(ds1302_month);time-month = (readvalue&0x70)4)*10 + (readvalue&0x0f);readvalue = read1302(ds1302_year);time-year = (readvalue&0x70)4)*10 + (readvalue&0x0f);void datetostr(systemtime *time) /將時(shí)間年,月,日,星期數(shù)據(jù)轉(zhuǎn)換成液晶顯示字符串,放到數(shù)組里dat

33、estring if(hide_year2) /這里的if,else語句都是判斷位閃爍,2就不顯示,輸出字符串為 2007/07/22 time-datestring0 = 2; time-datestring1 = 0; time-datestring2 = time-year/10 + 0; time-datestring3 = time-year%10 + 0; else time-datestring0 = ; time-datestring1 = ; time-datestring2 = ; time-datestring3 = ;time-datestring4 = /;if(hi

34、de_monthdatestring5 = time-month/10 + 0; time-datestring6 = time-month%10 + 0; else time-datestring5 = ; time-datestring6 = ; time-datestring7 = /;if(hide_daydatestring8 = time-day/10 + 0; time-datestring9 = time-day%10 + 0; else time-datestring8 = ; time-datestring9 = ; if(hide_weekweek%10 + 0; /星期

35、的數(shù)據(jù)另外放到 week_value數(shù)組里,跟年,月,日的分開存放,因?yàn)榈纫幌乱谧詈箫@示 else week_value0 = ; week_value1 = 0;time-datestring10 = 0; /字符串末尾加 0 ,判斷結(jié)束字符void timetostr(systemtime *time) /將時(shí),分,秒數(shù)據(jù)轉(zhuǎn)換成液晶顯示字符放到數(shù)組 timestring; if(hide_hourtimestring0 = time-hour/10 + 0; time-timestring1 = time-hour%10 + 0; else time-timestring0 = ; ti

36、me-timestring1 = ;time-timestring2 = :; if(hide_mintimestring3 = time-minute/10 + 0; time-timestring4 = time-minute%10 + 0; else time-timestring3 = ; time-timestring4 = ; time-timestring5 = :; if(hide_sectimestring6 = time-second/10 + 0; time-timestring7 = time-second%10 + 0; else time-timestring6 =

37、 ; time-timestring7 = ;time-datestring8 = 0;void initial_ds1302(void) /時(shí)鐘芯片初始化 unsigned char second=read1302(ds1302_second);if(second&0x80) /判斷時(shí)鐘芯片是否關(guān)閉 write1302(0x8e,0x00); /寫入允許write1302(0x8c,0x07); /以下寫入初始化時(shí)間 日期:07/07/25.星期: 3. 時(shí)間: 23:59:55write1302(0x88,0x07);write1302(0x86,0x25);write1302(0x8a,

38、0x07);write1302(0x84,0x23);write1302(0x82,0x59);write1302(0x80,0x55);write1302(0x8e,0x80); /禁止寫入/*ds18b20子程序*/*ds18b20延遲子函數(shù)(晶振12mhz )*/ void delay_18b20(unsigned int i)while(i-);/*ds18b20初始化函數(shù)*/void init_ds18b20(void) unsigned char x=0; dq = 1; /dq復(fù)位 delay_18b20(8); /稍做延時(shí) dq = 0; /單片機(jī)將dq拉低 delay_18b

39、20(80); /精確延時(shí) 大于 480us dq = 1; /拉高總線 delay_18b20(14); x=dq; /稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗 delay_18b20(20);/*ds18b20讀一個(gè)字節(jié)*/ unsigned char readonechar(void)uchar i=0;uchar dat = 0;for (i=8;i0;i-) dq = 0; / 給脈沖信號(hào) dat=1; dq = 1; / 給脈沖信號(hào) if(dq) dat|=0x80; delay_18b20(4); return(dat);/*ds18b20寫一個(gè)字節(jié)*/ void writeonechar(uchar dat)unsigned char i=0; for (i=8; i0; i-) dq = 0; dq = dat&0x01; delay_18b20(5); dq = 1; dat=1; /*讀取ds18b20當(dāng)前溫度*/void

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論