畢業(yè)設計(論文)基于AT89C51單片機的多多功能電子鐘設計_第1頁
畢業(yè)設計(論文)基于AT89C51單片機的多多功能電子鐘設計_第2頁
畢業(yè)設計(論文)基于AT89C51單片機的多多功能電子鐘設計_第3頁
畢業(yè)設計(論文)基于AT89C51單片機的多多功能電子鐘設計_第4頁
畢業(yè)設計(論文)基于AT89C51單片機的多多功能電子鐘設計_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、南昌工程學院??飘厴I(yè)設計(論文)南 昌 工 程 學 院畢 業(yè) 設 計 (論 文) 機械與電氣工程 系(院)電氣自動化技術專業(yè) 畢業(yè)設計(論文)題目 多功能數(shù)字電子鐘 學生姓名 班 級 學 號 指導教師 完成日期 2011 年 6 月 7 日30南 昌 工 程 學 院畢業(yè)設計(論文)任務書i、課程設計(論文)題目:多功能數(shù)字電子鐘ii、畢業(yè)設計(論文)使用的原始資料(數(shù)據(jù))及設計技術要求:1、電子鐘具有顯示年、月、日、時、分、秒功能。2、能借助鍵盤設置日期、時間及鬧鐘等信息。3、鬧鐘時,蜂鳴器先鳴響5秒,然后停2秒,如果無人干預,蜂鳴器再鳴響5秒。蜂鳴過程中,按任意鍵,本次鬧鐘結束。4、實時溫度

2、顯示,測溫范圍:-4050誤差小于0.5。5、溫度上/下限報警手動設置,報警為連續(xù)蜂鳴,報警過程中,任意鍵結束取消報警。iii、畢業(yè) 設計(論文)工作內(nèi)容及完成時間:設計一個多功能數(shù)字電子鐘。 1、查找資料,方案對比。2、完成多功能電子鐘系統(tǒng)總體設計,并繪制出原理圖。3、給出流程圖,編寫并調(diào)試程序。4、撰寫設計報告。 主 要參考資料:1、陳梓城實用電子電路設計與調(diào)試中國電力出版社20062、曹薇單片機原理及應用 中國實力水電出版社 2004.83、高吉祥全國大學生電子設計大賽培訓教程電子工業(yè)出版社2007.54、ds1302 datasheet 5、ds18b20 datasheet 摘 要數(shù)

3、字鐘是一種用數(shù)字電路技術實現(xiàn)時、分、秒計時的裝置,與機械式時鐘相比具有更高的準確性和直觀性,且無機械裝置,具有更長的使用壽命,已得到廣泛的使用。數(shù)字鐘從原理上講是一種典型的數(shù)字電路,其中包括了組合邏輯和時序電路。我設計的多功能數(shù)字時鐘系統(tǒng)是由中央控制器、時鐘系統(tǒng)、報警系統(tǒng)、溫度檢測器、顯示器及鍵盤部分組成??刂破鞑捎脝纹瑱Cat89c51,溫度檢測部分采用ds18b20溫度傳感器,時鐘系統(tǒng)用時鐘芯片ds1302,用lcd液晶1602a作為顯示器。單片機通過時鐘芯片ds1302獲取時間數(shù)據(jù),對數(shù)據(jù)處理后顯示時間;溫度傳感器ds18b20采集溫度信號送給單片機處理,單片機再把時間數(shù)據(jù)和溫度數(shù)據(jù)送液晶

4、顯示器1602顯示;本系統(tǒng)共設置4個功能按鍵,其中一個為整機復位按鍵,另外三個用于時鐘的各種操作。 關鍵詞:單片機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 mechanic

5、al device, having 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

6、, temperature detectors, 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

7、processing right after 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

8、 variety of clock operation.key words:at89c51;lcd1602 display;ds18b20;ds1302目 錄摘 要iabstractii第一章 概述1第二章 設計方案論證2第三章 電路硬件設計及分析53.1 時鐘電路53.2 復位電路53.3 ds1302時鐘電路63.4 ds18b20溫度計電路83.5 鍵盤電路93.6 顯示電路93.7 按鍵提示電路10第四章 軟件設計114.1 主函數(shù)流程圖114.2 ds18b20溫度計程序流程124.3 按鍵程序流程圖134.4 定時器t0中斷服務程序流程圖144.5 電路圖154.6 proteus

