溫控風扇系統(tǒng)設(shè)計_第1頁
溫控風扇系統(tǒng)設(shè)計_第2頁
溫控風扇系統(tǒng)設(shè)計_第3頁
溫控風扇系統(tǒng)設(shè)計_第4頁
溫控風扇系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選文庫 自動化系統(tǒng)創(chuàng)意設(shè)計大賽作品說明書作品名稱:溫控風扇系統(tǒng)設(shè)計 隊 員 : 2015年 4月目錄1、引言32、背景33、意義與應(yīng)用34、原理簡介45、方案設(shè)計46、STC12C5A60S2單片機56.1簡介56.2 PWM寄存器設(shè)置56.3 PWM占空比計算方法56.4 I/O工作方式設(shè)置67、LCD液晶顯示屏68、溫度傳感器DS18B2088.1初始化98.2寫操作108.3讀操作109、風扇10拓展1:10拓展2:1110、硬件電路設(shè)計1210.1原理圖和部分電路PCB圖1210.2 電機驅(qū)動電路1311、軟件設(shè)計1411.1主函數(shù)流程圖1411.2 溫度控制風扇程序流程圖1511.

2、3 按鍵控制風扇程序流程圖1611.4 按鍵設(shè)定溫度程序流程圖1712、結(jié)語18參考文獻:18附錄:實物硬件圖18附錄:程序18摘要:本設(shè)計是基于STC12C5A60S2單片機技術(shù)與溫度傳感器測量外界溫度的設(shè)計原理,進行了不同設(shè)計方案的比較,給出了設(shè)計的硬件電路,同時對各種關(guān)鍵硬件進行較詳細的介紹,并且以流程圖的方式對系統(tǒng)設(shè)計作出介紹。系統(tǒng)主要通過溫度傳感器控制不同的PWM占空比輸出來控制風扇的檔位。而出于方便、可選擇性的考慮,系統(tǒng)也添加了輔助功能,就是直接手動控制風扇的檔位。 關(guān)鍵詞:STC12C5A60S2單片機,DS18B20溫度傳感器,PWM1、引言溫控風扇在節(jié)能環(huán)保方面具有一定的作用

3、,其工作原理除了普通的手動檔位調(diào)節(jié),主要是通過溫度傳感器感應(yīng)外界溫度,并自主地進行檔位的調(diào)節(jié),這樣在風扇開著的情況下,不需進行手動就可以根據(jù)不同的外界溫度進行自主調(diào)節(jié)風力大小,達到節(jié)能目的。2、背景隨著空調(diào)機在日常生活中的普遍應(yīng)用,很容易想到電風扇會成為空調(diào)的社會淘汰品,其實經(jīng)過市場的考驗和證實,真實的并不是這樣的,在空調(diào)產(chǎn)品的沖擊下,電風扇產(chǎn)品仍然具有很強大的生命力,電風扇在市場的考驗中并沒有淡出市場,反而銷售在不停的復(fù)蘇中,具有強大的發(fā)展空間。據(jù)市場調(diào)查,電風扇的不停復(fù)蘇主要在以下原因:一,是電風扇雖然沒有空調(diào)機的強大的制冷功能,但電風扇是直接取風,風力更加溫和,比較適合老年人、兒童以及體

4、質(zhì)虛弱的人使用。二,是電風扇經(jīng)過多年的市場使用,較符合人們的使用習(xí)慣,而且結(jié)構(gòu)簡單、操作方便、安裝簡易。三,是電風扇比起空調(diào)產(chǎn)品而言,其價格低廉,相對省電,更易的進入老百姓的家庭。在目前空調(diào)還沒有普及,并且并不是所有的情況下空調(diào)都適合使用的情況下,智能風扇適合人體對溫度的要求,智能風扇還有具有相當作用的。3、意義與應(yīng)用1、普通電風扇的現(xiàn)狀及存在的隱患:大部分只有手動調(diào)速,功能單一。長時間在高負荷工作容易損壞電器,并且造成電量的損失。2、作品可運用在家庭中,風扇的風力隨溫度而調(diào)節(jié),即可以避免人因溫度低吹到冷風而著涼,也可達到節(jié)能目的,可見溫控風扇更具有優(yōu)越性。3、其次將此系統(tǒng)裝在產(chǎn)熱多,急需排熱

