1.功能
本設計為一種溫控風扇系統,具有靈敏的溫度感測和顯示功能,系統選用stc89c52微控制器作為控制平台對風扇轉速進行控制。可在測得溫度值在高低溫度之間時開啟風扇弱風檔,當溫度公升高超過所設定的溫度時自動切換到大風檔,當溫度小於所設定的溫度時自動關閉風扇,控制狀態隨外界溫度而定。
2.硬體設計
硬體電路主要由:
微控制器最小系統
風扇驅動電路
lcd1602顯示屏電路
ds18b20溫度採集電路
3.程式設計
(1)lcd1602驅動程式
#define lcd1602_db p0
sbit lcd1602_rs = p2^0;
sbit lcd1602_rw = p2^1;
sbit lcd1602_e = p2^2;
/* 等待液晶準備好 */
void lcdwaitready()
while (sta & 0x80); //bit7等於1表示液晶正忙,重複檢測直到其等於0為止
}/* 向lcd1602液晶寫入一位元組命令,cmd-待寫入命令值 */
void lcdwritecmd(unsigned char cmd)
/* 向lcd1602液晶寫入一位元組資料,dat-待寫入資料值 */
void lcdwritedat(unsigned char dat)
/* 設定顯示ram起始位址,亦即游標位置,(x,y)-對應螢幕上的字元座標 */
void lcdsetcursor(unsigned char x, unsigned char y)
/* 在液晶上顯示字串,(x,y)-對應螢幕上的起始座標,str-字串指標 */
void lcdshowstr(unsigned char x, unsigned char y, unsigned char *str)
}/* 初始化1602液晶 */
void initlcd1602()
(2)ds18b20驅動程式
sbit io_18b20=p3^2;
/*軟體延時函式,延時時間(t*10)us*/
void delayx10us(unsigned char t)
while(--t);
}/*復位匯流排,獲取存在脈衝,以啟動一次讀寫操作*/
bit get18b20ack()
/*向ds18b20寫入乙個位元組,dat-待寫入位元組*/
void write18b20(unsigned char dat)
ea=1;
}/*從ds18b20讀取乙個位元組,返回值-讀到的位元組*/
unsigned char read18b20()
ea=1;
return dat;
}/*啟動一次18b20溫度轉換,返回值-表示是否啟動成功*/
bit start18b20()
return ~ack;
}/*讀取ds18b20轉換的溫度值,返回值-表示是否讀取成功*/
bit get18b20temp(int *temp)
return ~ack;
}
(3)主程式
sbit in1=p2^7;
sbit in2=p2^6;
sbit ena=p2^5;
bit flag1s=0;//1s定時標誌
unsigned char t0rh=0;
unsigned char t0rl=0;
int temp;//讀取到的當前溫度值
unsigned char len;
int intt,dect;//溫度值的整數和小數部分
unsigned char str[12];
void compare();
void gettemp();
void configtimer0(unsigned int ms);
unsigned char inttostring(unsigned char *str,int dat);
extern bit start18b20();
extern bit get18b20temp(int *temp);
extern void initlcd1602();
extern void lcdshowstr(unsigned char x,unsigned char y,unsigned char *str);
void main()
else //讀取失敗時,提示錯誤資訊
start18b20();//重新啟動下一次轉換
} }}/*溫度獲取函式,獲取當前環境溫度值並儲存在str陣列中*/
void gettemp()
str[len++]='\0';
}/*延時函式,用於pwm控制*/
void delay(unsigned int z)
/*比較函式,通過溫度值的比較設定電機的轉速*/
void compare()
else if((intt>=26) &&(intt<28))
else if((intt>=28) &&(intt<30))
else if(intt>=30)
switch(j) //根據溫度索引設定電機轉速
break;
case 1: in1=1;
in2=0;
for(i=0;i<200;i++)
break;
case 2: in1=1;
in2=0;
for(i=0;i<200;i++)
break;
case 3: in1=1;
in2=0;
ena=1;
break;
default:break;
}}
/*整型數轉換為字串,str-字串指標,dat-待轉換數,返回值-字串長度*/
unsigned char inttostring(unsigned char *str,int dat)
dowhile(dat>0);
len += i;//i最後的值就是有效字元的個數
while(i-->0)//將陣列值轉換為ascii碼反向拷貝到接收指標上
*str='\0';
return len;
}void configtimer0(unsigned int ms)
void interrupttimer0() interrupt 1
}
37 基於51微控制器智慧型溫控風扇設計
系統由stc89c52微控制器 ds18b20溫度感測器 數碼管 風扇 按鍵 電源構成。具體功能 1 採用ds18b20溫度感測器測溫並用數碼管實時顯示 2 可以手動設定溫度上下限 共3個按鍵 設定鍵 加鍵 減鍵 3 溫度小於下限風扇不轉,溫度在上下限之間50 轉動,大於上限時,風扇全速轉動。近些年...
基於51微控制器溫控風扇系統控制設計(畢業設計資料)
覆銅板2017 271 51溫控風扇 ds18b20 熱釋 lcd1602 本設計由stc89c52微控制器電路 溫度ds18b20感測器電路 熱釋紅外感測器電路 風扇控制電路 按鍵電路 1602液晶顯示電路 電源電路組成。1 通過4個ds18b20檢測溫度,並將平均值實時顯示在液晶1602液晶上。...
基於51微控制器溫控風扇系統控制設計(畢業設計資料)
覆銅板2017 271 51溫控風扇 ds18b20 熱釋 lcd1602 本設計由stc89c52微控制器電路 溫度ds18b20感測器電路 熱釋紅外感測器電路 風扇控制電路 按鍵電路 1602液晶顯示電路 電源電路組成。1 通過4個ds18b20檢測溫度,並將平均值實時顯示在液晶1602液晶上。...