找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机自动灌溉系统程序 蓝桥杯国赛题

[复制链接]
跳转到指定楼层
楼主
ID:233449 发表于 2017-9-18 20:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /*
  2.    首页面为    自动灌溉           按下S6 可调节湿度阀值 按下 S5可加  S4为减  再按下s6返回
  3.    按下S7后    为手动灌溉 在按下S7可返回首页面
  4.    在手动页面下    按下S6可控制蜂鸣器的开关      按下S5对继电器开关   按下S4关闭继电器

  5. */
  6. #include "all.h"
  7. sbit bee=P0^6;
  8. sbit jdq=P0^4;
  9. uchar ws=50;           //温度标识位
  10. uchar sign;
  11. uint shidu,door;
  12. void beep1();
  13. void beep2();
  14. void jidianqi1();
  15. void jidianqi2();
  16. void wetset();
  17. void Delay10ms();
  18. void Delay200ms();
  19. void timer0init();
  20. void wetset()
  21. {
  22.   if(s5==0)
  23. {
  24. Delay200ms(); ws=ws+1;
  25. if(ws>99) ws=0;
  26. }
  27. else if(s4==0)
  28. {
  29.    Delay200ms();ws=ws-1;
  30.   if(ws<0) ws=99;
  31. }
  32. }

  33. void jidianqi1()
  34. {
  35.   P2=(P2&0x1f)|0xa0;
  36. jdq=0;
  37. }
  38. void jidianqi2()
  39. {
  40.   P2=(P2&0x1f)|0xa0;
  41. jdq=1;
  42. }

  43. void beep1()
  44. {
  45. P2=(P2&0x1f)|0xa0;
  46.    bee=0;
  47. }
  48. void beep2()
  49. {
  50.   P2=(P2&0x1f)|0xa0;
  51. bee=1;
  52. }
  53. void main()
  54. {
  55. beep1();jidianqi1();
  56.     ds1302init();
  57. pcf8591init();
  58. while(1)
  59. {
  60.    if(s7==0)
  61.    {
  62.   Delay200ms();
  63.     while(1)
  64.     {
  65.       P2=(P2&0x1f)|0x80;
  66.     P0=0xfe;P2&=0x1f;             //点亮L1
  67.     timeshidu();
  68.     timeshidudis();               //时间湿度显示
  69.      if(shidu<ws)
  70.      {
  71.        jidianqi2();
  72.      }
  73.      else
  74.       jidianqi1();
  75.      if(s6==0)
  76.      {
  77.       Delay200ms();
  78.        while(1)
  79.     {
  80.      uint i;
  81.      for(i=0;i<25;i++)
  82.      {
  83.        wenduzhi1();wendusetdis();       //调节温度报警值
  84.       wetset();                     
  85.       if(s6==0&&i==10)
  86.       {
  87.         at24c02write(0x10,ws);            //保存温度报警值
  88.        ws=at24c02read(0x10);
  89.        goto C;                     
  90.       }
  91.      }
  92.      if(s6==0)
  93.      {
  94.         Delay200ms();break;
  95.      }
  96.      for(i=0;i<25;i++)
  97.      {
  98.        wenduzhi2();wendusetdis();
  99.       wetset();
  100.       if(s6==0&&i==10)
  101.       {
  102.         at24c02write(0x10,ws);
  103.        ws=at24c02read(0x10);
  104.        goto C;
  105.       }
  106.       
  107.      }                                       //数码管闪烁显示
  108.      C:if(s6==0)
  109.      {
  110.        Delay200ms();break;
  111.      }
  112.     }
  113.      }
  114.    if(s7==0)
  115.      {
  116.       Delay200ms();
  117.          while(1)
  118.         {
  119.       timer0init();                      //打开定时器  判断S6按下次数
  120.       P2=(P2&0x1f)|0x80;
  121.       P0=0xfd;P2=P2&0x1f;                //点亮L2
  122.       timeshidu();
  123.                   timeshidudis();                     //时间湿度显示
  124.       if(s5==0)
  125.       {
  126.        Delay10ms();
  127.       jidianqi2();                           //开继电器  灌溉
  128.       if(shidu<ws)                             //判断湿度
  129.       {
  130.        beep2();                             //报警
  131.       }
  132.       else beep1();          //关闭蜂鸣器
  133.       }
  134.       if(s4==0)
  135.        {
  136.         Delay10ms();
  137.         beep1();
  138.            jidianqi1();                 //停止灌溉
  139.         
  140.       }
  141.         TR0=0;
  142.        if(s7==0)
  143.        {
  144.         Delay200ms();break;
  145.        }
  146.         }
  147.         }
  148.          }
  149.    }
  150.   }
  151.    
  152. }


  153. void timer0init()
  154. {
  155.    TMOD=0x01;
  156.   TH0=(65536-2000)/256;
  157.   TL0=(65536-2000)%256;
  158.   ET0=1;
  159.   TR0=1;
  160.   EA=1;
  161.   if(s6==0)
  162.   {
  163.    Delay200ms();
  164.     door=1;beep2();
  165.    if(s6==0)
  166.    {
  167.     Delay200ms();
  168.     door=2;beep1();
  169.    }
  170.   }
  171. }

  172. void timer0() interrupt 1
  173. {
  174.   TH0=(65536-2000)/256;
  175.   TL0=(65536-2000)%256;   
  176. }

  177. void Delay10ms()  //@11.0592MHz
  178. {
  179. unsigned char i, j;
  180. i = 108;
  181. j = 145;
  182. do
  183. {
  184.   while (--j);
  185. } while (--i);
  186. }
  187. void Delay200ms()  //@11.0592MHz
  188. {
  189. unsigned char i, j, k;
  190. _nop_();
  191. _nop_();
  192. i = 9;
  193. j = 104;
  194. k = 139;
  195. do
  196. {
  197.   do
  198.   {
  199.    while (--k);
  200.   } while (--j);
  201. } while (--i);
  202. }

复制代码


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

使用道具 举报

沙发
ID:462781 发表于 2019-5-7 15:15 | 只看该作者
原理图是什么
回复

使用道具 举报

板凳
ID:510681 发表于 2019-11-4 20:15 | 只看该作者
666666666666

基于单片机的温室自动灌溉系统设计_肖丽.pdf

2 MB, 下载次数: 64, 下载积分: 黑币 -5

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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