基于ARM7與DS18B20的數(shù)字溫度計的設計說明_第1頁
基于ARM7與DS18B20的數(shù)字溫度計的設計說明_第2頁
基于ARM7與DS18B20的數(shù)字溫度計的設計說明_第3頁
基于ARM7與DS18B20的數(shù)字溫度計的設計說明_第4頁
基于ARM7與DS18B20的數(shù)字溫度計的設計說明_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

東北林業(yè)大學畢業(yè)論文.PAGE0.....東北林業(yè)大學畢業(yè)論文.PAGE0...........東北林業(yè)大學綜合電子課程設計總結報告設計項目:基于ARM7與DS18B20的數(shù)字溫度計的設計項目完成人:指導學院:信息與計算機工程學院專業(yè):電子信息工程2008級3班2011年綜合電子課程設計任務書學生姓名學號專業(yè)〔班級08級電信3班同組成員設計項目基于ARM7與DS18B20的數(shù)字溫度計的設計設計內(nèi)容本設計利用DS18B20智能溫度傳感器、ARM7LPC2131嵌入式系統(tǒng)、MS12864LCD液晶屏,設計一個數(shù)字溫度采集系統(tǒng)。人機接口電路的設計:控制系統(tǒng)采用ARM7LPC2131,鍵盤采用獨立按鍵,顯示器采用MS12864液晶屏,溫度超限報警采用LED。主要技術指標和要求測量溫度范圍:-50℃~150℃精度:±0.5℃線性度:±0.3℃超限報警功能;具有溫度和時間顯示功能;工作電壓:總線供電。設計所用儀器設備ARM7LPC2138小系統(tǒng);高精度溫度計;數(shù)字萬用表;示波器。工作計劃1.2011年6月22日:下達課程設計任務書;2.2011年6月23日:撰寫開題報告;3.2011年6月25日:開題答辯PPT;4.2011年6月26日~6月27日:硬件分析與設計、軟件結構化設計;5.2011年6月28日~7月96.2011年7月10日:課程設計結題驗收參考資料溫度傳感器DS18B20芯片資料液晶屏MS12864R中文資料嵌入式ARM7LPC2131開發(fā)板系統(tǒng)原理指導教師簽子系主任簽字數(shù)字溫度計的設計摘要本系統(tǒng)用ARM7LPC2131、溫度傳感器DS18B20、液晶屏12864、LED等組成,系統(tǒng)可實現(xiàn)實時顯示當前室內(nèi)溫度功能。系統(tǒng)除基本數(shù)字溫度計功能外,還具有顯示當前時間和日期、溫度超限報警、設置時間和日期初值功能。在設計中我們應用ARM7開發(fā)板。ARM7開發(fā)板具有豐富的硬件資源。本設計采用LPC2131控制可編程芯片DS18B20實現(xiàn)對溫度的采集。利用LPC213內(nèi)部時鐘資源采集時間和日期。溫度、時間和日期通過液晶屏12864顯示,溫度超限報警通過LED閃爍提示。本文詳細介紹了如何實現(xiàn)對DS18B20編程采集溫度功能,以及如何采集ARM7LPC2131內(nèi)部時鐘資源,并實現(xiàn)鍵盤輸入修改日期時間、溫度超限報警等功能。關鍵詞:LPC2131;DS18B20;12864;溫度超限報警;.....目錄1緒論21.1引言….21.2系統(tǒng)方案設計31.3方案論證32系統(tǒng)主要器件選型與依據(jù)42.1EasyARM2131開發(fā)板42.2溫度傳感器DS18B2052.3MS12864R液晶屏簡介63系統(tǒng)的硬件設計93.1ARM7開發(fā)板硬件設計93.2LCD液晶屏顯示設計93.3DS18B20溫度傳感器的設計104系統(tǒng)的軟件設計114.1系統(tǒng)主流程圖114.2溫度傳感器功能模塊124.3液晶顯示功能模塊125總結13參考文獻附錄A數(shù)字溫度計設計1緒論1.1引言近年來隨著科技的飛速發(fā)展,嵌入式的應用正在不斷深入,同時帶動傳統(tǒng)控制檢測技術日益更新。在實時檢測和自動控制的嵌入式應用系統(tǒng)中,嵌入式往往作為一個核心部件來使用,僅嵌入式方面知識是不夠的,還應根據(jù)具體硬件結構軟硬件結合,加以完善。溫度是一種最基本的環(huán)境參數(shù),人們生活與環(huán)境溫度息息相關,在工業(yè)生產(chǎn)過程中需要實時測量溫度,在工業(yè)生產(chǎn)中也離不開溫度的測量,因此研究溫度的測量方法和控制具有重要的意義。DS18B20是美國DALLAS半導體公司繼DS1820之后最新推出的一種改進型智能溫度傳感器,通過此次項目設計,可以在原有的理論基礎上,更加深入的了解傳感器的工作原理特別是DS18B20溫度傳感器的工作原理,同時提高我們的實踐動手能力以及邏輯思維能力,特別是拓寬了對ARM控制器的使用視野。數(shù)字溫度計的控制方式很多。本系統(tǒng)采用LPC2000系列ARM芯片和可編程串行I/O接口芯片DS18B20為中心器件來設計數(shù)字溫度計,實現(xiàn)了設計一個數(shù)字溫度采集系統(tǒng),利用LCD液晶屏顯示當前溫度、時間和日期,并具有溫度超限報警功能1.2系統(tǒng)方案設計利用控制芯片、溫度傳感器、LCD液晶屏、時鐘資源、LED等分別實現(xiàn):〔1實時顯示當前室內(nèi)溫度〔2顯示年、月、日、星期、時、分、秒;〔3能夠通過鍵盤輸入日期和時間的初值;〔4溫度超限報警;圖1-1為設計方案總體框圖溫度溫度傳感器顯示ARM7LPC2131報警模塊按鍵圖1-1設計方案總體框圖系統(tǒng)初始化后,LCD上顯示當前室內(nèi)溫度,同時LCD上顯示時間和日期,通過功能鍵能實現(xiàn)日期和時間的初值設定,如果溫度超過預先設定的溫度值,八個LED燈會閃爍提示溫度超限。1.3方案論證<1>顯示模塊方案一:使用LCD液晶屏12864作為時間日期顯示,LCD液晶顯示器的構造是在兩片平行的玻璃當中放置液態(tài)的晶體,兩片玻璃中間有許多垂直和水平的細小電線,透過通電與否來控制桿狀水晶分子改變方向,將光線折射出來產(chǎn)生畫面。顯示清晰,實現(xiàn)功能全。方案二:使用8為數(shù)碼管作為顯示,通過芯片HD7279控制數(shù)碼管,可實現(xiàn)時間和日期還有當前溫度顯示,缺點是數(shù)碼管顯示數(shù)字,顯示不靈活多變。由于LCD可同時顯示溫度和時間,顯示清晰,實現(xiàn)功能全。故選用方案一LCD12864作為顯示模塊。<2>溫度傳感器DS18B20數(shù)字溫度傳感器,該產(chǎn)品采用美國DALLAS公司生產(chǎn)的DS18B20可組網(wǎng)數(shù)字溫度傳感器芯片封裝而成,具有耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設備數(shù)字測溫和控制領域。由于DS18B20性能已經(jīng)夠好,控制起來也比較方便,故不需要對比,直接選用DS18B20作為溫度傳感器〔3>時鐘電路模塊方案一:DS1302一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個31×8的用于臨時性存放數(shù)據(jù)的RAM寄存器。方案二:ARM7LPC2131具有豐富的硬件資源,直接編程即可使用內(nèi)部時鐘資源由于使用DS1302還得外接電路而且編程比較麻煩,故選用ARM7內(nèi)部時鐘資源〔4報警電路報警電路采用8只LED,控制方便、準確。2系統(tǒng)主要器件選型及依據(jù)2.1EasyARM2131開發(fā)板EasyARM2131開發(fā)板是XX周立功公司設計的EasyARM系列開發(fā)套件之一,采用了PHILIPS公司基于AM7TDMS核單電源供電LQFP64封裝的LPC2131具有JAG仿真調(diào)試、ISP編程等功能。開發(fā)板上提供了一些鍵盤、LED、蜂鳴器等常用功能部件,還具有RS232接口電路、I2C存儲器電路另外用戶也可以更換兼容的CPU進行仿真調(diào)試如LPC2132LPC2138、LPC2142等。靈活的跳線組合〔開發(fā)板內(nèi)使用的所有I/O均可斷開連接,還有用戶I/O接口,極大地方便了用戶進行32位AREasyARM2131實驗板功能特點:*完全自主設計的軟硬件、擁有自主版權的JTAG仿真技術;*支持ADS1.2集成開發(fā)環(huán)境及其PHILIPS所有型號ARM微控制器的仿真與開發(fā);*采用"主板+CPUPACK適配器+SD卡適配器〔標準配置+多種可選配置適配器"*的形式構成EasyARM2131開發(fā)套件,標準配置的CPUPACK主芯片為LPC2131FBD;*板上的功能部件與CPU之間,可以使用跳線器選擇連接;*全面支持9種型號的64PIN小管腳ARM7微控制器:-LPC213x〔LPC2131/2132/2134/2136/2138-內(nèi)置USB接口的LPC214x<LPC2142/2144/2146/2148>*多種免費商業(yè)化軟件包及其詳細的開發(fā)文檔:*移植μC/OS-II到ARM7軟件包*數(shù)據(jù)隊列軟件包*串口驅(qū)動軟件包*MODEM接口軟件包*SPI總線軟件包*I2C總線軟件包*ZLG/FSV1.0版本文件管理系統(tǒng)軟件包*ZLG/GUI圖形用戶界面軟件包*ZLG/SD卡讀寫軟件包*ZLG/USB固件程序及其驅(qū)動程序軟件包*多種可選配置適配器:-各種型號的CPUPACK,用戶可按需求和喜好配置主ARM芯片-MG12864點陣圖型液晶模塊*所有I/O口全部引出,方便用戶連接外部電路的開發(fā)與使用;*可進行GPIO的控制實驗,如鍵盤輸入、蜂鳴器控制、模擬SPI等;*6個獨立按鍵<可用于外部中斷、定時器捕獲輸入>,8個LED指示燈;*具有RS232轉(zhuǎn)換電路,可與上位機進行通訊,完成UART通訊實驗;*可以與標準串行modem直接接口,方便遠程通訊;*具有I2C接口和SPI/SSP接口輸出;*提供基于PC的人機界面,方便調(diào)試實時時鐘、串口通信等功能;*可進行外部中斷實驗,學習向量中斷控制器<VIC>;*定時器控制實驗,如定時控制LED、定時器捕獲等;*使用板內(nèi)的CAT1025〔內(nèi)含復位功能,完成I2C總線的實驗;*使用74HC595芯片,實現(xiàn)SPI接口數(shù)據(jù)發(fā)送、接收實驗;*A/D轉(zhuǎn)換實驗;DAC轉(zhuǎn)換實驗〔更換CPU為LPC2132及以上;*實時時鐘控制實驗;*WDT及低功耗控制實驗;*54個基礎實驗及其大量的中間件軟件包,完整地驗證了幾乎所有的硬件功能資源;*詳細的配套資料<《深入淺出ARM7—LPC213x/214x》<上/下冊>,北航出版社,其中上冊為標準配置>。2.2溫度傳感器DS18B20DS18B20數(shù)字溫度計是DALLAS公司生產(chǎn)的1-Wire,即單總線器件,具有線路簡單,體積小的特點。因此用它來組成一個測溫系統(tǒng),具有線路簡單,在一根通信線,可以掛很多這樣的數(shù)字溫度計,十分方便。

