震蕩天平恒溫腔體控制設計畢業(yè)設計論文_第1頁
已閱讀1頁,還剩27頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  編號:    </b></p><p>  本科畢業(yè)論文(設計)</p><p>  題 目: 振蕩天平腔體恒溫控制設計 </p><p>  學 生: ### 學號: ### </

2、p><p>  學 院:物理與電子科學學院專業(yè): 電子信息科學與技術 </p><p>  入學時間: 2009 年 9 月 1 日</p><p>  指導教師: ## 職稱: 副教授 </p><p>  完成日期:

3、 2013 年 4 月 25 日</p><p>  振蕩天平腔體恒溫控制設計</p><p>  摘 要:本文介紹了一種基于89C51單片機的振蕩天平腔體恒溫溫度控制器的設計方案,該裝置通過對振蕩天平的腔體的溫度測量調節(jié)加熱裝置,實現(xiàn)腔體恒溫目的。具體實現(xiàn)通過繼電器來控制加熱帶的工作;測溫探頭采用高精度PT100溫度傳感器,構建測

4、溫電橋獲取腔體溫度的變化,運用程序來進行相關的溫度控制處理;最后用單片機的P0口用液晶來顯示溫度。整個系統(tǒng)軟件采用C語言編寫,用keil編程,用protues進行軟硬件仿真,并給出仿真結果,仿真結束后就進行實物制作。經調試溫度控制系統(tǒng)能達到50±1℃。</p><p>  關鍵詞:溫度控制 腔體 溫度轉換 液晶顯示</p><p>  Oscillation balanc

5、e cavity temperature control design</p><p>  Abstract: This article describes an 89C51 microcontroller based on oscillation balance cavity thermostat temperature controller design of the device to adjust the

6、 heating device measured the temperature of the cavity oscillation balance to achieve the purpose of temperature of the cavity. Specific relay to control plus tropical; temperature probe using high-precision PT100 temper

7、ature sensor, build a the temperature bridge for changes in the temperature of the cavity, the use of procedures to be</p><p>  Keywords: Temperature control chamber temperature conversion LCD</

8、p><p><b>  目 錄</b></p><p>  1 引言- 1 -</p><p>  1.1 研究背景與意義- 1 -</p><p>  1.2 研究現(xiàn)狀- 1 -</p><p>  1.3 研究內容- 2 -</p><p>  2 系統(tǒng)設

9、計方案- 2 -</p><p>  2.1 總體方案- 2 -</p><p>  2.2 模塊系統(tǒng)- 3 -</p><p>  2.2.1 主控電路- 3 -</p><p>  2.2.2 采集模塊電路- 3 -</p><p>  2.3 系統(tǒng)硬件構成- 4 -</p><p&

10、gt;  3 系統(tǒng)硬件電路設計- 5 -</p><p>  4 軟件設計- 6 -</p><p>  4.1 整體系統(tǒng)的設計- 6 -</p><p>  4.2 控制系統(tǒng)的設計- 7 -</p><p>  4.3 顯示系統(tǒng)的的設計- 7 -</p><p>  4.3.1 液晶顯示界面圖- 8 -

11、</p><p>  5 系統(tǒng)硬件調試- 8 -</p><p>  5.1 系統(tǒng)硬件調試- 8 -</p><p>  6 總結與展望- 10 -</p><p>  參考文獻:- 11 -</p><p>  附錄A- 12 -</p><p>  源程序- 12 -</p

12、><p>  附錄B- 26 -</p><p><b>  致謝- 26 -</b></p><p><b>  1 引言</b></p><p>  1.1 研究背景與意義</p><p>  振蕩天平是通過振蕩法測量微小質量改變的設備,現(xiàn)廣泛應用到PM10和PM2.

13、5的監(jiān)測中[1-3]。也可以應用到結合微反研究過程的研究[4]。振蕩天平(TEOM)主要是利用空氣通過PM2.5濾膜以后,大于100nm的顆粒沉積到濾膜上,濾膜的質量發(fā)生改變。由于振蕩錐的質量改變以后其共振頻率也隨之發(fā)生改變,我們就可以利用測量頻率的變化來反推質量的改變[1]。為了精確反映單位體積內的顆粒物的含量,就需要單位時間內通過濾膜的空氣不僅要流量恒定而且要恒溫,保持TEOM工作腔體的工作溫度恒定是確保PM2.5等測量的先決條件。

