基于51單片機的液晶顯示萬年歷設(shè)計[共42頁]

上傳人:gfy****yf 文檔編號:40981966 上傳時間:2021-11-18 格式:DOC 頁數(shù):42 大小:758.50KB
收藏 版權(quán)申訴 舉報 下載
基于51單片機的液晶顯示萬年歷設(shè)計[共42頁]_第1頁
第1頁 / 共42頁
基于51單片機的液晶顯示萬年歷設(shè)計[共42頁]_第2頁
第2頁 / 共42頁
基于51單片機的液晶顯示萬年歷設(shè)計[共42頁]_第3頁
第3頁 / 共42頁

下載文檔到電腦,查找使用更方便

12 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《基于51單片機的液晶顯示萬年歷設(shè)計[共42頁]》由會員分享,可在線閱讀,更多相關(guān)《基于51單片機的液晶顯示萬年歷設(shè)計[共42頁](42頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、基于51單片機的液晶顯示萬年歷設(shè)計 摘 要 隨著社會的進(jìn)步和發(fā)展,電子萬年歷作為日常計時工具被廣泛地應(yīng)用。此電子萬年歷在硬件方面主要采用STC89C51單片機作為主控核心,由DS1302時鐘芯片提供時鐘及1602LCD液晶顯示屏顯示。STC89C51單片機是由宏晶公司公司生產(chǎn)的,功耗小,電壓可選用3.4v~5.5v電壓供電;DS1302時鐘芯片是美國DALLAS公司推出的低功耗實時時鐘芯片,它可以對年、月、日、星期、時、分、秒進(jìn)行計時,而且DS1302的使用壽命長,誤差小;對于數(shù)字電子萬年歷采用直觀的數(shù)字顯示,數(shù)字顯示是采用的1602LCD液晶顯示屏來顯示,可以同時顯示年、月、日、星期、時

2、、分、秒、溫度等信息。此外,該電子萬年歷在軟件方面主要包括日歷程序、時間調(diào)整程序,顯示程序等。所有程序編寫完成后,在Keil軟件中進(jìn)行調(diào)試,確定沒有問題后,燒寫到單片機上進(jìn)行測試。 本次課程設(shè)計主要由時鐘芯片DS1302和溫度傳感器DS18B20采集數(shù)據(jù)到單片機進(jìn)行處理再通過LCD1602顯示出來,本設(shè)計主要研究了液晶顯示器LCD及時鐘芯片DS1302,溫度傳感器DS18B20與單片機之間的硬件互聯(lián)及通信,對數(shù)種硬件連接方案進(jìn)行了詳盡的比較。 關(guān)鍵詞:單片機;DS1302;DS18B20;LCD1602 I ABSTRACT With

3、the social progress and development, Electronic calendar is widely used as a daily timing tool. The electronic calendar in hardware using STC89C51 microcontroller as the main control center, provided by the DS1302 clock chip and 1602LCD LCD display. STC89C51 microcontroller is produced by the macro

4、crystal company, small power consumption, the voltage can be choosen among 3.4V ~ 5.5V for power supply; DS1302 clock chip is a low power real-time clock chip produced by DALLAS, it can be a time of years,months,days,weeks,hours,minutes,seconds, and DS1302 has a long service life. The error is small

5、; for the digital electronic calendar using visual digital display, 1602LCD digital display is used to display LCD screen that can display years, months, days, weeks, hours, minutes and seconds, temperature and other information. In addition, the electronic calendar mainly includes calendar program,

6、time to adjust procedures,display program etc in sofeware. After the completion of all the procedures, in the Keil software debugging, determine no problem after, and burning to the microcontroller test. The curriculum design mainly by the clock chip DS1302 and temperature sensor DS18B20 collectin

7、g data to the microcontroller for processing and then through the LCD1602 display, this design mainly studies the liquid crystal display LCD and the clock chip DS1302, the hardware connection and communication between the temperature sensor DS18B20 and the MCU, a number of hardware connection scheme

8、 for a detailed comparison. Key words:SCM,DS1302,DS18B20,LCD1602 II 目 錄 第一章 緒 論 - 1 - 1.1 單片機的概述 - 1 - 1.1.1 單片機的概念 - 1 - 1.1.2 單片機的特點 - 1 - 1.2 課題背景 - 1 - 1.3 課題內(nèi)容 - 2 - 第二章 設(shè)計要求和方案 - 3 - 2.1 設(shè)計要求 - 3 - 2.2 設(shè)計方案 - 3 - 2.2.1 單片機芯片的選擇 - 3 - 2.2.2 各模塊方案選擇 - 3 - 2.3 工作原理 - 4 -

9、 第三章 系統(tǒng)的硬件設(shè)計及實現(xiàn) - 7 - 3.1 電路設(shè)計原理框圖 - 7 - 3.2 STC89C51單片機的介紹 - 7 - 3.2.1 主要功能及性能參數(shù) - 7 - 3.2.2單片機的引腳功能說明 - 8 - 3.3 各模塊電路的設(shè)計及原理圖 - 9 - 3.3.1 時鐘電路模塊的設(shè)計 - 9 - 3.3.2 溫度采集模塊的設(shè)計及原理圖 - 10 - 3.3.3 顯示模塊的設(shè)計及原理 - 11 - 第四章 系統(tǒng)的軟件設(shè)計 - 13 - 4.1 程序流程框圖 - 13 - 4.2 時間調(diào)整程序流程圖 - 14 - 第五章 系統(tǒng)測試 - 15 - 5.1

10、硬件測試 - 15 - 5.2 軟件測試 - 15 - 第六章 總結(jié)與致謝 - 17 - 6.1 總結(jié) - 17 - 6.2 致謝 - 18 - 參考文獻(xiàn) - 19 - 附 錄 - 21 - 附錄一:實物圖 - 21 - 附錄二:源程序 - 22 - 第一章 緒 論 1.1 單片機的概述 1.1.1 單片機的概念 單片機即單片微型計算機,是把中央處理器、存儲器、定時/計數(shù)器、輸入輸出接口都集成在一塊集成電路芯片上的微型計算機。與應(yīng)用在個人電腦中的通用型微處理器相比,它更強調(diào)自供應(yīng)和節(jié)約成本。單片機也被稱為微控制器,是因為它最早被用于工業(yè)控制領(lǐng)域。單片機的

11、芯片內(nèi)僅由CPU的專用處理器發(fā)展而來。最早的設(shè)計理念是通過將大量外圍設(shè)備和CPU集成在一個芯片中,使計算機系統(tǒng)更小,更容易集成復(fù)雜的而對體積要求嚴(yán)格的控制設(shè)備當(dāng)中。 1.1.2 單片機的特點 單片機以其卓越的性能,得到了廣泛的應(yīng)用,已深入到各個領(lǐng)域。單片機應(yīng)用在檢測、控制領(lǐng)域中,具有如下特點: 1、體積小、控制功能強、成本低。因而可以方便地組裝各種智能式控制設(shè)備和儀器,做到機、電、儀一體化。 2、易擴(kuò)展。很容易構(gòu)成各種規(guī)模的應(yīng)用系統(tǒng),為應(yīng)用系統(tǒng)的設(shè)計和生產(chǎn)帶來極大方便。 3、可靠性好、使用溫度范圍寬。在各種惡劣的環(huán)境下都能可靠的工作,這是其他機種無法比擬的。 4、種類多,型號全。很

12、多單片機廠家逐年擴(kuò)大適應(yīng)各種需要,有針對性地推出一系列型號產(chǎn)品,使系統(tǒng)開發(fā)工程師有很大的選擇余地。大部分產(chǎn)品有較好的兼容性,保證了已開發(fā)產(chǎn)品能順利移植,較容易地使產(chǎn)品進(jìn)行升級換代。 5、低功耗?,F(xiàn)在新型單片機的功耗越來越小,供電電壓從5V降低到了3.2V,甚至1V,工作電流從mA降到A級,工作頻率從十幾兆可編程到幾十千赫茲。 1.2 課題背景 生活中我們無時無刻不在與時間聯(lián)系,是時間牽引著我們上班不遲到,日常生活都有著一定的規(guī)律。隨著社會、科技的發(fā)展,人們得知時間,從觀太陽、擺鐘到現(xiàn)在電子鐘的不斷研究、創(chuàng)新。為了在觀測時間的同時能夠了解其它與人類密切相關(guān)的信息,比如溫度、星期、日期等,所

13、以誕生了電子萬年歷,它是集時間、日期、星期和溫度功能于一身,具有讀取方便、顯示直觀、功能多樣、電路簡潔等諸多優(yōu)點,符合電子儀器儀表的發(fā)展趨勢。伴隨著電子技術(shù)的迅速發(fā)展,特別是隨大規(guī)模集成電路出現(xiàn),給人類生活帶來了根本性的改變。尤其是單片機技術(shù)的應(yīng)用產(chǎn)品已經(jīng)走進(jìn)了千家萬戶。 1.3 課題內(nèi)容 單片機以其體積小、功能全、性價比高等諸多優(yōu)點,在工業(yè)控制、家用電器、通信設(shè)備、信息處理、尖端武器等各種測控領(lǐng)域的應(yīng)用中獨占霸主,單片機開發(fā)技術(shù)已成為電子信息、電氣、通信、自動化、機電一體化等專業(yè)技術(shù)人員必須掌握的技術(shù)。用最少的芯片就能實現(xiàn)最強大的功能,這是將來電子產(chǎn)品的主流方向,它將無可置疑地一步步取代

14、其它同類產(chǎn)品,其數(shù)量之大和應(yīng)用面之廣,是其它任何類型的計算機所無法比擬的。 以基于單片機的萬年歷作為設(shè)計的課題,因為它有很好的開放性和可發(fā)揮性,對作者的要求比較高,不僅考察了對單片機的掌握能力而且強調(diào)了對單片機擴(kuò)展的應(yīng)用。另外液晶顯示的萬年歷已經(jīng)越來越流行,特別適合在家庭居室、辦公室、會議室、車站和廣場等地方使用,它具有顯示清晰直觀、走時準(zhǔn)確、可以進(jìn)行夜視等功能,并且還可以擴(kuò)展出其它多種功能。所以,電子萬年歷作為設(shè)計課題很有價值。 本電子萬年歷的設(shè)計在硬件方面主要采用STC89C51單片機作為主控核心,由DS1302時鐘芯片提供時鐘及1602LCD液晶顯示屏顯示。STC89C51單片機是由

15、宏晶公司公司生產(chǎn)的,功耗小,電壓可選用3.4~5.5V電壓供電;DS1302時鐘芯片是美國DALLAS公司推出的低功耗實時時鐘芯片,它可以對年、月、日、星期、時、分、秒進(jìn)行計時,而且DS1302的使用壽命長,誤差小;數(shù)字顯示是采用的LED液晶顯示屏來顯示,可以同時顯示年、月、日、星期、時、分、秒、溫度等信息。所有程序編寫完成后,在Keil軟件中進(jìn)行調(diào)試,確定沒有問題后,燒寫到單片機上進(jìn)行測試。 第二章 設(shè)計要求和方案 2.1 設(shè)計要求 1、可顯示年、月、日、時、分、秒、星期的功能; 2、掉電重啟時,無需重新調(diào)時; 3、具有溫度測定的功能,可準(zhǔn)確顯示當(dāng)前的時間和實時溫度等信息。 2

16、.2 設(shè)計方案 2.2.1 單片機芯片的選擇 本設(shè)計采用STC89C51芯片作為硬件核心,片內(nèi)含8k Bytes的可反復(fù)擦寫1000次的Flash只讀程序存儲器,器件兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲單元,具有在系統(tǒng)可編程特性,配合PC端的控制程序即可將用戶的程序代碼下載進(jìn)單片機內(nèi)部,省去了購買通用編程器,而且速度更快。能與5v電壓工作,當(dāng)在對電路進(jìn)行調(diào)試時,由于程序的錯誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r,避免芯片的多次拔插對芯片造成的損壞。 2.2.2 各模塊方案選擇 1、顯示模塊方案選擇 采用LCD液晶顯示

17、屏,液晶顯示屏的顯示功能強大,可顯示大量文字,圖形,顯示多樣,清晰可見,對于電子萬年歷而言,一個1602的液晶屏即可,價格也還能接受,需要的接口線較多,但給調(diào)試可以帶來諸多方便,所以此設(shè)計中采用LCD1602液晶顯示屏作為顯示模塊。 2、時鐘芯片方案選擇 采用DS1302時鐘芯片實現(xiàn)時鐘,DS1302是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、星期、時、分、秒進(jìn)行計時,工作電壓為2.0V~5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個318的用于臨時性存放數(shù)據(jù)的RAM

18、寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后背電源雙電源引腳,同時提供了對后背電源進(jìn)行涓細(xì)電流充電的能力。主要特點是采用串行數(shù)據(jù)傳輸,可為掉電保護(hù)電源提供可編程的充電功能,并且可以關(guān)閉充電功能。采用普通32.768kHz晶振。因此,本設(shè)計中采用DS1302提供時鐘。 3、溫度傳感器方案選擇 采用數(shù)字式溫度傳感器DS18B20,此類傳感器為數(shù)字式傳感器而且僅需要一條數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸,易于與單片機連接,可以避免A/D模數(shù)轉(zhuǎn)換模塊,降低硬件成本,簡化系統(tǒng)電路。另外,數(shù)字式溫度傳感器還具有測量精度高、測量范圍廣等優(yōu)點。因此,本設(shè)計DS18B20溫度傳感器作

19、為溫度采集模塊。 2.3 工作原理 1、LCD1602工作原理 1602字符型LCD通常有14條引腳線或16條引腳線的LCD,多出來的2條線是背光電源線。1602液晶模塊內(nèi)部的字符發(fā)生存儲器已經(jīng)存儲了160個不同的點陣字符;1602通過D0~D7的8位數(shù)據(jù)端傳輸數(shù)據(jù)和指令。 (1) 顯示模式設(shè)置:(初始化)00111000[0x38]設(shè)置162顯示,57點陣,8位數(shù)據(jù)接口; (2) 顯示開關(guān)及光標(biāo)設(shè)置:(初始化)00001DCBD顯示(1有效)、C光標(biāo)顯示(1有效)、B光標(biāo)閃爍(1有效); (3) 數(shù)據(jù)指針設(shè)置:數(shù)據(jù)首地址為80H,所以數(shù)據(jù)地址為80H+地址碼(0-27H,40-6

20、7H)。 2、DS1302工作原理 (1) DS1302引腳圖如下圖1所示: 圖1 DS1302引腳圖 (2) 管腳描述 X1、X2:32.768KHz晶振管腳; GND:地; RST:復(fù)位腳; I/O:數(shù)據(jù)輸入/輸出引腳; SCLK:串行時鐘; Vcc1、Vcc2:電源供電管腳; DS1302:串行時鐘芯片8腳DIP。 3、DS18B20工作原理 (1) DS18B20的主要特征 u 最高12位分辨率,精度可達(dá)土0.5攝氏度; u 12位分辨率時的最大工作周期為750毫秒; u 可選擇寄生工作方式; u 檢測溫度范圍為–55C~+125C(–67F ~+

21、257F); u 內(nèi)置EEPROM,限溫報警功能; (2) DS18B20芯片的封裝結(jié)構(gòu)如下圖2所示: 圖2 DS18B20封裝圖 (3) 管腳描述 GND:接地; DQ:單數(shù)據(jù)總線; VDD:電源電壓。 第三章 系統(tǒng)的硬件設(shè)計及實現(xiàn) 3.1 電路設(shè)計原理框圖 本設(shè)計主要采用STC89C51單片機作為主控核心,由DS1302時鐘芯片提供時鐘,1602液晶顯示屏提供顯示,按鍵開關(guān)控制時間,DS18B20進(jìn)行溫度采集。其原理圖如圖3所示: 16

22、02液晶顯示屏顯示 DS1302時鐘芯片控制 按鍵控制 STC89C51單片機主控制 DS18B20溫度采集 圖3 系統(tǒng)原理圖 3.2 STC89C51單片機的介紹 3.2.1 主要功能及性能參數(shù) 1、內(nèi)置標(biāo)準(zhǔn)51內(nèi)核,機器周期:增強型為6時鐘,普通型為12時鐘; 2、工作頻率范圍:0~40MHZ,相當(dāng)于普通8051的0~80MHZ; 3、STC89C5xRC對應(yīng)Flash空間:4KB\8KB\15KB; 4、內(nèi)部存儲器(RAM):512B; 5、定時器\計數(shù)器:3個16位; 6、通用異步通信口(UART)1

23、個; 7、通用I\O口:32\36個; 8、工作電壓:3.8~5.5V; 3.2.2單片機的引腳功能說明 STC89C51單片機的引腳圖如圖4所示: 圖4 STC89C51單片機的引腳圖 1、VCC:電源電壓; 2、GND:地; 3、P0口:P0口是一組8位漏極開路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時,每位能吸收電流的方式驅(qū)動8個TTL邏輯門電路,對端口P0寫“1”時可作為高阻抗輸入端用; 4、P1口:P1是一個帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTE邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高

24、電平,此時可作輸入口。作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(ILL); 5、P2口:P2是一個帶有內(nèi)部上拉電阻的8位雙向I/O口,P2的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對端口P2寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口,作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(ILL); 6、P3口:P3口是一組帶有內(nèi)部上拉電阻的8位雙向I/O口。P3口輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對P3口寫入“1”時,它們被內(nèi)部上拉電阻拉高并可作為輸入端口。此時,被外部拉低的

25、P3口將用上拉電阻輸出電流(ILL); P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能,其第二功能如表一所示: 表一 P3口的第二功能 端口引腳 第二功能 P3.0 RXD(串行輸入口) P3.1 TXD(串行輸出口) P3.2 (外中斷0) P3.3 (外中斷1) P3.4 T0(定時/計數(shù)0) P3.5 T1(定時/計數(shù)1) P3.6 (外部數(shù)據(jù)存儲器寫選通) P3.7 (外部數(shù)據(jù)存儲器讀選通) 7、RST:復(fù)位輸入。當(dāng)振蕩器工作時,RST引腳出現(xiàn)兩個機器周期以上高電平將使單片機復(fù)位; 8、XTAL1:振蕩器反相放大器的及內(nèi)部時

26、鐘發(fā)生器的輸入端; 9、XTAL2:振蕩器反相放大器的輸出端。 3.3 各模塊電路的設(shè)計及原理圖 3.3.1 時鐘電路模塊的設(shè)計 1、設(shè)計說明及介紹 DS1302是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘芯片,它可以對年、月、日、周、時、分、秒進(jìn)行計時,工作電壓為2.0V~5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個318的用于臨時性存放數(shù)據(jù)的RAM寄存器。 DS1302的引腳排列中Vcc1為后備電源,Vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運行。DS1302由V

27、cc1或Vcc2兩者中的較大者供電。當(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)。上電運行時,在Vcc>2.0V之前,RST必

28、須保持低電平。只有在SCLK為低電平時,才能將RST置為高電平。 2、原理圖 時鐘電路DS1302芯片的X1和X2接晶振模塊電路,VCC2作為電池電路為時鐘芯片供電,其原理圖如圖5所示: 圖5 時鐘電路原理圖 3.3.2 溫度采集模塊的設(shè)計及原理圖 1、溫度采集模塊的設(shè)計 采用數(shù)字式溫度傳感器DS18B20,它是數(shù)字式溫度傳感器,具有測量精度高,電路連接簡單的特點,此類傳感器僅需要一條數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸,使用P3.5與DS18B20的I/O口連接加一個上拉電阻,Vcc接電源,Vss接地。獨特的一線接口,只需要一條口線通信多點能力,簡化

29、了分布式溫度傳感應(yīng)用無需外部元件可用數(shù)據(jù)總線供電,電壓范圍為3.4V至5.5V無需備用電源 測量溫度范圍為-55度至+125度。-10度至+85度范圍內(nèi)精度為0.5度溫度傳感器可編程的分辨率為9~12位。 2、原理圖 單片機使用P3.0口與DS18B20的2號引腳相接,溫度傳感器采用外部供電方案,由1、3引腳提供電源。電路圖如圖6所示: 圖6 溫度采集電路 3.3.3 顯示模塊的設(shè)計及原理 1、顯示模塊的設(shè)計 采用LCD1602液晶顯示器,單片機P0口作為數(shù)據(jù)輸出口,通過10R的上拉電阻連接到VCC,VCC接5V電源,GND接地。GND為液晶顯示器對比度調(diào)整端,可以通過滑動變阻

30、器RH1調(diào)顯示器的對比度。RS為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器、低電平0時選擇指令寄存器。R/W為讀寫信號線,高電平(1)時進(jìn)行讀操作,低電平(0)時進(jìn)行寫操作。E(或EN)端為使能(enable)端,下降沿使能。BLA、BLK分別為顯示器背光燈的正、負(fù)極。 2、原理圖 顯示電路由1602液晶接口插槽組成,如下圖7所示。使能端EN由單片機P2.2引腳控制,數(shù)據(jù)/命令選擇端由單片機的P0端控制。 圖7 LCD顯示電路 第四章 系統(tǒng)的軟件設(shè)計 4.1 程序流程框圖 主程序流程圖如下圖8所

31、示。由于LCD1602,DS18B20,DS1302的數(shù)據(jù)讀取及指令寫入函數(shù)均已在各自的頭文件中完成,在主程序中只須引用即可。 開始 單片機讀DS1302數(shù)據(jù) 單片機送數(shù)據(jù)到LCD1602 單片機判斷按鍵 單片機處理按鍵調(diào)顯示數(shù)據(jù) 結(jié)束 圖8 主程序流程圖 4.2 時間調(diào)整程序流程圖 由于在硬件電路方面上設(shè)計了時間調(diào)整按鍵和開關(guān),因此應(yīng)有對應(yīng)的時間調(diào)整程序。時間調(diào)整程序的流程圖如下圖9所示。 日加一 減鍵有效 日減一 加鍵有效 Y 控制鍵有效,進(jìn)入日調(diào)整程序 是否執(zhí)行月調(diào)

32、Y 開始 控制鍵有效,進(jìn)入年調(diào)整程序 等待按鍵程序 是否執(zhí)行年調(diào) 加鍵有效 減鍵有效 年加一 年減一 控制鍵有效,進(jìn)入月調(diào)整程序 等待按鍵程序 加鍵有效 減鍵有效 月加一 月減一 N N 等待按鍵程序 是否執(zhí)行日調(diào)日 Y N 控制鍵有效,進(jìn)入星期調(diào)整程序 等待按鍵程序 是否執(zhí)行星期調(diào) 加鍵有效 減鍵有效 星期加一 星期減一 控制鍵有效,進(jìn)入時調(diào)整程 Y N 圖9 時間調(diào)整程序流程圖 第五章 系統(tǒng)測試 5.1 硬件測試 在調(diào)試硬件時遇到過很多問題,但只要細(xì)心、認(rèn)真檢查這些問題都是可以避免的,主要問題及解決辦法如下:

33、(1)認(rèn)真檢查電路是否有短路及斷路的地方,線與線之間,管腳刺破鄰近的漆包線之間是否連接在一起,有的話要用刀劃開,或者重新焊接。 (2)檢查完畢后接通電源后LCD1602沒有正確的顯示。在不通電狀態(tài)下用萬用表檢測電路是否正常連接,在檢查回路時發(fā)現(xiàn)有的點之間看似連接,但由于虛焊導(dǎo)致其并沒有連接,此刻就對焊腳進(jìn)行在焊接直到解決問題。 5.2 軟件測試 由于本系統(tǒng)涉及到多個子程序,多個芯片的編程。首先必須對可編程芯片的控制字即其控制指令要熟記于心。其次,芯片很多都有時鐘輸入端,需要晶振支持。對芯片的讀寫都需要在相應(yīng)的觸發(fā)沿到來時才能進(jìn)行。由于DS18B20是串行通信數(shù)據(jù),只用一個口線傳輸,在處理

34、采集的模擬信號時需要一定的時間,會對延時有較高要求。所以在調(diào)用溫度子程序時,先關(guān)閉定時器1中斷允許,在溫度子程序返回時再打開定時器1中斷允許。 第六章 總結(jié)與致謝 6.1 總結(jié) 在本次課程設(shè)計的過程中,我發(fā)現(xiàn)很多的問題,剛開始著手做電子萬年歷時給我的感覺是模糊,拿到復(fù)雜的電路圖心里有點慌張,但靜下心來經(jīng)過反復(fù)的分析和測試,終于對電路的原理及功能有所理解,同時提高了自己對電路的設(shè)計能力與分析能力及焊接能力。經(jīng)過本次課程設(shè)計,基本完

35、成了設(shè)計任務(wù)的要求。在硬件電路方面,詳盡解析了各個獨立元器件的選擇依據(jù),對三種方案進(jìn)行了全面的比較;在時鐘芯片的選擇上,若直接采用單片機定時計數(shù)器提供秒信號,使用程序?qū)崿F(xiàn)年、月、日、周、時、分、秒計數(shù),采用此種方案雖然可以減少時鐘芯片的使用,節(jié)約成本,但是它實現(xiàn)的時間誤差較大,因此我們小組采用專業(yè)的時鐘芯片DS1302,因為它在對年、月、日、周、時、分、秒進(jìn)行計時時采用串行數(shù)據(jù)傳輸,可為掉電保護(hù)電源提供可編程的充電功能;在顯示模塊的選擇上,若采用LED數(shù)碼管動態(tài)掃描,LED數(shù)碼管價格雖適中,對于顯示數(shù)字也適合,而且采用動態(tài)掃描法與單片機連接時,占用的單片機口線少。但是由于數(shù)碼管動態(tài)掃描需要借助

