版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、南 昌 工 程 學(xué) 院畢 業(yè) 設(shè) 計(jì) (論 文) 機(jī)械與電氣工程 系(院)電氣自動化技術(shù)專業(yè) 畢業(yè)設(shè)計(jì)(論文)題目 多功能數(shù)字電子鐘 學(xué)生姓名 班 級 學(xué) 號 指導(dǎo)教師 完成日期 2011 年 6 月 7 日南 昌 工 程 學(xué) 院畢業(yè)設(shè)計(jì)(論文)任務(wù)書i、課程設(shè)計(jì)(論文)題目:多功能數(shù)字電子鐘ii、畢業(yè)設(shè)計(jì)(論文)使用的原始資料(數(shù)據(jù))及設(shè)計(jì)技術(shù)要求:1、電子鐘具有顯示年、月、日、時、分、秒功能。2、能借助鍵盤設(shè)置日期、時間及鬧鐘等信息。3、鬧鐘時,蜂鳴器先鳴響5秒,然后停2秒,如果無人干預(yù),蜂鳴器再鳴響5秒。蜂鳴過程中,按任意鍵,本次鬧鐘結(jié)束。4、實(shí)時溫度顯示,測溫范圍:-4050誤差小于0
2、.5。5、溫度上/下限報(bào)警手動設(shè)置,報(bào)警為連續(xù)蜂鳴,報(bào)警過程中,任意鍵結(jié)束取消報(bào)警。iii、畢業(yè) 設(shè)計(jì)(論文)工作內(nèi)容及完成時間:設(shè)計(jì)一個多功能數(shù)字電子鐘。 1、查找資料,方案對比。2、完成多功能電子鐘系統(tǒng)總體設(shè)計(jì),并繪制出原理圖。3、給出流程圖,編寫并調(diào)試程序。4、撰寫設(shè)計(jì)報(bào)告。 主 要參考資料:1、陳梓城實(shí)用電子電路設(shè)計(jì)與調(diào)試中國電力出版社20062、曹薇單片機(jī)原理及應(yīng)用 中國實(shí)力水電出版社 2004.83、高吉祥全國大學(xué)生電子設(shè)計(jì)大賽培訓(xùn)教程電子工業(yè)出版社2007.54、ds1302 datasheet 5、ds18b20 datasheet 摘 要數(shù)字鐘是一種用數(shù)字電路技術(shù)實(shí)現(xiàn)時、分、
3、秒計(jì)時的裝置,與機(jī)械式時鐘相比具有更高的準(zhǔn)確性和直觀性,且無機(jī)械裝置,具有更長的使用壽命,已得到廣泛的使用。數(shù)字鐘從原理上講是一種典型的數(shù)字電路,其中包括了組合邏輯和時序電路。我設(shè)計(jì)的多功能數(shù)字時鐘系統(tǒng)是由中央控制器、時鐘系統(tǒng)、報(bào)警系統(tǒng)、溫度檢測器、顯示器及鍵盤部分組成。控制器采用單片機(jī)at89c51,溫度檢測部分采用ds18b20溫度傳感器,時鐘系統(tǒng)用時鐘芯片ds1302,用lcd液晶1602a作為顯示器。單片機(jī)通過時鐘芯片ds1302獲取時間數(shù)據(jù),對數(shù)據(jù)處理后顯示時間;溫度傳感器ds18b20采集溫度信號送給單片機(jī)處理,單片機(jī)再把時間數(shù)據(jù)和溫度數(shù)據(jù)送液晶顯示器1602顯示;本系統(tǒng)共設(shè)置4個
4、功能按鍵,其中一個為整機(jī)復(fù)位按鍵,另外三個用于時鐘的各種操作。 關(guān)鍵詞:單片機(jī)at89c51 lcd1602液晶顯示器 ds18b20 ds1302 abstracta digital clock is a kind of digital circuit technology implementation, minutes and seconds timing device, and the mechanical clock compared with higher accuracy and intuitive, and without a mechanical device, having
5、a longer service life, has been widely used. a digital clock from principle speaking is a kind of typical digital circuits, including combination logic and sequential circuits.this multi-functional digital clock system is composed of a central controller, clock system, alarm system, temperature dete
6、ctors, monitor and keyboard parts. controller using scm at89c51, temperature detection part is ds18b20 temperature sensor, clock system with clock chip ds1302, with the 1602a as a liquid crystal display lcd. microcontroller through the clock chip ds1302-time data acquisition, data processing right a
7、fter the show time; temperature sensor ds18b20 collecting temperature signal sent to mcu processing, microcontroller time data and temperature data then send 1602 lcd display; of this system were set four function keys,one of the reset button for the machine and another three for a variety of clock
8、operation.key words:at89c51;lcd1602 display;ds18b20;ds1302目 錄摘 要iabstractii第一章 概述1第二章 設(shè)計(jì)方案論證2第三章 電路硬件設(shè)計(jì)及分析53.1 時鐘電路53.2 復(fù)位電路53.3 ds1302時鐘電路63.4 ds18b20溫度計(jì)電路83.5 鍵盤電路93.6 顯示電路93.7 按鍵提示電路10第四章 軟件設(shè)計(jì)114.1 主函數(shù)流程圖114.2 ds18b20溫度計(jì)程序流程124.3 按鍵程序流程圖134.4 定時器t0中斷服務(wù)程序流程圖144.5 電路圖154.6 proteus仿真效果圖16參考文獻(xiàn)17致 謝18
9、附錄1 主程序清單19第一章 概述時鐘,自從它發(fā)明的那天起,就成為人類的朋友,但隨著時間的推移,人們對它的功能又提出了新的要求,怎樣讓時鐘更好的為人民服務(wù),怎樣讓我們的老朋友煥發(fā)青春呢?這就要求人們不斷設(shè)計(jì)出新型時鐘。本方案設(shè)計(jì)的多功能電子鐘除了傳統(tǒng)的顯示時間功能之外還可以測試溫度、電網(wǎng)頻率、電壓、并提供了過壓報(bào)警、非接觸止鬧等功能。其中溫度采用ad590溫度傳感器電路測得,非接觸止鬧則采用紅外控制技術(shù)實(shí)現(xiàn)。20世紀(jì)末,電子技術(shù)獲得了飛速的發(fā)展,在其推動下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會的各個領(lǐng)域,有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進(jìn)一步提高,產(chǎn)品更新?lián)Q代
10、的節(jié)奏也越來越快。數(shù)字鐘已成為人們?nèi)粘I钪校罕夭豢缮俚谋匦杵?,廣泛用于個人家庭以及車站、碼頭、劇場、辦公室等公共場所,給人們的生活、學(xué)習(xí)、工作、娛樂帶來極大的方便。由于數(shù)字集成電路技術(shù)的發(fā)展和采用了先進(jìn)的石英技術(shù),使數(shù)字鐘具有走時準(zhǔn)確、性能穩(wěn)定、集成電路有體積小、功耗小、功能多、攜帶方便等優(yōu)點(diǎn),因此在許多電子設(shè)備中被廣泛使用。電子鐘是人們?nèi)粘I钪谐S玫挠?jì)時工具,而數(shù)字式電子鐘又有其體積小、重量輕、走時準(zhǔn)確、結(jié)構(gòu)簡單、耗電量少等優(yōu)點(diǎn)而在生活中被廣泛應(yīng)用,因此本次設(shè)計(jì)就用數(shù)字集成電路和一些簡單的邏輯門電路來設(shè)計(jì)一個數(shù)字式電子鐘,使其完成時間及星期的顯示功能。本次設(shè)計(jì)以數(shù)字電子為主,分別對1s時
11、鐘信號源、秒計(jì)時顯示、分計(jì)時顯示、小時計(jì)時顯示、整點(diǎn)報(bào)時及校時電路進(jìn)行設(shè)計(jì),然后將它們組合,來完成時、分、秒的顯示并且有整點(diǎn)報(bào)時和走時校準(zhǔn)的功能。并通過本次設(shè)計(jì)加深對數(shù)字電子技術(shù)的理解以及更熟練使用計(jì)數(shù)器、觸發(fā)器和各種邏輯門電路的能力。第二章 設(shè)計(jì)方案論證方案一 用主芯片為at89c51的單片機(jī)控制實(shí)現(xiàn),使用單片機(jī)內(nèi)部的定時計(jì)數(shù)器實(shí)現(xiàn)時間的設(shè)定,使用按鍵進(jìn)行時間的調(diào)整和定時,按鍵有蜂鳴器提示,溫度傳感器使用dallas公司生產(chǎn)的單總線式數(shù)字溫度傳感器,它具有微型化、低功耗、高性能、抗干擾能力強(qiáng)、易配處理器等優(yōu)點(diǎn),特別適用于構(gòu)成多點(diǎn)溫度測控系統(tǒng),可直接將溫度轉(zhuǎn)化成串行數(shù)字信號(提供9位二進(jìn)制數(shù)字
12、)給單片機(jī)處理,且在同一總線上可以掛接多個傳感器芯片。顯示時間和溫度使用數(shù)碼管顯示。方案1系統(tǒng)結(jié)構(gòu)框圖如圖1.1所示。圖1.1 方案1系統(tǒng)結(jié)構(gòu)框圖方案二 用主芯片為at89c51的單片機(jī)控制實(shí)現(xiàn),為了滿足單片機(jī)系統(tǒng)的實(shí)時控制的需求,采用實(shí)時鐘芯片ds1302,使用按鍵進(jìn)行時間的調(diào)整和定時,按鍵蜂鳴器提示,溫度傳感器使用普通的溫度傳感器,由于溫度傳感器采集的數(shù)據(jù)為模擬量,又因?yàn)閱纹瑱C(jī)at89c51內(nèi)部沒有集成模數(shù)轉(zhuǎn)換器,需要在控制系統(tǒng)的外部使用a/d轉(zhuǎn)換裝置,另外系統(tǒng)還應(yīng)該把采集來的數(shù)據(jù)進(jìn)行信號處理,顯示溫度和時間使用lcd1602顯示。方案2系統(tǒng)結(jié)構(gòu)框圖如圖1.2所示。圖1.2 方案2系統(tǒng)結(jié)構(gòu)
13、框圖方案三 用主芯片為at89c51的單片機(jī)控制實(shí)現(xiàn),為了滿足單片機(jī)系統(tǒng)的實(shí)時控制的需求,采用實(shí)時鐘芯片ds1302,使用按鍵進(jìn)行時間的調(diào)整和定時,按鍵有蜂鳴器提示,溫度傳感器使用dallas公司生產(chǎn)的單總線式數(shù)字溫度傳感器。顯示時間和溫度使用lcd1602顯示。方案3系統(tǒng)結(jié)構(gòu)框圖如圖1.3所示。 圖1.3 方案3系統(tǒng)結(jié)構(gòu)框圖方案選擇 方案一直接使用單片機(jī)內(nèi)集成的定時器,產(chǎn)生定時節(jié)拍,編制軟件計(jì)數(shù)器,進(jìn)行節(jié)拍技術(shù),理論上講,不但能夠完成秒表設(shè)計(jì),還能夠?qū)崿F(xiàn)分鐘、刻鐘、小時的實(shí)時計(jì)時功能,在此基礎(chǔ)上,如果加上足夠精確的誤差時間補(bǔ)償處理,甚至可以實(shí)現(xiàn)日、星期、月、年等日歷功能。但使用片內(nèi)定時器有以
14、下幾個問題:1、時間補(bǔ)償片內(nèi)定時器采用中斷方式提供計(jì)時節(jié)拍,中斷的實(shí)質(zhì)是隨機(jī)程序切換,那么,中斷響應(yīng)時間是不可精確預(yù)測的。這樣,必然會導(dǎo)致計(jì)時節(jié)拍的時間誤差,在計(jì)時時間較短的情況下,比如199s計(jì)時,可以采用一些軟件措施進(jìn)行誤差補(bǔ)償,但當(dāng)系統(tǒng)所需要的計(jì)時時間較長時,比如進(jìn)行年、月、日的日歷計(jì)時,定時中斷誤差扥積累就會很大,無法滿足時間精度的要求。因此,在需要日歷、時鐘的場合,片內(nèi)定時器的作用有限。片內(nèi)定時器只適合于單片機(jī)短時間計(jì)時的要求。 2、時鐘維持使用片內(nèi)定時器進(jìn)行計(jì)時的時候,單片機(jī)始終要處于工作狀態(tài)。才能維持計(jì)時時間,一旦停機(jī)或進(jìn)入待機(jī)狀態(tài),開機(jī)后,計(jì)時時間就需要重新設(shè)定。在單片機(jī)系統(tǒng)中
15、,有時,需要維持一個時鐘,對控制工作進(jìn)行時間標(biāo)定。不管單片機(jī)系統(tǒng)開機(jī)、關(guān)機(jī)還是待機(jī),系統(tǒng)時鐘要始終維持。為了滿足單片機(jī)系統(tǒng)的實(shí)時鐘需求,最可靠的方法是采用實(shí)時鐘芯片ds1302。溫度的數(shù)據(jù)采集如果是一般的溫度傳感器,需要對信號進(jìn)行處理,另外還需要模數(shù)轉(zhuǎn)換裝置,如果采用的是數(shù)字溫度傳感器18b20,可以直接將采集的信號轉(zhuǎn)化為數(shù)字信息供單片機(jī)控制,這樣不僅節(jié)約了成本,還提高了系統(tǒng)的可靠性和穩(wěn)定性。所以本設(shè)計(jì)采用的是方案三。第三章 電路硬件設(shè)計(jì)及分析3.1 時鐘電路系統(tǒng)的時鐘電路設(shè)計(jì)是采用的內(nèi)部方式,即利用芯片內(nèi)部的振蕩電路。51單片機(jī)內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器。引腳xtal1和xt
16、al2分別是此放大器的輸入端和輸出端。這個放大器與作為反饋元件的片外晶體諧振器一起構(gòu)成一個自激振蕩器。外接晶體諧振器以及電容c1和c2構(gòu)成并聯(lián)諧振電路,接在放大器的反饋回路中。對外接電容的值雖然沒有嚴(yán)格的要求,但電容的大小會影響震蕩器頻率的高低、震蕩器的穩(wěn)定性、起振的快速性和溫度的穩(wěn)定性。因此,此系統(tǒng)電路的晶體振蕩器的值為12mhz,電容應(yīng)盡可能的選擇陶瓷電容,電容值約為22f。在焊接刷電路板時,晶體振蕩器和電容應(yīng)盡可能安裝得與單片機(jī)芯片靠近,以減少寄生電容,更好地保證震蕩器穩(wěn)定和可靠地工作。時鐘電路如圖2.1所示。圖2.1 時鐘電路圖3.2 復(fù)位電路復(fù)位是由外部的復(fù)位電路來實(shí)現(xiàn)的。片內(nèi)復(fù)位電
17、路是復(fù)位引腳rst通常采用上電自動復(fù)位和按鍵手動復(fù)位兩種方式,此電路系統(tǒng)采用的是按鍵手動復(fù)位電路,高電平時復(fù)位,如圖所示。當(dāng)時鐘頻率選用12mhz時,c取22f,r約為1k。復(fù)位電路如圖2.2所示 圖2.2 復(fù)位電路圖3.3 ds1302時鐘電路本設(shè)計(jì)中的采用的時鐘芯片是ds1302ds1302的結(jié)構(gòu)及工作原理ds1302是美國dallas公司推出的一種高性能、低功耗、帶ram的實(shí)時時鐘電路,它可以對年、月、日、周日、時、分、秒進(jìn)行計(jì)時,具有閏年補(bǔ)償功能,工作電壓為2.5v5.5v。采用三線接口與cpu進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或ram數(shù)據(jù)。ds1302內(nèi)部有一個
18、318的用于臨時性存放數(shù)據(jù)的ram寄存器。ds1302是ds1202的升級產(chǎn)品,與ds1202兼容,但增加了主電源/后備電源雙電源引腳,同時提供了對后備電源進(jìn)行涓細(xì)電流充電的能力。ds1302這些電路的接口簡單、價(jià)格低廉、使用方便,被廣泛地采用。時鐘電路ds1302是dallas公司的一種具有涓細(xì)電流充電能力的電路,主要特點(diǎn)是采用串行數(shù)據(jù)傳輸,可為掉電保護(hù)電源提供可編程的充電功能,并且可以關(guān)閉充電功能。采用普通32.768khz晶振。引腳功能及結(jié)構(gòu)ds1302的引腳排列,其中vcc1為后備電源,vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運(yùn)行。ds1302由vcc1或vcc2兩者
19、中的較大者供電。當(dāng)vcc2大于vcc1+0.2v時,vcc2給ds1302供電。當(dāng)vcc2小于vcc1時,ds1302由vcc1供電。x1和x2是振蕩源,外接32.768khz晶振。rst是復(fù)位/片選線,通過把rst輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。rst輸入有兩種功能:首先,rst接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,rst提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)rst為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對ds1302進(jìn)行操作。如果在傳送過程中rst置為低電平,則會終止此次數(shù)據(jù)傳送,i/o引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時,在vcc2.0v之前,rst必須保持低電平。只有在s
20、clk為低電平時,才能將rst置為高電平。i/o為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細(xì)說明。sclk為時鐘輸入端。下圖2.3為ds1302的引腳功能圖2.3:圖2.3 ds1302封裝圖ds1302的控制字節(jié)ds1302的控制字如圖2.4所示??刂谱止?jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入ds1302中,位6如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取ram數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操作,為圖表示進(jìn)行讀操作,控制字節(jié)總是從最低位開始輸出。圖2.4ds1302的控制字ds1302的寄存器ds1302有12個寄存器,其中有7
21、個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為bcd碼形式,其日歷、時間寄存器及其控制字見表1此外,ds1302還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與ram相關(guān)的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。ds1302與ram相關(guān)的寄存器分為兩類:一類是單個ram單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為c0hfdh,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的ram寄存器,此方式下可一次性讀寫所有的ram的31個字節(jié),命令控制字為feh(寫)、ffh(讀)。ds1302與單片機(jī)之間能簡單地采用同步串行的方式進(jìn)行通信,僅需三根
22、i/o線:復(fù)位(rst)、i/o數(shù)據(jù)線、串行時鐘(sclk)。ds1302時鐘電路如圖2.5所示。 圖2.5 ds1302時鐘電路圖 3.4 ds18b20溫度計(jì)電路ds18b20它具有3引腳to92小體積封裝形式,溫度測量范圍為55125,可編程為9位12位a/d轉(zhuǎn)換精度,測溫分辨率可達(dá)0.0625,被測溫度用符號擴(kuò)展的16位數(shù)字量方式串行輸出,其工作電源既可在遠(yuǎn)端引入,也可采用寄生電源方式產(chǎn)生,多個ds18b20可以并聯(lián)到3根或2根線上,cpu只需一根端口線就能與多個ds18b20通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路。以上特點(diǎn)使ds18b20非常適用于遠(yuǎn)距離多點(diǎn)溫度檢測
23、系統(tǒng)。電路圖如圖2.4所示。 圖2.6 ds18b20溫度計(jì)電路3.5 鍵盤電路鍵盤接口是單片機(jī)應(yīng)用系統(tǒng)中最常用的接口之一,鍵盤的類型很多,常用的有獨(dú)立式鍵盤和矩陣式鍵盤,因?yàn)楸驹O(shè)計(jì)需要的鍵盤比較少,所以采用獨(dú)立式鍵盤。 在鍵盤的應(yīng)用中,需要解決鍵盤消抖的問題,一般使用的是軟件消抖的方法。鍵盤的電路圖如圖2.5所示。 圖2.6 鍵盤電路圖3.6 顯示電路顯示器是單片機(jī)常用的功能單元之一,顯示器的主要功能是為單片機(jī)系統(tǒng)使用者提供必要的單片機(jī)工作信息,或者提供工作狀態(tài)的提示信息,顯示器的工作是由單片機(jī)通過顯示接口驅(qū)動的。本設(shè)計(jì)采用的是lcd1602顯示電路圖如圖2.6所示。 圖2.7 lcd160
24、2顯示電路圖3.7 按鍵提示電路本設(shè)計(jì)具有按鍵蜂鳴器響的功能,使得按鍵可靠工作。按鍵提示電路如圖2.7所示。 圖2.7 按鍵提示電路如圖 第四章 軟件設(shè)計(jì)4.1 主函數(shù)流程圖主函數(shù)流程圖如圖3.1所示。 圖3.1 主函數(shù)流程圖4.2 ds18b20溫度計(jì)程序流程ds1820溫度計(jì)程序流程圖如圖3.2所示。 圖3.2 ds1820溫度計(jì)程序流程圖4.3 按鍵程序流程圖按鍵程序流程圖如圖3.3所示。 圖3.3 按鍵程序流程圖 4.4 定時器t0中斷服務(wù)程序流程圖定時器t0中斷服務(wù)程序流程圖如圖3.4所示。 圖3.4 定時器t0中斷服務(wù)程序流程圖4.5 電路圖 4.6 proteus仿真效果圖 帶時
25、鐘顯示的溫度計(jì)proteus仿真效果圖如圖4.1所示。圖4.1 帶時鐘顯示的溫度計(jì)proteus仿真效果圖參考文獻(xiàn)1 陳梓城實(shí)用電子電路設(shè)計(jì)與調(diào)試中國電力出版社20062 曹薇單片機(jī)原理及應(yīng)用 中國實(shí)力水電出版社 2004.83 高吉祥全國大學(xué)生電子設(shè)計(jì)大賽培訓(xùn)教程電子工業(yè)出版社2007.54 ds1302 datasheet 5 ds18b20 datasheet 6 郭天祥,新概念51單片機(jī)c語言教程入門、提高、開發(fā)、拓展全攻略;北京:電子工業(yè)出版社;20097 宋戈、黃鶴松、員玉良、蔣海峰,51單片機(jī)應(yīng)用開發(fā)范例大全;北京:人民郵電出版社;20108 閻石,數(shù)字電子技術(shù)基礎(chǔ)(第四版);北
26、京:高等教育出版社;19989 鄒顯圣,基于at89c51單片機(jī)數(shù)字時鐘的研究,機(jī)電產(chǎn)品開發(fā)與創(chuàng)新;2009,(5)10 劉伏文、王春華,mcs-51單片機(jī)存儲器結(jié)構(gòu)詳解;電子制作;2007,(10).11 盧旭錦,基于keil c的at24c02串行e2prom的編程;現(xiàn)代電子技術(shù);2007,(8)致 謝這款多功能計(jì)數(shù)器采用了現(xiàn)在廣泛使用用的單片機(jī)技術(shù)為核心,軟硬件結(jié)合,使硬件部分大為簡化,提高了系統(tǒng)穩(wěn)定性,并采用大屏幕液晶顯示、紅外遙控裝置和電壓報(bào)警裝置使人機(jī)交互簡便易行,較為有效地完成了題目的要求。本次畢業(yè)設(shè)計(jì)得到得到了于禎老師的大力支持,他提出了許多的意見和建議,他的指導(dǎo)是我受益匪淺,
27、在此表示衷心的感謝。由于本人能力有限,在設(shè)計(jì)中難免會出現(xiàn)錯誤與不足,希望各位老師及讀者給予批評指正并提出寶貴意見。附錄1 主程序清單#include#includeds18b20_3.h#define uint unsigned int#define uchar unsigned charuchar a,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp;#define yh 0x80 /lcd第一行的初始位置,因?yàn)閘cd1602字符地址首位d7恒定為1(100000000=80)#define er 0x80+0x40 /lcd第二行初始位置(因?yàn)榈诙?/p>
28、行第一個字符位置地址是0x40)sbit rs=p20;sbit en=p22;sbit rw=p21; /如果硬件上rw接地,就不用寫這句和后面的rw=0了sbit led=p26; /lcd背光開關(guān)sbit io=p11;sbit sclk=p10;sbit rst=p12;sbit acc0=acc0;sbit acc7=acc7;sbit key1=p15; /設(shè)置鍵sbit key2=p16; /加鍵sbit key3=p17; /減鍵sbit buzzer=p13;/蜂鳴器,通過三極管9012驅(qū)動,端口低電平響uchar code tab1=20 - - ; /年顯示的固定字符uc
29、har code tab2= : : ;/時間顯示的固定字符void delay(uint xms)/延時函數(shù),有參函數(shù)uint x,y;for(x=xms;x0;x-) for(y=110;y0;y-);write_1602com(uchar com)/*液晶寫入指令函數(shù)*rs=0;/數(shù)據(jù)/指令選擇置為指令rw=0; /讀寫選擇置為寫p0=com;/送入數(shù)據(jù)delay(1);en=1;/拉高使能端,為制造有效的下降沿做準(zhǔn)備delay(1);en=0;/en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令write_1602dat(uchar dat)/*液晶寫入數(shù)據(jù)函數(shù)*rs=1;/數(shù)據(jù)/指令選擇置為數(shù)據(jù)
30、rw=0; /讀寫選擇置為寫p0=dat;/送入數(shù)據(jù)delay(1);en=1; /en置高電平,為制造下降沿做準(zhǔn)備delay(1);en=0; /en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令lcd_init()/*液晶初始化函數(shù)*write_1602com(0x38);/設(shè)置液晶工作模式,意思:16*2行顯示,5*7點(diǎn)陣,8位數(shù)據(jù)write_1602com(0x0c);/開顯示不顯示光標(biāo)write_1602com(0x06);/整屏不移動,光標(biāo)自動右移write_1602com(0x01);/清顯示write_1602com(yh+1);/日歷顯示固定符號從第一行第1個位置之后開始顯示for(a=
31、0;a14;a+)write_1602dat(tab1a);/向液晶屏寫日歷顯示的固定符號部分/delay(3);write_1602com(er+2);/時間顯示固定符號寫入位置,從第2個位置后開始顯示for(a=0;a0;a-)io=acc0;sclk=0;sclk=1;acc=acc1;uchar read_byte()/讀一個字節(jié)rst=1;for(a=8;a0;a-)acc7=io;sclk=1;sclk=0;acc=acc1;return (acc);void write_1302(uchar add,uchar dat)/向1302芯片寫函數(shù),指定寫入地址,數(shù)據(jù)rst=0;scl
32、k=0;rst=1;write_byte(add);write_byte(dat);sclk=1;rst=0;uchar read_1302(uchar add)/從1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來源地址uchar temp;rst=0;sclk=0;rst=1;write_byte(add);temp=read_byte();sclk=1;rst=0;return(temp);uchar bcd_decimal(uchar bcd)/bcd碼轉(zhuǎn)十進(jìn)制函數(shù),輸入bcd,返回十進(jìn)制 uchar decimal; decimal=bcd4; return(decimal=decimal*10+(
33、bcd&=0x0f);void ds1302_init() /1302芯片初始化子函數(shù)(2010-01-07,12:00:00,week4)rst=0;sclk=0;write_1302(0x8e,0x00); /允許寫,禁止寫保護(hù) write_1302(0x8e,0x80); /打開寫保護(hù)void write_temp(uchar add,uchar dat)/向lcd寫溫度數(shù)據(jù),并指定顯示位置uchar gw,sw;gw=dat%10;/取得個位數(shù)字sw=dat/10;/取得十位數(shù)字write_1602com(er+add);/er是頭文件規(guī)定的值0x80+0x40write_1602da
34、t(0x30+sw);/數(shù)字+30得到該數(shù)字的lcd1602顯示碼write_1602dat(0x30+gw);/數(shù)字+30得到該數(shù)字的lcd1602顯示碼 write_1602dat(0xdf);/顯示溫度的小圓圈符號,0xdf是液晶屏字符庫的該符號地址碼 write_1602dat(0x43);/顯示c符號,0x43是液晶屏字符庫里大寫c的地址碼void write_sfm(uchar add,uchar dat)/向lcd寫時分秒,有顯示位置加、現(xiàn)示數(shù)據(jù),兩個參數(shù)uchar gw,sw;gw=dat%10;/取得個位數(shù)字sw=dat/10;/取得十位數(shù)字write_1602com(er+
35、add);/er是頭文件規(guī)定的值0x80+0x40write_1602dat(0x30+sw);/數(shù)字+30得到該數(shù)字的lcd1602顯示碼write_1602dat(0x30+gw);/數(shù)字+30得到該數(shù)字的lcd1602顯示碼void write_nyr(uchar add,uchar dat)/向lcd寫年月日,有顯示位置加數(shù)、顯示數(shù)據(jù),兩個參數(shù)uchar gw,sw;gw=dat%10;/取得個位數(shù)字sw=dat/10;/取得十位數(shù)字write_1602com(yh+add);/設(shè)定顯示位置為第一個位置+addwrite_1602dat(0x30+sw);/數(shù)字+30得到該數(shù)字的lcd
36、1602顯示碼write_1602dat(0x30+gw);/數(shù)字+30得到該數(shù)字的lcd1602顯示碼void write_week(uchar week)/寫星期函數(shù)write_1602com(yh+0x0c);/星期字符的顯示位置switch(week)case 1:write_1602dat(m);/星期數(shù)為1時,顯示 write_1602dat(o); write_1602dat(n); break; case 2:write_1602dat(t);/星期數(shù)據(jù)為2時顯示 write_1602dat(u); write_1602dat(e); break;case 3:write_16
37、02dat(w);/星期數(shù)據(jù)為3時顯示 write_1602dat(e); write_1602dat(d); break;case 4:write_1602dat(t);/星期數(shù)據(jù)為4是顯示 write_1602dat(h); write_1602dat(u); break;case 5:write_1602dat(f);/星期數(shù)據(jù)為5時顯示 write_1602dat(r); write_1602dat(i); break;case 6:write_1602dat(s);/星期數(shù)據(jù)為6時顯示 write_1602dat(t); write_1602dat(a); break;case 7:
38、write_1602dat(s);/星期數(shù)據(jù)為7時顯示 write_1602dat(u); write_1602dat(n); break;/*鍵盤掃描有關(guān)函數(shù)*void keyscan()if(key1=0)/-key1為功能鍵(設(shè)置鍵)-delay(9);/延時,用于消抖動if(key1=0)/延時后再次確認(rèn)按鍵按下 buzzer=0;/蜂鳴器短響一次 delay(20); buzzer=1;while(!key1);key1n+;if(key1n=9)key1n=1;/設(shè)置按鍵共有秒、分、時、星期、日、月、年、返回,8個功能循環(huán)switch(key1n)case 1: tr0=0;/關(guān)閉
39、定時器/tr1=0;write_1602com(er+0x09);/設(shè)置按鍵按動一次,秒位置顯示光標(biāo) write_1602com(0x0f);/設(shè)置光標(biāo)為閃爍 temp=(miao)/10*16+(miao)%10;/秒數(shù)據(jù)寫入ds1302 write_1302(0x8e,0x00); write_1302(0x80,0x80|temp);/miao write_1302(0x8e,0x80); break;case 2: write_1602com(er+6);/按2次fen位置顯示光標(biāo) /write_1602com(0x0f);break;case 3: write_1602com(er+
40、3);/按動3次,shi /write_1602com(0x0f);break;case 4: write_1602com(yh+0x0e);/按動4次,week /write_1602com(0x0f);break;case 5: write_1602com(yh+0x0a);/按動5次,ri /write_1602com(0x0f);break;case 6: write_1602com(yh+0x07);/按動6次,yue /write_1602com(0x0f);break;case 7: write_1602com(yh+0x04);/按動7次,nian /write_1602com
41、(0x0f);break;case 8:write_1602com(0x0c);/按動到第8次,設(shè)置光標(biāo)不閃爍tr0=1;/打開定時器 temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,0x00|temp);/miao數(shù)據(jù)寫入ds1302 write_1302(0x8e,0x80); break;if(key1n!=0)/當(dāng)key1按下以下。再按以下鍵才有效(按鍵次數(shù)不等于零)if(key2=0) /上調(diào)鍵delay(10);if(key2=0) buzzer=0;/蜂鳴器短響一次 delay(20); bu
42、zzer=1;while(!key2);switch(key1n)case 1:miao+;/設(shè)置鍵按動1次,調(diào)秒if(miao=60)miao=0;/秒超過59,再加1,就歸零write_sfm(0x08,miao);/令lcd在正確位置顯示加設(shè)定好的秒數(shù)temp=(miao)/10*16+(miao)%10;/十進(jìn)制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00); /允許寫,禁止寫保護(hù) write_1302(0x80,temp); /向ds1302內(nèi)寫秒寄存器80h寫入調(diào)整后的秒數(shù)據(jù)bcd碼 write_1302(0x8e,0x80); /打開寫保護(hù)write
43、_1602com(er+0x09);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,光標(biāo)自動右移,所以要指定返回/write_1602com(0x0b);break;case 2:fen+;if(fen=60)fen=0;write_sfm(0x05,fen);/令lcd在正確位置顯示加設(shè)定好的分?jǐn)?shù)據(jù)temp=(fen)/10*16+(fen)%10;/十進(jìn)制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù) write_1302(0x82,temp);/向ds1302內(nèi)寫分寄存器82h寫入調(diào)整后的分?jǐn)?shù)據(jù)bcd碼 write_1302(0x8e,0x80);/
44、打開寫保護(hù)write_1602com(er+6);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,在這里是寫回原來的位置break;case 3:shi+;if(shi=24)shi=0;write_sfm(2,shi);/令lcd在正確的位置顯示加設(shè)定好的小時數(shù)據(jù)temp=(shi)/10*16+(shi)%10;/十進(jìn)制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù) write_1302(0x84,temp);/ds1302內(nèi)寫小時寄存器84h寫入調(diào)整后的小時數(shù)據(jù)bcd碼 write_1302(0x8e,0x80);/打開寫保護(hù)write
45、_1602com(er+3);/設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break;case 4:week+;if(week=8)week=1; write_1602com(yh+0x0c);/指定加后的周數(shù)據(jù)顯示位置write_week(week);/指定周數(shù)據(jù)顯示內(nèi)容 temp=(week)/10*16+(week)%10;/十進(jìn)制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù) write_1302(0x8a,temp);/向ds1302內(nèi)寫周寄存器8ah寫入調(diào)整后的周數(shù)據(jù)bcd碼 write_1302(0x8e,0x8
46、0);/打開寫保護(hù) write_1602com(yh+0x0e);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break;case 5:ri+;if(ri=32)ri=1;write_nyr(9,ri);/令lcd在正確的位置顯示加設(shè)定好的日期數(shù)據(jù)temp=(ri)/10*16+(ri)%10;/十進(jìn)制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù) write_1302(0x86,temp);/向ds1302內(nèi)寫日期寄存器86h寫入調(diào)整后的日期數(shù)據(jù)bcd碼 write_1302(0x8e,0x80);/打開寫保護(hù)write
47、_1602com(yh+10);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break;case 6:yue+;if(yue=13)yue=1;write_nyr(6,yue);/令lcd在正確的位置顯示加設(shè)定好的月份數(shù)據(jù)temp=(yue)/10*16+(yue)%10;/十進(jìn)制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù) write_1302(0x88,temp);/向ds1302內(nèi)寫月份寄存器88h寫入調(diào)整后的月份數(shù)據(jù)bcd碼 write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(yh
48、+7);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break;case 7:nian+; if(nian=100)nian=0;write_nyr(3,nian);/令lcd在正確的位置顯示加設(shè)定好的年份數(shù)據(jù) temp=(nian)/10*16+(nian)%10;/十進(jìn)制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù) write_1302(0x8c,temp);/向ds1302內(nèi)寫年份寄存器8ch寫入調(diào)整后的年份數(shù)據(jù)bcd碼 write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(yh+4);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break;if(key3
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版申通快遞快遞運(yùn)輸服務(wù)協(xié)議范本3篇
- 二零二五年度寵物領(lǐng)養(yǎng)服務(wù)合同標(biāo)準(zhǔn)范本2篇
- 紡織行業(yè)紡織培訓(xùn)
- 二零二五版國際貨運(yùn)代理業(yè)投資監(jiān)管細(xì)則3篇
- 酒店管理的管理技能
- 二零二五年度物流倉儲行業(yè)搬運(yùn)工勞務(wù)派遣服務(wù)協(xié)議3篇
- 二零二五年度個人與企業(yè)個人間文化藝術(shù)交流活動合同規(guī)范3篇
- 二零二五年度跨境電商品牌授權(quán)區(qū)域代理銷售委托代銷合同3篇
- 二零二五年度個人教育培訓(xùn)貸款合同模板2篇
- 二零二五年度入學(xué)新生教育法律協(xié)議書(全面創(chuàng)新發(fā)展)3篇
- 2025版開發(fā)商與購房者精裝修住宅買賣及售后服務(wù)合同3篇
- 心力衰竭的治療(基層診療與指南2024)
- 2024-2025學(xué)年冀教新版八年級上冊數(shù)學(xué)期末復(fù)習(xí)試卷(含詳解)
- 2024-2025年江蘇專轉(zhuǎn)本英語歷年真題(含答案)
- 檢察院專業(yè)知識試題及答案
- 場館惡劣天氣處置應(yīng)急預(yù)案
- 斜拉橋施工技術(shù)之斜拉索圖文并茂
- GB/T 6144-1985合成切削液
- 第三方在線糾紛解決機(jī)制(ODR)述評,國際商法論文
- 公寓de全人物攻略本為個人愛好而制成如需轉(zhuǎn)載注明信息
- 毛澤東思想課件-第七章 毛澤東思想的活的靈魂
評論
0/150
提交評論