基于12C5A60S2單片機的溫控風(fēng)扇系統(tǒng)_第1頁
基于12C5A60S2單片機的溫控風(fēng)扇系統(tǒng)_第2頁
基于12C5A60S2單片機的溫控風(fēng)扇系統(tǒng)_第3頁
基于12C5A60S2單片機的溫控風(fēng)扇系統(tǒng)_第4頁
基于12C5A60S2單片機的溫控風(fēng)扇系統(tǒng)_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基于12C5A60S2單片機的溫控風(fēng)扇系統(tǒng)學(xué)院: 自 動 化 學(xué) 院1、 摘要如今隨著物聯(lián)網(wǎng)的不斷發(fā)展,在我們身邊不斷出現(xiàn)智能設(shè)備,這些設(shè)備多多少少都離不開單片機的應(yīng)用。諸如小米的智能手環(huán),智能機頂盒等。可見學(xué)會單片機應(yīng)用的重要性,本系統(tǒng)采用12C5A60S2單片機實現(xiàn)溫控風(fēng)扇系統(tǒng)。生活中,我們經(jīng)常會使用到電風(fēng)扇。比如,在炎熱的夏天人們用電風(fēng)扇來降溫;在工業(yè)生產(chǎn)中,大型機械用電風(fēng)扇來散熱等。但是當(dāng)環(huán)境溫度變化的時候,人工很難做到及時控制風(fēng)扇的轉(zhuǎn)速,也很難有效利用寶貴的電資源。隨著溫度控制的技術(shù)不斷發(fā)展,溫控技術(shù)已經(jīng)完全滿足現(xiàn)代的日常生活和生產(chǎn)的要求,應(yīng)運而生的溫控電風(fēng)扇也逐漸走進了人們的生活中

2、。溫控電風(fēng)扇可以根據(jù)環(huán)境溫度自動調(diào)節(jié)電風(fēng)扇啟停與轉(zhuǎn)速,在實際生活的使用中,溫控電風(fēng)扇不僅可節(jié)省寶貴的電資源,也大大方便了人們的生活和生產(chǎn)。2、 設(shè)計方案(一)系統(tǒng)整體設(shè)計本設(shè)計的整體思路是:利用溫度傳感器DS18B20檢測環(huán)境溫度并直接輸出數(shù)字溫度信號給單片機12C5A60S2進行處理,在LED數(shù)碼管上顯示當(dāng)前環(huán)境溫度值以及預(yù)設(shè)溫度值。其中預(yù)設(shè)溫度值只能為整數(shù)形式,檢測到的當(dāng)前環(huán)境溫度可精確到整數(shù)。同時利用LED數(shù)碼管正確顯示當(dāng)前時間,并可通過按鍵進行日期的修改,時間采用風(fēng)時顯示的模式,年、月、日、時、分、秒單獨顯示,顯示時第一位數(shù)碼管會用相應(yīng)排位,例如數(shù)碼管第一位顯示的為二時,數(shù)碼管后兩位顯