5、的設(shè)備上,可以幫助它及時散掉大量的熱。比如電腦散熱器等。4、原理簡介1、電源開關(guān),控制系統(tǒng)處于工作還是停止狀態(tài)。2、當系統(tǒng)上電之后,通過單片機讀取外界溫度,然后在液晶顯示屏上顯示出來。通過判斷溫度的范圍,控制風扇的停止與轉(zhuǎn)不同的速度。同時LED給出檔位指示。溫度控制的范圍可以通過按鍵進行設(shè)置。3、另外,當不需要溫度控制時,可以通過模式切換開關(guān),讓系統(tǒng)工作于手動控制模式。通過按鍵進行調(diào)節(jié)風扇的停止,與不同轉(zhuǎn)速。5、方案設(shè)計方案一:采用兩片STC89C516RD單片機、液晶1602和ds18b20,進行設(shè)計,讓單片機1進行溫度讀取操作,另外的單片機2通過定時器,產(chǎn)生占空比不同的PWM。兩單片機通過

6、串口進行通信,這樣單片機1可以通過讀取外界的溫度,然后對單片機2進行控制。這樣就能在不同的溫度區(qū)間內(nèi),單片機2控制直流5v小風扇不同的轉(zhuǎn)速,從而實現(xiàn)溫度自動控制風扇。方案二:采用STC12C5A60S2單片機、液晶1602和ds18b20。這也是一款51單片機,但是它的性能比STC89C516RD單片機更強大,而且有獨立的雙路PWM輸出。這樣,采用一片STC12C5A60S2單片機就能實現(xiàn)溫度讀取和直流5v小風扇的轉(zhuǎn)速控制。方案三:采用stm8s105系列單片機、液晶1602和ds18b20,同樣可以實現(xiàn)溫度讀取和直流5v小風扇的轉(zhuǎn)速控制方案比較:方案一需要耗費更多的硬件資源。因此我們直接排除

7、方案一。方案三,如果采用44腳貼片封裝的stm8s105單片,可以在很小的覆銅板上把硬件做出來,這樣可以節(jié)省一些硬件資源。但是,因為溫度傳感器ds18b20的讀取是通過單一I/O口讀取的,stm8s105的I/O操作需要設(shè)置,讓其是處于輸入或者輸出方式。操作非常麻煩。方案二需要的硬件資源相對較少,而且其I/O口兼容8051單片機,可以實現(xiàn)I/O口準雙向操作,這樣編程相對簡單。綜上所述,我們選擇方案二。6、STC12C5A60S2單片機6.1簡介我們采用的單片機為STC12C5A60S2,STC12C5A60S2/AD/PWM系列單片機是宏晶科技生產(chǎn)的單時鐘/機器周期(1T)的單片機,是高速/低

8、功耗/超強抗干擾的新一代8051單片機,指令代碼完全兼容傳統(tǒng)8051,但速度快8-12倍。內(nèi)部集成MAX810專用復(fù)位電路,2路PWM,8路高速10位A/D轉(zhuǎn)換(250K/S)針對電機控制,強干擾場合。其引腳與普通8051單片機基本相同。6.2 PWM寄存器設(shè)置STC12C5A60S2單片機內(nèi)置兩路獨立PWM輸出,通過設(shè)置相應(yīng)寄存器,可以讓占空比改變。PWM0的輸出口在P1.3,而PWM1的輸出口在P1.4相關(guān)的設(shè)置例子如下面的程序所示:CCON = 0; /初始化 PCA控制寄存器 /PCA計數(shù)器停止運行 /清除CF標志位 /清除所有中斷標志位CL = 0; /重置PCA的16位計數(shù)器CH

