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

下載本文檔

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

文檔簡介

1、自動化系統(tǒng)創(chuàng)意設(shè)計大賽作品說明書作品名稱:溫控風(fēng)扇系統(tǒng)設(shè)計目錄1、引言 42、背景 43、意義與應(yīng)用 54、原理簡介 55 、方案設(shè)計 66、STC12C5A60S2 單片機 7.6.1 簡介 76.2 PWM 寄存器設(shè)置 7.6.3 PWM 占空比計算方法 8.6.4 I/O 工作方式設(shè)置 9.7、LCD 液晶顯示屏 98、溫度傳感器 DS18B20 1.38.1 初始化 1.4.8.2 寫操作 1.4.8.3 讀操作 1.5.9 、風(fēng)扇 1.5.拓展 1 :1.6.拓展 2 :1.7.10 、硬件電路設(shè)計 1.8.10.1 原理圖和部分電路 PCB 圖 1.8.10.2 電機驅(qū)動電路 2.

2、0.11 、軟件設(shè)計 2.1.11.1 主函數(shù)流程圖 2.1.11.2 溫度控制風(fēng)扇程序流程圖 2.2.11.3 按鍵控制風(fēng)扇程序流程圖 2.3.11.4 按鍵設(shè)定溫度程序流程圖 2.4.12 、結(jié)語 2.5.參考文獻 : 2.5.附錄I:實物硬件圖 26.附錄U:程序26.摘要:本設(shè)計是基于 STC12C5A60S2 單片機技術(shù)與溫度傳感器測 量外界溫度的設(shè)計原理,進行了不同設(shè)計方案的比較,給出了設(shè)計的 硬件電路,同時對各種關(guān)鍵硬件進行較詳細(xì)的介紹,并且以流程圖的 方式對系統(tǒng)設(shè)計作出介紹。 系統(tǒng)主要通過溫度傳感器控制不同的 PWM 占空比輸出來控制風(fēng)扇的檔位。而出于方便、可選擇性的考慮,系統(tǒng)

3、 也添加了輔助功能,就是直接手動控制風(fēng)扇的檔位。關(guān)鍵詞 : STC12C5A60S2 單片機, DS18B20 溫度傳感器, PWM1、引言溫控風(fēng)扇在節(jié)能環(huán)保方面具有一定的作用,其工作原理除了普通的手 動檔位調(diào)節(jié),主要是通過溫度傳感器感應(yīng)外界溫度,并自主地進行檔位的 調(diào)節(jié),這樣在風(fēng)扇開著的情況下,不需進行手動就可以根據(jù)不同的外界溫 度進行自主調(diào)節(jié)風(fēng)力大小,達到節(jié)能目的。2、背景隨著空調(diào)機在日常生活中的普遍應(yīng)用,很容易想到電風(fēng)扇會成為空調(diào) 的社會淘汰品, 其實經(jīng)過市場的考驗和證實, 真實的并不是這樣的 ,在空調(diào) 產(chǎn)品的沖擊下,電風(fēng)扇產(chǎn)品仍然具有很強大的生命力,電風(fēng)扇在市場的考 驗中并沒有淡出市場

4、,反而銷售在不停的復(fù)蘇中,具有強大的發(fā)展空間。 據(jù)市場調(diào)查, 電風(fēng)扇的不停復(fù)蘇主要在以下原因: 一 ,是電風(fēng)扇雖然沒有空4 / 47調(diào)機的強大的制冷功能,但電風(fēng)扇是直接取風(fēng),風(fēng)力更加溫和,比較適合 老年人、兒童以與體質(zhì)虛弱的人使用。二 ,是電風(fēng)扇經(jīng)過多年的市場使用, 較符合人們的使用習(xí)慣,而且結(jié)構(gòu)簡單、操作方便、安裝簡易。三,是電風(fēng)扇比起空調(diào)產(chǎn)品而言, 其價格低廉, 相對省電, 更易的進入老百姓的家庭。 在目前空調(diào)還沒有普與,并且并不是所有的情況下空調(diào)都適合使用的情況 下,智能風(fēng)扇適合人體對溫度的要求,智能風(fēng)扇還有具有相當(dāng)作用的。3、意義與應(yīng)用1、普通電風(fēng)扇的現(xiàn)狀與存在的隱患:大部分只有手動調(diào)

