自己制作的設計,自己做的一個谷物干燥,里面一些是模擬溫濕度的上升和下降,僅供參考。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (24.65 KB, 下載次數(shù): 33)
下載附件
2019-9-5 20:17 上傳
單片機源程序如下:
- #include<reg52.h>
- #include <intrins.h>
- #include <math.h>
- #include <stdio.h>
- #include <1602.h>
- #include <sht11.h>
- #define uchar unsigned char
- #define uint unsigned int
- uint temp,humi;
- value humi_val,temp_val; //定義兩個共同體,一個用于濕度,一個用于溫度
- uchar error; //用于檢驗是否出現(xiàn)錯誤
- uchar date;
- uchar checksum; //CRC
- uchar TEMP_data[7]; //用于顯示溫度
- uchar HUMI_data[6]; //用于記顯示濕度
- uchar presskeynum; //按鍵次數(shù)變量
- uchar code word1[]={" Put in grain:"};
- uchar code word2[]={"..........100%"};
- uchar code word3[]={" take out grain"};
- uchar code word4[]={" Grain drying"};
- sbit k1=P2^0; //放入谷物按鍵
- sbit k2=P2^1; //開始干燥按鍵
- sbit k3=P2^2; //暫停干燥按鍵
- sbit k4=P2^3;// 取出谷物按鍵
- sbit led1=P1^4; //熱風機工作指示燈
- sbit led2=P1^5; //冷風機工作指示燈
- sbit motor1=P1^0; //熱風機
- sbit motor2=P1^1; //冷風機
- sbit P2_6=P2^6;
- //********延時函數(shù)*********
- void delay(uint z) //z為毫秒數(shù)
- {
- int a,b;
- for(a=z;a>0;a--)
- for(b=120;b>0;b--);
- }
- void temp_humi() //z為毫秒數(shù)
- {
- GotoXY(0,0); //選擇溫度顯示位置
- Print("Temp: C"); //5格空格
- GotoXY(0,1); //選擇濕度顯示位置
- Print("Humi: %"); //5格空格
- GotoXY(5,0); //設置溫度顯示位置
- TEMP_data[0]=temp/1000+'0'; //溫度百位
- if (TEMP_data[0]==0x30)
- TEMP_data[0]=0x20;
- TEMP_data[1]=temp%1000/100+'0'; //溫度十位
- if (TEMP_data[1]==0x30 && TEMP_data[0]!=0x30)
- TEMP_data[1]=0x20;
- TEMP_data[2]=temp%100/10+'0'; //溫度個位
- TEMP_data[3]=0x2e; //小數(shù)點
- TEMP_data[4]=temp%10+'0'; //溫度小數(shù)點后第一位
- TEMP_data[5]=0xdf; //顯示溫度符號℃
- TEMP_data[6]='\0';
- Print(TEMP_data); //輸出溫度
- GotoXY(5,1); //設置濕度顯示位置
- HUMI_data[0]=humi/1000+'0'; //濕度百位
- if (HUMI_data[0]==0x30)
- HUMI_data[0]=0x20;
- HUMI_data[1]=humi%1000/100+'0'; //濕度十位
- HUMI_data[2]=humi%100/10+'0'; //濕度個位
- HUMI_data[3]='.' ; //小數(shù)點
- HUMI_data[4]=humi%10+'0'; //濕度小數(shù)點后第一位
- HUMI_data[5]='\0';
- Print(HUMI_data); //輸出濕度
- }
- void key()
- {
- if(presskeynum==2)//開始干燥
- {
- if(k3==0) // 按下暫停按鍵
- {
- delay(5);
- while(k3==0); //加上此句必須松按鍵才處理
- while(1)
- {
- led1=led2=1;
- motor1=motor2=0;
- delay(300);
- if(k3==0) {while(k3==0); break;}
- }
- }
- }
- else
- {
- if(k1==0)//放入谷物
- {
- delay(5);
- presskeynum=1;
- while(k1==0); //加上此句必須松按鍵才處理
- LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
- }
-
- if(presskeynum==4)//溫濕度檢測
- {
- if (k2==0) //調(diào)整按鍵檢測
- {
- delay(5);
- presskeynum=2;
- while(k2==0); //若一直按下,循環(huán)
- }
- }
- if(k4==0)// 取出谷物按鍵
- {
- delay(5);
- presskeynum=3;
- while(k3==0); //加上此句必須松按鍵才處理
- LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
- }
- }
- }
-
- void main()
- {
- k1=k2=k3=k4=1;
- motor1=motor2=0;
- P2_6=0;
- LCD_Initial(); //液晶初始化
- LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
-
- while(1)
- {
- key();
- if(presskeynum==0) //初始界面
- {
- GotoXY (0,0);
- Print(word4);
- }
-
- if(presskeynum==1) //放入谷物時顯示的內(nèi)容
- {
- GotoXY (0,0);
- Print(word1);
- delay(5);
- GotoXY(2,1);
- Print_slow(word2);
- presskeynum=4;
- delay(200);
- LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
- }
- //*****************************************************************************************************
- //此處為proteus模擬顯示熱冷風機工作時溫濕度的變化,現(xiàn)實中僅需對溫濕度測量即可
- //****************************************************************************************************
- if(presskeynum==2) //開始干燥時顯示的內(nèi)容
- {
- while(temp<820) //溫度上限設為82℃
- {
- key();
- led1=0;
- motor1=1;
- delay(300);
- temp_humi();
- temp+=35; //步進單位為3.5℃
- humi-=12; //步進單位為1.2%
- }
- if(temp>820) //冷風機開始工作
- {
- while(humi>200) //濕度下限設為20%
- {
- delay(500);
- key();
- motor1=0;
- motor2=1;
- led1=1;
- led2=0;
- temp-=35;
- humi-=12;
- temp_humi();
- }
- }
- motor2=0;
- led2=1;
- presskeynum=5; //跳入空集,加快按鍵按下效果
- }
- if(presskeynum==3) //取出谷物時顯示的內(nèi)容
- {
- delay(100);
- GotoXY (0,0);
- Print(word3);
- delay(5);
- GotoXY (1,1);
- Print_slow(word2);
- delay(1000);
- LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
- presskeynum=0; //跳轉至初始界面
- }
-
- if(presskeynum==4) //測量溫濕度
- {
- error=0; //初始化error=0,即沒有錯誤
- error+=s_measure((unsigned char*)&temp_val.i,&checksum,TEMP); //溫度測量
- error+=s_measure((unsigned char*)&humi_val.i,&checksum,HUMI); //濕度測量
- if(error!=0)
- s_connectionreset(); //如果發(fā)生錯誤,系統(tǒng)復位
- else
- {
- humi_val.f=(float)humi_val.i; //轉換為浮點數(shù)
- temp_val.f=(float)temp_val.i; //轉換為浮點數(shù)
- calc_sth10(&humi_val.f,&temp_val.f); //修正相對濕度及溫度
- temp=temp_val.f*10;
- humi=humi_val.f*10;
- temp_humi(); //顯示溫濕度
-
- } //else
- } //if
-
- }//while
- } //mian
復制代碼
0.png (6.08 KB, 下載次數(shù): 24)
下載附件
2019-9-5 20:17 上傳
所有資料51hei提供下載:
谷物干燥.rar
(104.32 KB, 下載次數(shù): 29)
2019-9-4 21:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|