3、示的數(shù)值為年。本系統(tǒng)通過按鍵控制來設(shè)置溫度的報警值,如達到報警值蜂鳴器報警并閃爍LED報警燈,同時也可按鍵關(guān)閉報警。同時本系統(tǒng)使用12C5A60S2單片機自帶的A/D,采樣,動態(tài)調(diào)整燈光亮度。風(fēng)扇可以實現(xiàn)溫度智能調(diào)速(假設(shè)啟動溫度為20度,如果慢慢增加溫度,風(fēng)扇的轉(zhuǎn)速也會隨之慢慢增加,當(dāng)溫度超過設(shè)定的最大溫度時,風(fēng)扇達到最大轉(zhuǎn)速,并且報警。當(dāng)然降溫情況時,風(fēng)扇的轉(zhuǎn)速也隨之改變)同時也能實現(xiàn)當(dāng)前溫度掉電留存。本系統(tǒng)設(shè)定一個低于室溫的溫度,實現(xiàn)風(fēng)扇溫控(具體如下,假設(shè)在一個不封蓋的紙箱內(nèi),假設(shè)室溫為25度,我們就設(shè)定20度為目標(biāo)溫度,此時風(fēng)扇進行控溫,當(dāng)溫度達到20±0.5度,時達到平衡

4、狀態(tài))(2) 部分硬件簡介1、12C5A60S2單片機STC12C5A60S2/AD/PWM系列單片機是宏晶科技生產(chǎn)的單時鐘/機器周期(1T)的單片機,是高速/低功耗/超強抗干擾的新一代8051單片機,指令代碼完全兼容傳統(tǒng)8051,但速度快8-12倍。內(nèi)部集成MAX810專用復(fù)位電路,2路PWM,8路高速10位A/D轉(zhuǎn)換(250K/S),針對電機控制,強干擾場合。2、DS18B20溫度傳感器DS18B20數(shù)字溫度傳感器,是采用美國DALLAS半導(dǎo)體公司生產(chǎn)DS18B20可組網(wǎng)數(shù)字溫度傳感器芯片封裝而成,它具有微型化、低功耗、高性能、抗干擾能力強、易配微型處理器等優(yōu)點,可直接將溫度轉(zhuǎn)化成串行數(shù)字

5、信號供處理器處理。適用于各種狹小空間設(shè)備數(shù)字測溫和控制領(lǐng)域。 DS18B20的主要特征:測量的結(jié)果直接以數(shù)字信號的形式輸出,以“一線總線”方式串行傳給CPU,同時可傳送CRC校驗碼,具有極強的抗干擾糾錯能力;溫度測量范圍在-55+125之間,在-10+85時精確度為±0.5;可檢測溫度分辨率為912位,對應(yīng)的可分辨溫度分別為0.5,0.25,0.125和0.0625,可實現(xiàn)高精度測溫;它單線接口的獨特性,使它與微處理器連接時僅需一條端口線即可實現(xiàn)與微處理器的雙向通信;支持多點組網(wǎng)功能,即多個DS18B20可以并聯(lián)在唯一的三線上,實現(xiàn)組網(wǎng)多點測溫的功能;工作電壓范圍寬,其范圍

6、在3.05.5V。 DS18B20內(nèi)部結(jié)構(gòu)主要有四部分:64位ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。其管腳有三個,其中DQ為數(shù)字信號端,GND為電源地,VDD為電源輸入端。(3) 系統(tǒng)設(shè)計原理圖三、附錄(一) 元件清單:項目個數(shù)項目個數(shù)12C5A60S2單片機1蜂鳴器1 12M晶振110UF電解電容130PF陶瓷電容2按鈕6 DS18B20溫度傳感器1 自鎖按鈕1 4.7K電阻2103排阻1 1K電阻10排針2 4位共陽數(shù)碼管1 40P座1 8550三極管5 USB母座1LED燈39*15洞洞板1風(fēng)扇1光敏電阻1L293電機驅(qū)動芯片116P座110K電阻2

7、穩(wěn)壓二極管1(二)程序源代碼#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned char/-關(guān)于EEPROM的-sfr IAP_DATA = 0xC2;sfr IAP_ADDRH = 0xC3;sfr IAP_ADDRL = 0xC4;sfr IAP_CMD = 0xC5;sfr IAP_TRIG = 0xC6;sfr IAP_CONTR = 0xC7;#define CMD_IDLE 0#define CMD_READ 1#define CMD_PROG

8、RAM 2#define CMD_ERASE 3#define IAP_ADDRESS 0x0000#define ENABLE_IAP 0x82sbit ds = P20;sbit beep = P21;sbit led = P33;sbit dj = P22;sbit jian1 = P37;sbit jian2 = P36;sbit jian3 = P35;sbit jian4 = P34;sbit we1 = P27;sbit we2 = P26;sbit we3 = P25;sbit we4 = P24;/-關(guān)于AD的-sfr ADC_CONTR = 0XBC;sfr ADC_RES

9、 = 0XBD;sfr P1ASF = 0X9D;sfr ADC_RESL = 0XBE;uchar code number = 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90;void delayms(uint x) uint i,j;for(i = x; i > 0; i-) for(j = 110; j > 0; j-); /* void Delay(uchar n) /EEPROM的延時程序uint x; while(n-) x = 0;while(+x); */=DS18B20的延時= void del