DS18B20產(chǎn)品的特點

〔1、只要求一個端口即可實現(xiàn)通信。

〔2、在DS18B20中的每個器件上都有獨一無二的序列號。

〔3、實際應用中不需要外部任何元器件即可實現(xiàn)測溫。

〔4、測量溫度范圍在-55。C到+125。C之間。

〔5、數(shù)字溫度計的分辨率用戶可以從9位到12位選擇。

〔6、內(nèi)部有溫度上、下限告警設置。DS18B20的引腳介紹

TO-92封裝的DS18B20的引腳排列見圖1,其引腳功能描述見表1。DS18B20的使用方法

由于DS18B20采用的是1-Wire總線協(xié)議方式,即在一根數(shù)據(jù)線實現(xiàn)數(shù)據(jù)的雙向傳輸,而對AT89S51單片機來說,硬件上并不支持單總線協(xié)議,因此,我們必須采用軟件的方法來模擬單總線的協(xié)議時序來完成對DS18B20芯片的訪問。

由于DS18B20是在一根I/O線上讀寫數(shù)據(jù),因此,對讀寫的數(shù)據(jù)位有著嚴格的時序要求。DS18B20有嚴格的通信協(xié)議來保證各位數(shù)據(jù)傳輸?shù)恼_性和完整性。該協(xié)議定義了幾種信號的時序:初始化時序、讀時序、寫時序。所有時序都是將主機作為主設備,單總線器件作為從設備。而每一次命令和數(shù)據(jù)的傳輸都是從主機主動啟動寫時序開始,如果要求單總線器件回送數(shù)據(jù),在進行寫命令后,主機需啟動讀時序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。