9、仿真效果圖16參考文獻17致 謝18附錄1 主程序清單19第一章 概述時鐘,自從它發(fā)明的那天起,就成為人類的朋友,但隨著時間的推移,人們對它的功能又提出了新的要求,怎樣讓時鐘更好的為人民服務,怎樣讓我們的老朋友煥發(fā)青春呢?這就要求人們不斷設計出新型時鐘。本方案設計的多功能電子鐘除了傳統(tǒng)的顯示時間功能之外還可以測試溫度、電網(wǎng)頻率、電壓、并提供了過壓報警、非接觸止鬧等功能。其中溫度采用ad590溫度傳感器電路測得,非接觸止鬧則采用紅外控制技術實現(xiàn)。20世紀末,電子技術獲得了飛速的發(fā)展,在其推動下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會的各個領域,有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也使現(xiàn)代

10、電子產(chǎn)品性能進一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。數(shù)字鐘已成為人們?nèi)粘I钪校罕夭豢缮俚谋匦杵?,廣泛用于個人家庭以及車站、碼頭、劇場、辦公室等公共場所,給人們的生活、學習、工作、娛樂帶來極大的方便。由于數(shù)字集成電路技術的發(fā)展和采用了先進的石英技術,使數(shù)字鐘具有走時準確、性能穩(wěn)定、集成電路有體積小、功耗小、功能多、攜帶方便等優(yōu)點,因此在許多電子設備中被廣泛使用。電子鐘是人們?nèi)粘I钪谐S玫挠嫊r工具,而數(shù)字式電子鐘又有其體積小、重量輕、走時準確、結構簡單、耗電量少等優(yōu)點而在生活中被廣泛應用,因此本次設計就用數(shù)字集成電路和一些簡單的邏輯門電路來設計一個數(shù)字式電子鐘,使其完成時間及星期的顯示功能。

11、本次設計以數(shù)字電子為主,分別對1s時鐘信號源、秒計時顯示、分計時顯示、小時計時顯示、整點報時及校時電路進行設計,然后將它們組合,來完成時、分、秒的顯示并且有整點報時和走時校準的功能。并通過本次設計加深對數(shù)字電子技術的理解以及更熟練使用計數(shù)器、觸發(fā)器和各種邏輯門電路的能力。第二章 設計方案論證方案一 用主芯片為at89c51的單片機控制實現(xiàn),使用單片機內(nèi)部的定時計數(shù)器實現(xiàn)時間的設定,使用按鍵進行時間的調(diào)整和定時,按鍵有蜂鳴器提示,溫度傳感器使用dallas公司生產(chǎn)的單總線式數(shù)字溫度傳感器,它具有微型化、低功耗、高性能、抗干擾能力強、易配處理器等優(yōu)點,特別適用于構成多點溫度測控系統(tǒng),可直接將溫度轉(zhuǎn)

12、化成串行數(shù)字信號(提供9位二進制數(shù)字)給單片機處理,且在同一總線上可以掛接多個傳感器芯片。顯示時間和溫度使用數(shù)碼管顯示。方案1系統(tǒng)結構框圖如圖1.1所示。圖1.1 方案1系統(tǒng)結構框圖方案二 用主芯片為at89c51的單片機控制實現(xiàn),為了滿足單片機系統(tǒng)的實時控制的需求,采用實時鐘芯片ds1302,使用按鍵進行時間的調(diào)整和定時,按鍵蜂鳴器提示,溫度傳感器使用普通的溫度傳感器,由于溫度傳感器采集的數(shù)據(jù)為模擬量,又因為單片機at89c51內(nèi)部沒有集成模數(shù)轉(zhuǎn)換器,需要在控制系統(tǒng)的外部使用a/d轉(zhuǎn)換裝置,另外系統(tǒng)還應該把采集來的數(shù)據(jù)進行信號處理,顯示溫度和時間使用lcd1602顯示。方案2系統(tǒng)結構框圖如圖

13、1.2所示。圖1.2 方案2系統(tǒng)結構框圖方案三 用主芯片為at89c51的單片機控制實現(xiàn),為了滿足單片機系統(tǒng)的實時控制的需求,采用實時鐘芯片ds1302,使用按鍵進行時間的調(diào)整和定時,按鍵有蜂鳴器提示,溫度傳感器使用dallas公司生產(chǎn)的單總線式數(shù)字溫度傳感器。顯示時間和溫度使用lcd1602顯示。方案3系統(tǒng)結構框圖如圖1.3所示。 圖1.3 方案3系統(tǒng)結構框圖方案選擇 方案一直接使用單片機內(nèi)集成的定時器,產(chǎn)生定時節(jié)拍,編制軟件計數(shù)器,進行節(jié)拍技術,理論上講,不但能夠完成秒表設計,還能夠?qū)崿F(xiàn)分鐘、刻鐘、小時的實時計時功能,在此基礎上,如果加上足夠精確的誤差時間補償處理,甚至可以實現(xiàn)日、星期、月