10、ay_us(uchar x) uchar i;for(i=0;i<x;i+);uchar voice = 1,dj_num1,dj_num2,gao_dj,di_dj;uchar flag = 0,T0_num,warn_temp = 30,dj_num3;uchar yue = 1,ri = 1,shi,fen,miao; uint temp;float ftemp;void tiaozheng_jia() /數(shù)字修改加if(flag = 2) yue+;else if(flag = 3) ri+; else if(flag = 4) shi+;else if(flag = 5) fe

11、n+;else if(flag = 6) miao+;else if(flag = 7) warn_temp+;else if(flag = 8) dj_num1+;if(dj_num1 = 4)dj_num1 = 3;void tiaozheng_jian() /數(shù)字修改減if(flag = 2) yue-;else if(flag = 3) ri-; else if(flag = 4) shi-;else if(flag = 5) fen-;else if(flag = 6) miao-;else if(flag = 7) warn_temp-;else if(flag = 8) if(d

12、j_num1 != 0)dj_num1-;elsedj_num1 = 0;void deal_jia() /處理加問題if(miao = 60) miao = 0; fen+;if(fen = 60) fen = 0; shi+;if(shi = 24) shi = 0; ri+;if(yue=1|yue=3|yue=5|yue=7|yue=8|yue=10|yue=12) && ri=32) ri = 1; yue+;else if(yue=2 && ri=29) ri = 1; yue+;else if(ri=31) ri = 1; yue+;if(yue

13、= 13)yue = 1;void deal_jian() /處理減問題if(miao = -1)miao = 59;if(fen = -1)fen = 59;if(shi = -1)shi = 23;if(ri = 0) if(yue=1|yue=3|yue=5|yue=7|yue=8|yue=10|yue=12)ri = 31;else if(yue=2)ri = 28;elseri = 30;if(yue = 0)yue = 12;void keyscan() /鍵盤掃描if(jian1 = 0) delayms(10);if(jian1 = 0) flag+;while(!jian1)

14、;if(jian2 = 0) delayms(10);if(jian2 = 0) tiaozheng_jia();deal_jia();while(!jian2);if(jian3 = 0) delayms(10);if(jian3 = 0) tiaozheng_jian();deal_jian();while(!jian3);if(jian4 = 0) delayms(10);if(jian4 = 0) if(flag = 7)voice = !voice;else if(flag = 6)TR0 = !TR0;while(!jian4);void display_shu(uchar x)

15、/顯示月日時分秒,溫度uchar i,j;i = x/10; j = x%10;we1 = 0;P0 = numberflag;delayms(5);we1 = 1;we3 = 0;P0 = numberi;delayms(5);we3 = 1; we4 = 0;P0 = numberj;delayms(5);we4 = 1;void display_wendu(uchar x) /flag大于10后,僅僅顯示溫度uchar i,j;i = x/10; j = x%10;if(flag = 10) we1 = 0;P0 = 0xbf;delayms(4);we1 = 1;else if(fla

16、g = 11) we1 = 0;P0 = 0xb7;delayms(4);we1 = 1;we3 = 0;P0 = numberi;delayms(5);we3 = 1; we4 = 0;P0 = numberj;delayms(5);we4 = 1;void baojing(uchar temp) /溫度報警uchar i;beep = 0;for(i = 10; i > 0; i-) beep = 0; led = 0;if(flag < 10)display_shu(temp);elsedisplay_wendu(temp);for(i = 10; i > 0; i-)