36、74LS164移位寄存器進(jìn)行移位,該芯片在電路調(diào)試時往往會有很多障礙,因此本次課設(shè)選擇了LCD1602,液晶顯示屏的顯示功能強大,可顯示大量文字,圖形,顯示多樣并且清晰可見;在溫度采集模塊的選擇上,沒有采用熱敏電阻,因為設(shè)計方案需用A/D轉(zhuǎn)換電路,增加硬件成本而且熱敏電阻的感溫特性曲線并不是嚴(yán)格線性的,會產(chǎn)生較大的測量誤差。最后選擇了DS18B20,此類傳感器為數(shù)字式傳感器而且僅需要一條數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸,易于與單片機連接,可以避免A/D模數(shù)轉(zhuǎn)換模塊,降低硬件成本,簡化系統(tǒng)電路。另外,數(shù)字式溫度傳感器還具有測量精度高、測量范圍廣等優(yōu)點。從元件性能和組裝電路后的測試結(jié)果來看,硬件電路的設(shè)計是比較

37、成功的,各個功能都可以實現(xiàn)。 6.2 致謝 這次課程設(shè)計,我一直很努力地去做,過程中得到了老師的悉心指導(dǎo)和同學(xué)們的大力支持及熱心幫助,并對我的設(shè)計提出許多有益的建議,在此對他們表示衷心的感謝。同時也要感謝學(xué)校能給我這次機會去嘗試自己設(shè)計一些東西,使自己所學(xué)專業(yè)知識與實踐能夠結(jié)合起來,最后也要感謝有關(guān)我參考過的文獻(xiàn)的作者,是他們?yōu)槲姨峁┲R的源泉,使我最終能順利地完成這次課程設(shè)計。 在畢業(yè)之際,我衷心地祝愿我的同學(xué)和朋友們在以后的人生道路上越走越寬廣,也深深相信在未來的日子里我們將一路攜手前行,會遇到很多的碰撞和交流,我們將始終記得我們曾在蘭州交通大學(xué)新能源學(xué)院同窗學(xué)習(xí),這將是

