找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1575|回复: 1
打印 上一主题 下一主题
收起左侧

单片机谷物干燥系统设计 附程序+Proteus仿真图

[复制链接]
跳转到指定楼层
楼主
自己制作的设计,自己做的一个谷物干燥,里面一些是模拟温湿度的上升和下降,仅供参考。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<reg52.h>

  2. #include <intrins.h>

  3. #include <math.h>
  4. #include <stdio.h>
  5. #include <1602.h>
  6. #include <sht11.h>     
  7. #define uchar unsigned char
  8. #define uint  unsigned  int
  9. uint temp,humi;
  10. value humi_val,temp_val;     //定义两个共同体,一个用于湿度,一个用于温度
  11. uchar error;                 //用于检验是否出现错误
  12. uchar date;
  13. uchar checksum;              //CRC
  14. uchar TEMP_data[7];          //用于显示温度
  15. uchar HUMI_data[6];          //用于记显示湿度
  16. uchar presskeynum;    //按键次数变量
  17. uchar code word1[]={" Put in grain:"};
  18. uchar code word2[]={"..........100%"};
  19. uchar code word3[]={" take out grain"};
  20. uchar code word4[]={"  Grain drying"};
  21. sbit k1=P2^0; //放入谷物按键
  22. sbit k2=P2^1; //开始干燥按键
  23. sbit k3=P2^2; //暂停干燥按键
  24. sbit k4=P2^3;// 取出谷物按键
  25. sbit led1=P1^4;         //热风机工作指示灯
  26. sbit led2=P1^5;        //冷风机工作指示灯
  27. sbit motor1=P1^0; //热风机
  28. sbit motor2=P1^1; //冷风机
  29. sbit P2_6=P2^6;

  30. //********延时函数*********
  31. void delay(uint z)  //z为毫秒数

  32. {
  33.      int a,b;
  34.      for(a=z;a>0;a--)
  35.      for(b=120;b>0;b--);
  36. }
  37. void temp_humi()  //z为毫秒数

  38. {
  39.       GotoXY(0,0);                                       //选择温度显示位置
  40.       Print("Temp:      C");                             //5格空格
  41.       GotoXY(0,1);                                       //选择湿度显示位置
  42.       Print("Humi:      %");                            //5格空格                           
  43.       GotoXY(5,0);                                      //设置温度显示位置
  44.       TEMP_data[0]=temp/1000+'0';                     //温度百位
  45.       if (TEMP_data[0]==0x30)
  46.           TEMP_data[0]=0x20;
  47.       TEMP_data[1]=temp%1000/100+'0';                //温度十位      
  48.       if (TEMP_data[1]==0x30 && TEMP_data[0]!=0x30)
  49.           TEMP_data[1]=0x20;
  50.       TEMP_data[2]=temp%100/10+'0';                   //温度个位
  51.       TEMP_data[3]=0x2e;                              //小数点
  52.       TEMP_data[4]=temp%10+'0';                       //温度小数点后第一位            
  53.       TEMP_data[5]=0xdf;                              //显示温度符号℃
  54.       TEMP_data[6]='\0';
  55.       Print(TEMP_data);                                //输出温度               
  56.       GotoXY(5,1);                                    //设置湿度显示位置
  57.           HUMI_data[0]=humi/1000+'0';                     //湿度百位                           
  58.       if (HUMI_data[0]==0x30)
  59.           HUMI_data[0]=0x20;
  60.       HUMI_data[1]=humi%1000/100+'0';          //湿度十位      
  61.       HUMI_data[2]=humi%100/10+'0';            //湿度个位
  62.       HUMI_data[3]='.' ;                       //小数点
  63.       HUMI_data[4]=humi%10+'0';                //湿度小数点后第一位   
  64.       HUMI_data[5]='\0';
  65.       Print(HUMI_data);                         //输出湿度                                                     
  66. }
  67. void key()
  68. {
  69.      if(presskeynum==2)//开始干燥
  70.      {
  71.          if(k3==0)    // 按下暂停按键
  72.          {
  73.             delay(5);
  74.                         while(k3==0);       //加上此句必须松按键才处理
  75.                         while(1)
  76.                          {
  77.                            led1=led2=1;
  78.                            motor1=motor2=0;
  79.                            delay(300);
  80.                            if(k3==0)  {while(k3==0); break;}
  81.                          }
  82.          }      
  83.       }
  84.           else
  85.        {
  86.             if(k1==0)//放入谷物                           
  87.           {
  88.              delay(5);
  89.                          presskeynum=1;
  90.              while(k1==0);       //加上此句必须松按键才处理
  91.                     LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
  92.                    }
  93.                      
  94.                  if(presskeynum==4)//温湿度检测
  95.                   {
  96.                    if (k2==0) //调整按键检测
  97.             {
  98.                delay(5);
  99.                presskeynum=2;
  100.                while(k2==0);         //若一直按下,循环
  101.             }        
  102.                   }
  103.              if(k4==0)// 取出谷物按键
  104.           {
  105.              delay(5);
  106.                          presskeynum=3;
  107.              while(k3==0);       //加上此句必须松按键才处理
  108.                     LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
  109.            }
  110.         }
  111.    }
  112.       


  113. void main()
  114. {

  115.      k1=k2=k3=k4=1;
  116.          motor1=motor2=0;
  117.          P2_6=0;
  118.      LCD_Initial();    //液晶初始化
  119.      LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
  120.                   
  121.      while(1)
  122.         {
  123.                      key();
  124.                if(presskeynum==0)                      //初始界面
  125.               {
  126.                                          GotoXY (0,0);
  127.                          Print(word4);   
  128.                }
  129.                      
  130.               if(presskeynum==1)                      //放入谷物时显示的内容
  131.               {
  132.                                         GotoXY (0,0);
  133.                                     Print(word1);
  134.                                         delay(5);
  135.                     GotoXY(2,1);
  136.                     Print_slow(word2);
  137.                                         presskeynum=4;
  138.                                         delay(200);
  139.                                         LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
  140.                }

  141. //*****************************************************************************************************
  142.                                           //此处为proteus模拟显示热冷风机工作时温湿度的变化,现实中仅需对温湿度测量即可
  143. //****************************************************************************************************                          
  144.                           if(presskeynum==2)  //开始干燥时显示的内容
  145.                {
  146.                                         while(temp<820)                 //温度上限设为82℃
  147.                                         {
  148.                                                   key();
  149.                                           led1=0;
  150.                                           motor1=1;
  151.                                           delay(300);
  152.                                           temp_humi();      
  153.                                           temp+=35;                         //步进单位为3.5℃
  154.                                           humi-=12;                         //步进单位为1.2%
  155.                                           }
  156.                                           if(temp>820)                 //冷风机开始工作
  157.                                           {
  158.                                                   while(humi>200)          //湿度下限设为20%
  159.                                                   {
  160.                                                           delay(500);
  161.                                                          key();
  162.                                                          motor1=0;
  163.                                                          motor2=1;
  164.                                                          led1=1;
  165.                                                          led2=0;
  166.                                                         temp-=35;
  167.                                                         humi-=12;
  168.                                                         temp_humi();   
  169.                                                   }
  170.                                           }                       
  171.                                               motor2=0;
  172.                                            led2=1;
  173.                                            presskeynum=5;                         //跳入空集,加快按键按下效果
  174.                }

  175.               if(presskeynum==3)                      //取出谷物时显示的内容
  176.               {
  177.                            delay(100);
  178.                     GotoXY (0,0);
  179.                              Print(word3);
  180.                     delay(5);
  181.                     GotoXY (1,1);
  182.                     Print_slow(word2);
  183.                                         delay(1000);
  184.                                         LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏      
  185.                                         presskeynum=0;                                          //跳转至初始界面
  186.                }
  187.                            
  188.                            if(presskeynum==4)         //测量温湿度
  189.              {                                                                  
  190.               error=0;                                           //初始化error=0,即没有错误
  191.              error+=s_measure((unsigned char*)&temp_val.i,&checksum,TEMP); //温度测量
  192.              error+=s_measure((unsigned char*)&humi_val.i,&checksum,HUMI); //湿度测量
  193.              if(error!=0)
  194.                          s_connectionreset();                 //如果发生错误,系统复位
  195.              else
  196.                  {
  197.                                           humi_val.f=(float)humi_val.i;                   //转换为浮点数
  198.                       temp_val.f=(float)temp_val.i;                   //转换为浮点数
  199.                       calc_sth10(&humi_val.f,&temp_val.f);            //修正相对湿度及温度
  200.                       temp=temp_val.f*10;
  201.                       humi=humi_val.f*10;
  202.                                           temp_humi();  //显示温湿度                 
  203.                      
  204.                  }  //else
  205.              }  //if
  206.                                                                                             
  207.          }//while
  208. }   //mian
复制代码

所有资料51hei提供下载:
谷物干燥.rar (104.32 KB, 下载次数: 29)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:700941 发表于 2020-4-25 13:21 来自手机 | 只看该作者
有些文档吗?想参考一下?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表