恒溫箱溫度計(jì)算機(jī)控制系統(tǒng)設(shè)計(jì)_第1頁
恒溫箱溫度計(jì)算機(jī)控制系統(tǒng)設(shè)計(jì)_第2頁
恒溫箱溫度計(jì)算機(jī)控制系統(tǒng)設(shè)計(jì)_第3頁
恒溫箱溫度計(jì)算機(jī)控制系統(tǒng)設(shè)計(jì)_第4頁
恒溫箱溫度計(jì)算機(jī)控制系統(tǒng)設(shè)計(jì)_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

西南科技大學(xué)計(jì)算機(jī)控制系統(tǒng)報(bào)告設(shè)計(jì)名稱:恒溫箱溫度計(jì)算機(jī)控制系統(tǒng)設(shè)計(jì)姓名:孫蘭學(xué)號:20121856班級:自動1201班指導(dǎo)教師:聶詩良起止日期:2015.9.15--2012.12.25西南科技大學(xué)信息工程學(xué)院制設(shè)計(jì)任務(wù)書學(xué)生班級: 自動1201 學(xué)生姓名: 孫蘭 學(xué)號: 20121856設(shè)計(jì)名稱: 恒溫箱溫度計(jì)算機(jī)控制系統(tǒng)設(shè)計(jì)起止日期: 9月15日——12月25日 指導(dǎo)教師: 聶詩良設(shè)計(jì)要求:(1)溫度采集傳感器采用熱電阻或熱電偶,或一體化數(shù)字溫度傳感器 DS18B20。2)控制燈泡亮度或發(fā)熱量,采用繼電器開關(guān)控制或用可控硅平滑控制。3)采用單片機(jī)或PLC作為控制器。4)采用LED或LCD或PC機(jī)的液晶顯示器作為顯示器,同時顯示給定溫度和實(shí)際溫度。5)采用自制按鍵或PC機(jī)的鍵盤作為溫度給定值輸入。(6)恒溫箱實(shí)際溫度達(dá)到給定值時(誤差要求 ±1℃)需聲光提示,聲音時延 5秒后停止。(7)恒溫箱最高溫度 ≤50℃。2恒溫箱溫度計(jì)算機(jī)控制系統(tǒng)設(shè)計(jì)摘要:本設(shè)計(jì)的溫度測量及加熱控制系統(tǒng)以AT89S52單片機(jī)為核心部件,外加溫度采集電路、鍵盤及顯示電路、加熱控制電路和越限報(bào)警等電路。采用單總線型數(shù)字式的溫度傳感器DS18B20,及行列式鍵盤和動態(tài)顯示的方式,以容易控制的固態(tài)繼電器作加熱控制的開關(guān)器件。本作品既可以對當(dāng)前溫度進(jìn)行實(shí)時顯示又可以對溫度進(jìn)行控制,以使達(dá)到用戶需要的溫度,并使其恒定在這一溫度。人性化的行列式鍵盤設(shè)計(jì)使設(shè)置溫度簡單快速,兩位整數(shù)一位小數(shù)的顯示方式具有更高的顯示精度。建立在模糊控制理論上的控制算法,使控制精度完全能滿足一般社會生產(chǎn)的要求。通過對系統(tǒng)軟件和硬件設(shè)計(jì)的合理規(guī)劃,發(fā)揮單片機(jī)自身集成眾多系統(tǒng)級功能單元的優(yōu)勢,在不減少功能的前提下有效降低了硬件成本,系統(tǒng)操控簡便。關(guān)鍵詞:單片機(jī) 恒溫控制 模糊控制3Abstract:ThedesignofthetemperaturemeasurementandheatingcontrolsystemstoAT89S52microcontrollercorecomponent,plusthetemperatureacquisitioncircuit,keyboardanddisplaycircuit,heatingcircutaltemperaturesensorDS18B20,andthedeterminantofthekeyboardanddynamicdisplayinordertoeasilycontrolthesolid-staterelaysforheatingcontroloftheswitchingdevice.Thisworksbothonthecurrenttemperatureinreal-timedisplayoftemperaturecanbecontrolledinordertoenableuserstoreachtherequiredtemperature,andmakeitconstantatthistemperature.HumanizeddesignkeyboarddeterminanttemperatureeasyExpress,thetwodecimalinteger,adisplayshowsahigheraccuracy.Setupinthefuzzycontroltheory,controlalgorithms,sothatthecontrolaccuracycanmeetthegeneralrequirementsofsocialproduction.Throughthesystemsoftwareandhardwaredesignofrationalplanning,exerttheirownsingle-chipintegrationofmanysystem-levelfunctionalunitoftheadvantages,doesnotreducethefunctionsatthepremiseofeffectivelyreducingthecostofhardware,thesystemeasytomanipulate.Keywords:microcontroller,temperaturecontrol,fuzzycontrol4設(shè)計(jì)目的和意義利用AT89S52對溫度進(jìn)行控制,采用單總線傳輸方式讀取 DS18B20當(dāng)前溫度值并用龍丘小液晶顯示,使用按鍵更改設(shè)定溫度, 使用PID算法控制箱體溫度到一個恒定值, 這樣一個控制系統(tǒng)涵蓋了以計(jì)算機(jī)控制系統(tǒng)課程為核心的單片機(jī)原理及應(yīng)用、 自動控制原理等相關(guān)課程知識,提供了真正將理論課程所學(xué)的知識應(yīng)用于實(shí)踐的平臺。 從硬件的搭建到軟件算法的探索都需要扎實(shí)的理論基礎(chǔ)。在涉及光耦驅(qū)動晶閘管電路的設(shè)計(jì)過程中還考察了器件選型的重要性,對于箱體的設(shè)計(jì)還考察了學(xué)生對于實(shí)際的考慮。 整個設(shè)計(jì)過程需要工程的思想, 正是迎合了我自動化專業(yè)優(yōu)秀學(xué)生所必須具備的知識與能力!系統(tǒng)總體結(jié)構(gòu)2.1總體方案設(shè)計(jì)系統(tǒng)整體框圖如下圖:圖1系統(tǒng)原理總框圖上面的系統(tǒng)總體框圖中,該系統(tǒng)中微控制器采用 AT89S52單片機(jī)小系統(tǒng),溫度顯示采用龍丘小液晶顯示模塊、聲光報(bào)警器模塊、 DS18B20溫度采集模塊、鍵盤輸入設(shè)定溫度模塊、繼電器驅(qū)動模塊。2.2溫度控制方案選擇該溫度控制系統(tǒng)的控制對象是箱體內(nèi)的溫度,但是溫度這個量的控制必須借助其他產(chǎn)熱原件才能實(shí)現(xiàn)。經(jīng)過多方調(diào)查,我總結(jié)到可行又比較簡單的方案大體都是使用燈泡發(fā)光產(chǎn)熱來改變箱體內(nèi)溫度,控制燈泡產(chǎn)熱的方案分別如下所述:方案一:采用繼電器作為程控開關(guān),控制燈泡的開或關(guān),進(jìn)而控制其產(chǎn)熱。這種方案簡單易行,但是繼電器控制的頻率一般只有 10Hz左右,不能在50Hz交流電的每個周期都控制燈泡開關(guān)一次,也就是只能控制燈泡的亮或滅,不能調(diào)節(jié)燈泡的亮度。方案二:采用開關(guān)器件晶閘管作為控制燈泡亮度的執(zhí)行部件,由于晶閘管的開關(guān)速度可以5達(dá)到很快,因而可以控制燈泡的亮度。由于本裝置要求控制調(diào)節(jié)控制溫度的精度要達(dá)到1°C,用繼電器方案也可以達(dá)到要求,但是不能實(shí)現(xiàn)平滑控制燈泡發(fā)熱量的要求。為了能夠平滑控制燈泡亮度,最終選定使用晶閘管控制方案,即方案二。2.3主控芯片的選擇對于本系統(tǒng)這樣一個典型而又全面的控制系統(tǒng)來說, 用八位的52單片機(jī)或者AVR單片機(jī)就可以滿足控制要求。方案一:采用52系列單片機(jī),有兩個外部中斷口、 3路定時器、4路8位I/O口,資源豐富,編程簡單。方案二:使用AVR系列的ATMEGA16單片機(jī),除了擁有一般的中斷、定時、輸入輸出功能外,還有PWM輸出功能,JTAG等外加功能,但是需要燒寫熔絲位,編程相對復(fù)雜些,而且價(jià)格要高出好多。綜合考慮到價(jià)格因素以及資源需求,最終選定 AT89S52單片機(jī)作為主控芯片。2.4液晶顯示方案選擇方案一:使用的最為廣泛的方案也就是使用 1602字符型液晶顯示器,該液晶價(jià)格便宜,編程簡單,但是只能顯示兩行 16個字符以內(nèi)的英文字符。方案二:使用龍丘小液晶,分辨率 128*64,可以顯示不同大小的漢字和字符,功耗很低,采用3.3V供電。由于本系統(tǒng)使用便宜的7805線性穩(wěn)壓芯片供電,其發(fā)熱功率與輸入與輸出電壓差以及負(fù)載電流的大小乘積正相關(guān)。所以采用 LCD1602字符型液晶繼電器,選擇方案一。系統(tǒng)模塊設(shè)計(jì)3.1系統(tǒng)電源模塊設(shè)計(jì)電源是整個系統(tǒng)工作的基礎(chǔ),所有的功能實(shí)現(xiàn)都是基于穩(wěn)定的電源。本系統(tǒng)電源單片機(jī)、DS18B20用的5V標(biāo)準(zhǔn)的TTL電平邏輯,這里給出使用 L7805產(chǎn)生5V電源的電路。圖27805產(chǎn)生5V電源L7805是非常普通的線性穩(wěn)壓芯片,其輸出最大電流為1.5A,但是由于它是線性電源,其發(fā)熱功率與輸入與輸出電壓差以及負(fù)載電流的大小乘積正相關(guān)。為了盡量減小功耗,在輸入和輸出端都使用了電容濾波,抑制電壓電流的波動。3.2AT89S52單片機(jī)小系統(tǒng)模塊設(shè)計(jì)63.2.1AT89S52單片機(jī)簡介AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。使用Atmel公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。AT89S52具有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash,256字節(jié)RAM,32位I/O口線,看門狗定時器,2個數(shù)據(jù)指針,三個16位定時器/計(jì)數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時鐘電路。另外,AT89S52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個中斷或硬件復(fù)位為止。3.2.2單片機(jī)最小系統(tǒng)電路單片機(jī)工作的基本要求包括必要的5V電源(40引腳),接地(20引腳),晶振電路(18、19引腳),復(fù)位電路(9引腳)以及使用內(nèi)部存儲器需要給31腳接高。圖3AT89S52最小系統(tǒng)電路圖3.3LCD1602液晶顯示器顯示模塊設(shè)計(jì)該款液晶顯示器與單片機(jī)通信屬于串行口數(shù)據(jù)通信方式,可以直接與單片機(jī)引腳連接,接受5V電平邏輯。7圖4小液晶連接電路3.4DS18B20溫度采集模塊設(shè)計(jì)3.4.1DS18B20簡介DS18B20數(shù)字溫度計(jì)是Dallas公司生產(chǎn)的1-Wire器件,即單總線器件。與傳統(tǒng)的熱敏電阻有所不同,DS18B20可直接將被測溫度轉(zhuǎn)化成串行數(shù)字信號,以供單片機(jī)處理,具有連線簡單、微型化、低功耗、高性能、抗干擾能力強(qiáng)、精度高等特點(diǎn)。因此用它來組成一個測溫系統(tǒng),具有電路簡單,在一根通信線上可以掛很多這樣的數(shù)字溫度計(jì),十分方便。 目前已被眾多行業(yè)進(jìn)行廣泛的運(yùn)用(鍋爐、溫控表糧庫、冷庫、工業(yè)現(xiàn)場溫度監(jiān)控、儀器儀表溫度監(jiān)控、農(nóng)業(yè)大棚溫度監(jiān)控等)。通過編程, DS18B20可以實(shí)現(xiàn)9~12位的溫度讀數(shù)。3.4.2溫度檢測部分電路溫度檢測部分很簡單,因?yàn)樾畔⒔?jīng)過單線接口送入DS18B20或從DS18B20送出,因此從微處理器到DS18B20僅需連接一條信號線和地線就可以正常工作,這里我還是給它接入了電源線。圖5溫度檢測部分電路3.5鍵盤輸入溫度設(shè)定模塊設(shè)計(jì)為了簡便,我只使用了3個獨(dú)立按鍵作為按鍵輸入,分別作為設(shè)置鍵(移位鍵)、增加鍵、減小鍵。最開始在板子上用了4個按鍵,有一個沒有用。8圖6按鍵檢測電路3.6可控硅驅(qū)動模塊設(shè)計(jì)可控硅使用的型號是BT137,配合使用光耦MOC3021驅(qū)動它,MOC3021又用了一個PNP三極管來驅(qū)動,這里也就是運(yùn)用了兩級驅(qū)動來控制強(qiáng)電的燈泡亮滅,完全隔離保證安全。圖7可控硅驅(qū)動部分電路系統(tǒng)軟件設(shè)計(jì)整個軟件系統(tǒng)的流程圖繪制在下面圖中。系統(tǒng)初始化液晶顯示是否按鍵重設(shè)溫度 Y 重設(shè)溫度N開中斷讀一次溫度顯示當(dāng)前溫度和設(shè)定溫度再讀一次溫度判斷正確性并顯示現(xiàn)實(shí)判斷PID調(diào)光檢測溫度=設(shè)定溫度N Y9Y聲光報(bào)警圖8軟件流程圖4.1液晶顯示程序設(shè)計(jì)該龍丘小液晶可以顯示不同字號的漢字或者字符,但是比較麻煩的是,該液晶沒有解碼漢字的芯片,所以要輸出顯示都要先使用一款 “漢字取模軟件”。這也使得我在程序中加入漢字取點(diǎn)的數(shù)組以后,程序體積增大了很多,最終代碼段接近 8K。液晶程序結(jié)構(gòu)如下:先定義各端口為sbitlcdrs=P2^0;//定義lcdrs腳sbitlcdwr=P2^1;//定義lcdwr腳sbitlcde=P2^2;//定義lcde腳uchartm[]={"0123456789"};// 定義字符數(shù)組ucharno[]={"nowtemp="};ucharset[]={"settemp="};// 定義字符串顯示ucharsn[]={"inputst="};// 定義設(shè)置時字符串voidwrite_com(ucharcom){P0=com;//將數(shù)據(jù)送入P2口,即寫入指令或地址lcdrs=0;lcdwr=0;//根據(jù)規(guī)定,RS和R/W同時為低電平時,可以寫入指令delaynms(5);lcde=0;delaynms(5);lcde=1;}/*****************************************************函數(shù)功能:將數(shù)據(jù) (字符的標(biāo)準(zhǔn)ASCII碼)寫入液晶模塊入口參數(shù):dat(為字符常量)***************************************************/voidwrite_dat(uchardat){P0=dat;//將數(shù)據(jù)送入P2口,即將數(shù)據(jù)寫入液晶模塊lcdrs=1;lcdwr=0;//RS為高電平,RW為低電平時,可以寫入數(shù)據(jù)delaynms(5);lcde=0;10delaynms(5);lcde=1;}/*****************************************************函數(shù)功能:對 LCD的顯示模式進(jìn)行初始化設(shè)置***************************************************/4.2溫度檢測程序設(shè)計(jì)DS18B20采集溫度的精度可以設(shè)置,我們使用了最高精度的模式,也就是 12位。其源碼在官方資料上以及網(wǎng)上隨處可見,經(jīng)過修改后,該模塊簡化程序如下。uchards18b20_temp()//18B20讀溫度函數(shù){uchartemp=0,temph=0,templ=0;ds18b20_reset();//將DS18B20初始化ds18b20_write(0xcc);// 跳過讀序號列號的操作ds18b20_write(0x44);// 啟動溫度轉(zhuǎn)換delaynms(10);//轉(zhuǎn)換一次需要延時一段時間ds18b20_reset();//將DS18B20初始化ds18b20_write(0xcc);//跳過讀序號列號的操作ds18b20_write(0xbe);//讀取溫度寄存器,前兩個分別是溫度的低位和高位templ=ds18b20_read();//將讀取到的溫度的低位存在templ中temph=ds18b20_read();//高位存在temph中temp=temph*16+templ/16;//讀出溫度整數(shù)部分,2位xs=(templ%16)*10/16;//讀出溫度的小數(shù)部分,1位returntemp;//返回溫度的整數(shù)部分}心得體會通過本次制作恒溫箱,對于計(jì)算機(jī)控制系統(tǒng)有更實(shí)際的了解,以前學(xué)習(xí)的知識,都是基于理論,就算是實(shí)驗(yàn)課,器材也是學(xué)校已經(jīng)弄好了,我們做實(shí)驗(yàn)基本就是連接線路,也根本了解的不深入。但是,這次的課程設(shè)計(jì),不但要我們自己買器材,更要我們設(shè)計(jì)電路、畫出電路圖、畫出PCB、最終焊接成一塊板子,然后調(diào)試板子,板子硬件調(diào)試差不多了又要設(shè)計(jì)程序。這樣一個控制系統(tǒng)涵蓋了以計(jì)算機(jī)控制系統(tǒng)課程為核心的單片機(jī)原理及應(yīng)用、自動控制原理等相關(guān)課程知識,提供了真正將理論課程所學(xué)的知識應(yīng)用于實(shí)踐的平臺。從硬件的搭建到軟件算法的探索都需要扎實(shí)的理論基礎(chǔ)。在涉及光耦驅(qū)動晶閘管電路的設(shè)計(jì)過程中還考察了器件選型的重要性,對于箱體的設(shè)計(jì)還考察了學(xué)生對于實(shí)際的考慮。整個設(shè)計(jì)過程需要工程的思想。恒溫箱顧名思義就是要讓溫度基本恒定在一個我們期望的值,所以在設(shè)計(jì)程序時,就要想一個算法來控制單片機(jī),使之能夠恒定溫度。當(dāng)然對于這種控制,最好的算法莫過于 PID算法,因11為此法簡單而有效,工業(yè)上也有很多的應(yīng)用,如果需要更精確的控制,可以再 PID的基礎(chǔ)增加一些算法,比如模糊控制、魯棒控制等。通過這次的設(shè)計(jì)制作,我學(xué)習(xí)到了如何把理論上的東西運(yùn)用到實(shí)踐當(dāng)中,并且對于PID參數(shù)的調(diào)整有了更加深入的理解,體會頗深,對于以后做項(xiàng)目又增加了不少經(jīng)驗(yàn)。參考文獻(xiàn)單片機(jī)原理與應(yīng)用/戴勝華等-北京:清華大學(xué)出版社;北京交通大學(xué)出版社,2005.4[2]51單片機(jī)快速入門 /徐瑋等-北京:機(jī)械工業(yè)出版社, 2011.11C語言程序設(shè)計(jì)/戴勝華等-北京:清華大學(xué)出版社,200單片機(jī)原理與應(yīng)用/戴勝華等-北京:清華大學(xué)出版社;北京交通大學(xué)出版社,2005.4計(jì)算機(jī)控制系統(tǒng)/高金源等-北京:清華大學(xué)出版社,2007.112附錄一 電路原理圖附錄二 主函數(shù)完整程序//************************* 恒溫箱系統(tǒng)程序 **************************///******************************************************************工作流程:通過按鍵輸入設(shè)定希望達(dá)到的溫度值,確定后單片機(jī)輸出脈沖控制燈泡加熱,期間DS18B20不斷檢測溫度并將之顯示在LCD1602液晶屏上,同時液晶屏也顯示設(shè)定的溫度值,當(dāng)實(shí)際溫度和給定溫度誤差在0.1度范圍內(nèi)一段時間后,LED發(fā)光,蜂鳴器發(fā)出一定頻率的聲音,表示系統(tǒng)已達(dá)到平衡,經(jīng)過大概5s后停止發(fā)光和鳴叫;重新設(shè)定給定后,重新達(dá)平衡則再次發(fā)光和鳴叫。恒溫箱內(nèi)溫度保持在給定值加減允許的誤差范圍內(nèi)。*******************************************************************/#include<reg52.h>//包含單片機(jī)寄存器的頭文件#include<intrins.h>//包含_nop_()函數(shù)定義的頭文件#defineucharunsignedchar//宏定義uchar#defineuintunsignedint//宏定義uintsbitCF=P2^4;//定義觸發(fā)脈沖發(fā)送引腳/*****************************************************以下是延時函數(shù)模塊***************************************************//*****************************************************函數(shù)功能:延時 1ms(3j+2)*i=(3×33+2)×10=1010(微秒),可以認(rèn)為是 1毫秒***************************************************/voiddelay1ms(){unsignedchari,j;for(i=0;i<4;i++)13for(j=0;j<33;j++);}/*****************************************************函數(shù)功能:延時若干毫秒入口參數(shù):n***************************************************/voiddelaynms(unsignedintn){unsignedinti;for(i=0;i<n;i++)delay1ms();}/************************************************************************以下是DS18B20的操作程序************************************************************************/sbitDQ=P2^3;//定義18B20數(shù)據(jù)引腳uchartime;//設(shè)置全局變量,專門用于嚴(yán)格延時ucharxs;//存放讀取溫度的小數(shù)位/*****************************************************函數(shù)功能:將 DS18B20傳感器初始化***************************************************/voidds18b20_reset()//18b20復(fù)位函數(shù){while(1){DQ=1;DQ=0;time=250;//540us延時,當(dāng)delay=1時延時為2us,T=2*xwhile(--time);DQ=1;time=25;while(--time);while(DQ==0){time=220;while(--time);if(DQ)break;}time=150;while(--time);break;}}/*****************************************************函數(shù)功能:向 DS18B20寫入一個字節(jié)數(shù)據(jù)入口參數(shù):dat***************************************************/voidds18b20_write(uchardat)//18B20 寫函數(shù){uchari=0;for(i=0;i<8;i++){DQ=0;//將數(shù)據(jù)線從高拉低時即啟動寫時序DQ=dat&0x01;//利用與運(yùn)算取出要寫的某位二進(jìn)制數(shù)據(jù),//并將其送到數(shù)據(jù)線上等待DS18B20采樣14for(time=0;time<25;time++);// 延時約45us,DS18B20在拉低后的約 15~60us期間從數(shù)據(jù)線上采樣DQ=1;//釋放數(shù)據(jù)線dat>>=1;//將dat中的各二進(jìn)制位數(shù)據(jù)右移1位}for(time=0;time<25;time++);// 稍作延時,給硬件一點(diǎn)反應(yīng)時間}/*****************************************************函數(shù)功能:從 DS18B20讀取一個字節(jié)數(shù)據(jù)出口參數(shù):dat***************************************************/uchards18b20_read()//18B20讀函數(shù){uchari=0,dat=0;//儲存讀出的一個字節(jié)數(shù)據(jù)for(i=0;i<8;i++){DQ=1;DQ=0;_nop_();_nop_();_nop_();_nop_();//延時4個機(jī)器周期,給系統(tǒng)反應(yīng)時間DQ=1;//拉高數(shù)據(jù)線_nop_();_nop_();_nop_();_nop_();//延時4個機(jī)器周期,給系統(tǒng)反應(yīng)時間if(DQ)dat|=0x01<<i;time=25;while(--time);DQ=1;//拉高數(shù)據(jù)線_nop_();}return(dat);//返回讀出的十六進(jìn)制數(shù)據(jù)}/*****************************************************函數(shù)功能:從 DS18B20讀取溫度出口參數(shù):temp***************************************************/uchards18b20_temp()//18B20讀溫度函數(shù){uchartemp=0,temph=0,templ=0;ds18b20_reset();//將DS18B20初始化ds18b20_write(0xcc);// 跳過讀序號列號的操作ds18b20_write(0x44);// 啟動溫度轉(zhuǎn)換delaynms(10);//轉(zhuǎn)換一次需要延時一段時間ds18b20_reset();//將DS18B20初始化ds18b20_write(0xcc);//跳過讀序號列號的操作ds18b20_write(0xbe);//讀取溫度寄存器 ,前兩個分別是溫度的低位和高位templ=ds18b20_read();//將讀取到的溫度的低位存在templ中temph=ds18b20_read();//高位存在temph中temp=temph*16+templ/16;//讀出溫度整數(shù)部分,2位xs=(templ%16)*10/16;//讀出溫度的小數(shù)部分,1位returntemp;//返回溫度的整數(shù)部分}15/************************************************************************以下是LCD1602液晶模塊的操作程序************************************************************************/sbitlcdrs=P2^0;//定義lcdrs腳sbitlcdwr=P2^1;//定義lcdwr腳sbitlcde=P2^2;//定義lcde腳uchartm[]={"0123456789"};// 定義字符數(shù)組ucharno[]={"nowtemp="};ucharset[]={"settemp="};// 定義字符串顯示ucharsn[]={"inputst="};// 定義設(shè)置時字符串/*****************************************************函數(shù)功能:將模式設(shè)置指令或顯示地址寫入液晶模塊入口參數(shù):com***************************************************/voidwrite_com(ucharcom){P0=com;//將數(shù)據(jù)送入 P2口,即寫入指令或地址lcdrs=0;lcdwr=0;//根據(jù)規(guī)定,RS和R/W同時為低電平時,可以寫入指令delaynms(5);lcde=0;delaynms(5);lcde=1;}/*****************************************************函數(shù)功能:將數(shù)據(jù) (字符的標(biāo)準(zhǔn) ASCII碼)寫入液晶模塊入口參數(shù):dat(為字符常量)***************************************************/voidwrite_dat(uchardat){P0=dat;//將數(shù)據(jù)送入 P2口,即將數(shù)據(jù)寫入液晶模塊lcdrs=1;lcdwr=0;//RS為高電平,RW為低電平時,可以寫入數(shù)據(jù)delaynms(5);lcde=0;delaynms(5);lcde=1;}/*****************************************************函數(shù)功能:對 LCD的顯示模式進(jìn)行初始化設(shè)置***************************************************/voidinit(){delaynms(15);//延時15ms,首次寫指令時應(yīng)給LCD一段較長的反應(yīng)時間write_com(0x38);//顯示模式設(shè)置:16×2顯示,5×7點(diǎn)陣,8位數(shù)據(jù)接口delaynms(5);//延時5ms ,給硬件一點(diǎn)反應(yīng)時間write_com(0x38);delaynms(5);//延時5ms ,給硬件一點(diǎn)反應(yīng)時間write_com(0x38);//連續(xù)三次,確保初始化成功delaynms(5);//延時5ms ,給硬件一點(diǎn)反應(yīng)時間write_com(0x0c);//顯示控制:顯示開,光標(biāo)關(guān),閃爍關(guān)delaynms(5);//延時5ms ,給硬件一點(diǎn)反應(yīng)時間write_com(0x06);//輸入方式設(shè)置:數(shù)據(jù)讀寫操作后, AC自動加1,畫面不動delaynms(5);//延時5ms ,給硬件一點(diǎn)反應(yīng)時間write_com(0x01);//清屏幕指令,將以前的顯示內(nèi)容清除16delaynms(5);//延時5ms ,給硬件一點(diǎn)反應(yīng)時間}/*****************************************************函數(shù)功能:LCD在第一行顯示 "nowtemp= .°C"字符串***************************************************/voidlcdnt(){uchari;write_com(0x80);for(i=0;i<9;i++){write_dat(no[i]);delay1ms();//延時1ms給硬件一點(diǎn)反應(yīng)時間}write_com(0x80+0x0b);write_dat('.');delay1ms();//延時1ms給硬件一點(diǎn)反應(yīng)時間write_com(0x80+0x0d);write_dat(0xDF);delay1ms();//延時1ms給硬件一點(diǎn)反應(yīng)時間write_com(0x80+0x0e);write_dat('C');delay1ms();//延時1ms給硬件一點(diǎn)反應(yīng)時間}/*****************************************************函數(shù)功能:LCD在第二行顯示 "settemp= .°C"字符串***************************************************/voidlcdgg(){uchari;write_com(0x80+0x40);for(i=0;i<9;i++){write_dat(set[i]);delay1ms();//延時1ms給硬件一點(diǎn)反應(yīng)時間}write_com(0x80+0x40+0x0b);write_dat('.');delay1ms();//延時1ms給硬件一點(diǎn)反應(yīng)時間 ?write_com(0x80+0x40+0x0d);write_dat(0xDF);delay1ms();//延時1ms給硬件一點(diǎn)反應(yīng)時間write_com(0x80+0x40+0x0e);write_dat('C');delay1ms();//延時1ms給硬件一點(diǎn)反應(yīng)時間}/*****************************************************函數(shù)功能:設(shè)置模式下 LCD在第二行顯示"inputst"字符串***************************************************/voidlcdst(){uchari;write_com(0x80+0x40);for(i=0;i<9;i++){write_dat(sn[i]);delay1ms();//延時1ms給硬件一點(diǎn)反應(yīng)時間17}}/*****************************************************函數(shù)功能:LCD顯示當(dāng)前實(shí)際溫度的個、十位和小數(shù)位入口參數(shù):sw,gw,xs***************************************************/voidlcdntemp(ucharsw,uchargw,ucharxs){write_com(0x80+0x09);//指針的位置移至第一行第9個位置write_dat(tm[sw]);delay1ms();//延時1ms給硬件一點(diǎn)反應(yīng)時間write_com(0x80+0x0a);write_dat(tm[gw]);delay1ms();//延時1ms給硬件一點(diǎn)反應(yīng)時間write_com(0x80+0x0c);write_dat(tm[xs]);delay1ms();//延時1ms給硬件一點(diǎn)反應(yīng)時間}/*****************************************************函數(shù)功能:LCD顯示設(shè)置溫度的個、十位和小數(shù)位入口參數(shù):a,b***************************************************/voidlcdxs(uchara,ucharb){write_com(0x80+0x40+0x09);// 將指針移至第二行第 9個位置write_dat(tm[a]);//顯示設(shè)置溫度的十位delay1ms();//延時1ms給硬件一點(diǎn)反應(yīng)時間write_com(0x80+0x40+0x0a);write_dat(tm[b]);delay1ms();//延時1ms給硬件一點(diǎn)反應(yīng)時間write_com(0x80+0x40+0x0c);write_dat(tm[0]);delay1ms();//延時1ms給硬件一點(diǎn)反應(yīng)時間}/************************************************************************以下是按鍵模塊的操作程序************************************************************************/sbitKEY1=P1^0;//按鍵1+1sbitKEY2=P1^1;//按鍵2-1sbitKEY3=P1^2;//按鍵3+5sbitKEY4=P1^3;//按鍵4-5sbitKEY_I=P1^4;//模式切換按鍵ucharst;//存放設(shè)定溫度值intflag=0;//定義模式切換標(biāo)志位,初始化為 0,默認(rèn)為工作模式/*****************************************************函數(shù)功能:檢測模式切換按鍵,按下后改變模式出口參數(shù):flag***************************************************/intKEY_IJC(){if(KEY_I==0){delaynms(10);//延時10ms,按鍵消抖處理if(KEY_I==0){18flag=~flag;while(~KEY_I);// 按鍵消抖處理,釋放按鍵有效}}returnflag;}/*****************************************************函數(shù)功能:按鍵檢測,在設(shè)置模式下修改給定值入口參數(shù):st出口參數(shù):st***************************************************/ucharaj(ucharst){if(KEY1==0){delaynms(10);//延時10ms,按鍵消抖處理if(KEY1==0){if(st==60)st=60;//判斷設(shè)定值是否等于 60,若等于,則 st依然等于 60elsest++;//按鍵1,st即設(shè)定值+1while(~KEY1);// 按鍵消抖處理,釋放按鍵有效}}if(KEY2==0){delaynms(10);//延時10ms,按鍵消抖處理if(KEY2==0){if(st==20)st=20;//判斷設(shè)定值是否等于 20,若等于,則 st依然等于 20elsest--;//按鍵2,st即設(shè)定值-1while(~KEY2);// 按鍵消抖處理,釋放按鍵有效}}if(KEY3==0){delaynms(10);//延時10ms,按鍵消抖處理if(KEY3==0){if(st>55)st=60;//判斷設(shè)定值是否大于 55,若大于,則 st等于60elsest+=5;//按鍵3,st即設(shè)定值+5while(~KEY3);// 按鍵消抖處理,釋放按鍵有效}}if(KEY4==0){delaynms(10);//延時10ms,按鍵消抖處理if(KEY4==0){if(st<25)st=20;//判斷設(shè)定值是否小于 25,若小于,則 st等于20else19st-=5;//按鍵4,st即設(shè)定值-5while(~KEY4);// 按鍵消抖處理,釋放按鍵有效}}returnst;}/************************************************************************以下是聲光報(bào)警模塊的程序************************************************************************/sbitled=P1^7;//定義led引腳sbitbu=P3^1;//定義蜂鳴器引腳inttime0=0;//用來計(jì)算達(dá)到平衡后的延時inttime1=0;//用來計(jì)算 LED和蜂鳴器的作用時間intflag0=0;//用來標(biāo)志表示達(dá)到平衡狀態(tài)intflag1=1;//用來標(biāo)志LED和蜂鳴器工作 ,初始為1允許計(jì)時/*****************************************************函數(shù)功能:實(shí)現(xiàn)蜂鳴器發(fā)出一定頻率的聲音***************************************************/voidbeep(){delay1ms();bu=~bu;//蜂鳴器發(fā)出一定頻率的叫聲}/*****************************************************LED發(fā)光,函數(shù)功能:當(dāng)采集到的實(shí)際溫度與設(shè)定溫度在誤差范圍內(nèi)一段時間后即穩(wěn)定后,蜂鳴器鳴叫,延時5S后結(jié)束入口參數(shù):s1,sw0,gw0,xs0***************************************************/voidled_bu(uchars1,ucharsw0,uchargw0,ucharxs0){if((((sw0*100+gw0*10+xs0)<=(s1*10+1))&&((sw0*100+gw0*10+xs0)>=(s1*10-1)))&&(flag1==1))//當(dāng)實(shí)際溫度和設(shè)定溫度在誤差范圍內(nèi)一段時間后,置位LED和蜂鳴器標(biāo)志位{time0++;if(time0==150){time0=0;//清零計(jì)時flag1=0;//將計(jì)算平衡延時的標(biāo)志位置零,即達(dá)到平衡后不再計(jì)時flag0=1;//置位LED和蜂鳴器標(biāo)志位}}else{time0=0;//若不在誤差范圍內(nèi),則計(jì)時清零}if(flag0==1){time1++;//計(jì)算LED和蜂鳴器工作的時間led=0;beep();//LED發(fā)光,蜂鳴器發(fā)出一定頻率的聲音if(time1==40){led=1;bu=1;//延時后LED熄滅,蜂鳴器停止鳴叫time1=0;//清計(jì)時時間20flag1=0;flag0=0;//清標(biāo)志位,等待下次設(shè)定后才重新置位標(biāo)志位}}}/************************************************************************以下是計(jì)算α角即延時的程序************************************************************************/floatki=0.15;//定義PID參數(shù)intthiserr=0;//存放偏差interr=0;//存放累計(jì)的偏差/*****************************************************函數(shù)功能:根據(jù)輸入的溫度給定值和實(shí)際溫度值,通過 PID算法求出需要的延時時間***************************************************/intout_time(uchars0,uchartemp){intatime;//存放輸出的延時thiserr=s0*10-(temp*10+xs);// 計(jì)算誤差err+=thiserr;//將誤差累加if(err>30000)err=30000;if(err<-1500)err=-1500;//對累加的誤差進(jìn)行處理if(thiserr>400)thiserr=400;//定義誤差最大為 400if(thiserr<=0){thiserr=0;atime=30000;//誤差小于等于 0時,停止脈沖發(fā)送}elseatime=(400-thiserr)*17+850-ki*err;// 計(jì)算延時時間if(atime<850)atime=850;//定義最小延時為 850return atime;//返回延時時間}/*****************************************************以下是主函數(shù)***************************************************/uintV_TH0,V_TL0;// 定義變量,用來裝定時器初值intdtime;//定義觸發(fā)脈沖延時時間即 α角ucharsw,gw;//存放讀取的實(shí)際溫度的十位和各位uchara,b;//存放設(shè)定溫度值的十位和各位和小數(shù)位uchartem;//存放讀取到的溫度的整數(shù)/*****************************************************函數(shù)功能:設(shè)定各種初值,設(shè)定定時器,中斷工作方式,調(diào)用各模塊函數(shù)***************************************************/voidmain(){TMOD=0x11;//設(shè)置定時器工作方式TH1=0xFE;TL1=0x0C;//給定時器 1裝定時初值21EX1=1;//允許外部中斷 1中斷IT1=1;//設(shè)置外部中斷 1觸發(fā)方式為下降沿觸發(fā)led=1;bu=1;//初始化led和蜂鳴器引腳st=20;//設(shè)置溫度初始值a=st/10;b=st%10;//計(jì)算得到設(shè)置溫度十位和各位CF=0;//脈沖發(fā)送端口置低dtime=1000;//初始定義延時時間為 1msEA=1;//允許中斷init();//LCD 初始化lcdnt();//LCD 顯示while(1){tem=ds18b20_temp();//DS18B20讀取溫度sw=tem/10;//溫度十位gw=tem%10;//溫度各位lcdntemp(sw,gw,xs);//LCD 顯示當(dāng)前溫度dtime=out_time(st,tem);//通過函數(shù)計(jì)算需要發(fā)送脈沖的延時即α角V_TH0=(65535-dtime)/256;V_TL0=(65535-dtime)%256;// 計(jì)算定時器初值lcdgg();//LCD 顯示lcdxs(a,b);//LCD 顯示設(shè)置溫度flag=KEY_IJC();// 模式切換按鍵檢測led_bu(st,sw,gw,xs);//聲光報(bào)警函數(shù)while(flag)//進(jìn)入設(shè)置模式{flag1=1;//進(jìn)入設(shè)置模式后,重新置位標(biāo)志位,可以開始計(jì)時tem=ds18b20_temp();//DS18B20讀取溫度sw=tem/10;//溫度十位gw=tem%10;//溫度各位lcdntemp(sw,gw,xs);//LCD 顯示當(dāng)前溫度lcdst();//LCD 顯示進(jìn)入設(shè)置a=st/10;b=st%10;//計(jì)算設(shè)置溫度的十位和各位lcdxs(a,b);//LCD 顯示設(shè)置溫度st=aj(st);//修改設(shè)定值按鍵檢測flag=KEY_IJC();// 模式切換按鍵檢測}}}/*****************************************************以下是中斷函數(shù)模塊***************************************************//*****************************************************函數(shù)功能:外部中斷 1函數(shù),檢測過零信號***************************************************/voidex_1(void)interrupt222{TH0=V_TH0;TL0=V_TL0;// 為定時器 0裝定時初值TR0=1;//打開定時器 0ET0=1;//允許定時器 0中斷}/*****************************************************函數(shù)功能:定時器 0中斷函數(shù),經(jīng)過延時后進(jìn)入,與定時器 1配合完成觸發(fā)脈沖的發(fā)送***************************************************/voidtimer0(void)interrupt1{CF=1;//脈沖發(fā)送引腳置高TH0=V_TH0;TL0=V_TL0;// 重裝定時初值TR1=1;//打開定時器 1ET1=1;//允許定時器 1中斷TR0=0;//關(guān)閉定時器 0}/*****************************************************函數(shù)功能:定時器 1中斷函數(shù),確定脈沖的高電平持續(xù)時間***************************************************/voidtimer1(void)interrupt3{CF=0;//脈沖發(fā)送引腳置低,脈沖發(fā)送結(jié)束TH1=0xFE;TL1=0x0C;//重裝定時初值TR1=0;//關(guān)閉定時器 1}單片機(jī)初始化/*--------------------------------------------------------------------------REG52.HHeaderfileforgeneric80C52and80C32microcontroller.Copyright(c)1988-2002KeilElektronikGmbHandKeilSoftware,Inc.Allrightsreserved.--------------------------------------------------------------------------*/#ifndef__REG52_H__#define__REG52_H__/* BYTERegisters */sfrP0 =0x80;sfrP1 =0x90;sfrP2 =0xA0;sfrP3 =0xB0;sfrPSW =0xD0;sfrACC =0xE0;sfrB =0xF0;sfrSP =0x81;sfrDPL =0x82;sfrDPH =0x83;sfrPCON =0x87;sfrTCON =0x88;sfrTMOD =0x89;sfrTL0 =0x8A;sfrTL1 =0x8B;sfrTH0 =0x8C;23sfrTH1=0x8D;sfrIE=0xA8;sfrIP=0xB8;sfrSCON=0x98;sfrSBUF=0x99;/* 8052Extensions */sfrT2CON =0xC8;sfrRCAP2L=0xCA;sfrRCAP2H=0xCB;sfrTL2 =0xCC;sfrTH2 =0xCD;/*BITRegisters*//*PSW*/sbitCY=PSW^7;sbitAC=PSW^6;sbitF0=PSW^5;sbitRS1=PSW^4;sbitRS0=PSW^3;sbitOV=PSW^2;sbitP=PSW^0;//8052only/*TCON*/sbitTF1=TCON^7;sbitTR1=TCON^6;sbitTF0=TCON^5;sbitTR0=TCON^4;sbitIE1=TCON^3;sbitIT1=TCON^2;sbitIE0=TCON^1;sbitIT0=TCON^0;/*IE*/sbitEA=IE^7;sbitET2=IE^5;//8052onlysbitES=IE^4;sbitET1=IE^3;sbitEX1=IE^2;sbitET0=IE^1;sbitEX0=IE^0;/*IP*/sbitPT2=IP^5;sbitPS=IP^4;sbitPT1=IP^3;sbitPX1=IP^2;sbitPT0=IP^1;sbitPX0=IP^0;/*P3*/sbitRD=P3^7;sbitWR=P3^6;sbitT1=P3^5;sbitT0=P3^4;sbitINT1=P3^3;sbitINT0=P3^2;sbitTXD=P3^1;sbitRXD=P3^0;24/*SCON*/sbitSM0=SCON^7;sbitSM1=SCON^6;sbitSM2=SCON^5;sbitREN=SCON^4;sbitTB8=SCON^3;sbitRB8=SCON^2;sbitTI=SCON^1;sbitRI=SCON^0;/*P1*/sbitT2EX=P1^1;//8052onlysbitT2=P1^0;//8052only/*T2CON*/sbitTF2=T2CON^7;sbitEXF2=T2CON^6;sbitRCLK=T2CON^5;sbitTCLK=T2CON^4;sbitEXEN2=T2CON^3;sbitTR2=T2CON^2;sbitC_T2=T2CON^1;sbitCP_RL2=T2CON^0;#endif基于C8051F單片機(jī)直流電動機(jī)反饋控制系統(tǒng)的設(shè)計(jì)與研究基于單片機(jī)的嵌入式Web服務(wù)器的研究MOTOROLA單片機(jī)MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對良率的影響研究基于模糊控制的電阻釬焊單片機(jī)溫度控制系統(tǒng)的研制基于MCS-51系列單片機(jī)的通用控制模塊的研究基于單片機(jī)實(shí)現(xiàn)的供暖系統(tǒng)最佳啟停自校正(STR)調(diào)節(jié)器單片機(jī)控制的二級倒立擺系統(tǒng)的研究基于增強(qiáng)型51系列單片機(jī)的TCP/IP協(xié)議棧的實(shí)現(xiàn)基于單片機(jī)的蓄電池自動監(jiān)測系統(tǒng)基于32位嵌入式單片機(jī)系統(tǒng)的圖像采集與處理技術(shù)的研究基于單片機(jī)的作物營養(yǎng)診斷專家系統(tǒng)的研究基于單片機(jī)的交流伺服電機(jī)運(yùn)動控制系統(tǒng)研究與開發(fā)基于單片機(jī)的泵管內(nèi)壁硬度測試儀的研制基于單片機(jī)的自動找平控制系統(tǒng)研究基于C8051F040單片機(jī)的嵌入式系統(tǒng)開發(fā)基于單片機(jī)的液壓動力系統(tǒng)狀態(tài)監(jiān)測儀開發(fā)模糊Smith智能控制方法的研究及其單片機(jī)實(shí)現(xiàn)一種基于單片機(jī)的軸快流CO〈,2〉激光器的手持控制面板的研制基于雙單片機(jī)沖床數(shù)控系統(tǒng)的研

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論