5、速,功能單一。 長時間在高負(fù)荷工作容易損壞電器,并且造成電量的損失。2、作品可運用在家庭中,風(fēng)扇的風(fēng)力隨溫度而調(diào)節(jié),即可以避免人因溫 度低吹到冷風(fēng)而著涼,也可達到節(jié)能目的,可見溫控風(fēng)扇更具有優(yōu)越 性。3、其次將此系統(tǒng)裝在產(chǎn)熱多,急需排熱的設(shè)備上,可以幫助它與時散掉 大量的熱。比如電腦散熱器等。4、原理簡介1、電源開關(guān),控制系統(tǒng)處于工作還是停止?fàn)顟B(tài)。2、當(dāng)系統(tǒng)上電之后,通過單片機讀取外界溫度,然后在液晶顯示屏 上顯示出來。通過判斷溫度的范圍,控制風(fēng)扇的停止與轉(zhuǎn)不同的速度。同 時 LED 給出檔位指示。溫度控制的范圍可以通過按鍵進行設(shè)置。3、另外,當(dāng)不需要溫度控制時,可以通過模式切換開關(guān),讓系統(tǒng)工

6、 作于手動控制模式。通過按鍵進行調(diào)節(jié)風(fēng)扇的停止,與不同轉(zhuǎn)速。5 、方案設(shè)計方案一 :采用兩片 STC89C516RD 單片機、液晶 1602 和 ds18b20 , 進行設(shè)計,讓單片機 1 進行溫度讀取操作,另外的單片機 2 通過定時器, 產(chǎn)生占空比不同的 PWM 。兩單片機通過串口進行通信,這樣單片機 1 可 以通過讀取外界的溫度,然后對單片機 2 進行控制。這樣就能在不同的溫 度區(qū)間內(nèi),單片機 2 控制直流 5v 小風(fēng)扇不同的轉(zhuǎn)速 ,從而實現(xiàn)溫度自動控 制風(fēng)扇。方案二 :采用 STC12C5A60S2 單片機、液晶 1602 和 ds18b20 。這 也是一款 51 單片機,但是它的性能比

7、 STC89C516RD 單片機更強大,而 且有獨立的雙路 PWM 輸出。這樣,采用一片 STC12C5A60S2 單片機就 能實現(xiàn)溫度讀取和直流 5v 小風(fēng)扇的轉(zhuǎn)速控制。方案三:采用 stm8s105 系列單片機、液晶 1602 和 ds18b20 ,同樣 可以實現(xiàn)溫度讀取和直流 5v 小風(fēng)扇的轉(zhuǎn)速控制方案比較 : 方案一需要耗費更多的硬件資源。因此我們直接排除方案一。 方案三,如果采用 44 腳貼片封裝的 stm8s105 單片,可以在很小的 覆銅板上把硬件做出來,這樣可以節(jié)省一些硬件資源。但是,因為溫度傳 感器 ds18b20 的讀取是通過單一 I/O 口讀取的, stm8s105 的

