2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

4、溫電橋獲取腔體溫度的變化,運用程序來進行相關(guān)的溫度控制處理;最后用單片機的P0口用液晶來顯示溫度。整個系統(tǒng)軟件采用C語言編寫,用keil編程,用protues進行軟硬件仿真,并給出仿真結(jié)果,仿真結(jié)束后就進行實物制作。經(jīng)調(diào)試溫度控制系統(tǒng)能達到50±1℃。</p><p>  關(guān)鍵詞:溫度控制 腔體 溫度轉(zhuǎn)換 液晶顯示</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 研究內(nèi)容- 2 -</p><p>  2 系統(tǒng)設(shè)

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)硬件構(gòu)成- 4 -</p><p&

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

11、</p><p>  5 系統(tǒng)硬件調(diào)試- 8 -</p><p>  5.1 系統(tǒng)硬件調(diào)試- 8 -</p><p>  6 總結(jié)與展望- 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>  振蕩天平是通過振蕩法測量微小質(zhì)量改變的設(shè)備,現(xiàn)廣泛應(yīng)用到PM10和PM2.

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

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

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

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

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

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

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

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

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

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

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

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

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

26、和模數(shù)的轉(zhuǎn)換的作用。LCD電路比較簡單,主要是起一些顯示的作用。</p><p><b>  圖6:信號處理電路</b></p><p>  圖6中R1、R5、R6、Pt100組成了直流電橋,Pt100采集的信息經(jīng)過電橋的處理輸入到LM358組成的差分放大器。由于R4、R7 、R2、R3構(gòu)成LM358外圍電路,且R4和R7為可調(diào)電阻,因此運放倍數(shù)由可調(diào)電阻調(diào)節(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 軟件設(shè)計</b></p>

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

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

30、行不斷的刷屏,而每一次刷屏重新顯示的數(shù)據(jù)就是每一次新采集的數(shù)據(jù),隨時的把采集的數(shù)據(jù)顯示在顯示屏中,由于定時時間極短所以我們?nèi)庋劭床坏狡聊辉谔鴦?,最終顯示的即時采集的數(shù)據(jù)。顯示界面如圖11所示。</p><p>  4.3.1 液晶顯示界面圖</p><p><b>  圖11:顯示界面圖</b></p><p>  液晶采用的是12864液晶顯

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

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

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

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

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

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

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

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

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

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

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

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

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

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

45、,2012,(7). </p><p>  [18]于鳳明 單片機原理及接口技術(shù) 1997</p><p>  [19]陳明熒 8051單片機課程設(shè)計實訓(xùn)教材 2004</p><p>  [20]胡漢才 單片機原理及其接口技術(shù) 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 //數(shù)據(jù)口</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; //液晶復(fù)位端口</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>  延時函數(shù)</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>  寫數(shù)據(jù)</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>  寫大數(shù)據(jù)</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>  /* 延時函數(shù) */</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時,閑,可寫指令與數(shù)據(jù)。 */</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>  /* 寫指令數(shù)據(jù)到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>  /* 寫顯示數(shù)據(jù)到LCD */</p><p>  /* RS=H,RW=L,E=高脈沖,D0-D7=數(shù)

109、據(jù)。 */</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轉(zhuǎn)換</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、 //轉(zhuǎn)換和讀取數(shù)值</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>  * 主函數(shù) *</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,"阜陽師范學(xué)院");</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; //顯示二位小數(shù)的

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; //顯示二位小數(shù)的時候用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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論