38、我克服困難、不斷前進(jìn)的精神動力。 參考文獻(xiàn) [1]胡乾斌,李光斌,李玲.單片微型計算機原理與應(yīng)用.華中科技大學(xué)出版社,1996 [2]劉勇.?dāng)?shù)字電路.電子工業(yè)出版社,2004 [3]楊子文.單片機原理及應(yīng)用.西安電子科技大學(xué)出版社,2006 [4]王萍.電子技術(shù)實驗教程.機械工業(yè)出版社,2009 [5]沈紅衛(wèi).單片機應(yīng)用系統(tǒng)設(shè)計實例與分析,北京:北京航空航天大學(xué)出版社.2003 [6]李光飛.單片機課程設(shè)計實例指導(dǎo),北京:北京航空航天大學(xué)出版社.2004 [7]王法能.單片機原理及應(yīng)用,科學(xué)出版社. 2

39、004 [8]樓然苗,李光飛.51系列單片機設(shè)計實例[M].北京航空航天大學(xué)出版社,2003 [9]朱定華,戴汝平.單片微機原理與應(yīng)用[M].清華大學(xué)出版社,2003 [10]胡漢才.單片機原理與接口技術(shù)[M].清華大學(xué)出版社,2004 附 錄 附錄一:實物圖 附錄二:源程序 #include #include sbit DSPORT=P3^0; #defi