9、= 0;CMOD = 0x02; /設(shè)置 PCA 計數(shù)器時鐘源為 Fosc/2 /禁止PCA 計數(shù)器溢出中斷 CCAP0H = CCAP0L = 0xff; /PWM0 口輸出 0%占空比CCAP1H = CCAP1L = 1x00; /PWM1 口輸出 100%占空比CCAPM0 = 0x42; /PCA模塊0工作在8位PWM模式并且沒有PCA中斷CR = 1; /開始計數(shù)當寄存器CL值小于 EPCnL, CAPPnL 時,輸出為低電平;當寄存器CL值等于或大于 EPCnL, CAPPnL 時,輸出為高電平;當寄存器CL的值由FF變?yōu)?0溢出時, EPCnH CAPPnH的內(nèi)容被裝載到 EP

10、CnL, CAPPnL 中。這樣,就可以實現(xiàn)無干擾地實現(xiàn)PWM更新。6.3 PWM占空比計算方法輸出的占空比乘以256后,轉(zhuǎn)換為十六進制,然后進行取反,再同時賦值給寄存器CCAPxH 和CCAPxL。6.4 I/O工作方式設(shè)置其I/O口的工作方式有準雙向/弱上拉輸出,強推挽輸出,高阻輸入(電流不能流入也不能流出),開漏輸出(若外加上拉也可以讀取)等。缺省狀態(tài)下,I/O的工作方式為準雙向/弱上拉。本設(shè)計中,對于溫度傳感器的讀寫操作,需要I/O工作在準雙向的工作狀態(tài)。而PWM輸出端口,LED驅(qū)動輸出,端口我們將I/O口的工作方式設(shè)置分強推挽輸出,輸出的拉電流達到20mA,能更好的驅(qū)動負載。設(shè)置方式

11、,通過配置相應(yīng)的寄存器PxM1和PxM0,如下表1所示:PxM1 7:0PxM0 7:0I/O口模式00準雙向口01強推挽輸出10高阻輸入11開漏表17、LCD液晶顯示屏 時鐘的顯示屏選用1602字符液晶。1602是指顯示的內(nèi)容為16*2,即能夠同時顯示兩行,每行16個字符。常見的1602字符液晶有兩種,一種顯示的是綠色背光黑色字體,另一種顯示藍色背光白色字體,目前市面上字符液晶絕大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的。本設(shè)計所用1602液晶模塊,顯示屏是藍色背光白色字體。圖1為1602字符液晶引腳圖圖1 1602字符液晶引腳圖 各引腳功能為: 第1腳:GND為地電源。 第

12、2腳:VCC接5V正電源。 第3腳:VO為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產(chǎn)生重影,使用一個1K的電位器調(diào)整對比度。 第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器,低電平時選擇指令寄存器。 第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。 第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。 第714腳:DB0DB7為8位雙向數(shù)據(jù)線。第1516腳:背光燈電源。基本操作時序:讀狀態(tài) 輸入RS=L,R/W=H,E=H 輸出D0D7=狀態(tài)字寫指令 輸入RS=L,R/W=L,D0D7=指令碼,E=高脈沖 輸出無

13、讀數(shù)據(jù) 輸入RS=H,R/W=H,E=H 輸出D0D7=數(shù)據(jù)寫數(shù)據(jù) 輸入RS=H,R/W=L,D0D7=數(shù)據(jù),E=高脈沖 輸出無RAM地址映射圖:如圖2所示:圖2 RAM地址映射圖當我們在00-0F、40-4F,的地址中任意地寫入顯示數(shù)據(jù)時,液晶都可以顯示,當寫入10-27或50-67地址處時,必須通過移屏指令將它們移入可顯示的區(qū)域。讀、寫操作時序:如圖3所示:因為本設(shè)計的程序中只涉及到液晶的寫操作,因此下面簡單介紹寫操作過程,如下:(1)通過RS確定是寫數(shù)據(jù)還是寫命令。(2)讀寫控制端設(shè)置為寫模式。(3)將數(shù)據(jù)或命令送達數(shù)據(jù)線上。(4)給E一個高脈沖將數(shù)據(jù)送到液晶控制器,完成寫操作。 圖3