DS18B20的復位時序DS18B20的讀時序

對于DS18B20的讀時序分為讀0時序和讀1時序兩個過程。

對于DS18B20的讀時隙是從主機把單總線拉低之后,在15秒之內(nèi)就得釋放單總線,以讓DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩€上。DS18B20在完成一個讀時序過程,至少需要60us才能完成。DS18B20的寫時序

對于DS18B20的寫時序仍然分為寫0時序和寫1時序兩個過程。

對于DS18B20寫0時序和寫1時序的要求不同,當要寫0時序時,單總線要被拉低至少60us,保證DS18B20能夠在15us到45us之間能夠正確地采樣IO總線上的"0”電平,當要寫1時序時,單總線被拉低之后,在15us之內(nèi)就得釋放單總線。2.3MS12864R液晶屏簡介MS12864R漢字圖形點陣液晶顯示模塊,可顯示漢字及圖形,內(nèi)置8192個中文漢字〔16X16點陣、128個字符〔8X16點陣及64X256點陣顯示RAM〔GDRAM。主要技術參數(shù)和顯示特性:電源:VDD3.3V~+5V<內(nèi)置升壓電路,無需負壓>;顯示內(nèi)容:128列×64行顯示顏色:黃綠顯示角度:6:00鐘直視LCD類型:STN與MCU接口:8位或4位并行/3位串行配置LED背光多種軟件功能:光標顯示、畫面移位、自定義字符、睡眠模式等模塊引腳說明MS128X64R引腳說明引腳號引腳名稱方向功能說明1VSS-模塊的電源地2VDD-模塊的電源正端3V0-LCD驅(qū)動電壓輸入端4RS<CS>H/L并行的指令/數(shù)據(jù)選擇信號;串行的片選信號5R/W<SID>H/L并行的讀寫選擇信號;串行的數(shù)據(jù)口6E<CLK>H/L并行的使能信號;串行的同步時鐘7DB0H/L數(shù)據(jù)08DB1H/L數(shù)據(jù)19DB2H/L數(shù)據(jù)210DB3H/L數(shù)據(jù)311DB4H/L數(shù)據(jù)412DB5H/L數(shù)據(jù)513DB6H/L數(shù)據(jù)614DB7H/L數(shù)據(jù)715PSBH/L并/串行接口選擇:H-并行;L-串行16NC空腳17/RETH/L復位低電平有效18VOUT19LED_K-背光源負極〔LED-OV20LED_A-背光源正極〔LED+5V邏輯工作電壓<VDD>:4.5~5.5V電源地<GND>:0V工作溫度<Ta>:0~60℃<常溫>/-20~75℃〔寬溫接口時序模塊有并行和串行兩種連接方法〔時序如下:8位并行連接時序圖MPU寫資料到模塊MPU從模塊讀出資料串行連接時序圖串行數(shù)據(jù)傳送共分三個字節(jié)完成:第一字節(jié):串口控制—格式11111ABCA為數(shù)據(jù)傳送方向控制:H表示數(shù)據(jù)從LCD到MCU,L表示數(shù)據(jù)從MCU到LCDB為數(shù)據(jù)類型選擇:H表示數(shù)據(jù)是顯示數(shù)據(jù),L表示數(shù)據(jù)是控制指令C固定為0第二字節(jié):<并行>8位數(shù)據(jù)的高4位—格式DDDD0000第三字節(jié):<并行>8位數(shù)據(jù)的低4位—格式0000DDDD串行接口時序參數(shù):<測試條件:T=25℃硬件設計3.1ARM7開發(fā)板硬件設計系統(tǒng)原理圖設計如圖3-1所示,ARM7LPC213系統(tǒng)實現(xiàn)如下功能:〔1控制溫度傳感器DS18B20讀取當前溫度值;〔2控制ARM7內(nèi)部時鐘資源讀取時間和日期;〔3控制LCD液晶屏顯示當前溫度、時間和日期;〔4控制LED溫度超限報警。圖3-1系統(tǒng)原理圖3.2LCD液晶屏顯示設計:LCD液晶屏顯示電路如圖3-2所示。該液晶可實現(xiàn)顯示當前年、月、日、周、時、分秒和溫度值,具體控制和實現(xiàn)方法如下:〔1ARM7的P0.0-P0.7口連接液晶屏的DBO-DB7,控制對液晶屏并行數(shù)據(jù)讀和寫;〔2ARM7的P0.8口連接液晶屏的RS口,控制并行的指令/數(shù)據(jù)選擇信號;〔3ARM7的P0.9口連接液晶屏的R/W口,控制并行的讀寫選擇信號;〔4ARM7的P0.10口連接液晶屏的EN口,控制并行的使能信號;;〔5ARM7的P0.11口連接液晶屏的PSB口,控制并/串行接口選擇:H-并行;L-串行;〔6ARM7的P0.12口連接液晶屏的RET口,實現(xiàn)對液晶屏的復位,低電平有效;圖3-2LCD液晶屏電路圖3.3DS18B20溫度傳感器的設計電路如圖3-3所示,該溫度傳感器電路可實現(xiàn)對溫度傳感器DS18B20數(shù)據(jù)的讀寫,具體控制方法如下:ARM7的P0.30口連接DS18B20的DQ口,控制串行數(shù)據(jù)的讀和寫;DS18B20的VDD連接到ARM7開發(fā)板的VDD上;DS18B20的GND連接到ARM7開發(fā)板的GND上;圖3-3溫度傳感器電路4系統(tǒng)的軟件設計4.1系統(tǒng)主流程圖圖4-1為系統(tǒng)主流程圖,主流程圖具體介紹如下:〔1系統(tǒng)初始化包括對DS18B20進行初始化、設定GPIO、RTC初始化、液晶屏初始化;〔2初始化之后顯示當前室內(nèi)溫度同時顯示日期和時間;〔3與此同時進行按鍵判斷,如果有按鍵繼續(xù)判斷是什么按鍵,如果是修改時間按鍵那么修改時間;如果是修改日期按鍵那么修改日期。如沒有按鍵按下,那么判斷室內(nèi)溫度是否超過預先設定值,如果超過驅(qū)動LED閃爍報警。開始開始系統(tǒng)初始化顯示時間、日期、溫度有按鍵?NYNY修改年?修改年值NY修改月?修改月值NY修改日?修改日值NY修改周?修改周值NY修改時?修改時值NY修改分?修改分值溫度超過限?YNLED閃爍報警圖4-1系統(tǒng)主流程圖4.2溫度傳感器功能模塊圖4-2為溫度傳感器功能模塊流程圖;開始開始初始化溫度傳感器向溫度傳感器寫指令讀取溫度傳感器數(shù)據(jù)數(shù)據(jù)轉(zhuǎn)化為溫度顯示結束圖4-2溫度傳感器功能模塊流程圖4.3液晶顯示功能模塊圖4-3為液晶顯示功能模塊流程圖;開始開始LCD初始化寫命令到LCD寫數(shù)據(jù)到LCD顯示圖4-3液晶顯示功能模塊流程圖5總結本系統(tǒng)利用控制芯片、溫度傳感器、LCD液晶屏、LED等分別實現(xiàn):〔1實時顯示當前室內(nèi)溫度〔2顯示年、月、日、星期、時、分、秒;〔3能夠通過鍵盤輸入日期和時間的初值;〔4溫度超限報警;系統(tǒng)設計簡便、實用性強、操作簡單、程序設計簡便。系統(tǒng)不足:時間和日期初值設定中利用按鍵較多,此外還沒有充分考慮到溫度超限報警的多變性,溫度報警上限不可調(diào)節(jié),只能預先程序中設定超限報警溫度值。一周的綜合電子工藝課程設計結束了,可能在別人看來,這或許只是一個小的設計,可是它給于我的卻不僅僅是這樣,認真的做課程設計,運用ARM做一個系統(tǒng)的東西,我從心里給予了足夠的重視。剛開始做總是出問題,多次重新分析,從細節(jié)著手尋找問題,最后找到了。發(fā)現(xiàn)自己想象的太多、太復雜,實際上只需要很簡單的一種方法就可以的,問題解決了,也給我很多收獲。我覺得自己的方法不可行,關鍵的原因在于自己對ARM的工作原理沒有透徹的理解,所以就不能很好的理解老師的設計要求,結果就造成了很多的彎路,找不到一種合理的途徑去解決問題。希望以后有機會可以多做一些這樣的設計,增強自己的設計意識,加深所學的知識。參考文獻[1]郁有文傳.感器原理及工程應用〔第三版.XX電子科技出版社,2008.7[2]閻石.數(shù)字電子技術基礎〔第四版.高等教育出版社,1998.11[3]周立功.ARM嵌入式系統(tǒng)基礎教程〔第二版.北京航空航天大學出版社,2008.9[4]汪建軍.基于非平衡電橋的電阻數(shù)字溫度計設計[J].XX萬里學院學報,2009[5]老虎工作室.電路設計與制板protel99se典型實例.人民郵電出版社[6]宋文緒、楊帆.傳感器與檢測技術[M].高等教育出版社,2004:附錄A/***********************************************************************************描述:**〔1此程序所有延時采用定時器做〔2開發(fā)板上的P0.30口連接溫度傳感器DQ口線〔3開發(fā)板上P0.0-P0.7口連接液晶屏的DBO-DB7,其他液晶口線連接詳見程序中宏定義〔4如需液晶顯示的更清楚,需在液晶屏上加10K電位器,調(diào)節(jié)液晶屏輸入?yún)⒖茧妷?********************************************************************************/#include<LPC213X.H>#defineeq1<<30#defineuint8unsignedchar#defineFpclk11059200#definekey11<<16#definekey21<<17#definekey31<<18#definekey41<<19#definekey51<<20#definekey61<<21intnn=0,yy=0,rr=0,zz=0,ss=0,ff=0,mm=0;/*******************定義與LCD相關的宏*******************/#defineLCD_DATA0xFF#defineLCD_DI1<<8//與p0.8對應#defineLCD_RW1<<9//與p0.9對應#defineLCD_EN1<<10//與p0.10對應.#defineLCD_PSB1<<11//與p0.11對應//電路直接拉高#defineLCD_RST1<<12//與p0.12對應//上電自動復位,一般也可以不接*#defineclear_screen0x01#definereset_address0x02#defineset_point0x06//0000_0110#definedisplay_set0x0c//顯示設定#definecursor_shift_control0x1c//0001_1100#definefunction_set0x30//功能設定基本指令集#definefunction_set_ext0x36//功能設定擴充指令集繪圖開//#defineset_CGRAM_ADD#defineset_DDRAM_ADD0x80//#definewrite_data_intenalRAMunsignedchardigit[10]={"0123456789"};//定義字符數(shù)組顯示數(shù)字voiddelay1u<unsignedlongt>{T1PR=0x00000000;//LoadprescalerT1TCR=0x00000003;//ResetcounterandprescalerT1MCR=0x00000003;//OnmatchresetthecounterandgenerateaninterruptT1MR0=t*0x0f;//SetthecycletimeT1TCR=0x00000001;//enabletimerwhile<<T1IR&0x01>==0>;T1IR=0x01;T1TCR=0x00000000;}/******************************************************************************************************************************************************************************************************************//******************************************************************************************************************************************************************************************************************/voidLCD_DATA_input<>{IO0DIR=IO0DIR&<~LCD_DATA>;//把設定為輸入}/******************************************************************************************************************************************************************************************************************/voidLCD_DATA_output<>{IO0DIR=IO0DIR|LCD_DATA;//設定為輸出}/******************************************************************************************************************************************************************************************************************/voidCheckState<> //狀態(tài)檢查,LCD是否忙?{delay1u<200>;//while<read_instruct<>>;}/********************************************************************************************************//***********************************************************************************************************函數(shù)名稱:GPIO_Init<>***函數(shù)功能:初始化IO端口,包含一個uart0,三個按鍵輸入,以及幾個普通的輸入輸出端口.***入口參數(shù):無***出口參數(shù):無**********************************************************************************************************//*voidGPIO_init<>{PINSEL0=0;IO0DIR=0xFF<<8; }*//***********************************************************************************************************函數(shù)名稱:w_data<unsignedchardata_Lcm>***函數(shù)功能:給LCD發(fā)送數(shù)據(jù)或者命令.***入口參數(shù):data_Lcm***出口參數(shù):無**********************************************************************************************************/voidW_data<uint8data_Lcm>{ CheckState<>; LCD_DATA_output<>; IO0SET=LCD_DI; IO0CLR=LCD_RW;IO0CLR=0xFF; IO0SET=data_Lcm; IO0SET=LCD_EN; IO0CLR=LCD_EN;}/***********************************************************************************************************函數(shù)名稱:***函數(shù)功能:***入口參數(shù):***出口參數(shù):**********************************************************************************************************/voidW_instruct<uint8data_Lcm>{ CheckState<>; LCD_DATA_output<>; IO0CLR=LCD_DI; IO0CLR=LCD_RW; IO0CLR=0xFF; IO0SET=data_Lcm; IO0SET=LCD_EN; IO0CLR=LCD_EN;}/***********************************************************************************************************函數(shù)名稱LCD_Init<>***函數(shù)功能:初始化lcd顯示屏***入口參數(shù):無***出口參數(shù):無**********************************************************************************************************/voidinit_lcd<void>{ IO0SET=LCD_RST; IO0CLR=LCD_RST; IO0SET=LCD_RST; IO0SET=LCD_PSB; IO0SET=LCD_PSB; W_instruct<function_set>; W_instruct<display_set>; W_instruct<clear_screen>; W_instruct<reset_address>; W_instruct<set_DDRAM_ADD>; }/***********************************************************************************************************函數(shù)名稱:***函數(shù)功能:寫漢字到LCDx_add顯示RAM的地址dat1/dat2顯示漢字編碼指定的位置***入口參數(shù):***出口參數(shù):**********************************************************************************************************//*voiddisplay<uint8x_add,uint8dat1,uint8dat2>{W_instruct<x_add>;//1xxx,xxxx到地址計數(shù)器ACW_data<dat1>;W_data<dat2>;}*//********************************************************************************************************//*********************************************************************************/voidwrite<unsignedchardate>{unsignedchari=0;for<i=8;i>0;i-->{IO0DIR|=eq;//改回輸出 IO0SET|=eq; delay1u<2>;IO0CLR=eq;if<date&0x01>{IO0SET|=eq;//釋放總線 delay1u<80>;}else{IO0CLR=eq; delay1u<80>;}delay1u<30>;IO0SET|=eq;delay1u<3>;date>>=1;}delay1u<6>;}unsignedcharread<>{unsignedchari=0;unsignedchardate=0;for<i=8;i>0;i-->{date>>=1;IO0DIR|=eq;//改回輸出 IO0SET|=eq; delay1u<2>;IO0CLR=eq;//給脈沖信號delay1u<2>; IO0SET|=eq; delay1u<13>;IO0DIR=IO0DIR&0xBFFFFFFF;//拉高總線輸入delay1u<12>;if<IO0PIN&eq>date|=0x80;delay1u<3>;}returndate;}unsignedcharinnit<>{unsignedcharnum;IO0DIR|=eq;//稍做延時IO0CLR=eq;//將DQ拉低delay1u<600>;//精確延時大于480us480IO0SET=eq;delay1u<30>;IO0DIR&=0xBFFFFFFF;//拉高總線輸入delay1u<30>;if<<IO0PIN&eq>==0>{num=0;}else{num=1;}IO0SET=num;delay1u<200>;//300returnnum;}voidzhun<>{innit<>;write<0xCC>;write<0x44>; delay1u<900000>; innit<>; write<0xCC>; write<0xBE>;}voiddisplay_temp1<unsignedcharx>{inti;unsignedchara,b,c;//j,k,l分別儲存溫度的百位、十位和個位unsignedchark[9]={"溫度是:"}; unsignedcharl[16]=<"數(shù)字溫度計姚--連">; W_instruct<0x88>; for<i=0;i<9;i++> W_data<k[i]>; W_instruct<0x98>;for<i=0;i<16;i++> W_data<l[i]>; a=x/100;//取百位 b=<x%100>/10;//取十位 c=x%10;//取個位 W_instruct<0x8C>;//寫顯示地址,將在第2行第7列開始顯示 W_data<digit[a]>;//將百位數(shù)字的字符常量寫入LCDW_data<digit[b]>;//將十位數(shù)字的字符常量寫入LCDW_data<digit[c]>;//將個位數(shù)字的字符常量寫入LCDdelay1u<100>;//延時1ms給硬件一點反應時間}voiddisplay_temp2<unsignedcharx>{unsignedchart[]={"℃"} ;//寫顯示地址,將在第2行第11列開始顯示W(wǎng)_data<'.'>;W_data<digit[x]>;//將小數(shù)部分的第一位數(shù)字字符常量寫入LCDW_instruct<0x8F>;W_data<t[0]>; W_data<t[1]>; W_data<t[2]>;delay1u<100>;//延時1ms給硬件一點反應時間}/**********************************************************************************************************函數(shù)名稱:RTCInit<>**函數(shù)功能:初始化實時時鐘**入口參數(shù):無**出口參數(shù):無********************************************************************************************************/voidRTCInit<void>{ PREINT=Fpclk/32768-1; //設置基準時鐘分頻器 PREFRAC=Fpclk-<Fpclk/32768>*32768; CCR=0x00; //禁止時間計數(shù)器 YEAR=2008+nn; MONTH=04+yy; DOM=01+rr; DOW=4+zz; HOUR=8+ss; MIN=30+ff; SEC=59+mm; CIIR=0x01; //設置秒值的增量產(chǎn)生1次中斷 CCR=0x01; //啟動RTC}/**********************************************************************************************************函數(shù)名稱:SendTimeRtc<>**函數(shù)功能:讀取RTC的時間值,并將讀出的時分秒值通過串口送到上位機顯示。**入口參數(shù):無**出口參數(shù):無********************************************************************************************************/voidSendTimeRtc<void>{unsignedchara,b,c,d; intdatas; inttimes;intbak;unsignedchart[]={"年"}; unsignedchars[]={"月"}; unsignedcharr[]={"日"}; unsignedcharm[]={"周"}; unsignedcharn[]={"時"}; unsignedcharp[]={"分"}; unsignedcharq[]={"秒"}; times=CTIME0; //讀取完整的時鐘寄存器 datas=CTIME1;W_instruct<0x80>;W_data<0x02>; //顯示笑臉 W_data<0x02>; //顯示笑臉 bak=<datas>>16>&0xfff; //獲取年a=bak/1000; bak=bak%1000;b=bak/100;bak=bak%100;c=bak/10;d=bak%10; W_instruct<0x81>; W_data<digit[a]>;//將千位數(shù)字的字符常量寫入LCDW_data<digit[b]>;//將百位數(shù)字的字符常量寫入LCDW_data<digit[c]>;//將十位數(shù)字的字符常量寫入LCDW_data<digit[d]>;//將個位數(shù)字的字符常量寫入LCDW_instruct<0x83>;W_data<t[0]>; W_data<t[1]>; bak=<datas>>8>&0x0f; //獲取月a=bak/10;b=bak%10; W_instruct<0x84>; W

溫馨提示

  • 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

提交評論