40、ne uint unsigned int #define uchar unsigned char //ds1302IO sbit DSIO=P1^1; sbit RST=P1^2; sbit SCLK=P1^0; #define LCD1602_DATAPINS P0 sbit LCD1602_E=P2^2; sbit LCD1602_RW=P2^1; sbit LCD1602_RS=P2^0; sbit SET_KEY=P3^7; sbit ADD_KEY=P3^6; sbit SUB_KEY=P3^5; sbit DETERMINE_KEY=P3^4; uns

41、igned char Set_Step = 0; #define NormalRun 0 #define SetYear 1 #define SetMon 2 #define SetDay 3 #define SetHour 4 #define SetMin 5 #define SetSec 6 #define SetWeek 7 void Ds1302Write(unsigned char addr,unsigned char dat); unsigned char Ds1302Read(unsigned char addr); void Ds1302Init();

42、void Ds1302ReadTime(); void Delay1ms(unsigned int ); unsigned char Ds18b20Init(); void Ds18b20WriteByte(unsigned char com); unsigned char Ds18b20ReadByte(); void Ds18b20ChangTemp(); void Ds18b20ReadTempCom(); int Ds18b20ReadTemp(); /*在51單片機12MHZ時鐘下的延時函數(shù)*/ //void Delay1us(uint a); void De