14、讀寫操作時序圖初始化設(shè)置:(1)顯示模式設(shè)置,如圖4:圖4 顯示模式設(shè)置圖(2)顯示開/關(guān)及光標設(shè)置,如圖5:圖5顯示開/關(guān)及光標設(shè)置圖8、溫度傳感器DS18B20用于檢測當前的溫度,DS18B20測量溫度范圍為 -55C+125C,在-10+85C范圍內(nèi),精度為0.5C?,F(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:環(huán)境控制、設(shè)備或過程控制、測溫類消費電子產(chǎn)品等。產(chǎn)品支持3V5.5V的電壓范圍,使系統(tǒng)設(shè)計更靈活、方便。DS18B20的引腳圖如圖6所示。引腳1:地;引腳2:數(shù)字輸入輸出;引腳3:可選的5V電源;圖 6 DS18B20的引腳

15、圖DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。DS18B20控制方法(DS18B20有六條控制命令):溫度轉(zhuǎn)換44H啟動DS18B20進行溫度轉(zhuǎn)換讀暫存器BEH讀暫存器9位二進制數(shù)字寫暫存器4EH將數(shù)據(jù)寫入暫存器的TH、TL字節(jié)復(fù)制暫存器48H把暫存器的TH、TL字節(jié)寫到E2RAM中重新調(diào)E2RAMB8H把E2RAM中的TH、TL字節(jié)寫到暫存器TH、TL字節(jié)讀電源供電方式B4H啟動DS18B20發(fā)送電源供電方式的信號給主CPU8.1初始化(1)先將數(shù)據(jù)線置高電平“1”。(2)延時(該時間要求的不是很嚴格,但是盡可能的短一點

16、)(3)數(shù)據(jù)線拉到低電平“0”。(4)延時750微秒(該時間的時間范圍可以從480到960微秒)。(5)數(shù)據(jù)線拉到高電平“1”。(6)延時等待(如果初始化成功則在15到60微妙時間之內(nèi)產(chǎn)生一個由DS18B20所返回的低電平“0”。據(jù)該狀態(tài)可以來確定它的存在,但是應(yīng)注意不能無限的進行等待,不然會使程序進入死循環(huán),所以要進行超時控制)。(7)若CPU讀到了數(shù)據(jù)線上的低電平“0”后,還要做延時,其延時的時間從發(fā)出的高電平算起(第(5)步的時間算起)最少要480微秒。(8)將數(shù)據(jù)線再次拉高到高電平“1”后結(jié)束。8.2寫操作(1)數(shù)據(jù)線先置低電平“0”。(2)延時確定的時間為15微秒。(3)按從低位到高

17、位的順序發(fā)送字節(jié)(一次只發(fā)送一位)。(4)延時時間為45微秒。(5)將數(shù)據(jù)線拉到高電平。(6)重復(fù)上(1)到(6)的操作直到所有的字節(jié)全部發(fā)送完為止。(7)最后將數(shù)據(jù)線拉高。8.3讀操作(1)將數(shù)據(jù)線拉高“1”。(2)延時2微秒。(3)將數(shù)據(jù)線拉低“0”。(4)延時3微秒。(5)將數(shù)據(jù)線拉高“1”。(6)延時5微秒。(7)讀數(shù)據(jù)線的狀態(tài)得到1個狀態(tài)位,并進行數(shù)據(jù)處理。(8)延時60微秒。9、風扇本設(shè)計采用的是由5V直流供電的小型風扇。在設(shè)計當中,我們只預(yù)置了兩檔速度相差明顯的檔位,一檔的PWM占空比為30%,二檔的占空比為90%。這樣設(shè)計的目的主要是考慮到在檔位切換時,可以看到速度有非常明顯的

18、變化,讓實驗現(xiàn)象更加直觀。拓展1:在主要考慮實用性方面的因素,我們還可以將控制檔位細化,做成5個檔位,甚至10個檔位,等等。不同的速度是通過調(diào)節(jié)不同的占空比來實現(xiàn)的。下面我們給出溫度控制風扇轉(zhuǎn)5個速度不同檔位的部分關(guān)鍵程序示例:void control (void) if(a*100+b*10+c) tem_1) CCAP0H = CCAP0L = 0xFF; /PWM0 口輸出 0%占空比 else if (tem_1 = (a*100+b*10+c)&(a*100+b*10+c)tem_2 ) CCAP0H = CCAP0L = 0xB3; /PWM0 口輸出30%占空比 else if

