找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2854|回复: 6
收起左侧

校长杯单片机比赛获奖作品资料共享:智能盆栽

[复制链接]
ID:334367 发表于 2018-5-20 18:43 | 显示全部楼层 |阅读模式
这是萌新参考很多大神的创意,自己捣鼓出来的一套系统,参加了学校比赛并获得了奖励,第一次使用,可能编排的不是很合理。欢迎各位下载参考。
1526812699(1).jpg
1526812792(1).jpg

Test-v7.2F.zip

689.18 KB, 下载次数: 16, 下载积分: 黑币 -5

评分

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

查看全部评分

回复

使用道具 举报

ID:1 发表于 2018-5-21 18:06 | 显示全部楼层
下面是楼主的主程序:
  1. #include  <math.h>
  2. #include  <stdio.h>       
  3. #include  <INTRINS.H>
  4. #include "reg52.h"
  5. #include "lcd.h"
  6. #include "ds18.h"
  7. #include "serc.h"
  8. #include "yl38.h"
  9. #include "bhmc.h"

  10. #ifndef uchar
  11. #define uchar unsigned char
  12. #endif
  13. #ifndef uint
  14. #define uint unsigned int
  15. #endif

  16. sbit ssm=P3^3;                        //测试数据发送引脚,每隔20s反一次
  17. sbit en=P3^2;                        //wifi模块初始化引脚

  18. uchar as[2][21];
  19. uchar dssz[5];                        //DS18缓存
  20. uchar gysz[6];                        //GY30缓存
  21. uchar ylsz[5];                        //YL38缓存
  22. uchar code ssd[8]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};//℃
  23. uchar code lux[8]={0x00,0x10,0x10,0x10,0x15,0x12,0x15,0x00};//lux
  24. uchar timee;                        //时间旗子
  25. static uchar zt;                //步进电机旗子

  26. void Delay1ms(uint c)   //误差 0us
  27. {
  28.     uchar a,b;
  29.         for (;c>0; c--)
  30.         {
  31.                  for (b=199;b>0;b--)
  32.                  {
  33.                           for(a=1;a>0;a--);
  34.                  }      
  35.         }        
  36. }

  37. void Delay5us()                        //误差 0ns
  38. {
  39.     _nop_();_nop_();_nop_();_nop_();
  40.     _nop_();_nop_();_nop_();_nop_();
  41.         _nop_();_nop_();_nop_();_nop_();
  42.         _nop_();_nop_();_nop_();_nop_();
  43. }

  44. void main()
  45. {
  46.         uchar j,k;                                                //检索
  47.         LcdInit();
  48.         YL38Init();
  49.         GY30Init();
  50.         SercInit();                                                //初始化串口
  51.         ssm=0;
  52.         DS18done(dssz);                                        //操作DS18,数据存在dssz数组中
  53.         YL38done(ylsz,50,70);                         //操作YL38,数据存在ylsz数组中,后面第一个为反馈下限,小于其则启动反馈P2^4,第二个为反馈上限,大于其则关闭反馈
  54.         GY30done(gysz,25000);                                //操作GY30,数据存在gysz数组中,后面跟着反馈限制值,超过则启动反馈引脚P1^2,同时输出‘T’
  55.         en=0;
  56.         DS18done(dssz);
  57.         YL38done(ylsz,50,70);
  58.         GY30done(gysz,25000);
  59.         Delay1ms(500);
  60.         en=1;                                                        //重新启动esp
  61.         DS18done(dssz);
  62.         YL38done(ylsz,50,70);
  63.         GY30done(gysz,25000);                                                                  
  64.         DIYshow(1,ssd,8,1);                                //摄氏度℃
  65.         DIYshow(2,lux,8,2);                                //勒克斯lux
  66.         DisplayOneChar(1,1,'T');                //温度
  67.         DisplayOneChar(2,1,':');
  68.         DisplayOneChar(10,1,'H');                //湿度
  69.         DisplayOneChar(11,1,':');
  70.         DisplayOneChar(16,1,'%');                //%
  71.         DisplayOneChar(1,2,'L');                //光照  
  72.     DisplayOneChar(2,2,':');
  73.         DisplayOneChar(10,2,'F');                //反馈
  74.         DisplayOneChar(11,2,':');
  75.         DisplayOneChar(12,2,'G');                //光照反馈前缀
  76.         DisplayOneChar(14,2,'S');                //湿度反馈前置
  77.         DisplayOneChar(3,1,dssz[0]);
  78.         DisplayOneChar(4,1,dssz[1]);
  79.         DisplayOneChar(5,1,dssz[2]);
  80.         DisplayOneChar(6,1,dssz[3]);
  81.         DisplayOneChar(7,1,dssz[4]);
  82.         DisplayOneChar(12,1,ylsz[0]);
  83.         DisplayOneChar(13,1,ylsz[1]);
  84.         DisplayOneChar(14,1,ylsz[2]);
  85.         DisplayOneChar(15,1,ylsz[3]);
  86.         DisplayOneChar(15,2,ylsz[4]);        //湿度反馈
  87.         DisplayOneChar(3,2,gysz[0]);
  88.     DisplayOneChar(4,2,gysz[1]);  
  89.     DisplayOneChar(5,2,gysz[2]);
  90.     DisplayOneChar(6,2,gysz[3]);
  91.         DisplayOneChar(7,2,gysz[4]);
  92.         DisplayOneChar(13,2,gysz[5]);        //光照反馈
  93.         DS18done(dssz);
  94.         YL38done(ylsz,50,70);
  95.         GY30done(gysz,50000);
  96.         Delay1ms(10000);               
  97.         SendString("AT+CIPMODE=1\r\n");  
  98.         Delay1ms(1000) ;
  99.         SendString("AT+CIPSTART=\"TCP\",\"tcp.lewei50.com\",9960\r\n");
  100.         Delay1ms(1000);
  101.         SendString("AT+CIPSEND\r\n");
  102.         Delay1ms(1000);
  103.         while(1)
  104.         {                   
  105.                 DS18done(dssz);                               
  106.                 GY30done(gysz,25000);
  107.                 YL38done(ylsz,50,70);
  108.                 DisplayOneChar(3,1,dssz[0]);
  109.                 DisplayOneChar(4,1,dssz[1]);
  110.                 DisplayOneChar(5,1,dssz[2]);
  111.                 DisplayOneChar(6,1,dssz[3]);
  112.                 DisplayOneChar(7,1,dssz[4]);
  113.                 DisplayOneChar(12,1,ylsz[0]);
  114.                 DisplayOneChar(13,1,ylsz[1]);
  115.                 DisplayOneChar(14,1,ylsz[2]);
  116.                 DisplayOneChar(15,1,ylsz[3]);
  117.                 DisplayOneChar(15,2,ylsz[4]);
  118.                 DisplayOneChar(3,2,gysz[0]);
  119.             DisplayOneChar(4,2,gysz[1]);  
  120.             DisplayOneChar(5,2,gysz[2]);
  121.             DisplayOneChar(6,2,gysz[3]);
  122.                 DisplayOneChar(7,2,gysz[4]);
  123.                 DisplayOneChar(13,2,gysz[5]);
  124.                 for(j=0;j<2;j++)                        //检测是否有手动浇水命令发来单片机端,有就判断能否启动YLFB引脚
  125.                 {
  126.                         for(k=0;k<21;k++)
  127.                         {
  128.                                 if(as[j][k]=='r'&& as[j][k-1]=='e' || as[j][k]=='e'&& as[j][k-1]=='t')
  129.                                 {
  130.                                         SendString("{\"method\":\"response\",\"result\":{\"successful\":true,\"message\":\"Done\"}}&^!\r\n");
  131.                                         if(ylsz[0]=='5' || ylsz[0]=='6')                        //检测当前湿度能否开启水泵
  132.                                         {
  133.                                                 YLFB=1;
  134.                                         }       
  135.                                 }
  136.                         }
  137.                 }
  138.                 if(zt==0 && gysz[5]=='T' && ylsz[4]=='F')
  139.                 {
  140.                         FG();
  141.                         zt=1;
  142.                 }
  143.                 if(zt==1 && gysz[5]=='F' && ylsz[4]=='F')
  144.                 {
  145.                         RG();
  146.                         zt=0;
  147.                 }
  148.                 if(timee==1)                                //每隔20秒执行一次
  149.                 {
  150.                         SendString("{\"method\": \"update\",\"gatewayNo\": \"01\",\"userkey\": \"f40a5569285c418c9744d8d627a168ed\"}&^!\r\n");
  151.                         SendString("{\"method\":\"upload\",\"data\":[{\"Name\":\"t1\",\"Value\":\"");
  152.                         SendoString(dssz,5);
  153.                         SendString("\"},{\"Name\":\"x1\",\"Value\":\"");
  154.                         SendoString(gysz,5);
  155.                         SendString("\"},{\"Name\":\"h1\",\"Value\":\"");
  156.                         SendoString(ylsz,4);
  157.                         SendString("\"}]}&^!\r\n");
  158.                         timee=0;
  159.                 }
  160.         }
  161. }

  162. void timer() interrupt 1
  163. {
  164.         static uchar time;
  165.         TH0=0X04;                        //50ms初值
  166.         TL0=0X00;
  167.         time++;
  168.         if(time==250)
  169.         {
  170.                 time=0;
  171.                 timee=1;
  172.                 ssm=~ssm;
  173.         }
  174. }

  175. void ser()interrupt 4 //串口中断
  176. {
  177.         static uchar io;
  178.         static uchar jj;
  179.         TI=0;
  180.         RI=0;
  181.         as[jj][io]=SBUF;
  182.         io++;
  183.         if(io==21)
  184.         {
  185.                 io=0;
  186.                 switch(jj)
  187.                 {
  188.                         case 0:jj=1;break;
  189.                         case 1:jj=0;break;
  190.                 }
  191.         }
  192. }
复制代码
回复

使用道具 举报

ID:70490 发表于 2018-5-21 21:03 | 显示全部楼层
很有意思,加个太阳能电池板就更好了。
回复

使用道具 举报

ID:183659 发表于 2018-5-22 00:21 来自手机 | 显示全部楼层
厉害了楼主
回复

使用道具 举报

ID:183659 发表于 2018-5-22 00:31 来自手机 | 显示全部楼层
怎么没有电路图呢
回复

使用道具 举报

ID:332241 发表于 2018-7-9 16:29 | 显示全部楼层
资源出问题了!有没有搞错
回复

使用道具 举报

ID:379452 发表于 2018-11-9 10:49 | 显示全部楼层
太强大了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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