版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、水溫控制系統(tǒng)摘要: 該水溫控制系統(tǒng)采用單片機進行溫度實時采集與控制。溫度信號由“一線總線”數(shù)字化溫度傳感器DS18B20提供,DS18B20在-10+85C范圍內, 固有測溫分辨率為0.5 。水溫實時控制采用繼電器控制電熱絲和風扇進行升溫、降溫控制。系統(tǒng)具備較高的測量精度和控制精度,能完成升溫和降溫控制。關鍵字: AT89C51 DS18B20 水溫控制Abstract: This water temperature control system uses the Single Chip Microcomputer to carry on temperature real-time gathe
2、ring and controling. DS18B20, digitized temperature sensor, provides the temperature signal by a main line. In -10+85 the scope, DS18B20s inherent measuring accuracy is 0.5 . The water temperature real-time control system uses the electricity nichrome wire carring on temperature increiseament and op
3、erates the electric fan to realize the temperature decrease control. The system has the higher measuring accuracy and the control precision, it also can complete the elevation of temperature and the temperature decrease control.Key Words: AT89C51 DS18B20 Water temperature control目 錄1. 系統(tǒng)方案選擇和論證21.1
4、題目要求21.1.1基本要求21.1.2發(fā)揮部分21.1.3說明21.2系統(tǒng)基本方案21.2.1各模塊電路的方案選擇及論證21.2.2系統(tǒng)各模塊的最終方案52. 硬件設計與實現(xiàn)62.1系統(tǒng)硬件模塊關系62.2主要單元電路的設計62.2.1溫度采集部分設計62.2.2加熱控制部分82.2.3鍵盤、顯示、控制器部分83. 系統(tǒng)軟件設計103.1 讀取DS18B20溫度模塊子程序103.2數(shù)據(jù)處理子程序103.3鍵盤掃描子程序123.4主程序流程圖134. 系統(tǒng)測試144.1 靜態(tài)溫度測試144.2動態(tài)溫控測量144.3結果分析14附錄1:產品使用說明15附錄2:元件清單15附錄3:系統(tǒng)硬件原理圖1
5、6附錄4:軟件程序清單17參考文獻261.系統(tǒng)方案選擇和論證1.1 題目要求設計并制作一個水溫自動控制系統(tǒng),控制對象為1L凈水,容器為搪瓷器皿。水溫可以在一定范圍內由人工設定,并能在環(huán)境溫度降低時實現(xiàn)自動控制,以保持設定的溫度基本不變。1.1.1基本要求(1)溫度設定范圍為4090,最小區(qū)分度為1,標定溫度1。(2)環(huán)境溫度降低時(例如用電風扇降溫)溫度控制的靜態(tài)誤差1。(3)用十進制數(shù)碼管顯示水的實際溫度。1.1.2發(fā)揮部分(1)采用適當?shù)目刂品椒?,當設定溫度突變(由40提高到60)時,減小系統(tǒng)的調節(jié)時間和超調量。(2)溫度控制的靜態(tài)誤差0.2。(3)在設定溫度發(fā)生突變(由40提高到60)時
6、,自動打印水溫隨時間變化的曲線。1.1.3說明(1)加熱器用一千瓦電爐。(2)如果采用單片機控制,允許使用已有的單片機最小系統(tǒng)板。(3)數(shù)碼顯示部分可以使用數(shù)碼顯示模塊。(4)測量水溫時只要求在容器內任意設置一個測量點。(5)在設計報告附一篇400字以內的報告摘要。1.2系統(tǒng)基本方案根據(jù)題目要求系統(tǒng)模塊分可以劃分為:溫度測量模塊,顯示電路模塊,加熱模塊,控制模塊,系統(tǒng)的框圖如圖1.2.1所示。為實現(xiàn)各模塊的功能,分別做了幾種不同的設計方案并進行了論證。1.2.1各模塊電路的方案選擇及論證(1)控制器模塊根據(jù)題目要求,控制器主要用于對溫度測量信號的接受和處理、控制電熱絲和風扇使控制對象滿足設計要
7、求、控制顯示電路對溫度值實時顯示以及控制鍵盤實現(xiàn)對溫度值的設定等。對控制器的選擇有以下三種方案:方案一:采用FPGA作為系統(tǒng)控制器。FPGA功能強大,可以實現(xiàn)各種復雜的邏輯功能,規(guī)模大,密度高,它將所有器件集成在一塊芯片上,減少了體積,提高了穩(wěn)定性,并且可應用EDA軟件仿真、調試,易于進行功能擴展。FPGA采用并行的I/O口方式,提高了系統(tǒng)的處理速度,適合作為大規(guī)模實時系統(tǒng)控制核心。由溫度傳感器送來的溫度信號,經FPGA程序對其進行處理,控制加熱裝置動作。但由于本設計對數(shù)據(jù)處理的速度要求不高,F(xiàn)PGA的高速處理的優(yōu)勢得不到充分體現(xiàn),并且其成本偏高,引腳較多,硬件電路布線復雜。Output顯示電
8、路加熱裝置測溫部分鍵盤輸入控制部分Input圖1.2.1 系統(tǒng)基本模塊方框圖方案一:采用FPGA作為系統(tǒng)控制器。FPGA功能強大,可以實現(xiàn)各種復雜的邏輯功能,規(guī)模大,密度高,它將所有器件集成在一塊芯片上,減少了體積,提高了穩(wěn)定性,并且可應用EDA軟件仿真、調試,易于進行功能擴展。FPGA采用并行的I/O口方式,提高了系統(tǒng)的處理速度,適合作為大規(guī)模實時系統(tǒng)控制核心。由溫度傳感器送來的溫度信號,經FPGA程序對其進行處理,控制加熱裝置動作。但由于本設計對數(shù)據(jù)處理的速度要求不高,F(xiàn)PGA的高速處理的優(yōu)勢得不到充分體現(xiàn),并且其成本偏高,引腳較多,硬件電路布線復雜。方案二:采用模擬運算放大器組成PID控
9、制系統(tǒng)。對于水溫控制是足夠的。但要附加顯示、溫度設定等功能,要附加許多電路,稍顯麻煩。方案三:采用ATMEL公司的AT89C52作為系統(tǒng)控制器。單片機算術運算功能強,軟件編程靈活、自由度大,可用軟件編程實現(xiàn)各種算法和邏輯控制,并且其功耗低、體積小、技術成熟和成本低等優(yōu)點。基于以上分析擬訂方案二,由AT89C52作為控制核心,對溫度采集和實時顯示以及加熱裝置進行控制。(2)加熱裝置有效功率控制模塊根據(jù)題目,可以使用電熱爐進行加熱,控制電熱爐的功率即可以控制加熱的速度。當水溫過高時,關掉電熱爐進行降溫處理,讓其自然冷卻。在制作中,我們裝設一個小電風扇,當水溫超高時關閉電爐開啟風扇散熱,當需要加熱時
10、開啟電爐關閉風扇。由于加熱的功率較大,考慮到簡化電路的設計,我們直接采用220V電源。對加熱裝置控制模塊有以下兩種方案:方案一:采用可控硅來控制加熱器有效功率??煽毓枋且环N半控器件,應用于交流電的功率控制有兩種形式:控制導通的交流周期數(shù)達到控制功率的目的;控制導通角的方式控制交流功率。由交流過零檢測電路輸出方波經適當延時控制雙向可控硅的導通角,延時時間即移相偏移量由溫度誤差計算得到??梢詫崿F(xiàn)對交流電單個周期有效值周期性控制,保證系統(tǒng)的動態(tài)性能指標。該方案電路稍復雜,需使用光耦合驅動芯片以及變壓器等器件。但該方案可以實現(xiàn)功率的連續(xù)調節(jié),因此響應速度快,控制精度也高。方案二:采用繼電器控制。使用繼
11、電器可以很容易實現(xiàn)地通過較高的電壓和電流,在正常條件下,工作十分可靠。繼電器無需外加光耦,自身即可實現(xiàn)電氣隔離。這種電路無法精確實現(xiàn)電熱絲功率控制,電熱絲只能工作在最大功率或零功率,對控制精度將造成影響。但可以由多路加熱絲組成功率控制,由單片機對溫差的處理實現(xiàn)分級功率控制提高系統(tǒng)動態(tài)性能?;谝陨戏治鲆约艾F(xiàn)有器件限制選擇方案二,采用繼電器控制省去光耦和交流過零檢測電路,在軟件上選用適當?shù)目刂扑惴?,同樣可以達到較好的效果。(3)溫度采集模塊題目要求溫度靜態(tài)誤差小于等于0.2,溫度信號為模擬信號,本設計要對溫度進行控制和顯示,所以要把模擬量轉換為數(shù)字量。該溫度采集模塊有以下三種方案:方案一:利用熱
12、電阻傳感器作為感溫元件,熱電阻隨溫度變化而變化,用儀表測量出熱電阻的阻值變化,從而得到與電阻值相應的溫度值。最常用的的是鉑電阻傳感器,鉑電阻在氧化介質中,甚至在高溫的條件下其物理,化學性質不變。由鉑電阻阻值的變化經小信號變送器XTR101將鉑電阻隨溫度變化的轉換為420mA線形變化電路,再將電流信號轉化為電壓信號,送到A/D轉換器ADC0809.即將模擬信號轉換為數(shù)字信號。該方案線性度優(yōu)于0.01。方案二:采用溫度傳感器AD590K。AD590K具有較高精度和重復性,良好的非線性保證0.1的測量精度。加上軟件非線性補償可以實現(xiàn)高精度測量。AD590將溫度轉化為電流信號,因此要加相應的調理電路,
13、將電流信號轉化為電壓信號。送入8為A/D轉換器,可以獲得255級的精度,基本滿足題目要求。 方案三:采用數(shù)字溫度傳感器DS18B20。DS18B20為數(shù)字式溫度傳感器,無需其他外加電路,直接輸出數(shù)字量??芍苯优c單片機通信,讀取測溫數(shù)據(jù),電路簡單。如圖1.2.2 所示 。圖1.2.2 DS18B20測溫電路基于以上分析和現(xiàn)有器件所限,溫度采集模塊選用方案三。DS18B20與傳統(tǒng)的熱敏電阻相比,他能夠直接讀出被測溫度并且可根據(jù)實際要求通過簡單的編程實現(xiàn)912位的數(shù)字值讀數(shù)方式。并且從DS18B20讀出的信息或寫入DS18B20的信息僅需要一根口線(單線接口)讀寫,因而使用DS18B20可使系統(tǒng)結構
14、更趨簡單,可靠性更高。他在測溫精度、轉換時間、傳輸距離、分辨率等方面帶來了令人滿意的效果。(4)鍵盤與顯示模塊根據(jù)題目要求,水溫要由人工設定,并能實時顯示溫度值。對鍵盤和顯示模塊有下面兩種方案: 方案一:采用液晶顯示屏和通用矩陣鍵盤。液晶顯示屏(LCD)具有功耗小、輕薄短小無輻射危險,平面直角顯示以及影象穩(wěn)定不閃爍,可視面積大,畫面效果好,抗干擾能力強等特點。但由于只需顯示三位溫度值,信息量比較少,且由于液晶是以點陣的模式顯示各種符號,需要利用控制芯片創(chuàng)建字符庫,編程工作量大,控制器資源占用較多,其成本也偏高。方案二:采用三位LED七段數(shù)碼管分別顯示溫度的十位、個位和小數(shù)位。按鍵采用單列3按鍵
15、進行溫度設定。數(shù)碼管具有:低能耗、低損耗、低壓、壽命長、耐老化,對外界環(huán)境要求較低。同時數(shù)碼管采用BCD編碼顯示數(shù)字,程序編譯容易,資源占用較少。根據(jù)以上論述,采用方案二。本系統(tǒng)中,采用了數(shù)碼管的動態(tài)顯示,節(jié)省單片機的內部資源。1.2.2系統(tǒng)各模塊的最終方案根據(jù)以上分析,結合器件和設備等因素,確定如下方案: 1. 采用AT89C52單片機作為控制器,分別對溫度采集、LED顯示、溫度設定、加熱裝置功率控制。2. 溫度測量模塊采用數(shù)字溫度傳感器DS18B20。此器件經軟件設置可以實現(xiàn)高分辨率測量。 3. 電熱絲有效功率控制采用繼電器控制,實現(xiàn)電路簡單實用,加上溫度變化緩慢可以滿足設計要求。4. 顯
16、示用LED數(shù)碼管顯示實時溫度值,用ENTER、UP、DOWN三個單鍵實現(xiàn)溫度值的設定。 OutputLED數(shù)碼管繼電器DS18B20鍵盤輸入AT89C52Input圖1.2.3 系統(tǒng)基本框圖系統(tǒng)的基本框圖如圖1.2.3 所示。CPU(AT 89C52)首先寫入命令給DS18B20,然后DS18B20開始轉換數(shù)據(jù),轉換后通過89S52來處理數(shù)據(jù)。數(shù)據(jù)處理后的結果就顯示到數(shù)碼管上。另外由鍵盤設定溫度值送到單片機,單片機通過數(shù)據(jù)處理發(fā)出溫度控制信息到繼電器。DS18B20可以被編程,所以箭頭是雙向的。2.硬件設計與實現(xiàn)2.1 系統(tǒng)硬件模塊關系本系統(tǒng)的執(zhí)行方法是循環(huán)查詢執(zhí)行的,鍵盤掃描也是用循環(huán)查詢的
17、辦法,由于本系統(tǒng)對實時性要求不是很高,所以沒有用到中斷方式來處理。各模塊關系圖如圖2.1.1所示。單片機初始話模塊繼電器控制模塊鍵盤掃描模塊(掃描有無Enter鍵按下)DS18B20得到溫度值,存放到Buffer中處理溫度值,換算成BCD碼溫度顯示模塊圖2.1.1 統(tǒng)硬件模塊關系圖2.2主要單元電路的設計2.2.1溫度采集部分設計本系統(tǒng)采用半導體溫度傳感器作為敏感元件。傳感器我們采用了DS18B20單總線可編程溫度傳感器,來實現(xiàn)對溫度的采集和轉換,直接輸出數(shù)字量,可以直接和單片機進行通訊,大大簡化了電路的復雜度。DS18B20應用廣泛,性能可以滿足題目的設計要求。DS18B20的測溫電路如圖2
18、.2.1所示。圖2.2.1 DS18B20測溫電路(1)DSI8B20的測溫功能的實現(xiàn):其測溫電路的實現(xiàn)是依靠單片機軟件的編程上。 當DSI8B20接收到溫度轉換命令后,開始啟動轉換。轉換完成后的溫度值就以16位帶符號擴展的二進制補碼形式存儲在高速暫存存儲器的0,1字節(jié)。單片機可通過單線接口讀到該數(shù)據(jù),讀取時低位在前,高位在后,數(shù)據(jù)格式以0062 5LSB形式表示。溫度值格式如表2.2.1所示,其中“S”為標志位,對應的溫度計算:當符號位S=0時,直接將二進制位轉換為十進制;當S=1時,先將補碼變換為原碼,再計算十進制值。DSI8B20完成溫度轉換后,就把測得的溫度值與 TH做比較,若TTH或
19、T RoM操作命令 - 存儲器操作命令- 處理數(shù)據(jù) 初始化 單總線上的所有處理均從初始化開始 ROM操作命令 總線主機檢測到DSl820的存在便可以發(fā)出ROM操作命令之一這些命令如表2.2.2所示表2.2.2 ROM操作命令表指令代碼Read ROM(讀ROM)33HMatch ROM(匹配ROM)55HSkip ROM(跳過ROMCCHSearch ROM(搜索ROM)F0HAlarm search(告警搜索)ECH 存儲器操作命令如表2.2.3所示表2.2.3 存儲器操作命令表指令代碼Write Scratchpad(寫暫存存儲器)4EHRead Scratchpad(讀暫存存儲器)BEH
20、Copy Scratchpad(復制暫存存儲器)48HConvert Temperature(溫度變換)44HRecall EPROM(重新調出)B8HRead Power supply(讀電源)B4H(3)溫度轉換算法及分析由于DS18B20轉換后的代碼并不是實際的溫度值,所以要進行計算轉換。溫度高字節(jié)(MS Byte)高5位是用來保存溫度的正負(標志為S的bit11bit15),高字節(jié)(MS Byte)低3位和低字節(jié)來保存溫度值(bit0 bit10)。其中低字節(jié)(LS Byte)的低4位來保存溫度的小數(shù)位(bit0 bit 3)。由于本程序采用的是0.0625的精度,小數(shù)部分的值,可以用
21、后四位代表的實際數(shù)值乘以0.0625,得到真正的數(shù)值,數(shù)值可能帶幾個小數(shù)位,所以采取小數(shù)舍入,保留一位小數(shù)即可。也就說,本系統(tǒng)的溫度精確到了0.1度。算法核心:首先程序判斷溫度是否是零下,如果是,則DS18B20保存的是溫度的補碼值,需要對其低8位(LS Byte)取反加一變成原碼。處理過后把DS18B20的溫度Copy到單片機的RAM中,里面已經是溫度值的Hex碼了,然后轉換Hex碼到BCD碼,分別把小數(shù)位,個位,十位的BCD碼存入RAM中。2.2.2加熱控制部分由于本系統(tǒng)要控制電熱絲加熱,功率較大,因此要借助功率電路。在器件選擇上留足余量,增加安全性。加熱部分采用繼電器控制,電路簡單可靠。
22、電路如圖2.2.2所示。當實測溫度低于設定值時,由單片機輸出高電平信號。三極管9014導通,繼電器開始工作對水加溫。為了防止繼電器頻繁動作。在軟件中對水溫測量精確到0.1,而在溫度設定時只取整數(shù)??梢杂?的余量。當設定溫度低于實測溫度時為了加快系統(tǒng)動態(tài)響應速度,設置一個小功率電扇,加速水溫的降低。使系統(tǒng)整體性能得以提高。原理圖如圖2.2.3所示。2.2.3鍵盤、顯示、控制器部分本設計中采用動態(tài)顯示方式驅動3個七段數(shù)碼管,分別顯示溫度的十位、個位和小數(shù)位。數(shù)碼管采用共陰極,由于AT89C52單片機每個I/O的拉電流只有12mA。所以在位碼和段碼都加上了同相驅動器。鍵盤采用按鍵開關經上拉電阻分別接
23、P1.0、P1.1、P1.2口上,起到控制、上調和下調作用。每按上調和下調鍵,設定溫度值增1減1。單片機XTAL2、XTAL1接12MHZj晶振,提供系統(tǒng)時鐘基值。另RESET接復位按鍵。原理圖如圖2.2.4所示。圖2.2.2 繼電器控制圖2.2.3 風扇控制圖圖2.2.4 鍵盤、顯示、控制器部分原理圖3.系統(tǒng)軟件設計系統(tǒng)的軟件設計采用匯編語言,對單片機進行變成實現(xiàn)各項功能。主程序對模塊進行初始化,而后調用讀溫度、處理溫度、顯示、鍵盤、和繼電器各模塊。用的是循環(huán)查詢方式,來顯示和控制溫度。3.1 讀取DS18B20溫度模塊子程序每次對DA18B20操作時多要按造DS18B20工作過程中的協(xié)議進
24、行。初始化- RoM操作命令- 存儲器操作命令- 處理數(shù)據(jù) 程序流程圖如圖3.1.1所示。3.2數(shù)據(jù)處理子程序由于DS18B20轉換后的代碼并不是實際的溫度值,所以要進行數(shù)據(jù)處理。由于本程序采用的是0.0625的精度,小數(shù)部分的值,可以用后四位代表的實際數(shù)值乘以0.0625,得到真正的數(shù)值,數(shù)值可能帶幾個小數(shù)位,所以采取四舍五入,保留一位小數(shù)即可。也就說,本系統(tǒng)的溫度精確到了0.1度。首先程序判斷溫度是否是零下,如果是,則DS18B20保存的是溫度的補碼值,需要對其低8位(LS Byte)取反加一變成原碼。處理過后把DS18B20的溫度Copy到單片機的RAM中,里面已經是溫度值的Hex碼了,
25、然后轉換Hex碼到BCD碼,分別把小數(shù)位,個位,十位的BCD碼存入RAM中。數(shù)據(jù)處理子程序流程圖如圖3.2.1所示。開始開始初始化DS18B20存在?ROM操作命令存儲操作命令讀取溫度值返回是否圖3.1.1讀取DS18B20溫度子程序流程圖返回數(shù)據(jù)傳遞溫度是否為負?BCD碼轉換求補運算圖3.2.1數(shù)據(jù)處理子程序流程圖3.3鍵盤掃描子程序按鍵功能: 1. Enter P1.0(k2)控制鍵2.Up P1.1(k3)加1鍵3. Down P1.2(k4)減1鍵鍵盤子程序流程圖如圖3.3.1所示。開始ENTER_FLAG為1?ENTER鍵是否按下?是否有ENTER鍵按下?是否有UP鍵按下?是否有DO
26、WN鍵按下?DISPLAY顯示返回主程序ENTER子程序FLAG=1UP子程序DOWN子程序是是是是是否否否否否圖3.3.1鍵盤子程序流程圖3.4主程序流程圖總模塊流程圖如圖3.1.1所示。本軟件設計采用循環(huán)查詢來處理各個模塊,溫度是緩慢變化量所以可以滿足性能要求。圖3.1.1所示為系統(tǒng)主程序流程圖否初始化開始調用A/D轉換子程序DS18B20存在?數(shù)據(jù)處理子程序顯示子程序鍵盤掃描子程序繼電器控制子程序錯誤處理顯示888是圖3.1.1主程序流程圖4. 系統(tǒng)測試4.1 靜態(tài)溫度測試測試方式:由于種種條件的限制,采用模擬加熱方式進行測試。利用繼電器的指示燈來顯示繼電器的動作。紅燈表示加熱,綠燈表示
27、降溫。測量儀器:空調溫度顯示屏測試結果如表4.1.1所示:表4.1.1 測試結果數(shù)據(jù)標準溫度/2022252728測量溫度/19.822.124.726.827.6誤差/0.20.10.30.20.44.2動態(tài)溫控測量測試方式:加熱方式用體溫對傳感器DS18B20進行加熱。設定控制溫度,記錄超調溫度,穩(wěn)態(tài)誤差。超調溫度與加熱的功率有關,這里不再測量。測量儀器:空調溫度顯示屏測量結果如表4.2.1所示:表4.2.1 測試結果數(shù)據(jù)設定溫度/29303335超調溫度/1.30.91.10.6穩(wěn)態(tài)誤差/0.20.40.20.44.3結果分析有以上的測量結果可見,系統(tǒng)基本上達到了所要求的指標,靜態(tài)測溫的
28、精度主要由DS18B20來決定。在控溫指標中,影響系統(tǒng)的性能的因素很多。最關鍵的是加熱系統(tǒng)本身的物理性質及控制算法。由于條件的限制,在本設計中采用體溫進行測試。 附錄1: 產品使用說明本水溫控制系統(tǒng)能在099范圍內設定任意溫度值,超出此范圍將有出錯顯示888,之后返回到99或0。通過按ENTER鍵確認開始溫度設定;P1.1的UP鍵為加1鍵,每按一次使設定溫度值加1P1.2的DOWN鍵為減1鍵,每按下一次設定溫度值減1。設置完溫度要在按ERTER鍵確認溫度設定完成,之后顯示實測溫度值。當溫度傳感器沒有接入時也將有出錯提示顯示888。附錄2: 元件清單 元 件 單價 數(shù) 量(個) 單價AT89S5
29、2 8.0 1 DS18B20 7.0 17404 1.5 612MHZ晶振 1.2 1繼電器 5.0 1數(shù)碼管 3.0 3按鍵開關 0.2 49014 3.0 21N4007 1.0 2發(fā)光二極管 1.0 21K8排阻 1.0 1100電阻 1.0 33K 1.0 44.5K 1.0 1500 1.0 1200 1.0 1 電解電容10F 2.5 130pF 2.5 2插槽0.54面包板3.02 28附錄3 : 系統(tǒng)硬件原理圖 附錄4:軟件程序清單TEMPERATURE_L DATA 31H ;DS18B20低8位Buffer TEMPERATURE_H DATA 30H ;DS18B20高
30、8位Buffer TEMPERATURE_HC DATA 32H ;計算后十位的BCD碼存放BUFFER TEMPERATURE_LC DATA 33H ;計算后的個位和小數(shù)位的BCD碼存放BUFFER TEMPERATURE_ZH DATA 34H ;計算后十位和個位HEX碼的存放BUFFER DIS_BUF_X DATA 35H ;數(shù)碼管小數(shù)位Buffer DIS_BUF_G DATA 36H;數(shù)碼管個位Buffer DIS_BUF_S DATA 37H;數(shù)碼管十位Buffer KEY_BUF_G DATA 39H ;鍵盤輸入后,的個位值 KEY_BUF_S DATA 49H ;鍵盤輸入后
31、,的十位值 K_ENTER EQU P1.0 ;輸入數(shù)據(jù)確認按鈕 K_UP EQU P1.1 ;上調按鈕 K_DOWN EQU P1.2 ;下調按鈕 P_DS18B20 EQU P3.0 ;讀取DS18B20的輸入端口 P_SWITCH EQU P1.7 ;繼電器控制端口,1加熱,0斷開 P_FAN EQU P1.5 ;風扇控制,1-降溫,0-斷開 FLAG EQU 20H.0 ;標志位,確定是否存在DS18B20,1-存在,0-不存在 ENTER_FLAG EQU 20H.1 ;鍵盤輸入的標志位,為0說明鍵盤正在輸入,為1說明鍵盤輸入退出;程序開始執(zhí)行 ORG 0000H LJMP MAIN
32、 ORG 0100HMAIN: MOV SP,#60H ;初始化 MOV KEY_BUF_G,#00H ;由于KEY_BUF是由用戶輸入的,所以先賦值初始化 MOV KEY_BUF_S,#00HNEXT: LCALL READ_TEMP ;調用讀溫度子程序 JB FLAG,NORMAL ;判斷是否有DS18B20的存在 CALL ERR ;不存在時顯示錯誤信息AJMP NEXTNORMAL: LCALL DATA_DEAL;處理從DS18B20得到的數(shù)據(jù) LCALL SET_DIS_BUF;賦值給DIS_BUF_X,G,S, LCALL DISPLAY;調用數(shù)碼管顯示子程序 LCALL SCA
33、N_KEY;掃描鍵盤 LCALL SWITCH;處理繼電器 AJMPNEXT;程序名稱:ERR;功能:程序出錯處理,顯示三個8,即888;入口參數(shù):無;出口參數(shù):DIS_BUF_X,DIS_BUF_G, DIS_BUF_S, ERR:MOV DIS_BUF_X,#08H ;如果沒有找到DS18B20,那么就顯示錯誤,錯誤顯示為888 MOV DIS_BUF_G,#08H MOV DIS_BUF_S,#08H LCALL DISPLAY RET ;程序名稱:DATA_DEAL;功能:處理采集后的的數(shù)據(jù);入口參數(shù):TEMPERATURE_L;出口參數(shù):DIS_BUF_G, DIS_BUF_S,DI
34、S_BUF_XDATA_DEAL: MOV A,TEMPERATURE_H ;判溫度是否零下 ANL A,#80H JZ TEMPC1;A為0,說明是正數(shù),跳往TEMPC1,如果是負數(shù),則對低8為進行補碼處理 CLR C MOV A,TEMPERATURE_L;二進制數(shù)求補(雙字節(jié)) CPL A;取反加1 ADD A,#01H MOV TEMPERATURE_L,A;取補碼后存回TEMPERATURE_L,此時TEMPERATURE_L里面的值就可以表示溫;度了,不過還要繼續(xù)處理一下。 MOV A,TEMPERATURE_H CPL A ADDC A,#00H ;高位TEMPERATURE_H
35、取反,加上從低位TEMPERATURE_L進來的位 MOV TEMPERATURE_H,A ;寫回TEMPERATURE_H MOV TEMPERATURE_HC,#0BH SJMP TEMPC11TEMPC1: MOV TEMPERATURE_HC,#0AH TEMPC11:MOV A,TEMPERATURE_HC SWAP A MOV TEMPERATURE_HC,A MOV A,TEMPERATURE_L ANL A,#0FH ;取A低4位(小數(shù)位,單位是0.0625),得出來的數(shù)要乘以0.0625,通過查表來算出值 MOV DPTR,#TEMPDOTTAB MOVC A,A+DPTR
36、;查表 MOV TEMPERATURE_LC,A ;TEMPERATURE_LC LOW=小數(shù)部分 BCD MOV DIS_BUF_X,A ;小數(shù)位的BCD碼送入顯示buffer中 MOV A,TEMPERATURE_L ;整數(shù)部分 ANL A,#0F0H ;得到個位單個數(shù)值 SWAP A ;SWAP后就得到個位真正的個位 MOV TEMPERATURE_L,A MOV A,TEMPERATURE_H ANL A,#0FH SWAP A ORL A,TEMPERATURE_L MOV TEMPERATURE_ZH,A ;組合后的值存入TEMPERATURE_ZH LCALL HtoB ;轉換H
37、Ex值成為BCD碼 MOV TEMPERATURE_L,A ;TEMPERATURE_L目前存入的是十位和個位的BCD編碼 ANL A,#0F0H SWAP A ORL A,TEMPERATURE_HC ;TEMPERATURE_HC LOW位 = 十位數(shù) BCD MOV TEMPERATURE_HC,A MOV A,TEMPERATURE_L ANL A,#0FH SWAP A ;TEMPERATURE_LC HI位 = 個位數(shù) BCD ORL A,TEMPERATURE_LC MOV TEMPERATURE_LC,ARET; 小數(shù)部分碼表TEMPDOTTAB: DB 00H,00H,01H
38、,02H,03H,03H,04H,04H,05H,06H,06H,07H,08H,08H,09H,09H;0.0625-00H;0.0625*2 = 0.125-01H;0.0625*3 = 0.1875-02H;0.0625*4 = 0.25-03H;0.0625*5 = 0.3125-03H;以此類推.;程序名稱:HtoB;功能:十六進制轉 BCD;入口參數(shù):A;出口參數(shù):R7HtoB: MOV B,#064H ;100 DIV AB ;a/100 MOV R7,A ; MOV A,#0AH XCH A,B DIV AB SWAP A ORL A,B RET;程序名稱:INIT_TEMP;
39、功能:初始化DS18B20,確定DS18B20是否是存在的;入口參數(shù):無;出口參數(shù):FLAGINIT_TEMP: SETB P_DS18B20 NOP CLRP_DS18B20 ;主機發(fā)出延時537微秒的復位低脈沖 MOVR0,#6BH MOVR1,#04HTSR1: DJNZR0,$ MOV R0,#6BH DJNZ R1,TSR1 SETB P_DS18B20 ;然后拉高數(shù)據(jù)線,釋放總線進入接受狀態(tài) NOP NOP NOP MOVR0,#32HTSR2: JNB P_DS18B20,TSR3 ;等待DS18B20回應p DJNZR0,TSR2 LJMPTSR4;延時TSR3: SETBFL
40、AG;置標志位,表示DS1820存在 LJMPTSR5TSR4: CLRFLAG;清標志位,表示DS1820不存在 LJMPTSR7TSR5: MOVR0,#06BHTSR6: DJNZR0,TSR6;時序要求延時一段時間TSR7: SETBP_DS18B20 RET;程序名稱:READ_TEMP;功能:讀取DS18B20的數(shù)據(jù);入口參數(shù):TEMPERATURE_L,TEMPERATURE_H;出口參數(shù):無READ_TEMP: SETB P_DS18B20 LCALLINIT_TEMP ;先復位DS18B20 JBFLAG,TSS2 RET ;判斷DS1820是否存在?若DS18B20不存在則
41、返回TSS2:MOVA,#0CCH ;跳過ROM匹配 LCALLWRITE_18B20 MOVA,#44H ;發(fā)出溫度轉換命令 LCALLWRITE_18B20;LCALLDISPLAY ;等待AD轉換結束,12位的話750微秒 LCALLINIT_TEMP ;準備讀溫度前先復位 MOVA,#0CCH ;跳過ROM匹配 LCALLWRITE_18B20 MOVA,#0BEH ;發(fā)出讀溫度命令 LCALLWRITE_18B20 LCALLREAD_18B20 ;將讀出的溫度數(shù)據(jù)保存到35H/36H RET;具體的步驟:初始化完后當拉低電平開始產生寫時隙15微妙之內送入一位數(shù)據(jù)1560微妙1820
42、來;采樣讀取它 ;程序名稱:WRITE_18B20;功能:將A保存的數(shù)值寫入DS1820中,有具體的時序要求,詳細參考附圖的說明;入口參數(shù):A 寄存器;出口參數(shù):無WRITE_18B20: MOVR2,#08H;一共8位數(shù)據(jù),串行通訊 CLRCWR1:CLRP_DS18B20 MOVR3,#07H DJNZR3,$ RRCA;循環(huán)右移 MOVP_DS18B20,C MOVR3,#3CH DJNZR3,$;23*2 = 46微妙 SETBP_DS18B20 NOP DJNZR2,WR1;A里面一共是8位,所以要送8次 SETBP_DS18B20;釋放總線 RET;程序名稱:READ_18B20;
43、功能:讀取18B20中的數(shù)據(jù),由于是串行通訊,每次讀取一個,循環(huán)8次讀取;入口參數(shù):TEMPRATURE_L;出口參數(shù):無READ_18B20: MOVR4,#02H;將溫度高位和低位從DS18B20中讀出 MOVR1,#TEMPERATURE_LRE00:MOV R2,#08H;數(shù)據(jù)一共有8位RE01:CLR C SETB P_DS18B20 NOP NOP CLRP_DS18B20 NOP NOP NOP SETBP_DS18B20 MOVR3,#09HRE10:DJNZ R3,RE10 MOVC,P_DS18B20 MOVR3,#3CHRE20:DJNZ R3,RE20 RRCA DJN
44、Z R2,RE01 MOVR1,A DECR1 DJNZ R4,RE00 RET;程序名稱:SCAN_KEY;功能:掃描鍵盤;入口參數(shù):DIS_BUF_G,DIS_BUF_S, ;出口參數(shù):KEY_BUF_G,KEY_BUF_S, SCAN_KEY: JB K_ENTER,QUIT;如果有Enter鍵入,則開始鍵盤輸入 LCALL K_DELAY JB K_ENTER,QUIT CLR ENTER_FLAG;每次進來都賦值輸入標志,設置為0 MOV KEY_BUF_G,DIS_BUF_G ;將當前的溫度賦值給KEY_BUF,也就是說是以當前溫度為基準,進行加減的 MOV KEY_BUF_S,DIS_BUF_SK_LOOP: JB ENTER_FLAG,QUIT;如果輸入完成,ENTER_FLAG則為1,退出鍵盤程序 JB K_ENTER,KUP CALL PRO_ENTERKUP: JB K_UP,KDOWN CALL PRO_UPKDOWN:JB K_DOWN,LOOPA CALL PRO_DOWNLOOPA:LCALL D
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025下半年四川省自貢市大安區(qū)事業(yè)單位招聘50人歷年高頻重點提升(共500題)附帶答案詳解
- 2025下半年四川內江威遠縣考試招聘衛(wèi)生健康事業(yè)單位工作人員90人高頻重點提升(共500題)附帶答案詳解
- 2025上海司法局事業(yè)單位招聘9人歷年高頻重點提升(共500題)附帶答案詳解
- 2025上半年福建福鼎事業(yè)單位招聘245人歷年高頻重點提升(共500題)附帶答案詳解
- 2025上半年四川省政府直屬部分事業(yè)單位招聘546人高頻重點提升(共500題)附帶答案詳解
- 2025上半年四川廣元旺蒼縣事業(yè)單位考試招聘25人高頻重點提升(共500題)附帶答案詳解
- 2025《中國能源報》社限公司招聘11人高頻重點提升(共500題)附帶答案詳解
- 醫(yī)療設備賠償協(xié)議
- 建筑項目班組施工合同
- 醫(yī)藥招投標中的誠信體系建設
- 2024項目經理講安全課
- 烤腸銷售合同范例
- 環(huán)保驗收課件教學課件
- DB11T 1678-2019 城市軌道交通廣告設施設置規(guī)范
- 蘇教版(2024新版)七年級上冊生物期末學情評估模擬試卷(含答案)
- 職業(yè)技術學院《藥用植物學》課程標準
- NBT-電力用直流電源系統(tǒng)驗收規(guī)范編制說明
- 計算機及外部設備裝配調試員理論考試復習題庫(含答案)
- 深植心中的勞動教育(2023年黑龍江齊齊哈爾中考語文試卷議論文閱讀題及答案)
- 完整版金蝶EAS財務系統(tǒng)操作手冊
- 2024村居后備干部試題庫及答案(完整版)
評論
0/150
提交評論