14、</p><p><b>  1.2 研究現(xiàn)狀</b></p><p>  利用自動控制技術控制儀器的溫度應用和產品有很多種形式,這些應用也達到了相當高的精度。工業(yè)控制領域,代寧光等利用PID算法對滾筒設備物料進行控制,精度達到了±2℃[5],姚慶文通過模糊控制的方法對鍋爐溫度進行調控達到了較好的效果[6] ,此外在工業(yè)領域中還廣泛的應用到滲碳爐、恒溫水(

15、油)浴箱、塑料制件和馬弗爐的溫度控制中[8-11]。溫度控制用于家禽孵化也能提高家禽的孵化率,減少人工干預的程度[12]。在精密科學儀器中,溫度控制顯得更為重要,賈方秀等激光測距儀的脈沖電流供電溫度控制系統(tǒng)中的溫控設計和呂飛等設計的基于ADN8831的溫度控制系統(tǒng)能達到±0.01℃的控制精度[13,14]。另外溫度也可以廣泛的應用醫(yī)藥等領域[15-17],并為這些儀器和產品的穩(wěn)定工作作出最基本得保障。</p>&

16、lt;p>  研究溫度控制問題,為準確控制溫度,使振蕩天平腔體保持恒溫,針對傳統(tǒng)法人工方式難以保證恒溫,提出設計一種利用單片機的溫度控制系統(tǒng)。以89C51單片機為核心,結合Pt100對腔體進行在線控制,并采用軟件控制算法對溫度進行智能控制。結果表明,系統(tǒng)溫度控制精度達到了預期的設計目標,溫度50±1℃,具有較高的控制精度。 </p><p><b>  1.3 研究內容</b&g

17、t;</p><p>  本文研究課題為振蕩天平中50℃恒溫腔體的控制原理,通過Pt100采集模擬數據經ADC轉換為數字數據后輸入單片機中,編寫程序使單片機控制繼電器的通斷,由于繼電器和加熱帶連接,因此單片機最終控制的是加熱帶的溫度,本文研究加熱帶的溫度上升到50℃左右時的溫度控制,通過不斷的檢測數據和不斷的控制使加熱帶的溫度最后精確到50±1℃。</p><p><b&g

18、t;  2 系統(tǒng)設計方案</b></p><p><b>  2.1 總體方案</b></p><p><b>  圖1:系統(tǒng)原理圖</b></p><p>  溫度采集裝置把采集到的數據輸入到數據處理裝置,經過電橋和運放被處理的數據被輸入到單片機中顯示在顯示屏上,同時單片機通過執(zhí)行內部程序來控制加熱裝置。

19、</p><p><b>  2.2 模塊系統(tǒng)</b></p><p>  2.2.1 主控電路</p><p><b>  圖2:主控電路</b></p><p>  單片機接收來自AD轉換器的的采集數據,然后把數據顯示在液晶顯示屏幕上,當溫度遠低于50攝氏度則單片機控制繼電器繼續(xù)給加熱帶加熱

20、,如果顯示溫度在50℃以上時繼電器自動斷開,數據采集、數據處理和單片機控制不停循環(huán)使得溫度控制器的溫度精確在50±2℃,實現(xiàn)了最初的溫度設定的要求。圖中的復位電路是在檢測時方便對電路的刷新;晶振提供單片機工作時所需的工作頻率;排阻接在P0口是為了是P0口實現(xiàn)高低電平的功能;當VCC為+5V時,通過給三極管的高低電平控制三極管的通與斷來控制繼電器的開與閉,從而控制了加熱裝置的發(fā)熱與降溫;液晶顯示用來顯示被單片機處理后的數據,即加

21、熱帶的測量溫度。</p><p>  2.2.2采集模塊電路</p><p><b>  圖3:采集模塊電路</b></p><p>  PT100采集值通過直流電橋的處理,經過可調減法放大器把微小的信號放大成合適的信號輸送到單片機中。圖中的短路帽是為了即時斷開電路,方便在焊接好電路后對電路性能的檢測。圖中發(fā)光二極管是電路通與斷的顯示信號,當電

22、路導通時二極管亮,當電路斷開時二極管滅。圖中的LM358為運放芯片,通過外圍的搭接電路是整體的運放電路放大到所需的倍數,又由于R4、R7為可調電阻,所以差分減法運放器為倍數可調放大器,通過調節(jié)可調電阻達到所需的最佳放大狀態(tài)。 </p><p>  2.3 系統(tǒng)硬件構成</p><p>  圖4:實物的硬件構成</p><p>  主控模塊:51單片機、復位電路