17、 beep = 0; led = 1;if(flag < 10)display_shu(temp);elsedisplay_wendu(temp);void deal_shijian() /處理時間if(miao >= 60) miao = 0; fen+;if(fen >= 60) fen = 0; shi+;if(shi >= 24) shi = 0; ri+;if(yue=1|yue=3|yue=5|yue=7|yue=8|yue=10|yue=12) && ri>=32) ri = 1; yue+;else if(yue=2 &&a

18、mp; ri>=29) ri = 1; yue+;else if(ri>=31) ri = 1; yue+;if(yue >= 13)yue = 1;void IapIdle() /關(guān)閉EEPROMIAP_CONTR = 0;IAP_CMD = 0;IAP_TRIG = 0;IAP_ADDRH = 0x80;IAP_ADDRL = 0;uchar IapReadByte(uint addr) /EEPROM讀一個字節(jié)uchar dat;deal_shijian();IAP_CONTR = ENABLE_IAP;IAP_CMD = CMD_READ;IAP_ADDRL = ad

19、dr;IAP_ADDRH = addr >> 8;IAP_TRIG = 0x5a;IAP_TRIG = 0xa5;_nop_();dat = IAP_DATA;IapIdle();deal_shijian();return dat;void IapProgramByte(uint addr, uchar dat) /EEPROM寫一個字節(jié)deal_shijian();IAP_CONTR = ENABLE_IAP;IAP_CMD = CMD_PROGRAM;IAP_ADDRL = addr;IAP_ADDRH = addr >> 8;IAP_DATA = dat;IAP_

20、TRIG = 0x5a;IAP_TRIG = 0xa5;_nop_();IapIdle();deal_shijian();void IapEraseSector(uint addr) /EEPROM扇區(qū)擦除deal_shijian();IAP_CONTR = ENABLE_IAP;IAP_CMD = CMD_ERASE;IAP_ADDRL = addr;IAP_ADDRH = addr >> 8;IAP_TRIG = 0x5a;IAP_TRIG = 0xa5;_nop_();IapIdle();deal_shijian();void display_adc(uchar x) /顯示