8、I/O 操作 需要設(shè)置,讓其是處于輸入或者輸出方式。操作非常麻煩。方案二需要的硬件資源相對較少,而且其 I/O 口兼容 8051 單片機, 可以實現(xiàn) I/O 口準(zhǔn)雙向操作,這樣編程相對簡單。綜上所述,我們選擇方案二。6 、STC12C5A60S2 單片機6.1 簡介我們采用的單片機為STC12C5A60S2,STC12C5A60S2/AD/PWM 系列單片機是宏晶科技生產(chǎn)的單時鐘/機器周期(1T)的單片機,是高速/低功耗/超強抗干擾的新一代8051 單片機,指令代碼完全兼容傳統(tǒng) 8051, 但速度快 8-12 倍。內(nèi)部集成MAX810 專用復(fù)位電路,2路PWM,8 路高速10位A/D 轉(zhuǎn)換(2

9、50K/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 標(biāo)志位/ 清除所有中斷標(biāo)志位CL = 0;CH = 0;CMOD = 0x02;Fosc/2CCAP0H= CCAP0L =0xff;CCAP1H= CCAP1L =1x00;CCAPM0= 0x42;模式并且沒

10、有PCA 中斷/ 重置 PCA 的 16 位計數(shù)器/ 設(shè)置 PCA 計數(shù)器時鐘源為/ 禁止 PCA 計數(shù)器溢出中斷/PWM0 口輸出 0% 占空比/PWM1 口輸出 100% 占空比/PCA 模塊 0 工作在 8 位 PWMCR = 1; / 開始計數(shù)當(dāng)寄存器 CL 值小于 EPCnL, CAPPnL 時,輸出為低電平;當(dāng)寄存器CL值等于或大于EPCnL, CAPPnL 時,輸出為高電平;當(dāng)寄存器 CL的值由 FF 變?yōu)?00 溢出時, EPCnH CAPPnH 的內(nèi)容被裝載到 EPCnL,CAPPnL 中。這樣,就可以實現(xiàn)無干擾地實現(xiàn) PWM 更新。6.3 PWM 占空比計算方法輸出的占空比

11、乘以 256 后,轉(zhuǎn)換為十六進制,然后進行取反,再同時賦值給寄存器 CCAPxH 和 CCAPxL 。6.4 I/O工作方式設(shè)置其I/O 口的工作方式有準(zhǔn)雙向/弱上拉輸出,強推挽輸出,高阻輸入(電 流不能流入也不能流出),幵漏輸出(若外加上拉也可以讀?。┑?。缺省 狀態(tài)下,I/O的工作方式為準(zhǔn)雙向/弱上拉。本設(shè)計中,對于溫度傳感器的讀寫操作,需要 I/O工作在準(zhǔn)雙向的工作狀 態(tài)。而PWM輸出端口,LED驅(qū)動輸出,端口我們將I/O 口的工作方式設(shè) 置分強推挽輸出,輸出的拉電流達到 20mA,能更好的驅(qū)動負(fù)載。設(shè)置方式,通過配置相應(yīng)的寄存器PxM1和PxM0,如下表1所示:PxM1 7:0PxM0

12、7:0I/O 口模式00準(zhǔn)雙向口01強推挽輸出10高阻輸入11幵漏表17、LCD液晶顯示屏?xí)r鐘的顯示屏選用1602字符液晶。1602是指顯示的內(nèi)容為16*2, 即能夠同時顯示兩行,每行 16個字符。常見的1602字符液晶有兩種, 一種顯示的是綠色背光黑色字體,另一種顯示藍(lán)色背光白色字體,目前市 面上字符液晶絕大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的。本設(shè)計所用1602液晶模塊,顯示屏是藍(lán)色背光白色字體。圖1為1602字符液晶引腳圖LCD16027d6d5d4d3d2d1DODw/ORovccvDN1 234567891113456圖11602字符液晶引腳圖各引腳功能為:第1腳

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

14、D7=指令碼,E=高脈沖 輸 出無讀數(shù)據(jù) 輸入RS=H,R/W=H ,E=H輸出DO D7=數(shù)據(jù)寫數(shù)據(jù) 輸入RS=H,R/W=L,DO D7=數(shù)據(jù),E=高脈沖 輸出無 RAM地址映射圖:如圖2所示:LCD16字乂2行oo'0102030405060708090A0BOC000EOF1027404142434445464748494A4B4C4D4E4F5067圖2 RAM地址映射圖當(dāng)我們在00-0F、40-4F,的地址中任意地寫入顯示數(shù)據(jù)時,液晶都可 以顯示,當(dāng)寫入10-27或50-67地址處時,必須通過移屏指令將它們移 入可顯示的區(qū)域。 讀、寫操作時序:如圖3所示:因為本設(shè)計的程序中