14、、年等日歷功能。但使用片內(nèi)定時器有以下幾個問題:1、時間補償片內(nèi)定時器采用中斷方式提供計時節(jié)拍,中斷的實質(zhì)是隨機程序切換,那么,中斷響應時間是不可精確預測的。這樣,必然會導致計時節(jié)拍的時間誤差,在計時時間較短的情況下,比如199s計時,可以采用一些軟件措施進行誤差補償,但當系統(tǒng)所需要的計時時間較長時,比如進行年、月、日的日歷計時,定時中斷誤差扥積累就會很大,無法滿足時間精度的要求。因此,在需要日歷、時鐘的場合,片內(nèi)定時器的作用有限。片內(nèi)定時器只適合于單片機短時間計時的要求。 2、時鐘維持使用片內(nèi)定時器進行計時的時候,單片機始終要處于工作狀態(tài)。才能維持計時時間,一旦停機或進入待機狀態(tài),開機后,計

15、時時間就需要重新設定。在單片機系統(tǒng)中,有時,需要維持一個時鐘,對控制工作進行時間標定。不管單片機系統(tǒng)開機、關機還是待機,系統(tǒng)時鐘要始終維持。為了滿足單片機系統(tǒng)的實時鐘需求,最可靠的方法是采用實時鐘芯片ds1302。溫度的數(shù)據(jù)采集如果是一般的溫度傳感器,需要對信號進行處理,另外還需要模數(shù)轉(zhuǎn)換裝置,如果采用的是數(shù)字溫度傳感器18b20,可以直接將采集的信號轉(zhuǎn)化為數(shù)字信息供單片機控制,這樣不僅節(jié)約了成本,還提高了系統(tǒng)的可靠性和穩(wěn)定性。所以本設計采用的是方案三。第三章 電路硬件設計及分析3.1 時鐘電路系統(tǒng)的時鐘電路設計是采用的內(nèi)部方式,即利用芯片內(nèi)部的振蕩電路。51單片機內(nèi)部有一個用于構成振蕩器的高

16、增益反相放大器。引腳xtal1和xtal2分別是此放大器的輸入端和輸出端。這個放大器與作為反饋元件的片外晶體諧振器一起構成一個自激振蕩器。外接晶體諧振器以及電容c1和c2構成并聯(lián)諧振電路,接在放大器的反饋回路中。對外接電容的值雖然沒有嚴格的要求,但電容的大小會影響震蕩器頻率的高低、震蕩器的穩(wěn)定性、起振的快速性和溫度的穩(wěn)定性。因此,此系統(tǒng)電路的晶體振蕩器的值為12mhz,電容應盡可能的選擇陶瓷電容,電容值約為22f。在焊接刷電路板時,晶體振蕩器和電容應盡可能安裝得與單片機芯片靠近,以減少寄生電容,更好地保證震蕩器穩(wěn)定和可靠地工作。時鐘電路如圖2.1所示。圖2.1 時鐘電路圖3.2 復位電路復位是

17、由外部的復位電路來實現(xiàn)的。片內(nèi)復位電路是復位引腳rst通常采用上電自動復位和按鍵手動復位兩種方式,此電路系統(tǒng)采用的是按鍵手動復位電路,高電平時復位,如圖所示。當時鐘頻率選用12mhz時,c取22f,r約為1k。復位電路如圖2.2所示 圖2.2 復位電路圖3.3 ds1302時鐘電路本設計中的采用的時鐘芯片是ds1302ds1302的結構及工作原理ds1302是美國dallas公司推出的一種高性能、低功耗、帶ram的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5v5.5v。采用三線接口與cpu進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號

18、或ram數(shù)據(jù)。ds1302內(nèi)部有一個318的用于臨時性存放數(shù)據(jù)的ram寄存器。ds1302是ds1202的升級產(chǎn)品,與ds1202兼容,但增加了主電源/后備電源雙電源引腳,同時提供了對后備電源進行涓細電流充電的能力。ds1302這些電路的接口簡單、價格低廉、使用方便,被廣泛地采用。時鐘電路ds1302是dallas公司的一種具有涓細電流充電能力的電路,主要特點是采用串行數(shù)據(jù)傳輸,可為掉電保護電源提供可編程的充電功能,并且可以關閉充電功能。采用普通32.768khz晶振。引腳功能及結構ds1302的引腳排列,其中vcc1為后備電源,vcc2為主電源。在主電源關閉的情況下,也能保持時鐘的連續(xù)運行。

