59、基于51单片机的温湿度控制系统
畢設幫助、開題指導、技術解答(有償)見文末。
目錄
摘要
1、方案選擇
單片機的選擇
顯示器選擇方案
2、主控模塊設計
單片機引腳介紹
單片機最小系統
一、硬件方案
二、設計功能
三、實物圖
四、原理圖
五、PCB圖?
六、Protues仿真
七、程序
部分代碼
八、資料包括
摘要
溫度、濕度和人類的生產、生活有著密切的關系,同時也是工業生產中最常見最基本的工藝參數,例如機械、電子、石油、化工等各類工業中廣泛需要對溫度濕度的檢測與控制。并且隨著人們生活水平的提高,人們對自己的生存環境越來越關注。而空氣中溫濕度的變化與人體的舒適度和情緒都有直接的影響,所以對溫度濕度的檢測及控制就非常有必要了。
隨著科技的飛速發展和普及,高性能設備越來越多,各行各業對溫濕度的要求也越來越高。傳統的溫濕度檢測模式是以人為基礎,依靠人工輪流值班,人工巡回查看等方式來測量和記錄環境狀況信息。在這種模式下,不僅效率低不利于人才資源的充分利用,而且缺乏科學性,許多重大事故都是由人為因素造成的,人工維護缺乏完整的管理系統。而問世監控系統就可以解決這樣人才資源浪費,管理不及時的問題,這是由于它的智能化設計所決定的。故本次設計對于類似項目還具有普遍意義。
關鍵詞:單片機,溫度傳感器,濕度傳感器
1、方案選擇
單片機的選擇
方案一:AT89C52是美國ATMEL公司生產的低電壓,高性能CMOS型8位單片機,器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準MCS-51指令系統,片內置通用8位中央處理器(CPU)和Flash存儲單元,功能強大。其片內的8K程序存儲器是FLASH工藝的,這種單片機對開發設備的要求很低,開發時間也大大縮短。寫入單片機內的程序還可以進行加密,這又很好地保護我們的勞動成果。再者,AT89C52目前的售價比8031還低,市場供應也很充足。AT89C52可構成真正的單片機最小應用系統,縮小系統體積,增加系統的可靠性,降低系統的成本。只要程序長度小于8K,四個I/O口全部提供給用戶。可用5V電壓編程,而且擦寫時間僅需lOms。AT89C51芯片提供三級程序存儲器加密,提供了方便靈活而可靠的硬加密手段,能完全保證程序或系統不被仿制。PO口是三態雙向口,通稱數據總線口,因為只有該口能直接用于對外部存儲器的讀/寫操作。
方案二:STC89C52系列單片機的指令系統和AT89C52系列的完全兼容,但實際操作起來卻存在很多問題:
(1)AT89C52不帶ISP下載,要用下載器才行,STC89C52可以用你的USB轉串口下載,下載軟件可以到STC廠家網上去下。
(2)STC單片機執行指令的速度很快,大約是AT的3-30倍,盡管快是好事,但這樣一來,你在AT上好使的程序在STC上不一定好用,最典型的例子就是那些對時序有嚴格要求的模塊,用STC時注意得加長延時,大約是AT的10—30倍就差不多,這一點自己調試就知道了。
(3)STC單片機對工作環境的要求比較低,電壓低于5伏時仍然正常工作,甚至3伏到4伏之間都還可以工作,然而這樣的環境下AT肯定不行了,所以當一個系統用STC單片機好用,但用AT的單片機不工作時,直接查最小系統,看單片機的供電是否正常。
比較這兩種方案,由于在學校期間學過數字電路、單片機原理、C語言程序設計,綜合考慮單片機的各部分資源和作為學生能夠獲得的資源,經過對比此次設計要求,我選擇用STC系列芯片完成。而且學校也提供了相應的硬件操作平臺,實際操作起來比較方便,故STC為更合理的選擇。本系統選擇STC89C52單片機作為主控芯片。足夠本設計運行,且價格便宜,下載程序方便。
傳感器的選擇
方案一:選用DS18B20溫度傳感器作為溫度檢測模塊。DS18B20是一線式數字溫度傳感器。具有獨特的單線式接口方式。測量范圍在—55℃~125℃,—10℃~85℃,誤差范圍在-\+0.5℃。最高精度可達0.0625℃。
HS1101是電容式濕度傳感器。可測量相對濕度范圍在0%~100%RH。誤差為-\+2%RH。
方案二: 選用DHT11作為設計的溫濕度檢測模塊。DHT11是一款集成型的數字溫濕度一體傳感器。
?它應用專用的數字模塊采集技術和溫濕度傳感技術,確保產品具有極高的可靠性與卓越的長期穩定性。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機相連接。因此該產品具有品質卓越、超快響應、抗干擾能力強、性價比極高等優點。測量范圍20%~90%RH,0℃~50℃。測溫精度為-\+2℃,測濕精度為-\+5%RH。完全符合本次畢業設計的要求。
經上述分析,方案一雖然精度更精確。卻稍顯復雜。方案二即便不能實現方案一的高精度測量。卻也能滿足設計要求。且簡便易行。可靠穩定。具有超高的性價比。故選擇方案二。
???????顯示器選擇方案
方案一:采用12864液晶顯示屏。液晶顯示模塊是128×64點陣的漢字圖形型液晶顯示模塊,可顯示漢字及圖形,內置8192個中文漢字(16X16點陣)、128個字符(8X16點陣)及64X256點陣顯示RAM(GDRAM)。可與CPU直接接口,提供兩種界面來連接微處理機:8-位并行及串行兩種連接方式。具有多種功能:光標顯示、畫面移位、睡眠模式等。
方案二:采用LCD1602液晶顯示屏。LCD1602A 是一種工業字符型液晶,能夠同時顯示16x02 即32個字符。(16列2行)。1602只能顯示字母、數字和符號能顯示16*2個字符,但寄存器不止32個,有一些顯示效果,如字符一個個顯示、字符從左到右或從右到左顯示等等,顯示效果簡單。
總結:在編程使用方面,兩者難度差不多,原理差不多,都是寫指令、寫地址、寫數據等等。當然12864液晶屏顯示更全面、字符更多。相比于1602液晶屏、12864能更形象具體的實現顯示功能。不過1602液晶屏也能實現設計的要求。網上買比較廉價,最低的六塊錢左右。而12864液晶顯示屏最便宜的也要四十塊錢。從造價方面考慮,當然是價格低廉的優先。而LCD1602A就是最好的選擇。
2、主控模塊設計
單片微型計算機是隨著微型計算機的發展而產生和發展的。自從1975 年美國德克薩斯儀器公司的第一臺單片微型計算機( 簡稱單片機)TMS-1000 問世以來,迄今為止,單片機技術已成為計算機技術的一個獨特分支,單片機的應用領域也越來越廣泛,特別是在工業控制中經常遇到對某些物理量進行定時采樣與控制的問題,在儀器儀表智能化中也扮演著極其重要的角色。
如果將8位單片機的推出作為起點,那么單片機的發展歷史大致可以分為以下幾個階段:
第一階段(1976—1978):單片機的探索階段。以Intel公司的MCS-48為代表。MCS-48的推出是在工控領域的探索,參與這一探索的公司還有Motorola、Zilog等。都取得了滿意的效果。這就是SCM的誕生年代,“單片機”一詞即由此而來。
第二階段(1978—1982):單片機的完善階段。Intel公司在MCS-48基礎上推出了完善的、典型的單片機系列MCS-51。它在以下幾個方面奠定了典型的通用總線型單片機體系結構。
(1)完善的外部總線。MCS-51設置了經典的8位單片機的總線結構,包括8位數據總線、16位地址總線、控制總線及具有多機通信功能的串行通信接口。
(2)CPU外圍功能單元的集中管理模式。
(3)體現工控特性的地址空間及位操作方式。
(4)指令系統趨于豐富和完善,并且增加了許多突出控制功能的指令。
第三階段(1982—1990):8位單片機的鞏固發展及16位單片機的推出階段,也是單片機向微控制器發展的階段。Intel公司推出的MCS-96系列單片機,將一些用于測控系統的模數轉換器、程序運行監視器、脈寬調制器等納入片中,體現了單片機的微控制器特征。
第四階段(1990—):微控制器的全面發展階段。隨著單片機在各個領域全面、深入地發展和應用,出現了高速、大尋址范圍、強運算能力的8位/16位/32位通用型單片機,以及小型廉價的專用型單片機。
單片機是在集成電路芯片上集成了各種元件的微型計算機,這些元件包括中央處理器CPU、數據存儲器RAM、程序存儲器ROM、定時/計數器、中斷系統、時鐘部件的集成和I/O接口電路。由于單片機具有體積小、價格低、可靠性高、開發應用方便等特點,因此在現代電子技術和工業領域應用較為廣泛,在智能儀表中單片機是應用最多、最活躍的領域之一。在控制領域中,現如今人們更注意計算機的底成本、小體積、運行的可靠性和控制的靈活性。在各類儀器、儀表中引入單片機,使儀器儀表智能化,提高測試的自動化程度和精度,提高計算機的運算速度,簡化儀器儀表的硬件結構,提高其性能價格比。
???????單片機引腳介紹
單片機主要特點:
(1)有優異的性能價格比。
(2)集成度高、體積小、有很高的可靠性。單片機把各功能部件集成在一塊芯片上,內部采用總線結構,減少了各芯片之間的連線,大大提高了單片機的可靠性和抗干擾能力。另外,其體積小,對于強磁場環境易于采取屏蔽措施,適合在惡劣環境下工作。
(3)控制功能強。為了滿足工業控制的要求,一般單片機的指令系統中均有極豐富的轉移指令、I/O口的邏輯操作以及位處理功能。單片機的邏輯控制功能及運行速度均高于同一檔次的微機。
(4)低功耗、低電壓,便于生產便攜式產品。
(5)外部總線增加了I2C(Inter-Integrated Circuit)及SPI(Serial Peripheral Interface)等串行總線方式,進一步縮小了體積,簡化了結構。
(6)單片機的系統擴展和系統配置較典型、規范,容易構成各種規模的應用系統。
優異的性能價格比。
1)集成度高、體積小、有很高的可靠性。
單片機把各功能部件集成在一塊芯片上,內部采用總線結構,減少了各芯片之間的連線,大大提高了單片機的可靠性與抗干擾能力。另外,其體積小,對于強磁場環境易于采取屏蔽措施,適合于在惡劣環境下工作。
此外,程序多采取固化形式也可以提高可靠性。
2)控制功能強。
為了滿足工業控制要求,一般單片機的指令系統中均有極豐富的轉移指令、I/O口的邏輯操作以及位處理功能。單片機的邏輯控制功能及運行速度均高于同一檔次的微機。
單片機的系統擴展、系統配置較典型、規范,容易構成各種規模的應用系統。
? ?VCC:STC89C52電源正端輸入,接+5V。
GND:電源地端。
XTAL1: ?單芯片系統時鐘的反相放大器輸入端。
XTAL2: 系統時鐘的反相放大器輸出端,一般在設計上只要在 XTAL1 和 XTAL2 上接上一只石英振蕩晶體系統就可以動作了,此外可以在兩引腳與地之間加入一 20PF 的小電容,可以使系統更穩定,避免噪聲干擾而死機。
RESET:STC89C52的重置引腳,高電平動作,當要對晶片重置時,只要對此引腳電平提升至高電平并保持兩個機器周期以上的時間,AT89S51便能完成系統重置的各項動作,使得內部特殊功能寄存器之內容均被設成已知狀態,并且至地址0000H處開始讀入程序代碼而執行程序。
EA/Vpp:"EA"為英文"External Access"的縮寫,表示存取外部程序代碼之意,低電平動作,也就是說當此引腳接低電平后,系統會取用外部的程序代碼(存于外部EPROM中)來執行程序。因此在8031及8032中,EA引腳必須接低電平,因為其內部無程序存儲器空間。如果是使用 8751 內部程序空間時,此引腳要接成高電平。此外,在將程序代碼燒錄至8751內部EPROM時,可以利用此引腳來輸入21V的燒錄高壓(Vpp)。
ALE/PROG:ALE是英文"Address Latch Enable"的縮寫,表示地址鎖存器啟用信號。STC89C52可以利用這支引腳來觸發外部的8位鎖存器(如74LS373),將端口0的地址總線(A0~A7)鎖進鎖存器中,因為STC89C52是以多工的方式送出地址及數據。平時在程序執行時ALE引腳的輸出頻率約是系統工作頻率的1/6,因此可以用來驅動其他周邊晶片的時基輸入。此外在燒錄8751程序代碼時,此引腳會被當成程序規劃的特殊功能來使用。
PSEN:此為"Program Store Enable"的縮寫,其意為程序儲存啟用,當8051被設成為讀取外部程序代碼工作模式時(EA=0),會送出此信號以便取得程序代碼,通常這支腳是接到EPROM的OE腳。STC89C52可以利用PSEN及RD引腳分別啟用存在外部的RAM與EPROM,使得數據存儲器與程序存儲器可以合并在一起而共用64K的定址范圍。
PORT0(P0.0~P0.7):端口0是一個8位寬的開路汲極(Open Drain)雙向輸出入端口,共有8個位,P0.0表示位0,P0.1表示位1,依此類推。其他三個I/O端口(P1、P2、P3)則不具有此電路組態,而是內部有一提升電路,P0在當做I/O用時可以推動8個LS的TTL負載。
PORT2(P2.0~P2.7):端口2是具有內部提升電路的雙向I/O端口,每一個引腳可以推動4個LS的TTL負載,若將端口2的輸出設為高電平時,此端口便能當成輸入端口來使用。P2除了當做一般I/O端口使用外,若是在STC89C52擴充外接程序存儲器或數據存儲器時,也提供地址總線的高字節A8~A15,這個時候P2便不能當做I/O來使用了。
PORT1(P1.0~P1.7):端口1也是具有內部提升電路的雙向I/O端口,其輸出緩沖器可以推動4個LS TTL負載,同樣地若將端口1的輸出設為高電平,便是由此端口來輸入數據。如果是使用8052或是8032的話,P1.0又當做定時器2的外部脈沖輸入腳,而P1.1可以有T2EX功能,可以做外部中斷輸入的觸發腳位。
PORT3(P3.0~P3.7):端口3也具有內部提升電路的雙向I/O端口,其輸出緩沖器可以推動4個TTL負載,同時還多工具有其他的額外特殊功能,包括串行通信、外部中斷控制、計時計數控制及外部數據存儲器內容的讀取或寫入控制等功能。
其引腳分配如下:
P3.0:RXD,串行通信輸入。
P3.1:TXD,串行通信輸出。
P3.2:INT0,外部中斷0輸入。
P3.3:INT1,外部中斷1輸入。
P3.4:T0,計時計數器0輸入。
P3.5:T1,計時計數器1輸入。
P3.6:WR:外部數據存儲器的寫入信號。
P3.7:RD,外部數據存儲器的讀取信號。
RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。
ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執行狀態ALE禁止,置位無效。
PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。
EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。???????
單片機最小系統
單片機芯片內還有一項主要內容就是并行I/O口。STC89C51共有4個8位的并行I/O口,分別記作P0、P1、P2、P3。每個口都包含一個鎖存器、一個輸出驅動器和輸入緩沖器。實際上,它們已被歸入專用寄存器之列,并且具有字節尋址和位尋址功能。在訪問片外擴展存儲器時,低8位地址和數據由P0口分時傳送,高8位地址由P2口傳送。在無片外擴展存儲器的系統中,這4個口的每一位均可作為雙向的I/O端口使用。
單片機的4個I/O口都是8位雙向口,這些口在結構和特性上是基本相同的,但又各具特點。
STC89C51單片機的時鐘信號通常有兩種方式產生:一是內部時鐘方式,二是外部時鐘方式。在單片機內部有一振蕩電路,只要在單片機的XTAL1和XTAL2引腳外接石英晶體(簡稱晶振),就構成了自激振蕩器并在單片機內部產生時鐘脈沖信號。圖中電容C1和C2的作用是穩定頻率和快速起振,電容值在5-30pF,典型值為30pF。晶振CYS的振蕩頻率范圍在1.2-12MHz間選擇,典型值為12MHz和11.0592MHz。
當在STC89C51單片機的RST引腳引入高電平并保持2個機器周期時,單片機內部就執行復位操作(若該引腳持續保持高電平,單片機就處于循環復位狀態)。
復位電路通常采用上電自動復位和按鈕復位兩種方式。最簡單的上電自動復位電路中上電自動復位是通過外部復位電路的電容充電來實現的。只要Vcc的上升時間不超過1ms,就可以實現自動上電復位。時鐘頻率用6MHZ時C取22uF,R取1KΩ。除了上電復位外,有時還需要按鍵手動復位。本設計就是用的按鍵手動復位。按鍵手動復位有電平方式和脈沖方式兩種。其中電平復位是通過RST端經過電阻與電源Vcc接通而實現的。
一、硬件方案
本系統采用51單片機+液晶LCD1602顯示屏+DHT11溫濕度傳感器+按鍵+繼電器+蜂鳴器+LED燈設計而成。
二、設計功能
1. 單片機型號:STC89C52/51、AT89C52/51、AT89S52/51 都可通用
?
2.產品自帶單片機上電復位電路、手動復位電路(復位按鍵)、晶振電路(給單片機提供時鐘周期)。
?
3.采集LCD1602液晶顯示溫度和濕度值,報警參數可以同時顯示出來,直觀明了。
4.有4個報警指示燈,分別代表溫度過高、溫度過低、濕度過高、濕度過低。
5.可以設置溫度和濕度的上下限報警范圍,并具有掉電保存功能,保存在STC單片機內部,上電無需重新設置。
6.當DHT11測出來的溫濕度超出設置的范圍時,蜂鳴器會報警,同時對應的報警指示燈會變亮。
7.DHT11傳感器濕度測量范圍:10%~95%RH;溫度測量范圍:0~50℃;
三、實物圖
四、原理圖
五、PCB圖?
六、Protues仿真
七、程序
?
部分代碼
/********************獨立按鍵程序*****************/ uchar key_can; //按鍵值void key() //獨立按鍵程序 {key_can = 0; //按鍵值還原成0if(key1 == 0 || key2 == 0 || key3 == 0) //有按鍵按下 {delay_1ms(1); //按鍵延時消抖動if(key1 == 0) //確認是按鍵按下key_can = 3; //得到按鍵值 if(key2 == 0) //確認是按鍵按下key_can = 2; //得到按鍵值 if(key3 == 0) //確認是按鍵按下key_can = 1; //得到按鍵值 } }/****************按鍵設置函數***************/ void key_with() {if(key_can == 1) //設置鍵{menu_1 ++;if(menu_1 > 4){menu_1 = 0; //menu_1 = 0 退出設置了,在正常顯示界面下init_1602(); //lcd1602初始化顯示 }}if(menu_1 == 1) //設置溫度上限報警值 {if(key_can == 2) //加鍵 {t_high ++ ; //設置溫度上限報警值 加1 if(t_high > 99)t_high = 99;}if(key_can == 3) //減鍵 {t_high -- ; //設置溫度上限報警值 減1 if(t_high <= t_low)t_high = t_low + 1; //限制溫度上限不能低于溫度下限}write_lcd2(1,8,t_high); //顯示上限報警值write_com(0x80+8); //將光標移動到第1行第8位write_com(0x0f); //顯示光標并且閃爍 } if(menu_1 == 2) //設置溫度下限報警值 {if(key_can == 2) //加鍵{t_low ++ ; //設置溫度下限報警值 加1 if(t_low >= t_high)t_low = t_high - 1; //限制溫度下限不能高于溫度上限}if(key_can == 3) //減鍵 {t_low -- ; //設置溫度下限報警值 減1 if(t_low <= 1)t_low = 1;}write_lcd2(1,13,t_low); //顯示溫度下限報警值 write_com(0x80+13); //將光標移動到第1行第13位write_com(0x0f); //顯示光標并且閃爍 }if(menu_1 == 3) //設置濕度上限報警值{if(key_can == 2) //加鍵{s_high ++ ; //設置濕度上限報警值加1 if(s_high > 99)s_high = 99;}if(key_can == 3) //減鍵 {s_high -- ; //設置濕度上限報警值減1 if(s_high <= s_low)s_high = s_low + 1; //限制濕度上限不能低于濕度下限}write_lcd2(2,8,s_high); //顯示濕度上限報警值write_com(0x80+0x40+8); //將光標移動到第2行第8位write_com(0x0f); //顯示光標并且閃爍 } if(menu_1 == 4) //設置濕度下限報警值{if(key_can == 2) //加鍵{s_low ++ ; //設置濕度下限報警值 加1 if(s_low >= s_high)s_low = s_high - 1; //限制濕度下限不能高于濕度上限}if(key_can == 3) //減鍵 {s_low -- ; //設置濕度下限報警值 減1 if(s_low <= 1)s_low = 1;}write_lcd2(2,13,s_low); //顯示濕度下限報警值write_com(0x80+0x40+13); //將光標移動到第2行第13位write_com(0x0f); //顯示光標并且閃爍 } } /*****************讀溫濕度傳感器程序****************/ void dht11_dis() {uchar i,j; dht11 = 0; //DHT11端口復位,發出起始信號 delay_1ms(20);dht11 = 1;delay_uint(4); if(dht11 == 0) //判斷是否響應 {while(dht11 == 0); //等待低電平時間過完while(dht11 == 1); //等待高電平時間過完for(i=0;i<5;i++){for(j=0;j<8;j++){table_dht11[i] <<= 1; //數據左移一位低位自動補0while(dht11 == 0); //等待低電平時間過完delay_uint(4); //數據1的高電平時間 if(dht11 == 1){table_dht11[i] |= 0x01;while(dht11 == 1); //等待高電平時間過完八、資料包括
需要完整的資料可以點擊下面的名片,找我要資源壓縮包的百度網盤下載地址及提取碼。
總結
以上是生活随笔為你收集整理的59、基于51单片机的温湿度控制系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 八叉树入门
- 下一篇: TK1 R21.4 只更新kernel,