43、lay10us(uint c); //誤差 0us /*LCD1602寫入8位命令子函數(shù)*/ void LcdWriteCom(uchar com); /*LCD1602寫入8位數(shù)據(jù)子函數(shù)*/ void LcdWriteData(uchar dat) ; /*LCD1602初始化子程序*/ void LcdInit(); void LcdDisplay(); void Key_Scan(); //DS1302寫入和讀取時分秒的地址命令 unsigned char READ_RTC_ADDR[7]={0x81,0

44、x83,0x85,0x87,0x89,0x8b,0x8d}; //秒分時日月周年 最低位讀寫位}; unsigned char WRITE_RTC_ADDR[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //DS1302時鐘初始化2013年1月1日星期二12點00分00秒。存儲順序是秒分時日月周年,存儲格式是用BCD碼 unsigned char TIME[7]={0x0, 0x0, 0x12, 0x30, 0x9, 0x3, 0x15}; unsigned char Time1outNum = 0; int readVal = 0; void

45、Ds1302Write(unsigned char addr,unsigned char dat) { unsigned char n; SCLK=0; //先將SCLK置低電平。 _nop_(); RST=1; //然后將RST(CE)置高電平。 _nop_(); for(n=0;n<8;n++) //開始傳送八位地址命令 { DSIO=addr&0x01;

46、 //數(shù)據(jù)從低位開始傳送 addr>>=1; SCLK=1; //數(shù)據(jù)在上升沿時,DS1302讀取數(shù)據(jù) _nop_(); SCLK=0; _nop_(); } for(n=0;n<8;n++) //寫入8位數(shù)據(jù) { DSIO=dat&0x01; dat>>=1; SCLK=1; //數(shù)據(jù)在上升沿時,DS1302讀取數(shù)據(jù) _nop_(); SCLK=0; _n

47、op_(); } RST=0; //傳送數(shù)據(jù)結(jié)束 _nop_(); } unsigned char Ds1302Read(unsigned char addr) { unsigned char n,dat,dat1; SCLK=0; //先將SCLK置低電平。 _nop_(); RST=1; //然后將RST(CE)置高電平。 _nop_(); for(

