历史上的今天
今天是:2024年12月21日(星期六)
2020年12月21日 | 单片机根据温湿度控制风速
2020-12-21 来源:51hei
电路原理图如下:

单片机源程序如下:
/*温湿度实时监测显示,温度测量范围为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 //==================================等级判断============================================== 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((fs>=62)&&(fs<=74))dengji=8; else if((fs>=75)&&(fs<=88))dengji=9; else if((fs>=89)&&(fs<=102))dengji=10; else if((fs>=103)&&(fs<=117))dengji=11;
上一篇:基于51单片机的流水灯实验
下一篇:基于51单片机的光电开关计数
史海拾趣
|
请问一下,有哪位大侠用过 vxworks下的建模软件I-LOGIX.RHAPSODY.V6.2,我在网上下了个这个软件,但结果不能安装,请问上怎么回事呢,我还有个6.0版本的,能安装,但结果却没有帮助文件,就没法学习怎么使用,也很恼火,请高手指点一下,我想学习在vxworks下 ...… 查看全部问答> |
|
重金酬谢!!!!! 求破解手机 代码 现在有个机型是CDMA的 原来是日文和英文 现在想改为法文或其他文字!~!!!!!!!! 芯片\"三洋高通\" 重金酬谢!!!!! 联系13681843776… 查看全部问答> |
|
半年内做了好几个手工板,一直没有成功,电路是按上面压缩包里做的,固件也是按照里边做的,下载的时候用的也是USBASP下载线下载的,但是插上电脑以后显示 [img]file:///C:/Users/Administrator.PC-20120816MPVV/AppData/Roaming/Tencent/Users/ ...… 查看全部问答> |