19、ds1302由vcc1或vcc2兩者中的較大者供電。當vcc2大于vcc1+0.2v時,vcc2給ds1302供電。當vcc2小于vcc1時,ds1302由vcc1供電。x1和x2是振蕩源,外接32.768khz晶振。rst是復位/片選線,通過把rst輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。rst輸入有兩種功能:首先,rst接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,rst提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當rst為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對ds1302進行操作。如果在傳送過程中rst置為低電平,則會終止此次數(shù)據(jù)傳送,i/o引腳變?yōu)楦咦钁B(tài)。上電運行時,在vcc2.0v

20、之前,rst必須保持低電平。只有在sclk為低電平時,才能將rst置為高電平。i/o為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細說明。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表示要進行寫操作,為圖表示進行讀操作,控制字節(jié)總是從最低位開始輸出。圖2.4ds1302的控制字ds1302的寄存器

21、ds1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關,存放的數(shù)據(jù)位為bcd碼形式,其日歷、時間寄存器及其控制字見表1此外,ds1302還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與ram相關的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。ds1302與ram相關的寄存器分為兩類:一類是單個ram單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為c0hfdh,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的ram寄存器,此方式下可一次性讀寫所有的ram的31個字節(jié),命令控制字為feh(寫)、ffh(讀)。ds1302與單片機之間能簡單地

22、采用同步串行的方式進行通信,僅需三根i/o線:復位(rst)、i/o數(shù)據(jù)線、串行時鐘(sclk)。ds1302時鐘電路如圖2.5所示。 圖2.5 ds1302時鐘電路圖 3.4 ds18b20溫度計電路ds18b20它具有3引腳to92小體積封裝形式,溫度測量范圍為55125,可編程為9位12位a/d轉(zhuǎn)換精度,測溫分辨率可達0.0625,被測溫度用符號擴展的16位數(shù)字量方式串行輸出,其工作電源既可在遠端引入,也可采用寄生電源方式產(chǎn)生,多個ds18b20可以并聯(lián)到3根或2根線上,cpu只需一根端口線就能與多個ds18b20通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路。以上特點使ds1

23、8b20非常適用于遠距離多點溫度檢測系統(tǒng)。電路圖如圖2.4所示。 圖2.6 ds18b20溫度計電路3.5 鍵盤電路鍵盤接口是單片機應用系統(tǒng)中最常用的接口之一,鍵盤的類型很多,常用的有獨立式鍵盤和矩陣式鍵盤,因為本設計需要的鍵盤比較少,所以采用獨立式鍵盤。 在鍵盤的應用中,需要解決鍵盤消抖的問題,一般使用的是軟件消抖的方法。鍵盤的電路圖如圖2.5所示。 圖2.6 鍵盤電路圖3.6 顯示電路顯示器是單片機常用的功能單元之一,顯示器的主要功能是為單片機系統(tǒng)使用者提供必要的單片機工作信息,或者提供工作狀態(tài)的提示信息,顯示器的工作是由單片機通過顯示接口驅(qū)動的。本設計采用的是lcd1602顯示電路圖如圖

24、2.6所示。 圖2.7 lcd1602顯示電路圖3.7 按鍵提示電路本設計具有按鍵蜂鳴器響的功能,使得按鍵可靠工作。按鍵提示電路如圖2.7所示。 圖2.7 按鍵提示電路如圖 第四章 軟件設計4.1 主函數(shù)流程圖主函數(shù)流程圖如圖3.1所示。 圖3.1 主函數(shù)流程圖4.2 ds18b20溫度計程序流程ds1820溫度計程序流程圖如圖3.2所示。 圖3.2 ds1820溫度計程序流程圖4.3 按鍵程序流程圖按鍵程序流程圖如圖3.3所示。 圖3.3 按鍵程序流程圖 4.4 定時器t0中斷服務程序流程圖定時器t0中斷服務程序流程圖如圖3.4所示。 圖3.4 定時器t0中斷服務程序流程圖4.5 電路圖 4