48、n=0;n<8;n++) //開始傳送八位地址命令 { DSIO=addr&0x01; //數(shù)據(jù)從低位開始傳送 addr>>=1; SCLK=1; //數(shù)據(jù)在上升沿時,DS1302讀取數(shù)據(jù) _nop_(); SCLK=0; //DS1302下降沿時,放置數(shù)據(jù) _nop_(); } _nop_(); for(n=0;n<8;n++)

49、 //讀取8位數(shù)據(jù) { dat1=DSIO; //從最低位開始接收 dat=(dat>>1)|(dat1<<7); SCLK =1; _nop_(); SCLK=0; //DS1302下降沿時,放置數(shù)據(jù) _nop_(); } RST=0; _nop_(); //以下為DS1302復(fù)位的穩(wěn)定時間,必須的。 SCLK=1; _nop_(); DSIO=0; _

50、nop_(); DSIO=1; _nop_(); return dat; } void Ds1302Init() { unsigned char n; Ds1302Write(0x8E,0X00); //禁止寫保護(hù),就是關(guān)閉寫保護(hù)功能 for(n=0;n<7;n++) //寫入7個字節(jié)的時鐘信號:分秒時日月周年 { Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]); } Ds1302Write(0x8E,0x80); //打開寫

51、保護(hù)功能 } void Ds1302ReadTime() { unsigned char n; for(n=0;n<7;n++) //讀取7個字節(jié)的時鐘信號:分秒時日月周年 { TIME[n]=Ds1302Read(READ_RTC_ADDR[n]); } } void Delay10us(uint c) //誤差 0us { unsigned int a,b; for(b=c;b>0;b--) for(a=2;a>0;a--); } void

52、 Delay1ms(unsigned int y) { unsigned int x; for(y;y>0;y--) for(x=110;x>0;x--); } unsigned char Ds18b20Init() { unsigned int i; DSPORT=0; //將總線拉低480us~960us i=70; while(i--);//延時642us DSPORT=1; //然后拉高總線,如果DS18B20做出反應(yīng)會將在15us~60us

53、后總線拉低 i=0; while(DSPORT) //等待DS18B20拉低總線 { i++; if(i>5000) //等待>5MS return 0; //初始化失敗 } return 1; //初始化成功 } void Ds18b20WriteByte(unsigned char dat) { unsigned int i,j; for(j=0;j<8;j++) {

54、 DSPORT=0; //每寫入一位數(shù)據(jù)之前先把總線拉低1us i++; DSPORT=dat&0x01; //然后寫入一個數(shù)據(jù),從最低位開始 i=6; while(i--); //延時68us,持續(xù)時間最少60us DSPORT=1; //然后釋放總線,至少1us給總線恢復(fù)時間才能接著寫入第二個數(shù)值 dat>>=1; } } unsigned char Ds18b20ReadByte() { unsi

55、gned char byte,bi; unsigned int i,j; for(j=8;j>0;j--) { DSPORT=0; //先將總線拉低1us i++; DSPORT=1; //然后釋放總線 i++; i++; //延時6us等待數(shù)據(jù)穩(wěn)定 bi=DSPORT; //讀取數(shù)據(jù),從最低位開始讀取 /*將byte左移一位,然后與上右移7位后的bi,注意移動之后移掉那位補0。*/

56、 byte=(byte>>1)|(bi<<7); i=4; //讀取完之后等待48us再接著讀取下一個數(shù) while(i--); } return byte; } void Ds18b20ChangTemp() { Ds18b20Init(); Delay1ms(1); Ds18b20WriteByte(0xcc); //跳過ROM操作命令 Ds18b20WriteByte(0x44); //溫度轉(zhuǎn)換命令 Delay1ms(100); } void Ds18b2

57、0ReadTempCom() { Ds18b20Init(); Delay1ms(1); Ds18b20WriteByte(0xcc); //跳過ROM操作命令 Ds18b20WriteByte(0xbe); //發(fā)送讀取溫度命令 } int Ds18b20ReadTemp() { int temp=0; unsigned char tmh,tml; Ds18b20ChangTemp(); //先寫入轉(zhuǎn)換命令 Ds18b20ReadTempCom(); //然后等待轉(zhuǎn)換完后發(fā)送讀取溫度命令 tm

58、l=Ds18b20ReadByte(); //讀取溫度值共16位,先讀低字節(jié) tmh=Ds18b20ReadByte(); //再讀高字節(jié) temp=tmh; temp<<=8; temp|=tml; return temp; } void LcdWriteCom(uchar com) //寫入命令 { LCD1602_E=0; LCD1602_RS=0; LCD1602_RW=0; LCD1602_DATAPINS=com; Delay10us(1); LCD1602_E=1; Delay10us(1);

59、 LCD1602_E=0; } void LcdWriteData(uchar dat) //寫入數(shù)據(jù) { LCD1602_E=0; LCD1602_RS=1; LCD1602_RW=0; LCD1602_DATAPINS=dat; Delay10us(1); LCD1602_E=1; Delay10us(1); LCD1602_E=0; } void LcdInit() //LCD初始化子程序 { LcdWriteCom(0x38); //開顯示 LcdWriteCom(0x0c)

60、; //開顯示不顯示光標(biāo) // LcdWriteCom(0x0f); LcdWriteCom(0x06); //寫一個指針加1 LcdWriteCom(0x01); //清屏 LcdWriteCom(0x80); //設(shè)置數(shù)據(jù)指針起點 } void LcdDisplay() { int tmp = 0; char tmpH = 50; char tmpL = 0; unsigned char fh, ge, shi, xs; //定義數(shù)組 float tp; tmp = readVal; if(

61、tmp< 0) //當(dāng)溫度值為負(fù)數(shù) { //因為讀取的溫度是實際溫度的補碼,所以減1,再取反求出原碼 tmp=tmp-1; tmp=~tmp; tp=tmp; tmp=tp*0.0625*10+0.5; //留一個小數(shù)點就*10,+0.5是四舍五入,因為C語言浮點數(shù)轉(zhuǎn)換為整型的時候把小數(shù)點 //后面的數(shù)自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進(jìn)1了,小于0.5的就 //算加上0.5,還是在小數(shù)點后面。 fh = -; } else { tp=tmp;//因為

62、數(shù)據(jù)處理有小數(shù)點所以將溫度賦給一個浮點型變量 //如果溫度是正的那么,那么正數(shù)的原碼就是補碼它本身 tmp=tp*0.0625*10+0.5; //留一個小數(shù)點就*10,+0.5是四舍五入,因為C語言浮點數(shù)轉(zhuǎn)換為整型的時候把小數(shù)點 //后面的數(shù)自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進(jìn)1了,小于0.5的就 //算加上0.5,還是在小數(shù)點后面。 fh = ; } shi = tmp % 1000 / 100; //顯示溫度十位數(shù) ge = tmp % 100 / 10;

63、 //顯示溫度個位數(shù)+小數(shù)點 xs = tmp % 10; //顯示小數(shù)一位 LcdWriteCom(0x80+0X40); LcdWriteData(0+TIME[2]/16); //時 LcdWriteData(0+((TIME[2]%16)&0x0f)); LcdWriteData(:); LcdWriteData(0+TIME[1]/16); //分 LcdWriteData(0+((TIME[1]%16)&0x

64、0f)); LcdWriteData(:); LcdWriteData(0+TIME[0]/16); //秒 LcdWriteData(0+((TIME[0]%16)&0x0f)); LcdWriteCom(0x80+0X4A); LcdWriteData(fh); LcdWriteData(0+shi); LcdWriteData(0+ge); LcdWriteData(.); LcdWriteData(0+xs); LcdWriteData(C); LcdWriteCom(0x80); LcdWriteData(2)

65、; LcdWriteData(0); LcdWriteData(0+TIME[6]/16); //年 LcdWriteData(0+((TIME[6]%16)&0x0f)); LcdWriteData(-); LcdWriteData(0+TIME[4]/16); //月 LcdWriteData(0+((TIME[4]%16)&0x0f)); LcdWriteData(-); LcdWriteData(0+TIME[3]/16); //日 LcdWriteData(0+((TIME[3

66、]%16)&0x0f)); LcdWriteCom(0x8D); LcdWriteData(W); //星期 LcdWriteData(0+((TIME[5]-1)&0x07)); //周 } void Key_Scan() { if(SET_KEY == 0) { Delay10us(5000); if(SET_KEY == 0) { LcdWriteCom(0x0f); //顯示光標(biāo) switch(Set_Step) { case NormalRun: LcdWriteCom(0x83); //設(shè)置guangbiao Set_Step = SetYear; break; case SetYear: LcdWriteCom(0x86); //設(shè)置guangbiao

展開閱讀全文
溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!