19、(tem_1 = (a*100+b*10+c)&(a*100+b*10+c)tem_2 ) CCAP0H = CCAP0L = 0x08; /PWM0 口輸出50%占空比 else if (tem_1 = (a*100+b*10+c)&(a*100+b*10+c)tem_2 ) CCAP0H = CCAP0L = 0x4D; /PWM0 口輸出70%占空比 else if (tem_2 = (a*100+b*10+c) CCAP0H = CCAP0L = 0x1A; /PWM0 口輸出90%占空比 拓展2:在本設(shè)計驗證成功并且可靠的基礎(chǔ)上,我們可以繼續(xù)延伸,給出溫度控制交流220V供電的風扇的

20、設(shè)計方案,比如宿舍的風扇: 用普通的單片機,通過溫度傳感器,讀取外界的溫度,進而控制繼電器的吸合與斷開。假設(shè)設(shè)置4個檔位,可以用單片機接三個繼電器來實現(xiàn):當外界溫度較低時,此時所有繼電器處于斷開狀態(tài),風扇不轉(zhuǎn);當溫度升高到一定程度時,單片機使繼電器1吸合,繼電器2、3斷開,讓風扇轉(zhuǎn)一檔,即較慢速度;當溫度繼續(xù)升高,單片機使繼電器2吸合,繼電器1、3斷開,風扇轉(zhuǎn)二檔,即較快的速度。當溫度再升高時,單片機使繼電器3吸合,繼電器1、2斷開,風扇轉(zhuǎn)三檔,即最快的速度。10、硬件電路設(shè)計10.1原理圖和部分電路PCB圖圖7 原理圖工作原理:通過P3.7端口處所接的電路的SW2的閉合或斷開選擇溫控或鍵控。

21、當SW2=1時,選擇溫控,通過DS18B20溫度傳感器獲取外界溫度,通過LCD顯示當前溫度,并且顯示設(shè)定的溫度控制一檔和二檔的值,比如設(shè)定25和30攝氏度作為控制值。外界溫度較低時,比如小于25攝氏度,處于0檔時,風扇不轉(zhuǎn),LED1、2不亮。當溫度較高,等于或大于25且小于30攝氏度時,處于一檔,風扇轉(zhuǎn)動,LED1亮、LED2滅。當溫度高于30攝氏度時,處于二檔,風扇高速轉(zhuǎn)動,LED1、2都亮。當SW2=0;選擇鍵控,通過P2.0處所接的獨立鍵盤進行檔位的選擇。缺省狀態(tài)下為空擋,液晶屏顯示DW=0,LED1、2不亮,風扇不轉(zhuǎn)。按一次key1,檔位加一,此時為一檔,液晶屏上顯示DW=1,LED1

22、亮、LED2滅,風扇轉(zhuǎn)動較慢。再按一次key1鍵,檔位加1,此時液晶屏上顯示DW=2,LED1、2 亮,風扇高速轉(zhuǎn)動。再按一次key1,檔位歸零。圖8 PCB圖10.2 電機驅(qū)動電路L298N 的主要特點是:工作電壓高,最高工作電壓可達46V;輸出電流大,瞬間峰值電流可達3A,持續(xù)工作電流為2A;額定功率25W。采用標準邏輯電平信號控制;具有兩個使能控制端,在不受輸入信號影響的情況下允許或禁止器件工作有一個邏輯電源輸入端,使內(nèi)部邏輯電路部分在低電壓下工作;可以外接檢測電阻,將變化量反饋給控制電路。使用L298N 芯片驅(qū)動電機,該芯片可以驅(qū)動一臺兩相步進電機或四相步進電機,也可以驅(qū)動兩臺直流電機

23、。用L298 控制直流電機很容易。用單片機端口高低就可以控制開始、停止、正反轉(zhuǎn),利用EN1,EN2 控制使能就能控制轉(zhuǎn)速。其原理圖,如圖9:圖9 L298N原理圖11、軟件設(shè)計11.1主函數(shù)流程圖開始初始化溫度控制風扇模式按鍵控制風扇模式Key_sw=1?是否圖10 主函數(shù)流程圖11.2 溫度控制風扇程序流程圖開始讀取環(huán)境溫度達到設(shè)定溫度 ?風扇不轉(zhuǎn)LED1、2不亮達到設(shè)定溫度風扇轉(zhuǎn)一檔LED1亮LED2不亮風扇轉(zhuǎn)二檔LED1、LED2亮液晶顯示當前溫度顯示設(shè)定溫度、值是否是否圖11 溫度控制風扇程序流程圖11.3 按鍵控制風扇程序流程圖開始液晶顯示檔位0LED1、2不亮num=0num=1?

24、num=2?液晶顯示檔位1LED1亮LED2滅液晶顯示檔位2LED1 、LED2亮是否是否圖12按鍵控制風扇程序流程圖11.4 按鍵設(shè)定溫度程序流程圖開始讀取I/O電平變化是否有按鍵被按下延時10ms否是檔位加1Key1=0?Key2=0?Key3=0?檔位=2?檔位歸0Tem1=31?Tem2=44?Tem1=17Tem1+Tem2=23Tem2+是是是是是是否否否備注:本設(shè)計只設(shè)置兩檔風扇的不同轉(zhuǎn)速Tem1為溫控檔位的溫度下限Ten2 為溫控檔位的溫度上限結(jié)束圖13按鍵設(shè)定溫度程序流程圖12、結(jié)語本設(shè)計結(jié)合生活中的實際情況,利用單片機技術(shù)設(shè)計并制作了溫控風扇系統(tǒng),完全達到了設(shè)計要求,其次通

25、過獨立鍵盤和溫度傳感器可以實現(xiàn)對應(yīng)的操作,使操作更加方便靈活,所選取的單片機具有較高的抗干擾能力,也符合這個設(shè)計的穩(wěn)定性要求。我們隊伍的各成員在整個設(shè)計制作過程中,相互配合,相互檢查,但又進行了分工,大大提高了工作效率。參考文獻:1郭天祥 新概念51單片機C語言教程入門、提高、開發(fā)、拓展全攻略 電子工業(yè)大學(xué)出版社 20102李廣弟, 朱月秀, 等. 單片機基礎(chǔ)M. 北京航空航天大學(xué)出版社, 2001.3模擬電子技術(shù)基礎(chǔ)M. 高等教育出版社, 2001.4數(shù)字電子技術(shù)基礎(chǔ)M. 高等教育出版社, 2006.附錄:實物硬件圖圖14實物硬件圖附錄:程序#include#include #define

26、uchar unsigned char#define uint unsigned int#define LCD1602_DATAPINS P0sfr PCAPWM0 = 0xf2; /定義寄存器PCAPWM0sfr PCAPWM1 = 0xf3; /定義寄存器PCAPWM1sbit LCD1602_E=P12; /定義lcd1602的使能端sbit LCD1602_RW=P11;/定義lcd1602的寫操作端sbit LCD1602_RS=P10;/定義lcd1602的發(fā)送命令端sbit DSPORT=P27; /溫度傳感器讀寫端sbit LED0 = P23;sbit LED1 = P24;

27、sbit jia_key=P20;/加速按鈕sbit key1 = P21; /控制溫度調(diào)節(jié)按鍵1、2sbit key2 = P22;sbit key_sw = P37;/溫控與鍵控切換開關(guān) uint a=0; uint b=0; uint c=0; uint tem_1=27; uint tem_2=30; uchar num=0; /* 函 數(shù) 名 : Delay1ms* 函數(shù)功能 : 延時函數(shù)*/void Delay1ms(uint y) /粗略延時1msuint x;for( ; y0; y-)for(x=440; x0; x-);void delay1ms(void) /誤差 0us

28、 unsigned char a,b; for(b=129;b0;b-) for(a=45;a0;a-);void delay1us(uint x) /誤差 0us unsigned char a,b; for(b=x;b0;b-) for(a=3;a0;a-);/* 函 數(shù) 名 : Ds18b20Init* 函數(shù)功能 : 初始化* 輸 入 : 無* 輸 出 : 初始化成功返回1,失敗返回0*/ void LcdWriteCom(uchar com) /寫入命令LCD1602_E = 0; /使能LCD1602_RS = 0; /選擇發(fā)送命令LCD1602_RW = 0; /選擇寫入LCD16

29、02_DATAPINS = com; /放入命令Delay1ms(1);/等待數(shù)據(jù)穩(wěn)定LCD1602_E = 1; /寫入時序Delay1ms(5); /保持時間LCD1602_E = 0;void LcdWriteData(uchar dat)/寫入數(shù)據(jù)LCD1602_E = 0;/使能清零LCD1602_RS = 1;/選擇輸入數(shù)據(jù)LCD1602_RW = 0;/選擇寫入LCD1602_DATAPINS = dat; /寫入數(shù)據(jù)Delay1ms(1);LCD1602_E = 1; /寫入時序Delay1ms(5); /保持時間LCD1602_E = 0;void LcdInit() /LC

30、D初始化子程序 LcdWriteCom(0x38); /開顯示LcdWriteCom(0x0c); /開顯示不顯示光標LcdWriteCom(0x06); /寫一個指針加1LcdWriteCom(0x01); /清屏LcdWriteCom(0x80); /設(shè)置數(shù)據(jù)指針起點uchar Ds18b20Init()uchar i;DSPORT = 0; /將總線拉低480us960usdelay1us(642);/延時642usDSPORT = 1;/然后拉高總線,如果DS18B20做出反應(yīng)會將在15us60us后總線拉低i = 0;while(DSPORT)/等待DS18B20拉低總線i+;if(

31、i5)/等待5MSreturn 0;/初始化失敗delay1ms( );return 1;/初始化成功/* 函 數(shù) 名 : Ds18b20WriteByte* 函數(shù)功能 : 向18B20寫入一個字節(jié)*/void Ds18b20WriteByte(uchar dat)uint j;for(j=0; j= 1;/* 函 數(shù) 名 : Ds18b20ReadByte* 函數(shù)功能 : 讀取一個字節(jié)*/uchar Ds18b20ReadByte()uchar byte, bi;uint j;for(j=8; j0; j-)DSPORT = 0;/先將總線拉低1us delay1us(1); DSPORT

32、= 1;/然后釋放總線delay1us(6); /延時6us等待數(shù)據(jù)穩(wěn)定bi = DSPORT; /讀取數(shù)據(jù),從最低位開始讀取/*將byte左移一位,然后與上右移7位后的bi,注意移動之后移掉那位補0。*/byte = (byte 1) | (bi 7); delay1us(45);return byte;/* 函 數(shù) 名 : Ds18b20ChangTemp* 函數(shù)功能 : 讓18b20開始轉(zhuǎn)換溫度*/void Ds18b20ChangTemp()Ds18b20Init();delay1ms( );Ds18b20WriteByte(0xcc);/跳過ROM操作命令 Ds18b20WriteB

33、yte(0x44); /溫度轉(zhuǎn)換命令 /* 函 數(shù) 名 : Ds18b20ReadTempCom* 函數(shù)功能 : 發(fā)送讀取溫度命令*/void Ds18b20ReadTempCom()Ds18b20Init();delay1ms( );Ds18b20WriteByte(0xcc); /跳過ROM操作命令Ds18b20WriteByte(0xbe); /發(fā)送讀取溫度命令/* 函 數(shù) 名 : Ds18b20ReadTemp* 函數(shù)功能 : 讀取溫度*/int Ds18b20ReadTemp()int temp = 0;uchar tmh, tml;Ds18b20ChangTemp(); /先寫入轉(zhuǎn)

34、換命令Ds18b20ReadTempCom();/然后等待轉(zhuǎn)換完后發(fā)送讀取溫度命令tml = Ds18b20ReadByte();/讀取溫度值共16位,先讀低字節(jié)tmh = Ds18b20ReadByte();/再讀高字節(jié)temp = tmh;temp = 8;temp |= tml;return temp;/* 函數(shù)名 : LcdDisplay()* 函數(shù)功能 : LCD顯示讀取到的溫度*/void LcdDisplay(int temp) /lcd顯示 unsigned char datas = 0, 0, 0, 0, 0; /定義數(shù)組 float tp; if(temp 0)/當溫度值為

35、負數(shù) LcdWriteCom(0x80);/寫地址 80表示初始地址 LcdWriteData(-); /顯示負/因為讀取的溫度是實際溫度的補碼,所以減1,再取反求出原碼temp=temp-1; temp=temp;tp=temp;temp=tp*0.0625*100+0.5;/留兩個小數(shù)點就*100,+0.5是四舍五入,因為C語言浮點數(shù)轉(zhuǎn)換為整型的時候把小數(shù)點/后面的數(shù)自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就/算加上0.5,還是在小數(shù)點后面。 else LcdWriteCom(0x80);/寫地址 80表示初始地址 LcdWriteData(+);

36、/顯示正tp=temp;/因為數(shù)據(jù)處理有小數(shù)點所以將溫度賦給一個浮點型變量/如果溫度是正的那么,那么正數(shù)的原碼就是補碼它本身temp=tp*0.0625*100+0.5;/留兩個小數(shù)點就*100,+0.5是四舍五入,因為C語言浮點數(shù)轉(zhuǎn)換為整型的時候把小數(shù)點/后面的數(shù)自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就/算加上0.5,還是在小數(shù)點后面。datas0 = temp / 10000;datas1 = temp % 10000 / 1000;datas2 = temp % 1000 / 100;datas3 = temp % 100 / 10;datas4

37、 = temp % 10; a = datas0;/a,b,c的作用是取溫度的整數(shù),進行溫控b = datas1;c = datas2;LcdWriteCom(0x82); /寫地址 LcdWriteData(0+datas0); /百位 LcdWriteCom(0x83); /寫地址 LcdWriteData(0+datas1); /十位LcdWriteCom(0x84);/寫地址 LcdWriteData(0+datas2); /個位 LcdWriteCom(0x85);/寫地址 LcdWriteData(.); /顯示 .LcdWriteCom(0x86); /寫地址 LcdWriteD

38、ata(0+datas3); /顯示小數(shù)點 LcdWriteCom(0x87); /寫地址 LcdWriteData(0+datas4); /顯示小數(shù) /* 溫度控制電機輸出占空比函數(shù)*/void control (void) if(a*100+b*10+c) tem_1) CCAP0H = CCAP0L = 0xff; /PWM0 口輸出 0%占空比 LED0 = 0; LED1 = 0; else if (tem_1 = (a*100+b*10+c)&(a*100+b*10+c)tem_2 ) CCAP0H = CCAP0L = 0xB3; /PWM0 口輸出30%占空比 LED0 = 1

39、; LED1 = 0; else if (tem_2 = (a*100+b*10+c) CCAP0H = CCAP0L = 0x1a; /PWM0 口輸出90%占空比 LED0 = 1; LED1 = 1; /* 函數(shù)名 : keyscan* 函數(shù)功能 : 鍵盤掃描*/void keyscan1 () if (0 = key1) /溫度下限調(diào)整按鍵 Delay1ms(20);if (0 = key1) tem_1+;if(31 = tem_1) tem_1 = 17;while(!key1); if (0 = key2) /溫度上限調(diào)整按鍵 Delay1ms(20);if (0 = key2)

40、 tem_2+;if(44 = tem_2) tem_2 = 23;while(!key2 ); if(tem_1 = tem_2) tem_2+; /防止兩個溫度范圍一樣 if(tem_2 tem_1) /防止溫度上限比溫度下限低 tem_2=tem_1+1; void keyscan2 () if(jia_key=0) /加速按鍵Delay1ms(20);if(jia_key=0)num+;if(num=3)num=0;while(jia_key=0); /* 電機輸出檔位選擇函數(shù)*/void dangwei()switch(num) case 0: CCAP0H = CCAP0L = 0xff; /PWM0 口輸出 0%占空比 LED0 = 0; LED1 = 0; break; case 1: CCAP0H = CCAP0L = 0x67; /PWM0 口輸出60%占空比 LED

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論