×
单片机 > 单片机程序设计 > 详情

单片机根据温湿度控制风速

发布时间:2023-09-01 发布时间:
|

电路原理图如下:

单片机源程序如下:

/*温湿度实时监测显示,温度测量范围为0~+50℃; 湿度测量范围为20%~90%;

1m/s=3.6km/h

fs = 25*v m/s = 90*v km/h V单位是 伏




===========================================================================================*/

#include"main.h"

sbit set=P2^3; //设置

sbit yw=P2^2; //移位

sbit add=P2^1; //+

sbit cut=P2^0; //-

sbit change=P3^7; //切换

sbit red=P1^3;sbit green=P1^4;//超限指示灯,上限,下限

//===================================adc0832================================================

sbit cs=P1^0; //片选

sbit clk=P1^1;//时钟

sbit dio=P1^2;//数据

//===========================================================================================

extern uchar TH,RH;//温度整数,湿度整数部分

extern uchar dat[3];//风速上限,下限,初始化标记


uchar code word1[16]= {" Wind = km/h "};//km/h 调整界面


uchar code word12[16]={"Wind= km/h L00"};//km/h

uchar code word11[16]={"Wind= m/s L00"};//m/s

uchar code word2[16]= {"Tem= C Hum= %"};//word2[4]word2[5]C word2[13]word2[14]%


uchar code hehe[16]= {"Wind upper limit"};//设置风速上限界面

uchar code haha[16]= {"Wind lower limit"};//设置风速下限界面


uchar adcdat;

uint sum=0; //5次adcdat数据之和

uchar fs=0; //风速默认 km/h


bit flag1=0; //默认 0(km/h) 1(m/s)

uchar dengji=0;


/**************开机初始化保存的数据*****************/

void init_eeprom()

{

read(0x20);read(0x22);read(0x24);//先读

if(dat[2]!=22) //新的单片机初始单片机内部eeprom

{

dat[0]= 20;//初始上限

dat[1]= 3; //初始下限

dat[2]=22;

EA=0;

eraze(0x20);delay1m(5);write(0x20);delay1m(5);//保存上限

eraze(0x22);delay1m(5);write(0x22);delay1m(5);//保存下限

eraze(0x24);delay1m(5);write(0x24);delay1m(5);//保存标记数据

EA=1;

}

}

void main()

{

uint i;uint j;uchar k;//动态延时变量

init_1602();

delay1m(100); //延时等待1602稳定

RH_founction();

init_eeprom();

while(1)

{

if(!change)//切换单位显示

{

delay1m(10);

if(!change)

{

flag1 = ~flag1;

if(flag1==0)//显示km/h 等级

{

w_string(0x80,word12);

}

else if(flag1==1)//显示m/s

{

w_string(0x80,word11);

}

}

while(!change);

}

//=======================================================================

i++;if(i>2000)//动态延时读取温湿度值

{

i=0;RH_founction();

DHT11_display(0xc0+4,TH/10+0x30,TH%10+0x30); //显示温度

DHT11_display(0xc0+13,RH/10+0x30,RH%10+0x30); //显示湿度

}

//=======================================================================

j++;if(j>300)

{

j=0;

adcdat=read_adc_convert();//读出ADC转换的结果

sum=sum+adcdat;

k++;

if(k>=10)

{

k=0;

adcdat=sum/10; //风速ad值,adcdat/51等于电压,*90等于风速

if(adcdat<=1)adcdat=0;

fs=adcdat*1.76; //fs=((float)adcdat/51)*90;

//==================================报警判断===============================================

if(fs>dat[0]){red=0;green=1;}

else if(fs

else if((fs<=dat[0])&&(fs>=dat[1])){red=1;green=1;}

//==================================等级判断==============================================

if(fs<1)dengji=0;

else if((fs>=1)&&(fs<=5))dengji=1;

else if((fs>=6)&&(fs<=11))dengji=2;

else if((fs>=12)&&(fs<=19))dengji=3;

else if((fs>=20)&&(fs<=28))dengji=4;

else if((fs>=29)&&(fs<=38))dengji=5;

else if((fs>=39)&&(fs<=49))dengji=6;

else if((fs>=50)&&(fs<=61))dengji=7;

else if((

[1] [2] [3] [4]
单片机温湿度控制风速


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
8051单片机的函数发生器的设计