|
溫室大棚溫濕度監(jiān)測(cè)
包keil程序和proteus仿真
0.png (29.22 KB, 下載次數(shù): 61)
下載附件
2018-4-13 01:09 上傳
0.png (56.24 KB, 下載次數(shù): 71)
下載附件
2018-4-13 01:09 上傳
單片機(jī)源程序如下:
- /*************************************************************************************/
-
- //主函數(shù)( main.c):
- #include<tou.h>
- #include<serial.h>
- typedef union //定義共用同類型
- {
- unsigned int i;
- float f;
- } value;
- idata unsigned int t=10;
- idata unsigned int h=30;
- //延時(shí)函數(shù)
- void delay(int z) //z 為毫秒數(shù)
- {
- int x,y;
- for(x=z;x>0;x--)
- for(y=125;y>0;y--);
- }
- void key(void)
- {
- uchar key1;
- temp0=1;
- temp1=1;
- humi0=1;
- humi1=1;
- if(temp0==0) t=t+1;
- if(temp1==0) t=t-1;
- if(humi0==0) h=h+1;
- if(humi1==0) h=h-1;
- temp0=1;
- temp1=1;
- humi0=1;
- humi1=1;
- key1=P3;
- key1=key1&0x3c;
- while(key1!=0x3c)
- {key1=P3;
- key1=key1&0x3c;}
- }
-
- void main()
- {
- unsigned int temp,humi;
- value humi_val,temp_val; //定義兩個(gè)共同體,一個(gè)用于濕度,一個(gè)用于溫度 //
- //float dew_point; //用于記錄露點(diǎn)值
- unsigned char error; //用于檢驗(yàn)是否出現(xiàn)錯(cuò)誤
- unsigned char checksum; //CRC
- idata char dis_buf[]="溫度:30.5C 濕度:30.3%RH\r\n" ;
- uchar wendu[6]; //用于記錄溫度
- uchar shidu[6]; //用于記錄濕度
- LCD_Initial(); //初始化液晶
- GotoXY(0,0); //選擇溫度顯示位置
- Print("TEMP: %C"); //5 格空格
- GotoXY(0,1); //選擇濕度顯示位置
- Print("HUMI: %RH"); //5 格空格
- s_connectionreset(); //啟動(dòng)連接復(fù)位
- EA=1;
- serial_init(9600) ;
- while(1)
- {
- set=1;
- error=0; //初始化 error=0,即沒有錯(cuò)誤
- error+=s_measure((unsigned char*)&temp_val.i,&checksum,TEMP); // 溫度測(cè)量
- error+=s_measure((unsigned char*)&humi_val.i,&checksum,HUMI); // 濕度測(cè)量
- if(error!=0) s_connectionreset(); ////如果發(fā)生錯(cuò)誤,系統(tǒng)復(fù)位
- else
- {
- humi_val.f=(float)humi_val.i; //轉(zhuǎn)換為浮點(diǎn)數(shù)
- temp_val.f=(float)temp_val.i; //轉(zhuǎn)換為浮點(diǎn)數(shù)
- calc_sth10(&humi_val.f,&temp_val.f); //修正相對(duì)濕度及溫度 //
- //dew_point=calc_dewpoint(humi_val.f,temp_val.f); // 計(jì)算 e dew_point
- temp=temp_val.f*10;
- humi=humi_val.f*10; GotoXY(5,0); //設(shè)置溫度顯示位置
- if(set==1)
- {
- wendu[0]=temp/1000+'0'; //溫度百位
- wendu[1]=temp%1000/100+'0'; //溫度十位
- wendu[2]=temp%100/10+'0'; //溫度個(gè)位
- wendu[3]=0x2E; //小數(shù)點(diǎn)
- wendu[4]=temp%10+'0'; //溫度小數(shù)點(diǎn)后第一位
- Print(wendu); //輸出溫度
- GotoXY(5,1); //設(shè)置濕度顯示位置
- shidu[0]=humi/1000+'0'; //濕度百位
- shidu[1]=humi%1000/100+'0'; //濕度十位
- shidu[2]=humi%100/10+'0'; //濕度個(gè)位
- shidu[3]=0x2E; //小數(shù)點(diǎn)
- shidu[4]=humi%10+'0'; //濕度小數(shù)點(diǎn)后第一位
- Print(shidu); //輸出濕度
- dis_buf[6]=wendu[1] ;
- dis_buf[7]=wendu[2] ;
- dis_buf[8]=wendu[3] ;
- dis_buf[9]=wendu[4] ;
- dis_buf[18]=shidu[1] ;
- dis_buf[19]=shidu[2] ;
- dis_buf[20]=shidu[3] ;
- dis_buf[21]=shidu[4] ;
- if(serial_send_ok==1)
- serial_write_str(dis_buf) ;
- }
- if(set==0)
- {
- key();
- wendu[0]=t*10/1000+'0'; //溫度百位
- wendu[1]=t*10%1000/100+'0'; //溫度十位
- wendu[2]=t*10%100/10+'0'; //溫度個(gè)位
- wendu[3]=0x2E; //小數(shù)點(diǎn)
- wendu[4]=t*10%10+'0'; //溫度小數(shù)點(diǎn)后第一位
- Print(wendu); //輸出溫度
- GotoXY(5,1); //設(shè)置濕度顯示位置
- shidu[0]=h*10/1000+'0'; //濕度百位
- shidu[1]=h*10%1000/100+'0'; //濕度十位
- shidu[2]=h*10%100/10+'0'; //濕度個(gè)位
- shidu[3]=0x2E; //小數(shù)點(diǎn)
- shidu[4]=h*10%10+'0'; //濕度小數(shù)點(diǎn)后第一位
- Print(shidu); //輸出濕度
- }
- }
- if(temp>t*10)
- {
- jwBaojin=1;
- }
- else
- {
- jwBaojin=0;
- }
- //delay(800); //等待足夠長(zhǎng)的時(shí)間,以現(xiàn)行下一次轉(zhuǎn)換
- if(temp<t*10-10)
- {
- swBaojin=1;
- }
- else
- {
- swBaojin=0;
- }
- //delay(800); //等待足夠長(zhǎng)的時(shí)間,以現(xiàn)行下一次轉(zhuǎn)換
- if(humi<h*10)
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
Sht11濕度測(cè)量仿真.rar
(392.33 KB, 下載次數(shù): 186)
2018-4-12 19:32 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
程序.docx
(19.5 KB, 下載次數(shù): 104)
2018-4-12 19:32 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|