21、采集的AD信號uchar i;i = x/1000;we1 = 0;P0 = numberi;delayms(5);we1 = 1;i = x%1000/100;we2 = 0;P0 = numberi;delayms(5);we2 = 1;i = x%100/10;we3 = 0;P0 = numberi;delayms(5);we3 = 1;i = x%10;we4 = 0;P0 = numberi;delayms(5);we4 = 1;uint adc_in() /自帶的AD轉(zhuǎn)換uint res;ADC_CONTR = 0xc9; res+; res+; res+;while(!(ADC

22、_CONTR&0x10);res = ADC_RES*4 + ADC_RESL;ADC_RES = 0;ADC_RESL = 0;ADC_CONTR = 0;return(res);void led_control() /通過光敏電阻控制LED燈的亮度uchar ad = adc_in();uchar ad_num,gao_led,di_led,i;keyscan();if(ad > 235)ad_num = 0;else if(ad > 215)ad_num = 1;else if(ad > 195)ad_num = 2;else if(ad > 175)ad

23、_num = 3;elsead_num = 4;switch(ad_num) case 0:gao_led = 4; di_led = 1; break;case 1:gao_led = 3; di_led = 2; break;case 2: gao_led = 2; di_led = 3; break;case 3:gao_led = 1; di_led = 4; break;case 4:gao_led = 0; di_led = 5; break;if(gao_led != 0) for(i = 0; i < gao_led; i+) led = 1;display_adc(ad

24、);for(i = 0; i < di_led; i+) led = 0;display_adc(ad);void display_dj() /顯示電機的檔數(shù)和編號we1 = 0;P0 = numberflag;delayms(5);we1 = 1;we4 = 0;P0 = numberdj_num1;delayms(5);we4 = 1; void dispose(uchar dj_num) /根據(jù)速度標(biāo)志進行數(shù)據(jù)處理switch(dj_num) case 0:if(flag = 8)display_dj();else if(flag = 10)display_wendu(temp);

25、gao_dj = 1; di_dj = 3; break;case 1:if(flag = 8)display_dj();else if(flag = 10)display_wendu(temp);gao_dj = 2; di_dj = 2; break;case 2:if(flag = 8)display_dj();else if(flag = 10)display_wendu(temp);gao_dj = 3; di_dj = 1; break;case 3:if(flag = 8)display_dj();else if(flag = 10)display_wendu(temp);gao

26、_dj = 4; di_dj = 0; break;void dj_qudong() /控制電機程序uchar i;if(di_dj != 0) for(i = 0; i < di_dj; i+) dj = 0;if(flag = 8)display_dj();else if(flag = 10)display_wendu(temp);for(i = 0; i < gao_dj; i+) dj = 1;if(flag = 8) display_dj();else if(flag = 10)display_wendu(temp);void wen_feng(uchar t) /溫度控

27、制風(fēng)扇的速度if(t < 20)dj = 0;else if(t < 24)dj_num2 = 0;else if(t < 28)dj_num2 = 1;else if(t < 31)dj_num2 = 2;else if(t >= 31)dj_num2 = 3;void feng_wen(uchar t) /風(fēng)扇控制溫度if(t > 21)dj_num3 = 3;else if(t = 21)dj_num3 = 0;elsedj = 0;void display_zong() /數(shù)碼管總顯示uchar i;deal_shijian();if(flag=1|

28、flag=2|flag=3|flag=4|flag=5|flag=6|flag=8|flag=9)beep = 1;if(flag != 9)led = 1;if(flag=1|flag=2|flag=3|flag=4|flag=5|flag=6|flag=7|flag=9)dj = 0;if(flag = 1) /基本功能1,顯示溫度keyscan();deal_shijian();for(i = 10; i > 0; i-) display_shu(temp);else if(flag = 2) /基本功能2,月keyscan();deal_shijian();for(i = 10;

29、 i > 0; i-) display_shu(yue);else if(flag = 3) /基本功能2,日keyscan();deal_shijian();for(i = 10; i > 0; i-) display_shu(ri);else if(flag = 4) /基本功能2,時keyscan();deal_shijian();for(i = 10; i > 0; i-) display_shu(shi);else if(flag = 5) /基本功能2,分keyscan();deal_shijian();for(i = 10; i > 0; i-) disp

30、lay_shu(fen);else if(flag = 6) /基本功能2,秒keyscan();deal_shijian();/for(i = 10; i > 0; i-) display_shu(miao);else if(flag = 7) /基本功能3,控制報警溫度并且能報警keyscan();deal_shijian();for(i = 10; i > 0; i-) display_shu(warn_temp);if(temp >= warn_temp&&voice = 1) beep = 0;baojing(warn_temp);else beep

31、 = 1; led = 1;else if(flag = 8) /基本功能4,控制電機,并且至少有3檔keyscan();deal_shijian();dispose(dj_num1);dj_qudong();else if(flag = 9) /擴展功能1,采集數(shù)據(jù),AD處理,并控制LED的亮度keyscan();deal_shijian();display_adc(adc_in();led_control();else if(flag = 10) /擴展功能2,溫度控制風(fēng)扇的轉(zhuǎn)速keyscan();deal_shijian();for(i = 10; i > 0; i-) displ

32、ay_wendu(temp);wen_feng(temp);dispose(dj_num2);dj_qudong();if(dj_num2 = 3) baojing(temp);beep = 0;else beep = 1;led = 1;else if(flag = 11) /風(fēng)扇控制溫度的高低keyscan();deal_shijian();for(i = 10; i > 0; i-) display_wendu(temp);feng_wen(temp);dispose(dj_num3);dj_qudong();if(flag = 12)flag = 1;bit dsreset()

33、/溫度傳感器復(fù)位uchar fla,i;deal_shijian(); ds=0;/ delay_us(198); /255for(i = 10; i > 0; i-) display_zong(); ds=1;/ delay_us(1); /30 fla=ds;/ delay_us(255);/ delay_us(120);for(i = 10; i > 0; i-) display_zong();if(warn_temp > temp|voice = 0) beep = 1;led = 1; return fla;uchar tempread() /讀一個字節(jié)數(shù)據(jù)uchar i=0,dat,j;deal_shijian();for(i=0;i<8;i+) ds=0;/ delay_1us(); ds=1;/ delay_us(1); /6 dat>>=1; if(ds=1) dat|=0x80; else dat|=0x00;/ delay_us(23); /50for(j = 3; j > 0; j-) display_zong();if(warn_temp > temp|voice = 0) beep = 1;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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論