23、、晶振電路、P0口的上拉電阻組成了單片機的最小系統(tǒng),由最小系統(tǒng)擴展的外圍電路繼電器、ADC等組成了主控電路,負責對數據的顯示處理以及對加熱帶的控制。</p><p>  數據采集模塊:Pt100的直流電橋經過LM358組成的減法差分運算放大器轉換成單片機處理數據所需的電壓。</p><p>  +5V電源:使用7805穩(wěn)壓芯片制作的穩(wěn)壓電源。</p><p>  3

24、 系統(tǒng)硬件電路設計</p><p>  主控電路即MCU芯片外圍電路,作為板卡的核心器件,實現(xiàn)了包括控制、</p><p>  存儲、算法等功能。選用器件為STC89c52,對布板、焊接和調試等帶來很大便利性。內部還集成了8K字節(jié)存儲模塊。</p><p><b>  圖5:主控電路</b></p><p>  圖5中

25、P0口是12864液晶的接口插槽,P1口是數據采集輸入接口,把數據輸入到AD中處理,P2口和P3口分別表示對繼電器的接口,且由此口控制加熱帶的升溫與降溫,電壓源是9v;測溫模塊具有不同的測量模式,所以傳感器具有多種接法,最常用的一種方式是三線制的接法,這種接法可以完全消除引線電阻,提高測量的精度,非常適合在系統(tǒng)精度的要求。數據處理也主要是為了提高輸入的阻抗提高帶負載能力,從而提高了采樣的精度。ADC電路是模數轉換的核心部分,成了采樣保持

26、和模數的轉換的作用。LCD電路比較簡單,主要是起一些顯示的作用。</p><p><b>  圖6:信號處理電路</b></p><p>  圖6中R1、R5、R6、Pt100組成了直流電橋,Pt100采集的信息經過電橋的處理輸入到LM358組成的差分放大器。由于R4、R7 、R2、R3構成LM358外圍電路,且R4和R7為可調電阻,因此運放倍數由可調電阻調節(jié)到理想狀

27、態(tài)。</p><p>  D1是發(fā)光二極管,用來顯示電源是否通電,亮表示通電,滅表示斷電。</p><p>  圖7:+5V電源供給電路</p><p>  圖7的系統(tǒng)用來提供+5V電源,只使用了部分電路,其中7905穩(wěn)壓芯片用來提供+5V電源。</p><p><b>  4 軟件設計</b></p>

28、<p>  4.1 整體系統(tǒng)的設計</p><p><b>  圖8:系統(tǒng)流程圖</b></p><p>  系統(tǒng)的設計流程如圖8所示,溫度傳感器采集腔體溫度,采集的溫度通過電橋和運放電路轉化成溫度數據顯示在顯示器上,如顯示溫度大于50攝氏度則單片機通過繼電器控制加熱帶不工作,如果溫度小于50攝氏度則單片機通過繼電器控制加熱帶工作。</p>

29、<p>  4.2 控制系統(tǒng)的設計</p><p>  圖9:控制系統(tǒng)流程圖</p><p>  4.3 顯示系統(tǒng)的的設計</p><p>  圖10:顯示系統(tǒng)流程圖</p><p>  先把顯示系統(tǒng)先初始化,再通過單片機中的定時器給刷屏定時,即每隔多少時間刷一次屏幕,然后把轉換后的檢測的數據輸入到單片機中顯示出來,以后就是進

30、行不斷的刷屏,而每一次刷屏重新顯示的數據就是每一次新采集的數據,隨時的把采集的數據顯示在顯示屏中,由于定時時間極短所以我們肉眼看不到屏幕在跳動,最終顯示的即時采集的數據。顯示界面如圖11所示。</p><p>  4.3.1 液晶顯示界面圖</p><p><b>  圖11:顯示界面圖</b></p><p>  液晶采用的是12864液晶顯

31、示,第一行顯示的“阜陽師范學院”和第二行顯示的“temper ctrl”以及第四行現(xiàn)實的“H temp:+50.0”在程序中設定的固定顯示數值,其中第四行的是設定的振蕩天平腔體溫度,以便觀察,當及時采集溫度高于50攝氏度則加熱帶停止工作,當及時采集溫度低于50攝氏度則加熱帶開始工作,第三行顯示的是及時采集的溫度,當腔體溫度控制器插電工作時,第三行顯示的是即時測量的溫度。整體顯示圖如11所示。</p><p>&l