15、只涉與到液晶的寫操作,因此下面簡單介紹寫操 作過程,如下:(1)通過RS確定是寫數(shù)據(jù)還是寫命令。(2)讀寫控制端設(shè)置為寫模式。(3) 將數(shù)據(jù)或命令送達數(shù)據(jù)線上。(4) 給E 一個高脈沖將數(shù)據(jù)送到液晶控制器,完成寫操作圖3讀寫操作時序圖 初始化設(shè)置:(1) 顯示模式設(shè)置,如圖 4:m 4 二'一 _ - 1fh 細(xì)001ito o o1 1 1 】 113K2 緡、&曲 tirKftu圖4顯示模式設(shè)置圖(2) 顯示幵/關(guān)與光標(biāo)設(shè)置,如圖5:_ft f H功ftJ10D0lcHc-iJF阪DO 1 i 口 CeO 彳肌Illf £ fjilMLi K=JJ JI4E口 1

16、肖出或牛Tp1 -K- JMiBimi. it士林加1QQQiQt!4a衛(wèi)吐兀皚相If,flfltM I* H- 總水左(1 (Nh|KIfKI e££(E f刃*.氣T為寫一牛字苻瞅占禾不甘朗| °y010QQfi0000Io0Ji000I000 |tt B Lb丿Lifl°o0IJflI) 口H#;KI1陶修】圖5顯示幵/關(guān)與光標(biāo)設(shè)置圖8、溫度傳感器 DS18B20用于檢測當(dāng)前的溫度,DS18B20測量溫度范圍為-55 °C+125 °C, 在-10+85 °C范圍內(nèi),精度為土 0.5 °C?,F(xiàn)場溫度直接以“一

17、線總線”的數(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電源;<< MD Vm圖6 DS18B20的引腳圖DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器 TH和TL、配置寄存器。DS18B20控制方法(DS18B20有六條控制命令):溫度轉(zhuǎn)換44H啟動DS18B20進行溫度轉(zhuǎn)換讀暫存器BEH讀暫存器9位二進制

18、數(shù)字寫暫存器4EH將數(shù)據(jù)寫入暫存器的TH、TL字節(jié) 復(fù)制暫存器 48H 把暫存器的 TH、TL 字節(jié)寫到 E2RAM 中重新調(diào)E2RAM B8H 把E2RAM 中的TH、TL字節(jié)寫到暫存器 TH、TL字 節(jié)讀電源供電方式 B4H 啟動 DS18B20 發(fā)送電源供電方式的信號給主 CPU8.1 初始化( 1) 先將數(shù)據(jù)線置高電平“ 1”。(2)延時(該時間要求的不是很嚴(yán)格,但是盡可能的短一點)(3)數(shù)據(jù)線拉到低電平“ 0 ”。(4)延時 750 微秒(該時間的時間范圍可以從 480 到 960 微秒)。(5)數(shù)據(jù)線拉到高電平“ 1 ”。( 6) 延時等待 (如果初始化成功則在 15 到 60 微

19、妙時間之內(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 ) 按從低位到高位的順序發(fā)送字節(jié)(一次只發(fā)送一位) 。4) 延時時間為 45 微秒。5) 將數(shù)據(jù)線拉到高電平。6 ) 重復(fù)上( 1 )到( 6

20、 )的操作直到所有的字節(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、風(fēng)扇本設(shè)計采用的是由 5V 直流供電的小型風(fēng)扇。 在設(shè)計當(dāng)中, 我們只 預(yù)置了兩檔速度相差明顯的檔位,一檔的 PWM 占空比為 30% ,二檔 的占空比為 90% 。這樣設(shè)計的目的主要是考慮到在檔位切換時,可以 看到速度有非常明顯的變化,讓實驗現(xiàn)象更加直觀。拓展 1 :

21、在主要考慮實用性方面的因素,我們還可以將控制檔位細(xì)化,做成5 個檔位,甚至 10個檔位,等等。不同的速度是通過調(diào)節(jié)不同的占 空比來實現(xiàn)的。下面我們給出溫度控制風(fēng)扇轉(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% 占空比els

22、e if (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 :在本

23、設(shè)計驗證成功并且可靠的基礎(chǔ)上,我們可以繼續(xù)延伸,給出溫度控制交流 220V 供電的風(fēng)扇的設(shè)計方案,比如宿舍的風(fēng)扇: 用普通的單片機,通過溫度傳感器,讀取外界的溫度,進而控制 繼電器的吸合與斷開。假設(shè)設(shè)置 4 個檔位,可以用單片機接三個繼電器 來實現(xiàn):當(dāng)外界溫度較低時,此時所有繼電器處于斷開狀態(tài),風(fēng)扇不轉(zhuǎn); 當(dāng)溫度升高到一定程度時,單片機使繼電器 1 吸合,繼電器 2、3 斷開,讓風(fēng)扇轉(zhuǎn)一檔,即較慢速度;當(dāng)溫度繼續(xù)升高,單片機使繼電器 扇轉(zhuǎn)二檔,即較快的速度。當(dāng)溫度再升高時,單片機使繼電器 扇轉(zhuǎn)三檔,即最快的速度。10、硬件電路設(shè)計2吸合,繼電器1、3斷幵,風(fēng)3吸合,繼電器1、2斷幵,風(fēng)圖7原理

24、圖10.1原理圖和部分電路PCB圖工作原理:通過P3.7端口處所接的電路的 SW2的閉合或斷幵選擇溫控或鍵控。當(dāng)SW2=1時,選擇溫控,通過DS18B20溫度傳感器獲取外界溫度,通過LCD顯示當(dāng)前溫度,并且顯示設(shè)定的溫度控制一檔和二檔的值, 比如 設(shè)定25和30攝氏度作為控制值。外界溫度較低時,比如小于25攝氏度, 處于0檔時,風(fēng)扇不轉(zhuǎn),LED1、2不亮。當(dāng)溫度較高,等于或大于 25且 小于30攝氏度時,處于一檔,風(fēng)扇轉(zhuǎn)動, LED1亮、LED2滅。當(dāng)溫度高 于30攝氏度時,處于二檔,風(fēng)扇高速轉(zhuǎn)動, LED1、2都亮。當(dāng)SW2=0 ;選擇鍵控,通過P2.0處所接的獨立鍵盤進行檔位的選擇。缺省狀

25、態(tài)下為空擋,液晶屏顯示DW=0,LED1、2不亮,風(fēng)扇不轉(zhuǎn)。按一次keyl,檔位加一,此時為一檔,液晶屏上顯示DW=1 ,LED1亮、LED2滅,風(fēng)扇轉(zhuǎn)動較慢。再按一次 keyl鍵,檔位加1,此時液晶屏上顯 示DW=2,LED1、2亮,風(fēng)扇高速轉(zhuǎn)動。再按一次 keyl,檔位歸零??趖nltsBN口0or宀e一fj 曰血LT- «onyH-圖8 PCB圖10.2電機驅(qū)動電路L298N的主要特點是:工作電壓高,最高工作電壓可達46V ;輸出電流大,瞬間峰值電流可達 3A,持續(xù)工作電流為2A ;額定功率25W o 采用標(biāo)準(zhǔn)邏輯電平信號控制;具有兩個使能控制端,在不受輸入信號影響 的情況下允

26、許或禁止器件工作有一個邏輯電源輸入端,使內(nèi)部邏輯電路部 分在低電壓下工作;可以外接檢測電阻,將變化量反饋給控制電路。使用L298N芯片驅(qū)動電機,該芯片可以驅(qū)動一臺兩相步進電機或四相步進電機,也可以驅(qū)動兩臺直流電機。用L298控制直流電機很容易用單片機端口高低就可以控制幵始、停止、正反轉(zhuǎn),利用EN1,EN2控制使能就能控制轉(zhuǎn)速。其原理圖,如圖9 :WJ8 ,丁磚OJId 1 -0LT4 -p|I訂宅甘I_,t_TVT"圖9 L298N原理圖11、軟件設(shè)計11.1主函數(shù)流程圖圖10主函數(shù)流程圖11.2溫度控制風(fēng)扇程序流程圖圖11溫度控制風(fēng)扇程序流程圖11.3按鍵控制風(fēng)扇程序流程圖圖12按

27、鍵控制風(fēng)扇程序流程圖11.4按鍵設(shè)定溫度程序流程圖圖13按鍵設(shè)定溫度程序流程圖12、結(jié)語本設(shè)計結(jié)合生活中的實際情況,利用單片機技術(shù)設(shè)計并制作了溫控風(fēng) 扇系統(tǒng),完全達到了設(shè)計要求,其次通過獨立鍵盤和溫度傳感器可以實現(xiàn) 對應(yīng)的操作,使操作更加方便靈活,所選取的單片機具有較高的抗干擾能 力,也符合這個設(shè)計的穩(wěn)定性要求。我們隊伍的各成員在整個設(shè)計制作過程中,相互配合,相互檢查,但 又進行了分工,大大提高了工作效率。參考文獻:1 郭天祥新概念51單片機C語言教程入門、提高、幵發(fā)、拓展全攻略電子工業(yè)大學(xué)出版社20102 李廣弟,朱月秀,等.單片機基礎(chǔ)M.北京航空航天大學(xué)出版社,2001.3 模擬電子技術(shù)基

28、礎(chǔ)M.高等教育出版社,2001.4 數(shù)字電子技術(shù)基礎(chǔ)M.高等教育出版社,2006.附錄I:實物硬件圖圖14實物硬件圖附錄U:程序#in clude<stc12c5a60s2.h>#in elude vintrin s.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int#defi ne LCD1602_DATAPINS P0sfr PCAPWM0 =0xf2;/ 定義寄存器 PCAPWM0sfr PCAPWM10xf3;/定義寄存器PCAPWM1sbit LCD1602_E=P1A2;sbit LCD1602

29、_RW=P1A1;/定義lcd1602的使能端/定義lcd1602的寫操作端sbit LCD1602_RS二PMO;/ 定義 lcd1602 的發(fā)送命令端sbit DSPORT=P2A7;sbit LEDO = P2A3;sbit LED1 = P2A4;sbit jia_key=P2A0;/sbit key1 = P2A1; / sbit key2 = P2A2;sbit key_sw = P3A7;/ 溫度傳感器讀寫端加速按鈕控制溫度調(diào)節(jié)按鍵 1 、 2溫控與鍵控切換開關(guān)uint a=0;uint b=0;uint c=0;uint tem_1=27;uint tem_2=30;uchar

30、 num=0;* 函 數(shù) 名: Delay1ms* 函數(shù)功能: 延時函數(shù)*/ 粗略延時 1ms*/void Delay1ms(uint y)uint x;for( ; y>0; y-)for(x=440; x>0; x-);void delay1ms(void) / 誤差 0usunsigned char a,b;for(b=129;b>0;b-) for(a=45;a>0;a-);void delay1us(uint x)/ 誤差 0usunsigned char a,b;for(b=x;b>0;b-) for(a=3;a>0;a-);/* 函數(shù)名* 函數(shù)

31、功能* 輸入* 輸出: Ds18b20Init: 初始化: 無1,失敗返回 0: 初始化成功返回*/*/ 寫入命令/ 使能/ 選擇發(fā)送命令/ 選擇寫入/ 寫入數(shù)據(jù)void LcdWriteCom(uchar com) LCD1602_E = 0;LCD1602_RS = 0;LCD1602_RW = 0;LCD1602_DATAPINS = com;/ 放入命令Delay1ms(1); / 等待數(shù)據(jù)穩(wěn)定LCD1602_E = 1;/ 寫入時序Delay1ms(5); / 保持時間LCD1602_E = 0; void LcdWriteData(uchar dat) LCD1602_E = 0;

32、 / 使能清零LCD1602_RS = 1; / 選擇輸入數(shù)據(jù)LCD1602_RW = 0;/ 選擇寫入LCD1602_DATAPINS = dat; / 寫入數(shù)據(jù)Delay1ms(1);LCD1602_E = 1; / 寫入時序Delay1ms(5); / 保持時間LCD1602_E = 0;/LCD 初始化子程序/ 開顯示/ 開顯示不顯示光標(biāo)/ 寫一個指針加 1/ 清屏/ 設(shè)置數(shù)據(jù)指針起點void LcdInit()LcdWriteCom(0x38);LcdWriteCom(0x0c);LcdWriteCom(0x06);LcdWriteCom(0x01);LcdWriteCom(0x80

33、); uchar Ds18b20Init()uchar i;DSPORT = 0;/ 將總線拉低 480us960usdelay1us(642); / 延時 642usDSPORT = 1; / 然后拉高總線,如果 DS18B20 做出反應(yīng)會將 在 15us60us 后總線拉低i = 0;while(DSPORT) / 等待 DS18B20 拉低總線i+;if(i>5)/ 等待 >5MSreturn 0;/ 初始化失敗delay1ms( );return 1;/ 初始化成功/* 函 數(shù) 名 : Ds18b20WriteByte* 函數(shù)功能 : 向 18B20 寫入一個字節(jié)*/voi

34、d Ds18b20WriteByte(uchar dat)uint j;for(j=0; j<8; j+)DSPORT = 0; / 每寫入一位數(shù)據(jù)之前先把總線拉低 1us delay1us(1);DSPORT = dat & 0x01; / 然后寫入一個數(shù)據(jù),從最低位開始delay1us(68); / 延時 68us ,持續(xù)時間最少 60usDSPORT = 1; / 然后釋放總線,至少 1us 給總線恢復(fù)時間才能接 著寫入第二個數(shù)值dat >>= 1;/* 函 數(shù) 名: Ds18b20ReadByte* 函數(shù)功能: 讀取一個字節(jié)*/uchar Ds18b20Rea

35、dByte()uchar byte, bi;uint j;for(j=8; j>0; j-)DSPORT = 0;/ 先將總線拉低 1usdelay1us(1);DSPORT = 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ù) 名 : Ds18b20ChangTe

36、mp* 函數(shù)功能 : 讓 18b20 開始轉(zhuǎn)換溫度*/void Ds18b20ChangTemp()Ds18b20Init();delay1ms( );Ds18b20WriteByte(0xcc); / 跳過 ROM 操作命令Ds18b20WriteByte(0x44); / 溫度轉(zhuǎn)換命令/* 函 數(shù) 名: Ds18b20ReadTempCom* 函數(shù)功能: 發(fā)送讀取溫度命令*/void Ds18b20ReadTempCom()Ds18b20Init();delay1ms( );Ds18b20WriteByte(0xcc);/ 跳過 ROM 操作命令Ds18b20WriteByte(0xbe)

37、;/ 發(fā)送讀取溫度命令/* 函 數(shù) 名 : Ds18b20ReadTemp* 函數(shù)功能 : 讀取溫度*int Ds18b20ReadTemp()int temp = 0;/ 先寫入轉(zhuǎn)換命令/ 然后等待轉(zhuǎn)換完后發(fā)送讀取溫/ 讀取溫度值共 16 位,先讀低字節(jié)/ 再讀高字節(jié)uchar tmh, tml; Ds18b20ChangTemp();Ds18b20ReadTempCom(); 度命令tml = Ds18b20ReadByte(); tmh = Ds18b20ReadByte(); temp = tmh;temp <<= 8;temp |= tml;return temp;/*

38、函數(shù)名 : LcdDisplay()* 函數(shù)功能 : LCD 顯示讀取到的溫度*/void LcdDisplay(int temp) /lcd 顯示unsigned char datas = 0, 0, 0, 0, 0; /定義數(shù)組float tp;if(temp< 0) / 當(dāng)溫度值為負(fù)數(shù)LcdWriteCom(0x80); / 寫地址 80 表示初始地址LcdWriteData('-'); / 顯示負(fù)/ 因為讀取的溫度是實際溫度的補碼,所以減 1 ,再取反求出原碼 temp=temp-1;temp=temp;tp=temp;temp=tp*0.0625*100+0.5

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

40、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 = temp % 10;a = datas0; /a,b,c 的作用是取溫度的整數(shù),進行溫控b = datas1;c = datas2;LcdWriteCom(

41、0x82); / 寫地址LcdWriteData('0'+datas0); / 百位LcdWriteCom(0x83); / 寫地址LcdWriteData('0'+datas1); / 十位LcdWriteCom(0x84); / 寫地址LcdWriteData('0'+datas2); / 個位LcdWriteCom(0x85); / 寫地址LcdWriteData('.'); / 顯示 '.'LcdWriteCom(0x86);/ 寫地址LcdWriteData('0'+datas3); /

42、顯示小數(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%占空比LED

43、0 = 1;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)t

44、em_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;ca

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論