25、.6 proteus仿真效果圖 帶時鐘顯示的溫度計proteus仿真效果圖如圖4.1所示。圖4.1 帶時鐘顯示的溫度計proteus仿真效果圖參考文獻1 陳梓城實用電子電路設計與調(diào)試中國電力出版社20062 曹薇單片機原理及應用 中國實力水電出版社 2004.83 高吉祥全國大學生電子設計大賽培訓教程電子工業(yè)出版社2007.54 ds1302 datasheet 5 ds18b20 datasheet 6 郭天祥,新概念51單片機c語言教程入門、提高、開發(fā)、拓展全攻略;北京:電子工業(yè)出版社;20097 宋戈、黃鶴松、員玉良、蔣海峰,51單片機應用開發(fā)范例大全;北京:人民郵電出版社;20108

26、閻石,數(shù)字電子技術基礎(第四版);北京:高等教育出版社;19989 鄒顯圣,基于at89c51單片機數(shù)字時鐘的研究,機電產(chǎn)品開發(fā)與創(chuàng)新;2009,(5)10 劉伏文、王春華,mcs-51單片機存儲器結構詳解;電子制作;2007,(10).11 盧旭錦,基于keil c的at24c02串行e2prom的編程;現(xiàn)代電子技術;2007,(8)致 謝這款多功能計數(shù)器采用了現(xiàn)在廣泛使用用的單片機技術為核心,軟硬件結合,使硬件部分大為簡化,提高了系統(tǒng)穩(wěn)定性,并采用大屏幕液晶顯示、紅外遙控裝置和電壓報警裝置使人機交互簡便易行,較為有效地完成了題目的要求。本次畢業(yè)設計得到得到了于禎老師的大力支持,他提出了許多

