版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、信息與電子工程學(xué)院課程設(shè)計報告課程單片機(jī)技術(shù)應(yīng)用設(shè)計題目基于LCD1602電子時鐘專業(yè)班級成員姓名學(xué)號分工成績指導(dǎo)老師答辯日期、 課程設(shè)計概述 31.1 課程設(shè)計背景 31.2 課程設(shè)計內(nèi)容 31.3 課程設(shè)計技術(shù)指標(biāo) 3、 方案的選擇及確定 32.1 單片機(jī)芯片的選擇 2.2 顯示模塊的選擇 2.3 實時時間計算模塊的選擇2.4 實時環(huán)境溫度采集模塊選擇2.5 電路設(shè)計最終方案決定 三、 系統(tǒng)硬件設(shè)計 3. 4 4 4 55343.1 主控模塊 53.2 LCD顯示模塊設(shè)計 63.3 時間計算模塊設(shè)計 63.4 實時環(huán)境溫度檢測模塊 73.5 報警模塊 83.6 設(shè)置模塊 83.7 電源接口
2、部分 8四、 系統(tǒng)軟件設(shè)計9七、 遇到的問題及解決方法和總結(jié)144.1 主函數(shù) 94.2 設(shè)置模塊 104.3 1602液晶屏 114.4 軟件原理圖 12五、 系統(tǒng)調(diào)試過程 125.1 軟件調(diào)試 125.2 硬件調(diào)試 1313六、 結(jié)論7.1 硬件方面 147.2 軟件方面 147.3 總結(jié) 15八、 參考文獻(xiàn) 15九、 附 錄 15一、課程設(shè)計概述1.1 課程設(shè)計背景隨著微電子技術(shù)的高速發(fā)展,單片機(jī)在國民經(jīng)濟(jì)的個人領(lǐng)域得到了廣泛的運(yùn)用。單片 機(jī)以體積小、功能全、性價比高等諸多優(yōu)點,在工業(yè)控制、家用電器、通信設(shè)備、信息處 理、尖端武器等各種測控領(lǐng)域的應(yīng)用中獨占鰲頭, 單片機(jī)開發(fā)技術(shù)已成為電子
3、信息、 電氣、 通信、自動化、機(jī)電一體化等專業(yè)技術(shù)人員必須掌握的技術(shù)。而電子萬年歷作為電子類小設(shè)計不僅是市場上的寵兒,也是是單片機(jī)實驗中一個很常 用的題目。因為它有很好的開放性和可發(fā)揮性,因此對作者的要求比較高,不僅考察了對 單片機(jī)的掌握能力更加強(qiáng)調(diào)了對單片機(jī)擴(kuò)展的應(yīng)用。而且在操作的設(shè)計上要力求簡潔,功 能上盡量齊全,顯示界面也要出色。1.2 課程設(shè)計內(nèi)容利用單片機(jī)、時鐘芯片DS1302溫度傳感器DS18B20 1602液晶屏等實現(xiàn)日期、時間、 溫度的顯示,即是一個電子時鐘。具體的功能如下:(1)通過DS1302能夠準(zhǔn)確的計時,時間可調(diào)并在液晶屏上顯示出來。(2)通過DS18B20能夠?qū)崟r、準(zhǔn)
4、確的檢測當(dāng)前環(huán)境溫度。( 3)利用程序控制單片機(jī)實現(xiàn)鬧鐘功能。1.3 課程設(shè)計技術(shù)指標(biāo)(1)LCD液晶每行刷新顯示。(2)實時時鐘可提供年、月、日、時、分和秒,每月的天數(shù)可以自動調(diào)整,且具有 閏年補(bǔ)償功能。(3)時間是 24小時制;年限 2000年2099年。(4)測量溫度范圍為 0 C + 60 C,誤差為 土 0.5 ° C。二、方案的選擇及確定2.1 單片機(jī)芯片的選擇方案(1):采用AT89S51芯片作為硬件核心該芯片采用Flash ROM,內(nèi)部具有4KB ROM存儲空間,而且與MCS-51系列單片機(jī)完全兼容 , 但是需要通過下載板來下載,比較不方便。方案(2):采用傳統(tǒng)的ST
5、C89C52R芯片作為硬件核心該芯片具有8KB在線系統(tǒng)可編程Flash存儲器。STC89C52R使用經(jīng)典的MCS-51內(nèi)核, 但做了很多的改進(jìn)使得芯片具有傳統(tǒng) 51 單片機(jī)不具備的功能,并且可直接使用串口下載。因AT89S51需要通過下載板下載,而 STC89C52R可直接使用串口下載,所以選擇采 用方案(2)STC89C52R作為主控制系統(tǒng).2.2 顯示模塊的選擇方案( 1) : 8 段數(shù)碼管顯示8 段數(shù)碼管是利用發(fā)光二極管的特性組合而成數(shù)字顯示器件,通過控制相應(yīng)的二極管 的狀態(tài)顯示相應(yīng)的數(shù)字。采用數(shù)碼管顯示 , 數(shù)碼管亮度高、體積小、重量輕,但其顯示信 息簡單、有限,操作比較液晶顯示來說略
6、顯繁瑣。方案( 2) :1602液晶屏顯示1602 液晶也叫 1602 字符型液晶 它是一種專門用來顯示字母、 數(shù)字、符號等的點陣型 液晶模塊采用液晶顯示。液晶顯示功耗低,輕便防震。由于設(shè)計顯示信息比較多,占用的 系統(tǒng)資源少,操作方便。因本設(shè)計顯示的字符較多,1602LCD可以顯示32個字符,而8段數(shù)碼管顯示的字符較 少,且操作比液晶顯示略顯繁瑣,所以采用方案( 2) 1602液晶屏組成本設(shè)計的顯示模塊。2.3 實時時間計算模塊的選擇方案(1):采用STC89C52R(芯片STC89C52R單片機(jī)內(nèi)部帶有定時/計數(shù)功能,此定時功能是通過對外部晶振的脈沖進(jìn) 行計數(shù),從而達(dá)到計時功能,只要使用 1
7、2MHZ實現(xiàn)零誤差的計時,因此可以利用此功能實 現(xiàn)計時,但因為只有單一的計時功能,要實現(xiàn)“電子時鐘”的功能需要較復(fù)雜的程序,時 間計算邏輯較困難,所以使用不便。方案(2):采用DS1302芯片DS1302是美國DALLAS司推出的一種高性能、低功耗、帶 RAM勺實時時鐘芯片。該 芯片采用 3線串行接口方式,可提供年月日、星期、時分秒等時間信息,并可根據(jù)月份和 閏年的情況自動調(diào)整月份的結(jié)束日期。內(nèi)部帶有 31個字節(jié)RAM用于存放臨時性數(shù)據(jù),同 時具有可編程涓細(xì)電流充電能力。因STC89C52R(芯片時間計算邏輯較困難,而 DS1302可根據(jù)月份和閏年的情況自動調(diào) 整月份的結(jié)束日期且具有編程涓細(xì)電
8、流充電能力,所以采用方案 (2)實現(xiàn)實時計時功能。2.4 實時環(huán)境溫度采集模塊選擇方案( 1):采用熱敏電阻熱敏電阻是開發(fā)早、種類多、發(fā)展較成熟的敏感元器件熱敏電阻由半導(dǎo)體陶瓷材料 組成,利用的原理是溫度引起電阻變化。通過一定的電路可以將周圍環(huán)境的溫度變化轉(zhuǎn)化 成電壓的變化,通過AD轉(zhuǎn)化器件將信號傳輸給單片機(jī)進(jìn)行分析,所以熱敏電阻需要的外 部器件較多。方案(2):采用DS18B20DS18B2C是美國DALLAS公司生產(chǎn)的數(shù)字溫度傳感器,采用單總線的接口方式與微處理 器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通訊。在使用中可以不接任何外圍元件,或者在單總線上接一個 4.7K的
9、上拉電阻,支持多點組網(wǎng)功能多個DS18B20可以并聯(lián)在惟一的單線上,實現(xiàn)多點測溫,供電方式靈活DS18B20可以通過內(nèi)部寄生電路從數(shù)據(jù)線上獲取電源,因此非常適合本系統(tǒng)使用。因熱敏電阻需要的外部器件較多,而 DS18B20在使用中可以不接任何外圍元件,或者 在單總線上接一個4.7K的上拉電阻,所以采用方案(2)構(gòu)成本設(shè)計的實時溫度采集模塊。2.5電路設(shè)計最終方案決定綜上各方案所述,本系統(tǒng)以STC89C52R單片機(jī)為控制核心,通過與DS1302和DS18B20 通信獲取實時時間和實時環(huán)境溫度,并將得到的數(shù)據(jù)通過1602液晶顯示出來,同時通過對應(yīng)的按鍵調(diào)整相應(yīng)的值,并且通過蜂鳴器實現(xiàn)報警功能。因此本
10、設(shè)計的總體方案組成框 圖如圖2-1所示:時間計算模塊顯示模塊(1602液晶)STC89C 52RC報警模塊(蜂鳴)實時溫度采集模塊(DS18B20)設(shè)置模塊(獨立按鍵)(DS1302)圖2-1總體方案組成框圖三、系統(tǒng)硬件設(shè)計3.1主控模塊本次課程設(shè)計主要用到STC89C52R單片機(jī),硬件原理圖(見附錄圖一)。端口分配表如3-1所示:表3-1端口分配表引腳序號引腳名稱作用及功能1P1.0DS1302時鐘輸入2P1.1時鐘串行數(shù)據(jù)輸入、輸出端3P1.2時鐘芯片復(fù)位端58P1.4P1.7按鍵設(shè)置9RST芯片復(fù)位端口13P3.3實現(xiàn)18B20溫度的輸入16P3.6接蜂鳴器,實現(xiàn)鬧鐘功能18、19XTA
11、L1、XTAL2外部晶振端口26P2.5實現(xiàn)1602數(shù)據(jù)和指令選擇控制端27P2.61602讀寫控制端28P2.71602數(shù)據(jù)讀寫操作控制位30、31ALE、EA地址鎖存端口,燒寫程序的端口3239P0輸出數(shù)據(jù),控制1602液晶屏的顯示3.2 LCD顯示模塊設(shè)計1602液晶功耗較小可直接與單片機(jī)接口相接,電源直接與電源電路相接為+5V,對比度可調(diào)。本設(shè)計使用單片機(jī)的 P0 口和P2 口與1602進(jìn)行通信。另外1602有2行顯示,每 行顯示的字符數(shù)為16個,可以用于顯示字母、數(shù)字、符號等,并具有簡單且功能較強(qiáng)的 指令集,可以實現(xiàn)字符顯示、移動、閃爍等功能。1602液晶與單片機(jī)接口電路如圖3-1所
12、示:1602液晶品示模塊YJL-XLDI6L9 S -T 5 CM - OV>1 oo rrjt-iim圖3-1 1602液晶與單片機(jī)接口3.3時間計算模塊設(shè)計DS1302通過三根I/O線實現(xiàn)與單片機(jī)的通信,依靠 2、3腳外接的晶振與其內(nèi)部的電容配合來產(chǎn)生時鐘脈沖的。當(dāng)外接晶振電路振蕩時,DS1302計時正確;當(dāng)外接晶振電路停振時,DS1302計時停止。因此32.768kHz晶振是造成DS1302X作不穩(wěn)定的主要因素。因 其功耗很小,當(dāng) 1 腳的主電源超過 8腳接的備用電源加 0.2V 時,由主電源對芯片供電; 否則,有備用電源對芯片供電,所以即使電源掉電后通過3V的電池仍能維持芯片精確
13、走時。DS1302與單片機(jī)接口電路如圖3-2所示:圖 3-2 DS1302 與單片機(jī)接口3.4 實時環(huán)境溫度檢測模塊DS18B2C通過單總線實現(xiàn)與單片機(jī)的通信, 系統(tǒng)中的數(shù)據(jù)交換,控制都由這根線完成 在使用中DS18B20沒有用到任何外圍元件,可工作在 一15C+100C內(nèi)。DS18B2C與單片機(jī)接口電路如圖3-3所示:圖 3-3 DS18B20 與單片機(jī)接口3.5報警模塊在本設(shè)計中蜂鳴器直接接在單片機(jī) P3.6上。報警模塊采用單片機(jī)輸出1.25KHZ的頻 率從而使蜂鳴器發(fā)出聲音。方波圖如圖3-4所示:3.6設(shè)置模塊設(shè)置模塊采用四個按鍵K1-K4與單片機(jī)P1.4、P1.5、P1.6、P1.7接
14、口相接,其中K1 為設(shè)置模塊的選擇位,K2是增加鍵,K3是減少鍵,K4為退出按鍵。獨立按鍵與單片機(jī)接口電路如圖3-5所示:圖3-5獨立按鍵與單片機(jī)接口3.7電源接口部分采用USB接口從電腦接到電源接口中,撥動開關(guān)可控制電路的接通和關(guān)閉,并用一個 發(fā)光二極管作電源指示。電源接口如圖3-6所示:圖 3-6 電源接口四、系統(tǒng)軟件設(shè)計軟件設(shè)計是本設(shè)計的關(guān)鍵,軟件程序編寫的好壞直接影響著系統(tǒng)運(yùn)行情況的良好。本 系統(tǒng)采用具有編寫靈活、移植方便、便于模塊化設(shè)計的 C 語言編寫,并通過 Proteus 軟件 進(jìn)行仿真,完成各種實質(zhì)性功能的設(shè)計。4.1 主函數(shù)主函數(shù)是程序功能總結(jié)顯示的函數(shù),其主要顯示的是時間主
15、要部分和當(dāng)前實時時間, 當(dāng)按下按鍵2時1602顯示當(dāng)前溫度狀態(tài),并延時5s,后返回當(dāng)前時間顯示狀態(tài);當(dāng)鬧鐘 功能打開,實時時間又和鬧鐘時間相等就會發(fā)出嘀嘀的響聲并且在液晶屏上有相應(yīng)的提 示,此時按按鍵 4 退出;當(dāng)進(jìn)入設(shè)置狀態(tài)完成后退出就回到當(dāng)前時間顯示狀態(tài)。主函數(shù)程序框圖如圖 4-1 所示:4.2設(shè)置模塊設(shè)置模塊分時間設(shè)置、鬧鐘設(shè)置、最高溫度報警設(shè)置。要先按下按鍵 1才能進(jìn)入設(shè)置 模塊,然后按下按鍵1進(jìn)入設(shè)置時間模塊;按鍵2進(jìn)入最高溫度報警模塊;按鍵3進(jìn)入設(shè) 置鬧鐘模塊,最后按下按鍵4退出當(dāng)前狀態(tài)。設(shè)置步驟流程圖如圖4-2所示:圖4-2設(shè)置步驟流程圖4.3 1602液晶屏1602液晶屏是此設(shè)
16、計的主要輸出部分,有 2行顯示,每行16個字符,根據(jù)寫入的位 置而顯示,當(dāng)顯示歡迎界面時是流動的,整個屏幕向右移動。1602LCD流程圖如圖4-3所示::開_始_圖4-3 1602LCD流程圖4.4軟件原理圖軟件原理圖如附錄圖二所示:這個設(shè)計中,STC89C52R主要功能是儲存程序、根據(jù)程 序的內(nèi)容對各個端口進(jìn)行判斷并作出相應(yīng)的處理;DS1302主要功能是控制年,月,日,時,分,秒的顯示效果;LCD1602主要功能是將所要顯示的顯示出來;DS18B2C主要功能是控制溫度的顯示效果。通電后,進(jìn)入歡迎界面,前后延時 2.8s,,后顯示當(dāng)前實時時間,若按下按鍵 1就進(jìn) 入調(diào)節(jié)狀態(tài),此時在按下按鍵1為
17、設(shè)置時間狀態(tài),按下按鍵2為設(shè)置最大溫度報警狀態(tài), 按按鍵3為設(shè)置鬧鐘狀態(tài),按下按鍵4為退出調(diào)節(jié)狀態(tài);若按下按鍵2則是顯示當(dāng)前溫度, 5s后自動跳回顯示當(dāng)前實時時間。五、系統(tǒng)調(diào)試過程系統(tǒng)調(diào)試共分為兩大部分:一個是軟件調(diào)試,另一個是硬件調(diào)試。其中軟件仿真通過 Protues實現(xiàn);硬件部分現(xiàn)在Protel99SE上設(shè)計出硬件電路圖,畫出 PCB圖,然后再制造 出實物。調(diào)試方法采用先分別調(diào)試各單元模塊,調(diào)通后再進(jìn)行整體調(diào)試的方法,以提高調(diào) 試效率。5.1軟件調(diào)試先根據(jù)仿真檢測當(dāng)中的元件是否符合電路的設(shè)計,在KeilC51寫入程序并且修改至編譯正確,在將寫好的程序入入到Protues軟件單片機(jī)芯片上,進(jìn)
18、行仿真。仿真結(jié)果如下所示:圖a :顯示實時時間圖b:顯示當(dāng)前溫度圖c :當(dāng)達(dá)到設(shè)置的最高溫度圖d:當(dāng)達(dá)到設(shè)置的鬧鐘時間圖g :當(dāng)調(diào)節(jié)最高溫度圖h:當(dāng)調(diào)節(jié)鬧鐘TEHP5ET fiLARNSET.040ON 13-00ON .WARNING!OUERrENPERRTURE!圖e :,當(dāng)進(jìn)入調(diào)節(jié)狀態(tài)DflTE:2013-06-16T TIHE: 09-90-54圖f:當(dāng)調(diào)節(jié)時間ATEJ2013-0S-16T TINE: 69-09-065.2硬件調(diào)試根據(jù)仿真后的電路圖進(jìn)行做板,先用萬用表檢測各元器件是否正確,再焊接電路,完 成后檢查無誤就將程序用單片機(jī)板下載到芯片上, 后把芯片拔下插入實物板上,即可
19、工作。 上電后,撥動電源開關(guān)就進(jìn)入歡迎界面,2.8s后進(jìn)入當(dāng)前實時時間狀態(tài),按下按鍵 1進(jìn)入調(diào)節(jié)狀態(tài),此時按下按鍵1為設(shè)置時間狀態(tài),按下按鍵2為設(shè)置最大溫度報警狀態(tài),按 按鍵3為設(shè)置鬧鐘狀態(tài),按下按鍵4為退出調(diào)節(jié)狀態(tài);在調(diào)節(jié)狀態(tài)時按鍵2為對應(yīng)增加鍵, 按鍵3為對應(yīng)減鍵,K4為退出按鍵;按下按鍵2后用手捏住DS18B2C芯片,在液晶屏上顯 示的溫度有明顯的變化,所以判斷芯片是良好的。六、結(jié)論這次課程設(shè)計達(dá)到了預(yù)期的90%有顯示實時時間和實時溫度,但是溫度的顯示不完 全正確,在負(fù)數(shù)時有三個溫度值顯示錯誤,時間的設(shè)置邏輯比較啰嗦,沒有做到簡單化。 例外還加了歡迎界面、鬧鐘功能、最高溫度報警功能。下面
20、從軟件和硬件兩個方面具體說 明。硬件的制作要涉及到 protel 軟件的運(yùn)用,在畫原理圖的時候如果連錯了就直接導(dǎo)致 硬件的出錯,所以畫圖的時候要特別注意。到導(dǎo)入 PCB時也是要特別注意的,布板不當(dāng)也 是直接影響實物的制作。對于電子時鐘的制作,我們基于小系板來實現(xiàn),外接顯示部分的 1602LCD液晶屏、溫度傳感部分 DS18B20提供實時時間部分DS1302蜂鳴器、電源接口 部分等。總之,一步步制作下來我們完成的還是比較可觀的。軟件的編寫上我們出現(xiàn)了較大的困難,電子時鐘的程序有些復(fù)雜,一開始對于我們來 說毫無頭緒。后來下了很大的功夫且在老師及同學(xué)的指導(dǎo)下慢慢的進(jìn)入了狀態(tài)。雖然過程 出現(xiàn)很多困難,
21、但結(jié)果還是實現(xiàn)了電子時鐘的功能,不過在顯示溫度負(fù)數(shù)時有三個數(shù)值顯 示錯誤,分別是-16 C, -32 C, -48 C;另外設(shè)置模塊的邏輯沒有做到簡單化,在設(shè)置模 塊時只能退出本級的設(shè)置,而不能直接退出到當(dāng)前實時時間顯示狀態(tài)。七、遇到的問題及解決方法和總結(jié)7.1 硬件方面畫的PCB板焊盤不夠大,又沒有相應(yīng)大小的磚針,而且在融板過程中出現(xiàn)了差錯,最 后導(dǎo)致PCB板不完美.解決方案:最終決定自己用萬能板焊接。7.2 軟件方面由于對C語言程序的認(rèn)知不深入,在修改程序時,出現(xiàn)了以下幾點問題。(1)歡迎界面的時間太長。解決方案 ; 修改歡迎界面的延時時間。(2)溫度顯示錯亂,并且在顯示時高位自動補(bǔ)零。
22、解決方案:通過修改溫度函數(shù)使其高位的零自動隱藏,但是溫度在 -16, -32, -48 度時仍然會出現(xiàn)錯誤,比實際的溫度高 16度,其余溫度值時顯示正確。(3)秒鐘調(diào)節(jié)時會自動轉(zhuǎn)零。 解決方案:把自動轉(zhuǎn)零部分的程序改為秒鐘調(diào)節(jié)功能。(4)進(jìn)入調(diào)節(jié)時間狀態(tài)時字符閃爍以至于看不清楚調(diào)節(jié)的大小。解決方案:把 1602 的字符閃爍指令改為光標(biāo)指令。(5)在報警時無聲音。解決方案:修改報警模塊,利用控制 P3.6 腳電源的通斷,使蜂鳴器發(fā)出嘀嘀的響聲。7.3總結(jié)課程設(shè)計的完成,為我們的大二下學(xué)期學(xué)習(xí)生活畫下了最后一筆。在做課程設(shè)計的日子里得到了大量課內(nèi)外的知識鞏固,使得我們的動手能力和專業(yè)技能都有了很大
23、的提高。讓我們 認(rèn)識到腳踏實地,認(rèn)真嚴(yán)謹(jǐn)是學(xué)習(xí)的態(tài)度,不怕困難、堅持不懈、吃 苦耐勞的精神是我們在這次設(shè)計中最大的收益。我想這是一次意志的磨練, 是對我實際能力的一次提升,也會對我未來的學(xué)習(xí)和工作有很大的幫助。在這次設(shè)計中也使我們的同學(xué)關(guān)系更進(jìn)一步了,同學(xué)之間互相幫助,有什么不懂的大家在一起商量,聽聽不同的看法對我們更好的理解知識,所以在這里非常感謝幫助我們的同學(xué)。八、參考文獻(xiàn)【1】常敏王涵單片機(jī)應(yīng)用程序開發(fā)與實踐P219【2】江志紅.51單片機(jī)技術(shù)與應(yīng)用系統(tǒng)開發(fā)案例精選【3】趙明明、索世文、王守中51單片機(jī)應(yīng)用開發(fā)手冊 一指令、模塊、實例【4】王守中.51單片機(jī)開發(fā)入門與典型實例P149【5
24、】天津銳志單片機(jī)開發(fā)網(wǎng)【6】楊黎基于 C語音的單片機(jī)應(yīng)用技術(shù)與 Proteus仿真P21九、附錄1、儀器與設(shè)備清單工具、設(shè)備和耗材數(shù)量電腦1臺KeiluKisio n41套Proteus7.7 軟件1套單片機(jī)實訓(xùn)板1塊杜邦導(dǎo)線16條Protel99SE1套萬用表1套2、元器件清單元件名稱型號數(shù)量(個)編號價格(元/個)單片機(jī)STC89C52RC1A14:液晶LMD16L1Y118-H- UL 心片DS13021Y23溫度芯片DS18B201Y313晶振12MHZ,2JZ1, JZ2132.768KHZ瓷片電容22pF2C1,C2電解電容22u10uf1C3排阻10k1RP1按鈕6*6*55K1
25、K50.1電阻10k,1k2R1,r2可調(diào)電阻1k1POT1電池1.5V2DC0.5電源插座1DY2撥動開關(guān)0.9*0.3*1.1cm1KG0.3發(fā)光二極管LED1LED0.1蜂鳴器TMB12A051LB0.8排針1*40PIN2.54mm2(排)CON03、原理圖(見圖一)4、PCB圖(見圖三)5、實物圖(見圖四)6、操作說明書a、正常顯示時按下K1進(jìn)入調(diào)節(jié)狀態(tài),此時按下 K1為設(shè)置時間狀態(tài);按下 K2為設(shè)置 最大溫度報警狀態(tài);按K3為設(shè)置鬧鐘狀態(tài);按下K4為退出調(diào)節(jié)狀態(tài);在調(diào)節(jié)狀態(tài)時 K2 為對應(yīng)增加鍵,K3為對應(yīng)減鍵,K4為退出按鍵。b、正常顯示時按下K2顯示當(dāng)前溫度并延時5秒;報警時按
26、K4退出。圖1(硬件原理圖)圖2 (軟件原理圖)圖 3( PCBAR.瞬PA2 卜:;E丄日 FBO EJ.9LCB1 ElfL叩 Q'/i CO"D-AKan I'h Bl.口 S'.H £1$E J&AKPZ.VASP3SACMBFJ-WACPh趨扎f toUCtBX*= 1.1!口 imoF12F1J3FllMTIIM 4F1占rueP1JP3.7/HT1D11程序:#in clude<reg52.h>#in clude< in tri ns.h>un sig ned char code displaywelco
27、me=" Welcome To My Lcd Timer"/歡迎界面un sig ned char code displaywish=" Happy Every Day A_A"/ 歡迎界面un sig ned char code overtemperature="OVERTEMPERATURE!"un sig ned char code digit="0123456789"/數(shù)字代碼un sig ned charmode,TH,TL,TN,TD,le ngth,tempswitch,Maxtemp=40,amod
28、e,alarmmode,mi nu tes,hours, minu tea,sec on ds,houra=12;sbit SCLK=P1A0; /DS1302 時鐘輸入sbit DATE=P1A1; /DS1302 數(shù)據(jù)輸入sbit REST=P1A2; /DS1302 復(fù)位端口sbit SET=P1A4; /DS1302設(shè)置模式選擇位sbit ADD=P1A5;/ 增加sbit RED=P1A6;/ 減小sbit CANL=PM7;sbit beep=P3A6; / 位定義,定義 P.6位fmpvoid delay1ms(i nt i)/1毫秒延時int j,k;while(i-)for(
29、j=76;j>1;j-);for(k=29;k>1;k-);延時若干微秒void delaynus(unsigned char n) /unsigned char i; for(i=0;i<n;i+);蜂鳴器模塊void dely500(void)unsigned char i;for(i=250;i>0;i-)_nop_();void baojing() / 報警unsigned int j,h,y; for(h=0;h<3;h+) for(y=0;y<10;y+) beep=beep; for(j=0;j<50;j+);dely500();DS13
30、02模塊void Write1302(unsigned char date)/ unsigned char i;SCLK=0;向1302寫數(shù)據(jù)delaynus(2);for(i=0;i<8;i+)DATE=date&0x01;SCLK=1; delaynus(2);SCLK=0;delaynus(2); date>>=1;void WriteSet1302(unsigned char cmd,unsigned char date) / 據(jù)REST=0;SCLK=0;REST=1; Write1302(cmd); delaynus(5); Write1302(date)
31、;SCLK=1;REST=0;unsigned char Read1302(void)/ 讀取 1302 數(shù)據(jù)unsigned char i,date; delaynus(2);for(i=0;i<8;i+)date>>=1; if(DATE=1) date|=0x80;SCLK=1; delaynus(2);SCLK=0; delaynus(2);return date;unsigned char ReadSet1302(unsigned char cmd)/ 根據(jù)命令讀取 unsigned char date;REST=0;SCLK=0;REST=1; Write1302
32、(cmd); delaynus(2); date=Read1302();SCLK=1;REST=0;return date;根據(jù)相應(yīng)的命令輸入相應(yīng)的數(shù)1302相應(yīng)的值void IntDS1302(void) /DS1302 初始化unsigned char flag;flag= ReadSet1302(0x81);if(flag&0x80) /WriteSet1302(0x8E,0x00); /WriteSet1302(0x80,(0/10)<<4|(0%10); /WriteSet1302(0x82,(0/10)<<4|(0%10); /WriteSet130
33、2(0x84,(0/10)<<4|(0%10); /WriteSet1302(0x86,(0/10)<<4|(0%10); /WriteSet1302(0x88,(0/10)<<4|(0%10); /WriteSet1302(0x8c,(10/10)<<4|(10%10); /WriteSet1302(0x90,0xa5); /WriteSet1302(0x8E,0x80); / 判斷時鐘芯片是否關(guān)閉根據(jù)寫狀態(tài)寄存器命令字,寫入不保護(hù)指令 根據(jù)寫秒寄存器命令字,寫入秒的初始值 根據(jù)寫分寄存器命令字,寫入分的初始值 根據(jù)寫小時寄存器命令字,寫入小時
34、的初始值 根據(jù)寫日寄存器命令字,寫入日的初始值 根據(jù)寫月寄存器命令字,寫入月的初始值 根據(jù)寫年寄存器命令字,寫入年的初始值打開充電功能 選擇2K電阻充電方式根據(jù)寫狀態(tài)寄存器命令字,寫入保護(hù)指令液晶顯示模塊sbit RS=P2A5;sbit RW=P2A6;sbit E=P2A7; sbit BF=P0A7;/* 液晶忙檢測 */ bit BusyTest(void)bit result;RS=0;RW=1;E=1;_nop_();_nop_();_nop_(); result=BF;_nop_();_nop_();_nop_();E=0;return result;/* 寫指令 */ void
35、 Write_com(unsigned char command) while(BusyTest()!=0);RS=0;RW=0;E=0;_nop_();_nop_();_nop_();P0=command;_nop_();_nop_();_nop_();E=1;_nop_();_nop_();_nop_();E=0;/* 寫地址 */void Write_Address(unsigned char address)Write_com(address|0x80);delay1ms(1);/* 寫數(shù)據(jù) */void Write_Date(unsigned char date)RS=1;RW=0;
36、E=0;_nop_();_nop_();_nop_();P0=date;_nop_();_nop_();_nop_();E=1;_nop_();_nop_();_nop_();E=0;delay1ms(1);/* 初始化 */void Lcd_Int(void)Write_com(0x38);delay1ms(1);Write_com(0x38);delay1ms(1);Write_com(0x06);delay1ms(1);Write_com(0x0c);delay1ms(1);Write_com(0x01);void displaymainpart(void)/ 顯示液晶主要部分(不變化部
37、分) Write_Address(0x01);delay1ms(1);Write_Date('D');Write_Date('A');Write_Date('T');Write_Date('E');Write_Date(':');delay1ms(1);Write_Address(0x0A);delay1ms(1);Write_Date('-');Write_Address(0x0D);Write_Date('-');Write_Address(0x42);Write_Date(
38、39;T');Write_Date('I');Write_Date('M');Write_Date('E');Write_Date(':');Write_Address(0x4A);Write_Date('-');Write_Address(0x4D);Write_Date('-');Write_Address(0x06);Write_Date('2');Write_Date('0');void display_Second(unsigned char sec
39、ond) / 在液晶上顯示秒 unsigned char i,j;i=second/10;j=second%10;Write_Address(0x4E);Write_Date(digiti);Write_Date(digitj);delay1ms(1);void display_Minute(unsigned char minute) /unsigned char i,j;i=minute/10;j=minute%10;Write_Address(0x4B);Write_Date(digiti);Write_Date(digitj);delay1ms(1);void display_Hour(
40、unsigned char hour) /unsigned char i,j;i=hour/10;j=hour%10;Write_Address(0x48);Write_Date(digiti);Write_Date(digitj);delay1ms(1);void display_Day(unsigned char day)unsigned char i,j;i=day/10;j=day%10;Write_Address(0x0E);Write_Date(digiti);Write_Date(digitj);delay1ms(1);void display_Month(unsigned ch
41、ar month)unsigned char i,j;i=month/10;j=month%10;Write_Address(0x0B);Write_Date(digiti);Write_Date(digitj);delay1ms(1);void display_Year(unsigned char year) /在液晶上顯示分在液晶上顯示時/ 在液晶上顯示日/ 在液晶上顯示月在液晶上顯示年unsigned char i,j; i=year/10;j=year%10;Write_Address(0x08);Write_Date(digiti);Write_Date(digitj);delay1
42、ms(1);void display_houra(unsigned char x)/ 鬧鐘小時部分顯示unsigned char i,j;i=x/10;j=x%10;Write_Address(0x44);Write_Date(digiti);Write_Date(digitj);void display_minutea(unsigned char x)/ 鬧鐘分鐘部分顯示unsigned char i,j;i=x/10;j=x%10;Write_Address(0x47);Write_Date(digiti);Write_Date(digitj);void display_Time(void
43、) / 顯示實時時間unsigned char value,day,month,year;Write_com(0x0c);value=ReadSet1302(0x81); seconds=(value&0x70)>>4)*10+(value&0x0f); display_Second(seconds);value=ReadSet1302(0x83); minutes=(value&0x70)>>4)*10+(value&0x0f); display_Minute(minutes);value=ReadSet1302(0x85); hour
44、s=(value&0x70)>>4)*10+(value&0x0f); display_Hour(hours);value=ReadSet1302(0x87); day=(value&0x70)>>4)*10+(value&0x0f); display_Day(day);value=ReadSet1302(0x89); month=(value&0x70)>>4)*10+(value&0x0f); display_Month(month);value=ReadSet1302(0x8D); year=(value
45、&0xf0)>>4)*10+(value&0x0f);display_Year(year);void displaystar(void) /顯示歡迎界面unsigned char i,j;Write_Address(0x0f); while(displaywelcomei!='0')Write_Date(displaywelcomei);i+; delay1ms(1);i=0;Write_Address(0x4f); while(displaywishi!='0')Write_Date(displaywishi);i+; delay1
46、ms(1);j=40;while(j-)Write_com(0x18);/ 循環(huán)左移 delay1ms(70);Write_com(0x01);delay1ms(10);void gbdisplay(unsigned char address) /時間調(diào)整時光標(biāo)閃爍Write_Address(address);delay1ms(5);Write_com(0x0e);delay1ms(5);void displaymaxt(unsigned char x) / 顯示最大溫度 unsigned char i,j,k; Write_com(0x0c); delay1ms(2); Write_Addr
47、ess(0x44); i=x/100; j=x/10; k=x%10;Write_Date(digiti);Write_Date(digitj);Write_Date(digitk);/*void hourset(void)時間調(diào)整部分/ 調(diào)時unsigned char timevalue,hour;delay1ms(500); / 防止多次觸發(fā)WriteSet1302(0x8e,0x00);/ 將寫保護(hù)去掉,確保能正常將調(diào)整后的數(shù)值寫入timevalue=ReadSet1302(0x85); / 讀取此時的數(shù)值 hour=(timevalue&0x70)>>4)*10+(
48、timevalue&0x0f);while(1)DS1302if(ADD=0)delay1ms(50);if(ADD=0)hour+; delay1ms(300); while(ADD=0);if(RED=0)delay1ms(50);if(RED=0)hour-; delay1ms(300); if(hour=0) hour=23; while(RED=0); timevalue=(hour)/10)<<4|(hour%10); WriteSet1302(0x84,timevalue); delay1ms(1);display_Hour(hour); Write_Addr
49、ess(0x49);delay1ms(5); if(hour>=24) hour=0;delay1ms(5);if(CANL=0) mode=0;Write_com(0x0c);break;WriteSet1302(0x8e,0x80);void minuteset(void) / 調(diào)分unsigned char timevalue,minute; delay1ms(500);WriteSet1302(0x8e,0x00); timevalue=ReadSet1302(0x83);minute=(timevalue&0x70)>>4)*10+(timevalue&am
50、p;0x0f); while(1)if(ADD=0)delay1ms(10);if(ADD=0)minute+; if(minute>=60) timevalue=0; while(ADD=0);if(RED=0)delay1ms(10);if(RED=0) minute-; delay1ms(300); if(minute=0) minute=59; while(RED=0); timevalue=(minute/10)<<4|(minute%10); WriteSet1302(0x82,timevalue);delay1ms(1);display_Minute(minut
51、e);Write_Address(0x4c);delay1ms(5);if(minute>=60) minute=0;delay1ms(5);if(CANL=0) mode=0;Write_com(0x0c);break;WriteSet1302(0x8e,0x80);void secondset(void) / 調(diào)秒unsigned char second,timevalue; delay1ms(500);WriteSet1302(0x8e,0x00); timevalue=ReadSet1302(0x81);second=(timevalue&0x70)>>4)*
52、10+(timevalue&0x0f); while(1)if(ADD=0) delay1ms(50); if(ADD=0) second+;delay1ms(300);while(ADD=0);if(RED=0) delay1ms(10);if(RED=0)if(-second=0) second=59;while(RED=0); timevalue=(second/10)<<4)|(second%10); WriteSet1302(0x80,timevalue); delay1ms(1);display_Second(second);Write_Address(0x4f);delay1ms(5);if(second>=60) second=0 ;delay1ms(5);if(CANL=0) mode=0;Write_com(0x0c);break;WriteSet1302(0x8e,0x80);void yearset(void) / 調(diào)年unsigned char date
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年滬科版九年級化學(xué)上冊階段測試試卷含答案
- 2024年簡化版商品采購協(xié)議樣式版
- CNAS-SC170:2024 信息安全管理體系認(rèn)證機(jī)構(gòu)認(rèn)可方案
- 2025年滬教新版七年級科學(xué)下冊月考試卷
- 2025年度環(huán)保型施工圍墻工程承包服務(wù)協(xié)議3篇
- 2024版建筑施工分包合同
- 潔凈車間安全施工方案
- 2024年華師大版九年級地理下冊月考試卷
- 2024幼兒園教育機(jī)構(gòu)股權(quán)轉(zhuǎn)讓與教育品牌共享合作協(xié)議3篇
- 2025年浙教版八年級物理下冊月考試卷含答案
- 期末復(fù)習(xí)試題(試題)-2024-2025學(xué)年五年級上冊數(shù)學(xué)蘇教版
- 自由戰(zhàn)爭-簡體素材表
- 新概念第三冊課文60全(打印版)
- 四年級硬筆書法教案教學(xué)設(shè)計共16課
- 自考現(xiàn)代漢語復(fù)習(xí)資料精品資料
- 論財務(wù)共享服務(wù)模式下財務(wù)稽核體系
- 19鍋爐水壓試驗記錄
- 人教版小學(xué)1-6年級日積月累(全)
- 盤扣式腳手架(內(nèi)部培訓(xùn))(課堂PPT)
- 袖閥管注漿工法
- 設(shè)計說明書——曲柄連桿機(jī)構(gòu)
評論
0/150
提交評論