1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉
標題:
單片機根據(jù)溫濕度控制風(fēng)速源程序電路圖
[打印本頁]
作者:
1623054722
時間:
2020-12-21 10:42
標題:
單片機根據(jù)溫濕度控制風(fēng)速源程序電路圖
電路原理圖如下:
51hei.png
(95.2 KB, 下載次數(shù): 26)
下載附件
2020-12-21 14:13 上傳
單片機源程序如下:
/*溫濕度實時監(jiān)測顯示,溫度測量范圍為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; //設(shè)置
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;//數(shù)據(jù)
//===========================================================================================
extern uchar TH,RH;//溫度整數(shù),濕度整數(shù)部分
extern uchar dat[3];//風(fēng)速上限,下限,初始化標記
uchar code word1[16]= {" Wind = km/h "};//km/h 調(diào)整界面
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"};//設(shè)置風(fēng)速上限界面
uchar code haha[16]= {"Wind lower limit"};//設(shè)置風(fēng)速下限界面
uchar adcdat;
uint sum=0; //5次adcdat數(shù)據(jù)之和
uchar fs=0; //風(fēng)速默認 km/h
bit flag1=0; //默認 0(km/h) 1(m/s)
uchar dengji=0;
/**************開機初始化保存的數(shù)據(jù)*****************/
void init_eeprom()
{
read(0x20);read(0x22);read(0x24);//先讀
if(dat[2]!=22) //新的單片機初始單片機內(nèi)部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);//保存標記數(shù)據(jù)
EA=1;
}
}
void main()
{
uint i;uint j;uchar k;//動態(tài)延時變量
init_1602();
delay1m(100); //延時等待1602穩(wěn)定
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)//動態(tài)延時讀取溫濕度值
{
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轉(zhuǎn)換的結(jié)果
sum=sum+adcdat;
k++;
if(k>=10)
{
k=0;
adcdat=sum/10; //風(fēng)速ad值,adcdat/51等于電壓,*90等于風(fēng)速
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<dat[1]){green=0;red=1;}
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((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;
else if((fs>=118)&&(fs<=133))dengji=12;
else if((fs>=134)&&(fs<=149))dengji=13;
else if((fs>=150)&&(fs<=166))dengji=14;
else if((fs>=167)&&(fs<=183))dengji=15;
else if((fs>=184)&&(fs<=201))dengji=16;
else if((fs>=202)&&(fs<=220))dengji=17;
//=================================================================================
if(flag1==0){} //km/h
else if(flag1==1) //m/s
{
fs=((float)fs/3.6)+0.5;
}
if(fs/100==0)
{
write_cmd(0x80+5);write_dat(0x20);//最高位為0,顯示空
}
else
{
write_cmd(0x80+5);write_dat(fs/100+0x30);
}
if((fs/100==0)&&(fs/10%10==0))
{
write_cmd(0x80+6);write_dat(0x20);//最高位為0,次高位也為0,顯示空
}
else
{
write_cmd(0x80+6);write_dat(fs/10%10+0x30);
}
write_cmd(0x80+7);write_dat(fs%10+0x30);//最低位顯示
//=================================顯示等級================================
write_cmd(0x80+13);write_dat('L');
if(dengji<10){write_cmd(0x80+14);write_dat(0x20);} //等級十位
else {write_cmd(0x80+14);write_dat(dengji/10+0x30);}
write_dat(dengji%10+0x30); //顯示等級
sum=0;
}
}
key_wind_up_down(); //風(fēng)速上限調(diào)整
}
}
//=======================================風(fēng)速上限,下限調(diào)整函數(shù)================================
void key_wind_up_down()
{
uchar dz[3]={0xc8,0xc9,0xca};//風(fēng)速上下限數(shù)據(jù)在1602上顯示的地址
uchar wei;//需要調(diào)整的位
uchar buf[3];//風(fēng)速上限緩存
uint counter;//用于產(chǎn)生閃爍效果
if(!set)
{
delay1m(10);
if(!set)//進入風(fēng)速上限設(shè)置
{
while(!set);
red=green=1;wei=0;
buf[0]=dat[0]/100;
buf[1]=dat[0]/10%10;
buf[2]=dat[0]%10;//當前風(fēng)速上限拆分后賦值給buf[]
w_string(0x80,hehe); //"Wind upper limit"
w_string(0xc0,word1); //" Wind = 000km/h "
do
{
counter++;if(counter>4000){counter=0;}//清零
if(counter>2000){write_cmd(dz[wei]);write_dat(0x20);}//顯示空格
if(counter<=2000)//顯示數(shù)據(jù)
{
fs_display(0xc8,buf[0]+'0',buf[1]+'0',buf[2]+'0');//123km/h
}
if(!yw)//按下yw,調(diào)整右移
{
delay1m(10);
if(!yw)
{
while(!yw);
wei++;if(wei>2){wei=0;}
}
}
if(!add)//加1
{
delay1m(10);
if(!add)
{
while(!add);
buf[wei]++;if(buf[wei]>9){buf[wei]=9;}
}
}
if(!cut)//減1
{
delay1m(10);
if(!cut)
{
while(!cut);
buf[wei]--;if(buf[wei]==0xff){buf[wei]=0;}
}
}
if((buf[0]*100+buf[1]*10+buf[2])<=dat[1]) //保證上限大于下限
{
dat[0]=dat[1]+1;
buf[0]=dat[0]/100;
buf[1]=dat[0]/10%10;
buf[2]=dat[0]%10;
}
}while(set);//按下set設(shè)置確定
delay1m(100);while(!set);//等待彈起
dat[0]=buf[0]*100+buf[1]*10+buf[2];
EA=0;
eraze(0x20);delay1m(5);write(0x20);delay1m(5);//保存上限
EA=1;
//=====================================下限設(shè)置=============================================
red=green=1;wei=0;
buf[0]=dat[1]/100;
buf[1]=dat[1]/10%10;
buf[2]=dat[1]%10;//當前風(fēng)速下限拆分后賦值給buf[]
w_string(0x80,haha); //"Wind Lower limit"
w_string(0xc0,word1); //" Wind = 000km/h "
do
{
counter++;if(counter>4000){counter=0;}//清零
if(counter>2000){write_cmd(dz[wei]);write_dat(0x20);}//顯示空格
if(counter<=2000)//顯示數(shù)據(jù)
{
fs_display(0xc8,buf[0]+'0',buf[1]+'0',buf[2]+'0');//123km/h
}
if(!yw)//按下yw,調(diào)整右移
{
delay1m(10);
if(!yw)
{
while(!yw);
wei++;if(wei>2){wei=0;}
}
}
if(!add)//加1
{
delay1m(10);
if(!add)
{
while(!add);
buf[wei]++;if(buf[wei]>9){buf[wei]=9;}
}
}
if(!cut)//減1
{
delay1m(10);
if(!cut)
{
while(!cut);
buf[wei]--;if(buf[wei]==0xff){buf[wei]=0;}
}
}
if((buf[0]*100+buf[1]*10+buf[2])>=dat[0])//保證下限小于上限
{
dat[1]=dat[0]-1;
buf[0]=dat[1]/100;
buf[1]=dat[1]/10%10;
buf[2]=dat[1]%10;
}
}while(set);//按下set設(shè)置確定
delay1m(100);while(!set);//等待彈起
dat[1]=buf[0]*100+buf[1]*10+buf[2];
EA=0;eraze(0x22);delay1m(5);write(0x22);delay1m(5);EA=1;//保存上限
if(flag1==0)//顯示km/h
{
w_string(0x80,word12);
}
else if(flag1==1)//顯示m/s
{
w_string(0x80,word11);
}
w_string(0xc0,word2);
}
}
}
//======================================ms級延時函數(shù)======================================
void delay1m(uint x)
{
uint k,j;
for(k=0;k<x;k++) //連數(shù)x次,約 x ms
for(j=0;j<120;j++); //數(shù)120 次,約1 ms
}
//===================================讀出ADC轉(zhuǎn)換的結(jié)果函數(shù)======================================
uchar read_adc_convert()
{
uchar i; //循環(huán)變量
uchar dat=0; //轉(zhuǎn)換之后讀出的數(shù)據(jù)
uchar dat1=0;//轉(zhuǎn)換之后讀出的數(shù)據(jù)
clk=0;cs=1;dio=0;//初始狀態(tài)
cs=0;//cs置0,片選有效
dio=1;//數(shù)據(jù)值1,起始信號
clk=1;//第1個上升沿dio保持1,表示啟動
_nop_();
clk=0;//時鐘置0,為下一步上升沿做準備
dio=1;//數(shù)據(jù)值1,
clk=1;//第2個上升沿dio=1,表示選擇單通道輸入
_nop_();
clk=0;//時鐘置0,為下一步上升沿做準備
dio=0;//數(shù)據(jù)值0
clk=1;//第3個上升沿dio=0,表示選擇CH0
_nop_();
clk=0;
dio=1;//將數(shù)據(jù)端口置為輸入狀態(tài),方便讀取
clk=1;//為下一步讀取做準備
_nop_();
for(i=0;i<8;i++)
{
clk=1;_nop_();
clk=0;//下降沿讀取一位數(shù)據(jù)
dat<<=1;
if(dio)
{
dat|=0x01;
}
else
{
dat|=0x00;
}
}
//時序圖中可見,前面8位與后面8位是共用最低位的,所以后面8位的
//第一位必須再次讀取前面8位的最后一位,這過程中不允許出現(xiàn)下降沿
for(i=0;i<8;i++)
{
dat1>>=1;
if(dio)
{
dat1|=0x80;
}
else
{
dat1|=0x00;
}
clk=1;_nop_();
clk=0;//下降沿讀取一位數(shù)據(jù)
}
cs=1;
if(dat==dat1)
{
return dat;
}
else
{
return 0;
}
return dat;
}
復(fù)制代碼
全部資料51hei下載地址:
溫濕度風(fēng)速.rar
(91.91 KB, 下載次數(shù): 31)
2020-12-21 10:40 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1