32、t;b>  5 系統(tǒng)硬件調試</b></p><p>  5.1 系統(tǒng)硬件調試</p><p>  通過溫度傳感器逐次的測量腔體溫度并記錄下來,分三次記錄,第一次每隔15秒記錄一次,得到一組數據繪成曲線圖,如圖12所示;第二次每隔10秒記錄一次數據得到一組數據繪成曲線圖,如圖13所示;每隔5秒一次的數據如圖14所示。通過曲線可知當溫度沒有達到50攝氏度時曲線的斜率近似

33、不變,當溫度達到50攝氏度左右時就在50攝氏度左右上下浮動。</p><p>  振蕩天平腔體溫度曲線圖:</p><p>  圖12:間隔15秒溫度變化曲線</p><p>  圖13:間隔10秒溫度變化曲線</p><p>  圖14:間隔5秒溫度變化曲線</p><p>  通過給所有模塊供電則腔體溫度控制器開始

34、工作,腔體溫度從室溫開始逐漸上升直到,第一次每隔15秒記錄腔體的溫度,最終的溫度曲線如圖12所示,由圖可知每隔15s記錄一次的數據圖穩(wěn)定性不好,在1-13橫坐標內曲線斜率近乎不變,此后的時間內,溫度在50攝氏度左右具有較大的幅度,控溫精度較低。</p><p>  第二次每隔10s開始測量并記錄數據,由圖13可知在1-15的橫坐標內曲線的斜率近似不變,在此后的時間內,相對比于圖12,圖13的溫度在50攝氏度左右具

35、有較小的浮動,精度有所提升。</p><p>  第三次是每隔5s記錄一次腔體溫度,由圖14可知當溫度高于50℃時,溫控裝置停止加熱,當溫度低于50℃時溫控裝置繼續(xù)加熱。在1-31的橫坐標的時間內曲線的斜率近似穩(wěn)定,此后的時間內曲線是上下浮動的,最終溫度被控制在50±1℃的范圍。精度達到了最初的要求。</p><p><b>  6 總結與展望</b>&l

36、t;/p><p>  本文研究了振蕩天平腔體的恒溫控制設計,整個系統(tǒng)的工作原理是:溫度傳感器采集溫度數據輸入到數據處理電路中進行處理,即把Pt100的阻值變化轉換成電壓信號的變化,此微弱信號又直流電橋輸入到差分運算放大器中進行放大到所需的電信號,然后電信號傳送到單片機中轉換成溫度信號,當檢測到的腔體溫度高于設定溫度時則加熱裝置停止加熱,當檢測到的腔體溫度低于設定溫度時則加熱裝置繼續(xù)加熱,最終是的振蕩天平的腔體的實際溫

37、度在設定值左右上下浮動,即達到了預期所需的要求。</p><p>  本恒溫腔體的控制精度為50±1℃,精度沒有控制在小數位以內,這其中的原因不僅是因為溫度傳感器的精度低以及電路的電氣性能的誤差,例如電阻阻值的誤差、電容值的誤差、電橋的設計和運放電路的誤差,而且是由于本設計的程序沒有使用PID算法去處理控制結果,這些各種類型的誤差造成了本設計的控制精度為50±1℃。以后在設計電路時,盡量使用高

38、精度的元器件,同時在設計電橋、運放等電路時要選擇好調節(jié)好參數,以便把對精度的影響控制到最小,在以后的時間里還要學會PID算法的使用。避免了這些因素的影響,恒溫腔體的溫度變化精度可控制在5±1℃以內。</p><p><b>  參考文獻:</b></p><p>  [1]詹鍇,劉建國,陸釩 等.霍爾元件在微量振蕩天平監(jiān)測儀中的應用[J].儀器儀表學報,20

39、07,(1). </p><p>  [2]王姣,王效科,張紅星 等.北京市城區(qū)兩個典型站點PM_(2.5)濃度和元素組成差異研究[J].環(huán)境科學學報,2012,(1). </p><p>  [3]楊衛(wèi)芬,銀燕,魏玉香等.霾天氣下南京PM_(2.5)中金屬元素污染特征及來源分析[J].中國環(huán)境科學,2010,(1).</p><p>  [4]袁翠峪,魏迎旭,許磊

40、,李金哲,徐舒濤,周游,陳景潤,王全義,劉中民,. 振蕩天平結合微反研究程序升溫條件下SAPO-34催化的甲醇轉化[J]. 催化學報,2012,(5). </p><p>  [5]代寧光,王道銓,劉力云. 滾筒設備物料溫度控制策略的設計應用[J]. 煙草科技,2012,(6). </p><p>  [6]姚慶文. 基于模糊控制的鍋爐溫度調控策略[J]. 計算機仿真,2011,(12).