27、的意見和建議,他的指導是我受益匪淺,在此表示衷心的感謝。由于本人能力有限,在設計中難免會出現(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第一行的初始位置,因為lcd1602字符地址首位d7恒定為1(100000000=80)#define er 0x80+0x4

28、0 /lcd第二行初始位置(因為第二行第一個字符位置地址是0x40)sbit rs=p20;sbit en=p22;sbit rw=p21; /如果硬件上rw接地,就不用寫這句和后面的rw=0了sbit led=p26; /lcd背光開關sbit io=p11;sbit sclk=p10;sbit rst=p12;sbit acc0=acc0;sbit acc7=acc7;sbit key1=p15; /設置鍵sbit key2=p16; /加鍵sbit key3=p17; /減鍵sbit buzzer=p13;/蜂鳴器,通過三極管9012驅(qū)動,端口低電平響uchar code tab1=20

29、 - - ; /年顯示的固定字符uchar 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;/拉高使能端,為制造有效的下降沿做準備delay(1);en=0;/en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令write_1602dat(uchar dat)/*液晶寫入數(shù)據(jù)函數(shù)

30、*rs=1;/數(shù)據(jù)/指令選擇置為數(shù)據(jù)rw=0; /讀寫選擇置為寫p0=dat;/送入數(shù)據(jù)delay(1);en=1; /en置高電平,為制造下降沿做準備delay(1);en=0; /en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令lcd_init()/*液晶初始化函數(shù)*write_1602com(0x38);/設置液晶工作模式,意思:16*2行顯示,5*7點陣,8位數(shù)據(jù)write_1602com(0x0c);/開顯示不顯示光標write_1602com(0x06);/整屏不移動,光標自動右移write_1602com(0x01);/清顯示write_1602com(yh+1);/日歷顯示固定符號從第一

31、行第1個位置之后開始顯示for(a=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ù),

32、指定寫入地址,數(shù)據(jù)rst=0;sclk=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)十進制函數(shù),輸入bcd,返回十進制 uchar decimal; decimal=bcd4; return(de

33、cimal=decimal*10+(bcd&=0x0f);void ds1302_init() /1302芯片初始化子函數(shù)(2010-01-07,12:00:00,week4)rst=0;sclk=0;write_1302(0x8e,0x00); /允許寫,禁止寫保護 write_1302(0x8e,0x80); /打開寫保護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ī)定的值0x8

34、0+0x40write_1602dat(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ù)

35、字write_1602com(er+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);/設定顯示位置為第一個位置+addwrite_1602dat(0x30+s

36、w);/數(shù)字+30得到該數(shù)字的lcd1602顯示碼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); bre

37、ak;case 3:write_1602dat(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

38、(a); break;case 7:write_1602dat(s);/星期數(shù)據(jù)為7時顯示 write_1602dat(u); write_1602dat(n); break;/*鍵盤掃描有關函數(shù)*void keyscan()if(key1=0)/-key1為功能鍵(設置鍵)-delay(9);/延時,用于消抖動if(key1=0)/延時后再次確認按鍵按下 buzzer=0;/蜂鳴器短響一次 delay(20); buzzer=1;while(!key1);key1n+;if(key1n=9)key1n=1;/設置按鍵共有秒、分、時、星期、日、月、年、返回,8個功能循環(huán)switch(key1n

39、)case 1: tr0=0;/關閉定時器/tr1=0;write_1602com(er+0x09);/設置按鍵按動一次,秒位置顯示光標 write_1602com(0x0f);/設置光標為閃爍 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位置顯示光標 /write_1602com(0x0f);break;case 3:

40、 write_1602com(er+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次,n

41、ian /write_1602com(0x0f);break;case 8:write_1602com(0x0c);/按動到第8次,設置光標不閃爍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)/當key1按下以下。再按以下鍵才有效(按鍵次數(shù)不等于零)if(key2=0) /上調(diào)鍵delay(10);if(key2=0) buzzer=0;/蜂鳴器

42、短響一次 delay(20); buzzer=1;while(!key2);switch(key1n)case 1:miao+;/設置鍵按動1次,調(diào)秒if(miao=60)miao=0;/秒超過59,再加1,就歸零write_sfm(0x08,miao);/令lcd在正確位置顯示加設定好的秒數(shù)temp=(miao)/10*16+(miao)%10;/十進制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00); /允許寫,禁止寫保護 write_1302(0x80,temp); /向ds1302內(nèi)寫秒寄存器80h寫入調(diào)整后的秒數(shù)據(jù)bcd碼 write_1302(0x8e,

43、0x80); /打開寫保護write_1602com(er+0x09);/因為設置液晶的模式是寫入數(shù)據(jù)后,光標自動右移,所以要指定返回/write_1602com(0x0b);break;case 2:fen+;if(fen=60)fen=0;write_sfm(0x05,fen);/令lcd在正確位置顯示加設定好的分數(shù)據(jù)temp=(fen)/10*16+(fen)%10;/十進制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護 write_1302(0x82,temp);/向ds1302內(nèi)寫分寄存器82h寫入調(diào)整后的分數(shù)據(jù)bcd碼 write

44、_1302(0x8e,0x80);/打開寫保護write_1602com(er+6);/因為設置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,在這里是寫回原來的位置break;case 3:shi+;if(shi=24)shi=0;write_sfm(2,shi);/令lcd在正確的位置顯示加設定好的小時數(shù)據(jù)temp=(shi)/10*16+(shi)%10;/十進制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護 write_1302(0x84,temp);/ds1302內(nèi)寫小時寄存器84h寫入調(diào)整后的小時數(shù)據(jù)bcd碼 write_1302(0x8e

45、,0x80);/打開寫保護write_1602com(er+3);/設置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標回位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;/十進制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護 write_1302(0x8a,temp);/向ds1302內(nèi)寫周寄存器8ah寫入調(diào)整后的周數(shù)據(jù)bcd碼 w

46、rite_1302(0x8e,0x80);/打開寫保護 write_1602com(yh+0x0e);/因為設置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標回位break;case 5:ri+;if(ri=32)ri=1;write_nyr(9,ri);/令lcd在正確的位置顯示加設定好的日期數(shù)據(jù)temp=(ri)/10*16+(ri)%10;/十進制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護 write_1302(0x86,temp);/向ds1302內(nèi)寫日期寄存器86h寫入調(diào)整后的日期數(shù)據(jù)bcd碼 write_1302(0x8e

47、,0x80);/打開寫保護write_1602com(yh+10);/因為設置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標回位break;case 6:yue+;if(yue=13)yue=1;write_nyr(6,yue);/令lcd在正確的位置顯示加設定好的月份數(shù)據(jù)temp=(yue)/10*16+(yue)%10;/十進制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護 write_1302(0x88,temp);/向ds1302內(nèi)寫月份寄存器88h寫入調(diào)整后的月份數(shù)據(jù)bcd碼 write_1302(0x8e,0x80);/打開寫

48、保護write_1602com(yh+7);/因為設置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標回位break;case 7:nian+; if(nian=100)nian=0;write_nyr(3,nian);/令lcd在正確的位置顯示加設定好的年份數(shù)據(jù) temp=(nian)/10*16+(nian)%10;/十進制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護 write_1302(0x8c,temp);/向ds1302內(nèi)寫年份寄存器8ch寫入調(diào)整后的年份數(shù)據(jù)bcd碼 write_1302(0x8e,0x80);/打開寫保護write_1602com(yh+4);/因為設置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論