版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、武漢華夏理工學(xué)院課程設(shè)計(jì)報(bào)告書 課 程 名 稱 單片機(jī)原理及應(yīng)用課程設(shè)計(jì) 課程設(shè)計(jì)總評(píng)成績 學(xué)生姓名、學(xué) 號(hào) 周子林 102124142217 學(xué) 生 專 業(yè) 班級(jí) 自動(dòng)化1142 指 導(dǎo) 教 師 姓名 李文彥 課程設(shè)計(jì)起止日期 2016.12.192016.12.30 單片機(jī)課程設(shè)計(jì)任務(wù)書題 目: 基于單片機(jī)的全自動(dòng)澆花系統(tǒng)電路設(shè)計(jì) 初始條件:1. 采用濕度傳感器采集數(shù)據(jù);2. 采用溫度傳感器采集數(shù)據(jù);3.采用單片機(jī)組成數(shù)據(jù)采集系統(tǒng); 4.采用ULN2803芯片驅(qū)動(dòng)直流電機(jī)。 要求完成的主要任務(wù): 1. 對(duì)環(huán)境的溫濕度狀態(tài)進(jìn)行數(shù)據(jù)采集;2. 設(shè)濕度傳感器輸出為0-5V的電路;3. 設(shè)計(jì)8位或
2、10位A/D轉(zhuǎn)換接口電路;4. 設(shè)計(jì)單片機(jī)的信號(hào)顯示電路;5. 設(shè)計(jì)單片機(jī)的控制電路;6. 設(shè)計(jì)掉電保存數(shù)據(jù)電路;7. 設(shè)計(jì)驅(qū)動(dòng)直流電機(jī)電路;8. 嚴(yán)格按照課程設(shè)計(jì)說明書要求撰寫課程設(shè)計(jì)說明書;時(shí)間安排: 序號(hào)階 段 內(nèi) 容所需時(shí)間(周)1方案選擇及電路設(shè)計(jì)假期進(jìn)行2制作、編程、調(diào)試13撰寫課程設(shè)計(jì)報(bào)告及答辯1合 計(jì)2指導(dǎo)教師簽名: 年 月 日 基于單片機(jī)的全自動(dòng)澆花系統(tǒng)設(shè)計(jì)作者:周子林武漢華夏理工學(xué)院信息工程學(xué)院自動(dòng)化1142摘要: 現(xiàn)代生活中,隨著人們生活水平的提高,人們對(duì)花卉、樹木等綠色植物的喜愛和種植越來越多,然而以前對(duì)花木的澆灌、施肥等工作都需要人工來實(shí)現(xiàn),由于現(xiàn)代生活節(jié)奏加快,人們
3、往往忙于工作而忘記及時(shí)為花卉補(bǔ)充水分和養(yǎng)料,導(dǎo)致花木枯死。水是植物生存、生長的最基本需要,因此,設(shè)計(jì)一種能夠在無人管理的情況下為花木自動(dòng)澆水的系統(tǒng),能夠有效解決花木因缺水而枯死的難題。 本系統(tǒng)是采用AT89C52單片機(jī)為核心的全自動(dòng)澆花系統(tǒng)。系統(tǒng)主要實(shí)現(xiàn)的功能是對(duì)花木的土壤中的濕度進(jìn)行實(shí)時(shí)檢測,當(dāng)土壤濕度低于用戶設(shè)定值時(shí)及時(shí)給花木澆水,當(dāng)土壤濕度高于系統(tǒng)設(shè)定值時(shí)停止給花木澆水。關(guān)鍵詞:C51單片機(jī) A/D轉(zhuǎn)換 IIC通信協(xié)議 LCD1602顯示1 系統(tǒng)設(shè)計(jì) 本次設(shè)計(jì)包括AT89C52單片機(jī)及基本外圍電路模塊、溫濕度檢測電路模塊、A/D轉(zhuǎn)換電路模塊、顯示電路模塊、EEPROM掉電數(shù)據(jù)保存電路模塊
4、、按鍵控制電路模塊、電機(jī)驅(qū)動(dòng)電路模塊、電源電路模塊等部分組成,具體設(shè)計(jì)方案如圖1-1所示。圖1-1.系統(tǒng)框圖2 硬件電路設(shè)計(jì)2.1 單片機(jī)本系統(tǒng)采用AT89C52單片機(jī)。 圖2-1 單片機(jī)引腳圖AT89C52是一種帶4K字節(jié)FLASH存儲(chǔ)器(FPEROMFlash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機(jī),如圖2-1所示。AT89C2052是一種帶4K字節(jié)閃存可編程可擦除只讀存儲(chǔ)器的單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除1000次。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)
5、的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C52是一種高效微控制器,就單片機(jī)而言,在課程中已經(jīng)介紹,在此就不在多加解釋。2.2 濕度傳感器本系統(tǒng)采用FC-28電阻式濕度傳感器輸出模擬量更精確的計(jì)算出濕度值,如圖2-2所示。 圖2-2 濕度檢測電路濕度值計(jì)算公式如式(1): (1) 當(dāng)濕度傳感器完全部浸入水中時(shí),Rs=5.87k (穩(wěn)定值),計(jì)算出Vo1=1.85V;當(dāng)濕度傳感器不接觸水時(shí),Rs=,計(jì)算出V01=5.0V。由于V01的變化范圍為1.85V 5.0V,為了方便計(jì)算出濕度值,在程序的算法中作以下處理:Vo2=5.0V
6、-Vo1,即Vo2的變化范圍為0V3.15V。顯示濕度值計(jì)算公式:HR=(Vo2/3.15)*100%。2.3 溫度傳感器(1)溫度傳感器DS18B20特性 全數(shù)字溫度轉(zhuǎn)換及輸出。 先進(jìn)的單總線數(shù)據(jù)通信。 支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測溫。 可編程分辨率為912位,對(duì)應(yīng)的可分辨溫度分別為0.5,0.25,0.125和 0.0625,可實(shí)現(xiàn)高精度測溫。 檢測溫度范圍為-55+125。 內(nèi)置EEPROM,限溫報(bào)警功能。 64位光刻ROM,內(nèi)置產(chǎn)品序列號(hào),方便多機(jī)掛接。 負(fù)壓特性。電源接反時(shí),芯片不會(huì)因?yàn)榘l(fā)熱而燒毀,但不能正常工作 。(2)DS18B20引
7、腳介紹如圖2-3所示。 GND:電源負(fù)極。 DQ :信號(hào)輸入輸出。 VDD:電源正極。圖2-3 DS18B20直插式(3) DS18B20RAM及EEPROM結(jié)構(gòu)圖如圖2-4所示。 圖2-4高速暫存器RAM由9個(gè)字節(jié)的存儲(chǔ)器組成。第0、1個(gè)字節(jié)是溫度轉(zhuǎn)換后的數(shù)據(jù)值信息;第2、3個(gè)字節(jié)是用戶EEPROM(常用于溫度報(bào)警值儲(chǔ)存)的鏡像;第4個(gè)字節(jié)則是用戶第3個(gè)EEPROM的鏡像;第5、6、7個(gè)字節(jié)為計(jì)數(shù)寄存器,是為了讓用戶得到更高的分辨率而設(shè)計(jì)的,同樣也是內(nèi)溫度轉(zhuǎn)換、計(jì)算的暫存單元;第8個(gè)字節(jié)為前8個(gè)字節(jié)的CRC碼。 (4)DS18B2電路原理圖如圖2-5所示。圖2-5 DS18B20典型電路(5
8、) DS18B20工作時(shí)序圖如圖2-6所示。 圖2-6 DS18B20工作時(shí)序 2.4 A/D轉(zhuǎn)換電路設(shè)計(jì) 模數(shù)轉(zhuǎn)換電路的作用是將圖2-2所示電路中濕度傳感器輸出的直流量轉(zhuǎn)換成數(shù)字量,送至單片機(jī)進(jìn)行分析與處理。本設(shè)計(jì)模數(shù)轉(zhuǎn)換器選用ADC0820,它是8位并行單極性A/D轉(zhuǎn)換器。(1)ADC0820引腳說明 圖2-7 ADC0820引腳圖如圖2-7所示。其中:模擬信號(hào)輸入端,輸入電壓范圍是。:數(shù)據(jù)端,三態(tài)數(shù)據(jù)輸出。:片選端,低電平有效。:輸入信號(hào)參考電壓,當(dāng)模擬信號(hào)的電壓范圍在時(shí),接,接地。:溢出指示端,正常情況下,是邏輯高電平,當(dāng)模擬輸入比還高,在轉(zhuǎn)換結(jié)束時(shí)將變低,還可用級(jí)聯(lián)兩個(gè)或多個(gè)器件以提
9、高分辨率(9位或10位)。:工作電壓,:中斷輸出,其使用方法詳見后述ADC0820工作方式。:方式選擇端,ADC0820有兩種工作方式,分別是讀方式和寫-讀方式,當(dāng)為低電平時(shí)為讀方式,當(dāng)為高電平時(shí)為寫-讀方式。:寫/準(zhǔn)備端,在寫-讀方式下,為低電平時(shí),下降沿啟動(dòng)A/D轉(zhuǎn)換;在讀工作方式,在的下降沿且轉(zhuǎn)換結(jié)果送入輸出鎖存電路時(shí),進(jìn)入高阻狀態(tài)。:讀,在寫-讀方式下,三態(tài)數(shù)據(jù)輸出端在變?yōu)榈碗娖綍r(shí)允許輸出;在讀方式下,在下降沿開始A/D轉(zhuǎn)換,當(dāng)進(jìn)入高阻態(tài)且由高電平變?yōu)榈碗娖綍r(shí),表示一次A/D轉(zhuǎn)換結(jié)束。(2)ADC0820工作方式 ADC0820有兩種工作方式:讀方式和寫-讀方式。 讀方式 當(dāng)為低電平時(shí)
10、,ADC0820工作于讀方式。在讀方式下,作為輸出端且為準(zhǔn)備端(即作為功能)。在此狀態(tài),當(dāng)由高電平變?yōu)榈碗娖?,表示器件?zhǔn)備就緒, 在下降沿,開始轉(zhuǎn)換,在由高電平變?yōu)榈碗娖角一謴?fù)為高阻抗?fàn)顟B(tài)后內(nèi),完成轉(zhuǎn)換。轉(zhuǎn)換完成后,數(shù)據(jù)輸出()從高阻狀態(tài)轉(zhuǎn)變?yōu)橛行顟B(tài)。數(shù)據(jù)讀出之后,、為高電平,數(shù)據(jù)輸出端恢復(fù)至高阻抗?fàn)顟B(tài)。讀方式時(shí)序如圖2-8所示。圖2-8讀方式工作時(shí)序(MODE為低電平) 寫-讀方式 當(dāng)置為高電平時(shí),轉(zhuǎn)換器為寫-讀工作方式。在此模式下,將接低電平,若將接單片機(jī)I/O口,轉(zhuǎn)換開始于的上升沿,并在其后600ns完成轉(zhuǎn)換。在該工作方式下,單片機(jī)有三種讀取數(shù)據(jù)的方式:a. 程序延時(shí),在上升沿啟動(dòng)轉(zhuǎn)換
11、,延時(shí)后,將由高電平置為低電平,通過讀取數(shù)據(jù),數(shù)據(jù)讀出后,置為高電平,恢復(fù)高電平狀態(tài),數(shù)據(jù)輸出恢復(fù)至高阻抗?fàn)顟B(tài);b.程序查詢,在此模式下,當(dāng)單片機(jī)檢測到下降沿到來時(shí),將由高電平置為低電平,開始讀取數(shù)據(jù),數(shù)據(jù)讀出之后,恢復(fù)為高電平狀態(tài),將置為高電平。當(dāng) 恢復(fù)高電平狀態(tài)后,數(shù)據(jù)輸出端恢復(fù)至高阻狀態(tài);c. 直通方式,此工作方式操作簡單,將、一直置于處低電平,轉(zhuǎn)換開始于的上升沿,轉(zhuǎn)換大約在內(nèi)完成,在下降沿到來時(shí)表示轉(zhuǎn)換完成,數(shù)據(jù)可讀出。直通方式工作時(shí)序如圖2-9所示。圖2-9 直通方式工作時(shí)序(獨(dú)立工作,MODE為高電平且為低電平)(3)本系統(tǒng)設(shè)計(jì)中ADC0820所選工作方式說明 本設(shè)計(jì)ADC0820
12、選用寫-讀方式下的直通工作方式,以提高工作效率。模數(shù)轉(zhuǎn)換電路如圖2-10所示。該方式下,將ADC0820的與直接接地、接高電平、不與外電路連接、端接單片機(jī)PB7端口以控制轉(zhuǎn)換;先將置為低電平,延時(shí)一段時(shí)間后,將其置為高電平,A/D轉(zhuǎn)換開始于其上升沿,由其內(nèi)部計(jì)數(shù)器開始延時(shí)計(jì)時(shí)(延時(shí)時(shí)間約),如果后還沒讀取數(shù)據(jù),則 變?yōu)楦唠娖?,?shù)據(jù)被鎖存。本設(shè)計(jì)中沒有使用端,因?yàn)楫?dāng)置為低電平后,在轉(zhuǎn)換開始后約數(shù)據(jù)就能讀出。本設(shè)計(jì)中,數(shù)據(jù)輸出端接單片機(jī)P1.7-P1.0口。 圖2-10 A/D轉(zhuǎn)換電路2.5 顯示電路模塊設(shè)計(jì)顯示電路的作用是顯示土壤濕度值、用戶設(shè)定值及環(huán)境溫度值,由于顯示內(nèi)容復(fù)雜,本系統(tǒng)采用LCD
13、1602液晶顯示屏作為顯示器。(1)接口信號(hào)說明 1602型液晶接口信號(hào)說明如表2.1所示。 表2.1 1602液晶接口信號(hào)說明編號(hào)符號(hào)引腳說明編號(hào)符號(hào)引腳說明1電源地9D2數(shù)據(jù)口2電源正極10D3數(shù)據(jù)口3VO液晶顯示對(duì)比度調(diào)節(jié)11D4數(shù)據(jù)口4RS數(shù)據(jù)/命令選擇端(H/L)12D5數(shù)據(jù)口5讀寫選擇端(H/L)13D6數(shù)據(jù)口6E使能信號(hào)14D7數(shù)據(jù)口7D0數(shù)據(jù)口15BLA背光電源正極8D1數(shù)據(jù)口16BLK背光電源負(fù)極(2)基本操作時(shí)序 讀狀態(tài) 輸入:RS=L,=H,E=H 輸出:D0-D7=狀態(tài)字。 讀數(shù)據(jù) 輸入:RS=H,=H,E=H 輸出:無。 寫指令 輸入:RS=L,=L,D0-D7=指令
14、碼,E=高脈沖 輸出D0-D7=數(shù)據(jù)。 寫數(shù)據(jù) 輸入:RS=H,=L,D0-D7=數(shù)據(jù),E=高脈沖 輸出D0-D=無。(3)RAM地址映射圖 控制器內(nèi)部帶有80B的RAM緩沖區(qū),對(duì)應(yīng)關(guān)系如圖2.2所示。 表2.2 1602內(nèi)部RAM地址映射表000102030405060708090A0B0C0D0E0F10.27404142434445464748494A4B4C4D4E4F50.67 當(dāng)我們向表2.2中的00-0F、40-4F地址中的任一處寫入顯示數(shù)據(jù)時(shí),液晶都可以立即顯示出來,當(dāng)寫入到10-27或50-67地址時(shí),必須通過移屏指令將它們移入可顯示區(qū)域方可正常顯示。(4)寫操作時(shí)序(見圖2
15、-11) 分析時(shí)序圖可知操作1602液晶的流程如下: 通過RS確定是寫數(shù)據(jù)還是寫命令。寫命令包括使液晶的光標(biāo)顯示/不顯示、光標(biāo)閃爍/不閃爍、需/不需要移屏、在液晶的什么位置顯示,等等。寫數(shù)據(jù)是指要顯示什么內(nèi)容。 讀/寫控制端設(shè)置為寫模式,即低電平。 將數(shù)據(jù)或命令送達(dá)數(shù)據(jù)線上。 給E一個(gè)高脈沖將數(shù)據(jù)送入液晶控制器,完成寫操作。圖2-11 1602液晶寫操作時(shí)序圖 (5)1602液晶與單片機(jī)接口如圖2-12所示。圖2-12 1602液晶與單片機(jī)接口2.6 EEPROM掉電數(shù)據(jù)保存電路設(shè)計(jì)EEPROM掉電數(shù)據(jù)保存電路主要功能:在系統(tǒng)掉電之后保存用戶設(shè)定的土壤濕度下限值。電路設(shè)計(jì)采用具有IIC總線接口
16、的EEPROM AT24C02,ATMEL公司生產(chǎn)的AT24C02可解決掉電數(shù)據(jù)保存問題,可對(duì)所存數(shù)據(jù)保存100年,并可多次擦寫,擦寫次數(shù)可達(dá)10萬次以上。(1) AT24C02引腳配置與引腳功能 AT24C02芯片的常用封裝形式有直插(DIP8)式和貼片(S0-8)式兩種,無論是直插式還是貼片式,其引腳功能與序號(hào)都一樣,引腳圖如圖2-13所示。圖2-13 AT24C02引腳圖 各引腳功能如下: 1,2,3(A0、A1、A2)可編程地址輸入端。 4(GND)電源地。 5(SDA)串行數(shù)據(jù)輸入/輸出端。 6(SCL)串行時(shí)鐘輸入。 7(WP)寫保護(hù)輸入端,用于硬件數(shù)據(jù)保護(hù)。當(dāng)其為低電平時(shí),可以對(duì)
17、整個(gè)存儲(chǔ)器進(jìn)行正常的讀/寫操作;當(dāng)其為高電平時(shí),存儲(chǔ)器具有寫保護(hù)功能,但讀操作不受影響。8(Vcc)電源正端。(2) 存儲(chǔ)器結(jié)構(gòu)與尋址 ATC2402的存儲(chǔ)容量為2KB,內(nèi)部分成32頁,每頁8B,共256B,操作時(shí)有兩種尋址方式:芯片尋址和片內(nèi)子地址尋址。 芯片尋址。AT24C02的芯片地址為1010,其地址控制字格式為1010A2A0。其中A2,A1,A0為可編程地址選擇位。A2,A1,A0引腳接高、低電平后得到確定的三位編碼,與1010形成7位編碼,即為該器件的地址碼。為芯片讀寫控制位,該位為0,表示對(duì)芯片進(jìn)行讀操作。 片內(nèi)子地址尋址。芯片尋址可對(duì)內(nèi)部256B中的任一個(gè)進(jìn)行讀/寫操作,其尋
18、址范圍為00-FF,共256個(gè)尋址單元。 由于第二種尋址方式尋址靈活,操作簡單,即采用片內(nèi)子地址尋址。(3) 讀/寫操作時(shí)序 圖2-14 AT24C02工作時(shí)序圖 (4)AT24C02電路連接如圖2-15所示。 圖2-15 AT24C02連接圖2.7 按鍵控制電路設(shè)計(jì)按鍵的功能:用戶針對(duì)不同植物的生長對(duì)土壤濕度需求的差異,設(shè)定土壤濕度下限值LHR。按鍵電路設(shè)計(jì)采用獨(dú)立鍵盤,電路圖如圖2-16所示。圖2-16 鍵盤電路S1鍵:控制土壤濕度下限值LHR增加S2鍵:控制土壤濕度下限值LHR增加2.8 電機(jī)驅(qū)動(dòng)電路設(shè)計(jì)當(dāng)傳感器檢測到土壤濕度值低于土壤濕度下限值LHR時(shí),單片機(jī)發(fā)出命令,要求水泵啟動(dòng),由
19、于單片機(jī)只能輸出0V或5V的電壓,不足以驅(qū)動(dòng)6V-12V直流電機(jī),因此需要借助驅(qū)動(dòng)電路驅(qū)動(dòng)電機(jī)。(1) 電磁繼電器 利用單片機(jī)輸出的高低電平觸發(fā)電磁繼電器工作,從而控制電機(jī)工作,但是,電磁繼電器在工作瞬間常開觸點(diǎn)閉合、常閉觸點(diǎn)斷開,會(huì)有嘀嗒的聲音,制造噪音,所以不選用電磁繼電器。 (2)電機(jī)驅(qū)動(dòng)芯片 采用達(dá)林頓驅(qū)動(dòng)器(ULN2803)如圖2-17所示,它實(shí)際上是一個(gè)集成芯片,單塊芯片同時(shí)可驅(qū)動(dòng)8個(gè)電機(jī),每個(gè)電機(jī)由單片機(jī)的一個(gè)I/O口控制,當(dāng)需要調(diào)節(jié)直流電機(jī)轉(zhuǎn)速時(shí),使單片機(jī)相應(yīng)I/O口輸出不同占空比的PWM波形即可。驅(qū)動(dòng)芯片工作時(shí)靜音,且電路簡單,功能強(qiáng)大,即選用ULN2803驅(qū)動(dòng)器驅(qū)動(dòng)電機(jī)。圖
20、2-17 ULN2803電路連接圖2.9 電源電路設(shè)計(jì) (1)用5V直流電壓給單片機(jī)及基本外圍電路模塊供電。 (2)用9V干電池給直流電機(jī)供電。 切記:直流電機(jī)供電電源和單片機(jī)的供電電源要共地。3 系統(tǒng)軟件設(shè)計(jì)3.1 軟件設(shè)計(jì)思路本系統(tǒng)軟件設(shè)計(jì)是基于KEIL軟件平臺(tái),以AT89C52單片機(jī)軟件編程為主,系統(tǒng)軟件部分主要由系統(tǒng)初始化模塊、溫濕度數(shù)據(jù)采集模塊、A/D轉(zhuǎn)換模塊、鍵盤控制模塊、數(shù)據(jù)存儲(chǔ)模塊以及1602液晶顯示模塊等部分組成。當(dāng)系統(tǒng)上電后單片機(jī)及基本外圍模塊進(jìn)行初始化設(shè)置,主程序運(yùn)行,用戶設(shè)置LHR值,濕度傳感器開始檢測土壤濕度,A/D模塊將土壤濕度模擬量轉(zhuǎn)換為數(shù)字量送到單片機(jī)處理分析,
21、如果土壤濕度值HR低于土壤濕度下限值LHR,單片機(jī)P3.7端口輸出高電平觸發(fā)驅(qū)動(dòng)器工作,水泵開始澆水,如果土壤濕度值HR高于系統(tǒng)設(shè)定土壤濕度上限值HHR,單片機(jī)P3.7端口輸出低電平,驅(qū)動(dòng)器停止工作,水泵停止?jié)菜?.2 系統(tǒng)主程序流程圖如圖3-1所示。 圖3-1 系統(tǒng)主程序流程圖3.3 程序設(shè)計(jì)主程序:#include<reg52.h>#include"head.h"#define V 5.0sbit M=P37;float vi=0.0;uint c1;uchar num1;uchar s;void main()/主函數(shù) EEPROM_int();num1=
22、read_add(2);lcd1602_init();/LCD1602初始化LCD_clear();/LCD1602清屏delay_ms(5);/硬件反應(yīng)時(shí)間display3();P1=0xff;while(1)AD_Convert(); vi=vi*V/256;c1=(500-vi*100)/315)*100; if(99<c1)c1=99;if(0<=c1&&c1<=99)display1(11,c1);read_temperature();/讀取溫度數(shù)據(jù)if(s=0)display2(5,read_temperature();if(s=1)display
23、4(6,read_temperature();delay_us(100);/硬件反應(yīng)時(shí)間keyscan();display1(4,num1);write_add(2,num1);if(c1<=num1) M=1; delay_ms(500); M=0; delay_ms(1500);if(40<=c1)M=0;A/D轉(zhuǎn)換程序:#include <reg52.h>#include <intrins.h>#include <math.h>#include"head.h"#define N 64sbit ad_wr=P36;exte
24、rn float vi;uchar DataN;void AD_Convert() uint i;vi=0.0;for(i=0;i<N;i+) ad_wr=1;/wr port raise edage delay_ms(1); ad_wr=0;/wr pot false edage delay_ms(1); ad_wr=1;/start ad convert _nop_(); _nop_(); _nop_(); Datai=P1; ad_wr=0; for(i=0;i<N;i+)vi+=Datai; vi=vi/N; 溫度檢測程序:#include<reg52.h>#i
25、nclude<intrins.h>#include"head.h"sbit ds=P26;uchar time;extern uchar s;void dsreset(void)/DS18B20復(fù)位,初始化函數(shù) ds=1;/數(shù)據(jù)線置高電平1 for(time=0;time<2;time+); /延時(shí)約6us,延時(shí)盡可能短一點(diǎn) ds=0;/數(shù)據(jù)線置低電平0 for(time=0;time<200;time+);/延時(shí)約600us,延時(shí)控制在480960us之間 ds=1;/數(shù)據(jù)線置高電平1 for(time=0;time<10;time+);/延
26、時(shí)約30us if(!ds)/等待DS18B20應(yīng)答 for(time=0;time<200;time+);/延時(shí)約600us,DS18B20應(yīng)答脈沖void dswrite(uchar dat)/向DS18B20寫指令函數(shù),dat表示指令編碼,例如,溫度轉(zhuǎn)換0x44uchar i=0;for (i=0; i<8; i+)/把dat中的數(shù)據(jù)分八次傳給ds,一次只發(fā)送一位二進(jìn)制數(shù) ds=1;/數(shù)據(jù)線置高電平1 _nop_();/延時(shí)一個(gè)機(jī)器周期,約1us ds=0;/數(shù)據(jù)線置低電平0 _nop_();/延時(shí)一個(gè)機(jī)器周期,約1us ds=dat&0x01;/DS18B20采樣,
27、把dat中的最低位傳給ds for(time=0;time<15;time+);/延時(shí)約45us ds=1;/數(shù)據(jù)線置高電平1 for(time=0;time<1;time+);/延時(shí)約3us(1us<tREC<正無窮) dat>>=1; /dat數(shù)據(jù)右移一位 for(time=0;time<4;time+);/延時(shí)約為12us,硬件反應(yīng)時(shí)間uchar dsread(void)/從DS18B20中的RAM讀一個(gè)字節(jié)的數(shù)據(jù) uchar i=0;uchar dat;/把RAM中的溫度數(shù)據(jù)傳給datfor (i=0;i<8;i+) ds=1;/數(shù)據(jù)線置
28、高電平1 _nop_();/延時(shí)一個(gè)機(jī)器周期,約1us ds=0;/數(shù)據(jù)線置低電平0 dat>>=1;/dat中的數(shù)據(jù)右移一位,讀到的第一位二進(jìn)制在最右邊 _nop_();/延時(shí)一個(gè)機(jī)器周期,約1us ds=1;/數(shù)據(jù)線置高電平1 for(time=0;time<2;time+);/延時(shí)約為6us if(ds=1)/讀數(shù)據(jù)線的狀態(tài)得到一個(gè)狀態(tài)位,并進(jìn)行數(shù)據(jù)處理 dat|=0x80;/ 把dat的最高位置1else dat|=0x00;/把dat的最高位置0 for(time=0;time<10;time+);/延時(shí)約30us return dat; uint read_
29、temperature() /讀取溫度數(shù)據(jù) uchar temp1,temp2;uint temp3;dsreset();/DS18B20復(fù)位 dswrite(0xcc);/寫跳過讀ROM指令,同時(shí)使用多個(gè)DS18B20時(shí),要識(shí)別ROM中的序列號(hào)dswrite(0x44);/寫溫度轉(zhuǎn)換指令for(time=0;time<100;time+);/硬件反應(yīng)時(shí)間dsreset();/DS18B20復(fù)位dswrite(0xcc);/寫跳過讀ROM指令dswrite(0xbe);/寫讀RAM中9字節(jié)的溫度數(shù)據(jù)指令for(time=0;time<100;time+);/硬件反應(yīng)時(shí)間temp1=
30、dsread();/讀溫度值低八位(LSB)temp2=dsread();/讀溫度值高八位(MSB)dsreset();/DS18B20復(fù)位,表示溫度數(shù)據(jù)讀取完畢temp3=(temp2<<8)|temp1);if(temp3&0xf800) s=1;/溫度為負(fù)值temp3=temp3+1;else s=0;/溫度為正值temp3=temp3*0.0625*10+0.5;/溫度在寄存器中為12位,分辨率為0.0625度 /(temp2<<8)|temp1,將兩個(gè)字節(jié)組合為一個(gè)字 /*10表示保留小數(shù)點(diǎn)后一位,+0.5表示四舍五入return temp3;/返回以
31、十進(jìn)制表示的temp3,例如:temp3=272,顯示為27.2攝氏度 數(shù)據(jù)存儲(chǔ)程序:#include <reg52.h>#include"head.h"sbit sda=P23;sbit scl=P24;void start()/開始信號(hào) sda=1; delayus(); scl=1; delayus(); sda=0; delayus();void stop()/停止信號(hào) sda=0; delayus(); scl=1; delayus(); sda=1; delayus();void respons()/應(yīng)答 uchar i; scl=1; delayu
32、s(); while(sda=1)&&(i<255) i+; scl=0; delayus();void EEPROM_int() sda=1; delayus(); scl=1; delayus();void write_byte(uchar date) uchar i,temp; temp=date; for(i=0;i<8;i+) temp=temp<<1;scl=0;delayus();sda=CY;delayus();scl=1;delayus(); scl=0; delayus(); sda=1; delayus();uchar read_b
33、yte() uchar i,k; scl=0; delayus(); sda=1; delayus(); for(i=0;i<8;i+) scl=1;delayus();k=(k<<1)|sda;scl=0;delayus(); return k;void write_add(uchar address,uchar date) start(); write_byte(0xa0); respons(); write_byte(address); respons(); write_byte(date); respons(); stop();uchar read_add(uchar
34、 address) uchar date; start(); write_byte(0xa0); respons(); write_byte(address); respons(); start(); write_byte(0xa1); respons(); date=read_byte(); stop(); return date;1602顯示程序:#include"head.h"/*LCD1602 初始化函數(shù)*/void lcd1602_init(void)/*LCD 8位數(shù)據(jù)端口上電初始化時(shí)全部配置成輸出低電平的形式 */ D0=0; D1=0; D2=0; D3=0
35、; D4=0; D5=0; D6=0; D7=0; EN=0; /硬件初始化時(shí)關(guān)閉LCD是使能端口 RW=0; /初始化時(shí)默認(rèn)講寫功能打開,RW為低電平時(shí)為寫LCD,為高電平時(shí)為讀LCD RS=0; /初始化時(shí)默認(rèn)講RS配置成低電平選擇命令。RS為高時(shí)為數(shù)據(jù)控制。 lcd1602_write_command(0X38); lcd1602_write_command(0X38); lcd1602_write_command(0X38); lcd1602_write_command(0X0c); lcd1602_write_command(0X06);/*LCD1602 寫命令函數(shù)*/void l
36、cd1602_write_command(uchar com ) RS=1; RS=0; RW=1; delay_ms(1); RW=0; P0=com; EN=1; delay_ms(100); EN=0;/*LCD1602 寫數(shù)據(jù)函數(shù)*/void lcd1602_write_date(uchar dat) RS=0; RS=1; RW=1; delay_ms(1); RW=0; P0=dat; EN=1; delay_ms(100); EN=0;/*LCD1602 清屏函數(shù)*/void LCD_clear()/清屏 lcd1602_write_command(0X01);void disp
37、lay1(uchar add1,uchar dat1)/顯示LHR值及HR值 uchar shi,ge; shi=dat1/10; ge=dat1%10; lcd1602_write_command(0x80+add1); lcd1602_write_date(0x30+shi); lcd1602_write_date(0x30+ge); void display2(uchar add2,uint dat2)顯示溫度正值 uchar shi1,ge1,fen1; shi1=dat2/100; ge1=dat2%100/10; fen1=dat2%10; lcd1602_write_comman
38、d(0x80+0x40); lcd1602_write_date('T'); lcd1602_write_command(0x80+0x40+1); lcd1602_write_date('E'); lcd1602_write_command(0x80+0x40+2); lcd1602_write_date('M'); lcd1602_write_command(0x80+0x40+3); lcd1602_write_date('P'); lcd1602_write_command(0x80+0x40+4); lcd1602_wr
39、ite_date(':'); lcd1602_write_command(0x80+0x40+9); lcd1602_write_date('C'); lcd1602_write_command(0x80+0x40+add2); lcd1602_write_date(0x30+shi1); lcd1602_write_date(0x30+ge1); lcd1602_write_date('.'); lcd1602_write_date(0x30+fen1);void display3() lcd1602_write_command(0x80+0)
40、; lcd1602_write_date('L'); lcd1602_write_command(0x80+1); lcd1602_write_date('H'); lcd1602_write_command(0x80+2); lcd1602_write_date('R'); lcd1602_write_command(0x80+3); lcd1602_write_date(':'); lcd1602_write_command(0x80+6); lcd1602_write_date('%'); lcd1602_w
41、rite_command(0x80+8); lcd1602_write_date('H'); lcd1602_write_command(0x80+9); lcd1602_write_date('R'); lcd1602_write_command(0x80+10); lcd1602_write_date(':'); lcd1602_write_command(0x80+13); lcd1602_write_date('%');void display4(uchar add3,uint dat3)/顯示溫度負(fù)值 uchar shi
42、2,ge2,fen2; shi2=dat3/100; ge2=dat3%100/10; fen2=dat3%10; lcd1602_write_command(0x80+0x40); lcd1602_write_date('T'); lcd1602_write_command(0x80+0x40+1); lcd1602_write_date('E'); lcd1602_write_command(0x80+0x40+2); lcd1602_write_date('M'); lcd1602_write_command(0x80+0x40+3); l
43、cd1602_write_date('P'); lcd1602_write_command(0x80+0x40+4); lcd1602_write_date(':'); lcd1602_write_command(0x80+0x40+5); lcd1602_write_date('-'); lcd1602_write_command(0x80+0x4a); lcd1602_write_date('C'); lcd1602_write_command(0x80+0x40+add3); lcd1602_write_date(0x30+
44、shi2); lcd1602_write_date(0x30+ge2); lcd1602_write_date('.'); lcd1602_write_date(0x30+fen2);延時(shí)程序:#include"head.h"void delay_ms(uint ms) uint i,j; for(i=0;i<ms;i+) for(j=0;j<110;j+);void delay_us(uint us) uint s; us=us*5/4; for(s=0;s<us;s+);void delayus();鍵盤程序:#include <
45、reg52.h>#include"head.h"sbit s1=P32;sbit s2=P33;sbit s3=P34;sbit s4=P35;extern uchar num1;void keyscan() if(s1=0)/增加鍵 delay_ms(10); if(s1=0) /while(!s1); num1+; if(num1=61) num1=30; if(s2=0)/減小鍵 delay_ms(10); if(s2=0) /while(!s2); num1-; if(num1=-1) num1=30; 函數(shù)申明程序:#include <reg52.h>#i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 能源管理協(xié)議書模板
- 地下安全工程引孔施工協(xié)議
- 建筑防水安全質(zhì)量協(xié)議
- 航空物流貨車司機(jī)聘用合同模板
- 建筑公司司機(jī)招聘合同
- 二手房買賣助手經(jīng)紀(jì)合同
- 城市社會(huì)福利設(shè)施建設(shè)管理辦法
- 汽車銷售區(qū)道路維修臨時(shí)協(xié)議
- 學(xué)校教育保潔員招聘合同
- 證券公司合同
- 《新疆工程勘察設(shè)計(jì)計(jì)費(fèi)導(dǎo)則(2022版)》
- 歷史與當(dāng)代珠寶設(shè)計(jì)風(fēng)格的傳承與演變
- 小學(xué)作業(yè)設(shè)計(jì)比賽評(píng)分標(biāo)準(zhǔn)
- 2024年電商直播行業(yè)現(xiàn)狀及發(fā)展趨勢(shì)研究
- 2021年4月自考04735數(shù)據(jù)庫系統(tǒng)原理試題及答案含解析
- MOOC 管理學(xué)原理-東北財(cái)經(jīng)大學(xué) 中國大學(xué)慕課答案
- 農(nóng)貿(mào)市場食品安全事故處置方案
- 六年級(jí)語文總復(fù)習(xí)課《修改病句》修改課件市公開課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件
- 承德永輝礦業(yè)集團(tuán)有限公司紅山咀鐵礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- 餐廳食品安全保障
- 藥品經(jīng)營與管理大學(xué)生職業(yè)規(guī)劃
評(píng)論
0/150
提交評(píng)論