41、</p><p>  [7]劉景艷,張素妍,郭順京. 基于PIC單片機的滲碳爐模糊PID溫度控制系統(tǒng)[J]. 鄭州大學學報(工學版),2010,(6). </p><p>  [8]蔡凌,韓曉. 基于仿人智能控制的恒溫水(油)浴箱溫度控制的研究[J]. 化工自動化及儀表,2011,(3). </p><p>  [9]吳廷,安瑛,謝鵬程,譚晶,楊衛(wèi)民. 溫度控制保壓

42、過程對制件質量重復精度的影響[J]. 中國塑料,2010,(5). </p><p>  [10]何愛江,劉麗秀. 馬弗爐溫度控制系統(tǒng)的改造[J]. 實驗室研究與探索,2011,(10). </p><p>  [11]王小增,楊久紅.家禽孵化溫度控制系統(tǒng)設計——基于Smith預估算法[J]. 農機化研究,2011,(10). </p><p>  [12]賈方秀,

43、丁振良. 激光測距儀的脈沖電流供電溫度控制系統(tǒng)[J]. 光學精密工程,2009,(9).</p><p>  [13]呂飛,高峰,鄭橋,袁自鈞. 基于ADN8831的溫度控制系統(tǒng)在激光器中的應用[J]. 合肥工業(yè)大學學報(自然科學版),2011,(7). </p><p>  [14]韋彩虹,雷聲,朱國忠,陳裕泉,潘敏. 婦科術后凝血用熱極探頭的溫度控制系統(tǒng)設計[J]. 傳感技術學報,20

44、11,(8). </p><p>  [15]朱國忠,李洪濤,潘敏,雷聲. 電子鼻溫度控制系統(tǒng)的設計[J]. 傳感器與微系統(tǒng),2011,(2). </p><p>  [16]何愛香,魏廣芬,石艷榮. 一種新型高精度溫度控制方法[J]. 計算機仿真,2009,(9). </p><p>  [17]呂俊亞. 一種基于單片機的溫度控制系統(tǒng)設計與實現(xiàn)[J]. 計算機仿真

45、,2012,(7). </p><p>  [18]于鳳明 單片機原理及接口技術 1997</p><p>  [19]陳明熒 8051單片機課程設計實訓教材 2004</p><p>  [20]胡漢才 單片機原理及其接口技術 1995</p><p><b>  附錄A

46、:</b></p><p><b>  源程序</b></p><p>  /*******************************************************************************</p><p>  * 溫度控制器

47、 </p><p>  元器件:TLC2543ADC+12864液晶+PT100溫度傳感器 </p><p>  ********************************************************************************/</p><p>  #include &l

48、t;reg51.h></p><p>  #include <intrins.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  float n=0,k=0,s1=0,s2=0,s3=0;</p&

49、gt;<p><b>  uint z;</b></p><p>  uchar e0,e1,e2,e3,f0,f1,f2,f3;</p><p><b>  uchar i;</b></p><p>  sbit ctrl=P2^0;</p><p>  /*************

50、 12864LCD引腳定義*******************</p><p>  #define LCD_data P0 //數據口</p><p>  sbit LCD_RS = P2^6; //寄存器選擇輸入 </p><p>  sbit LCD_RW = P2^5; //液晶讀/寫控制</p>&l

51、t;p>  sbit LCD_EN = P2^7; //液晶使能控制</p><p>  sbit LCD_PSB = P3^2; //串/并方式控制</p><p>  sbit LCD_RST = P3^7; //液晶復位端口</p><p>  ************************************

52、*************/</p><p>  #define LCD_data P0</p><p>  sbit LCD_RS = P2^6;</p><p>  sbit LCD_RW = P2^5;</p><p>  sbit LCD_EN = P2^7;</p><p>  sbit LCD_PSB

53、=P3^2;</p><p>  sbit LCD_RST =P3^7; </p><p>  /*************TLC2543引腳定義*************/</p><p>  sbit ADout=P1^0;</p><p>  sbit ADin=P1^1;</p><p>  sbit CS=P

54、1^2;</p><p>  sbit CLK=P1^3;</p><p>  sbit EOC=P1^4; </p><p>  /**************************/</p><p>  void delay_1ms(uint x);</p><p>  void write_cmd(ucha

55、r cmd);</p><p>  void write_dat(uchar dat);</p><p>  void lcd_pos(uchar X,uchar Y);</p><p>  void lcd1_init();</p><p>  void L12864_write_bignum(char x,char y,int aaa)

56、;</p><p>  void wright_string(unsigned char X,unsigned char Y,char *s);</p><p>  uchar code num[]={"0123456789"};</p><p>  /**********************************</p>&

57、lt;p><b>  延時函數</b></p><p>  **********************************/</p><p>  void delay_1ms(uint x)</p><p><b>  {</b></p><p><b>  uint i,j;

58、</b></p><p>  for(j=0;j<10*x;j++)</p><p>  for(i=0;i<110;i++);</p><p><b>  }</b></p><p>  void delay(int ms)</p><p><b>  {<

59、;/b></p><p>  while(ms--)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  for(i=0;i<150;i++) </p><p><b>  {</b&

60、gt;</p><p>  _nop_(); </p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>

61、  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /********************************</p><p><b>  寫命令</b></p><p&g

62、t;  ********************************/</p><p>  void write_cmd(uchar cmd)</p><p><b>  {</b></p><p><b>  LCD_RS=0;</b></p><p><b>  LCD_RW=0;

63、</b></p><p><b>  LCD_EN=0;</b></p><p><b>  P0=cmd;</b></p><p>  delay_1ms(1);</p><p><b>  LCD_EN=1;</b></p><p>  

64、delay_1ms(1);</p><p><b>  LCD_EN=0;</b></p><p><b>  }</b></p><p>  /************************************</p><p><b>  寫數據</b></p&g

65、t;<p>  ************************************/</p><p>  void write_dat(uchar dat)</p><p><b>  {</b></p><p><b>  LCD_RS=1;</b></p><p><b

66、>  LCD_RW=0;</b></p><p><b>  LCD_EN=0;</b></p><p><b>  P0=dat;</b></p><p>  delay_1ms(1);</p><p><b>  LCD_EN=1;</b></p&g

67、t;<p>  delay_1ms(1);</p><p><b>  LCD_EN=0;</b></p><p><b>  }</b></p><p>  /*************************************</p><p><b>  寫位置 &

68、lt;/b></p><p>  **************************************/</p><p>  void lcd_pos(uchar X,uchar Y)</p><p><b>  {</b></p><p>  uchar pos;</p><p>

69、<b>  if(X==0)</b></p><p><b>  {X=0x80;}</b></p><p>  else if(X==1)</p><p><b>  {X=0X90;}</b></p><p>  else if(X==2)</p><p

70、><b>  {X=0X88;}</b></p><p>  else if(X==3)</p><p><b>  {X=0X98;}</b></p><p><b>  if(X==0)</b></p><p><b>  {X=0x80;}</b&g

71、t;</p><p>  else if(X==1)</p><p><b>  {X=0X91;}</b></p><p>  else if(X==2)</p><p><b>  {X=0X8A;}</b></p><p>  else if(X==3)</p&g

72、t;<p><b>  {X=0X9B;}</b></p><p><b>  pos=X+Y;</b></p><p>  write_cmd(pos);</p><p><b>  }</b></p><p>  /**********************

73、************</p><p><b>  LCD初始化 </b></p><p>  ***********************************/</p><p>  void lcd1_init()</p><p><b>  {</b></p><p&

74、gt;  LCD_PSB=1;</p><p>  write_cmd(0x30);</p><p>  delay_1ms(1);</p><p>  write_cmd(0x06);</p><p>  delay_1ms(1);</p><p>  write_cmd(0x0C);</p><

75、p>  delay_1ms(1);</p><p>  write_cmd(0x01);</p><p>  delay_1ms(1);</p><p><b>  }</b></p><p>  /************************************************</p>

76、<p><b>  寫大數據</b></p><p>  *************************************************/</p><p>  void L12864_write_bignum(char x,char y,int aaa)</p><p><b>  { </b

77、></p><p><b>  if(x>=0)</b></p><p>  lcd_pos(x,y);</p><p>  write_dat(' ');</p><p>  if(aaa>0) write_dat('+');</p><p>&

78、lt;b>  if(aaa<0)</b></p><p><b>  {</b></p><p>  write_dat('-');</p><p>  aaa=0-aaa;</p><p><b>  } </b></p><p> 

79、 if(aaa>=1000000)</p><p><b>  {</b></p><p>  write_dat(num[(aaa/1000000%10)]); </p><p>  write_dat(num[(aaa/100000%10)]); </p><p>  write_dat(num[(aa

80、a/10000%10)]); </p><p>  write_dat(num[(aaa/1000%10)]); </p><p>  write_dat(num[(aaa/100%10)]); </p><p>  write_dat(num[(aaa/10%10)]);</p><p>  write_dat('.

81、9;); </p><p>  write_dat(num[(aaa%10)]);</p><p><b>  }</b></p><p>  else if(aaa>=100000)</p><p><b>  {</b></p><p>  write_dat(

82、num[(aaa/100000%10)]); </p><p>  write_dat(num[(aaa/10000%10)]); </p><p>  write_dat(num[(aaa/1000%10)]); </p><p>  write_dat(num[(aaa/100%10)]); </p><p>  writ

83、e_dat(num[(aaa/10%10)]); </p><p>  write_dat('.'); </p><p>  write_dat(num[(aaa%10)]);</p><p><b>  }</b></p><p>  else if(aaa>=10000)</p>

84、<p><b>  { </b></p><p>  write_dat(num[(aaa/10000%10)]); </p><p>  write_dat(num[(aaa/1000%10)]); </p><p>  write_dat(num[(aaa/100%10)]); </p><p&

85、gt;  write_dat(num[(aaa/10%10)]);</p><p>  write_dat('.'); </p><p>  write_dat(num[(aaa%10)]);</p><p><b>  }</b></p><p>  else if(aaa>=1000)&l

86、t;/p><p><b>  { </b></p><p>  write_dat(num[(aaa/1000%10)]); </p><p>  write_dat(num[(aaa/100%10)]); </p><p>  write_dat(num[(aaa/10%10)]); </p>&

87、lt;p>  write_dat('.'); </p><p>  write_dat(num[(aaa%10)]);</p><p><b>  }</b></p><p>  else if(aaa>=100)</p><p><b>  {</b></p&g

88、t;<p>  write_dat(num[(aaa/100%10)]); </p><p>  write_dat(num[(aaa/10%10)]);</p><p>  write_dat('.'); </p><p>  write_dat(num[(aaa%10)]);</p><p><b

89、>  }</b></p><p>  else if(aaa>=10)</p><p><b>  {</b></p><p>  write_dat(num[(aaa/10%10)]);</p><p>  write_dat('.'); </p><p

90、>  write_dat(num[(aaa%10)]);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  write_dat('0');</p>

91、<p>  write_dat('.'); </p><p>  write_dat(num[(aaa%10)]);</p><p><b>  }</b></p><p><b>  }</b></p><p>  /**************************

92、**********************</p><p><b>  寫中英文的</b></p><p>  ************************************************/</p><p>  void wright_string(unsigned char X,unsigned char Y,char

93、*s)</p><p><b>  {</b></p><p>  lcd_pos(X,Y);</p><p>  while (*s) </p><p><b>  {</b></p><p>  write_dat(*s);</p><p><

94、;b>  s++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*******************************************************************/</p><p>

95、;  /* */</p><p>  /* 延時函數 */</p><p>  /*

96、 */</p><p>  /*******************************************************************/</p><p>  void delay1(int ms)</p><p><b>  {</b></p>

97、<p>  while(ms--)</p><p><b>  {</b></p><p><b>  uchar y;</b></p><p>  for(y=0;y<100;y++) ; </p><p><b>  }</b></p>&l

98、t;p><b>  }</b></p><p>  /*******************************************************************/</p><p>  /* */</p&

99、gt;<p>  /* 檢查LCD忙狀態(tài) */</p><p>  /*lcd_busy為1時,忙,等待。lcd-busy為0時,閑,可寫指令與數據。 */</p><p>  /*

100、 */</p><p>  /*******************************************************************/</p><p>  bit lcd_busy()</p><p>  { </p><p

101、>  bit result;</p><p>  LCD_RS = 0;</p><p>  LCD_RW = 1;</p><p>  LCD_EN = 1;</p><p>  delayNOP();</p><p>  result = (bit)(P0&0x80);</p><

102、p>  LCD_EN = 0;</p><p>  return(result); </p><p><b>  }</b></p><p>  /*******************************************************************/</p><p>  /*

103、 */</p><p>  /* 寫指令數據到LCD */</p><p>  /* RS=L,RW=L,E=高脈沖,D0-D7=指令碼。

104、 */</p><p>  /* */</p><p>  /*******************************************************************/</p><p>  v

105、oid lcd_wcmd(uchar cmd)</p><p>  { </p><p>  while(lcd_busy());</p><p>  LCD_RS = 0;</p><p>  LCD_RW = 0;</p><p>  LCD_EN = 0;<

106、/p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  P0 = cmd;</b></p><p>  delayNOP();</p><p>  LCD_EN = 1;</

107、p><p>  delayNOP();</p><p>  LCD_EN = 0; </p><p><b>  }</b></p><p>  /*******************************************************************/</p><p>

108、;  /* */</p><p>  /* 寫顯示數據到LCD */</p><p>  /* RS=H,RW=L,E=高脈沖,D0-D7=數

109、據。 */</p><p>  /* */</p><p>  /*******************************************************************/</p><

110、;p>  void lcd_wdat(uchar dat)</p><p>  { </p><p>  while(lcd_busy());</p><p>  LCD_RS = 1;</p><p>  LCD_RW = 0;</p><p>  LCD_EN

111、 = 0;</p><p><b>  P0 = dat;</b></p><p>  delayNOP();</p><p>  LCD_EN = 1;</p><p>  delayNOP();</p><p>  LCD_EN = 0; </p><p><b&

112、gt;  }</b></p><p>  /*************************************************</p><p><b>  AD轉換</b></p><p>  *************************************************/</p>

113、<p>  uint readAD(uchar port) </p><p><b>  {</b></p><p>  uchar ch,i,j;</p><p><b>  uint ad;</b></p><p><b>  ch=port;</b>

114、</p><p>  for(j=0;j<3;j++) // </p><p><b>  {</b></p><p><b>  ad=0;</b></p><p><b>  ch=port;</b></p><p><b> 

115、 EOC=1;</b></p><p><b>  CS=1;</b></p><p><b>  CS=0;</b></p><p><b>  CLK=0;</b></p><p>  for(i=0;i<12;i++)</p><p&

116、gt;<b>  {</b></p><p>  if(ADout) ad|=0x01;</p><p>  ADin=(bit)(ch&0x80);</p><p><b>  CLK=1;</b></p><p><b>  CLK=0;</b></p>

117、;<p><b>  ch<<=1;</b></p><p><b>  ad<<=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  CS=1;

118、 //轉換和讀取數值</p><p>  while(!EOC);</p><p><b>  ad>>=1;</b></p><p>  return(ad);</p><p><b>  }</b></p><p>  /*************

119、********************************************</p><p>  * *</p><p>  * 主函數 *</p><p

120、>  * *</p><p>  *********************************************************/</p><p>  void main()</p><p><b>  { </b></p><p>  float u1,u;<

121、;/p><p>  float temp;</p><p>  delay(10); //上電,等待穩(wěn)定</p><p>  lcd1_init();</p><p><b>  while(1)</b></p><p><b>  { </b>&

122、lt;/p><p><b>  ctrl=1;</b></p><p>  wright_string(0,1,"阜陽師范學院");</p><p>  wright_string(1,1,"temper ctrl");</p><p>  wright_string(2,1,&quo

123、t;temp:");</p><p>  wright_string(3,0," H temp:");</p><p>  n=readAD(0x00); //溫度</p><p>  // k=readAD(0x10); //濕度</p><p>  u=(n*5)/4096; //顯示二位小數的

124、時候用ulong</p><p>  temp=18+20*(u-2.0);</p><p>  // L12864_write_bignum(1,2,s1*10); //模擬電壓顯示</p><p>  L12864_write_bignum(2,4,((float)temp*10)); //溫度顯示(s1*20-4

125、5)*10 (temp*10)</p><p>  L12864_write_bignum(3,4,50.0*10); //溫度顯示(s1*20-45)*10 (temp*10)</p><p>  while(temp>50)</p><p><b>  {</b></p><p&

126、gt;<b>  ctrl=0;</b></p><p>  n=readAD(0x00); //溫度</p><p>  //k=readAD(0x10); //濕度</p><p>  u=(n*5)/4096; //顯示二位小數的時候用ulong</p><p>  temp=18+20*(u-2.

127、0);</p><p>  L12864_write_bignum(2,4,((float)temp*10)); //溫度顯示(s1*20-45)*10 (temp*10)</p><p><b>  }</b></p><p><b>  /*</b></p><p>  for(i=0;

128、i<50;i++)</p><p><b>  {</b></p><p><b>  ctrl=0; </b></p><p>  delay_1ms(100);</p><p><b>  ctrl=1;</b></p><p>  delay

溫馨提示

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

評論

0/150

提交評論