找回密码
 立即注册

QQ登录

只需一步,快速开始

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

水塔自动送水工程 带单片机源码 实物

[复制链接]
跳转到指定楼层
楼主
固态继电器需要接在 接触器 上控制,否则水泵功率太大会烧坏继电器。

电路板的实物图:


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

  2. #define uint unsigned int
  3. #define uchar unsigned char


  4. sbit key3=P2^1;                                         //浇地(一直开)
  5. //sbit key3=P3^6;                                         //浇地(一直开)
  6. sbit key2=P3^7;                                               //自动检测,定时送水
  7. //sbit key2=P3^5;                                               //自动检测,定时送水
  8. sbit zd=P3^2;                                          //        外部中断(水满保护)

  9. sbit jdq=P1^5;                                    //固态继电器
  10. //sbit jdq=P1^0;                                    //固态继电器


  11. sbit key1=P2^5;                                         //LED灯 开关
  12. //sbit key1=P3^1;                                         //LED灯 开关
  13. sbit hm=P0^5;                                         //蜂鸣器
  14. //sbit hm=P2^0;                                         //蜂鸣器
  15. sbit led=P0^7;                                         // LED灯
  16. //sbit led=P1^3;                                         // LED灯
  17. sbit ir=P3^3;                                         //遥控接收        (控制LED灯)


  18. uint num,numt0 ;                                                //全局变量

  19. /*****延时子函数 *****/
  20. void delayms(uint xms)
  21. {
  22.         uint i,j;
  23.         for(i=xms;i>0;i--)
  24.                 for(j=110;j>0;j--);
  25. }


  26. void jias()
  27. {
  28.         if(num==6000)                                //设置浇菜后进中断  延时时间 5 分钟,防止管道还没接回水塔的水路(浇地、水塔二选一接)
  29.         {
  30.                 num=0;
  31.                 jdq=0;
  32.                 hm=1;
  33.                 delayms(200);
  34.                 hm=0;
  35.                 TR0=0;
  36.         }
  37.         if(numt0==3600)                                //设置延时时间 3 分钟
  38.         {
  39.                 numt0=0;
  40.              jdq=0;
  41.                 hm=0;
  42.                 TR0=1;                                        //设置满缸后延时5分钟等待下一次
  43.                    TR1=0;
  44.         
  45.         }
  46. }



  47. void di()
  48. {
  49.         hm=1;
  50.         delayms(1000);
  51.         hm=0;
  52.         delayms(1000);
  53. }  

  54. /*****独立按键检测 *****/

  55. void keyscan()
  56. {
  57.          
  58.                  /***按键控制 电灯亮灭***/
  59.         if(key1==0)                                        //按键“1”按下
  60.         {                                                        //去抖延时
  61.                 delayms(10);                        //再次检测按键“1” 按下
  62.                 if(key1==0)
  63.                 {        
  64.                                 led=~led;                          // LED灯亮灭 (每按一次取反)
  65.                                 while(!key1);                   //等待 开关松开               


  66.                 }
  67.                  
  68.         }

  69.            /***一直开继电器(浇菜使用)***/

  70.                         if(key2==0)                          //检测按键“2”
  71.                          {
  72.                                 delayms(10);
  73.                                 if(key2==0)
  74.                         {               
  75.                                         jdq=1;                         //        开继电器
  76.                                    // delayms(100);                                  解决有时不闭合,轰鸣器响,中断 1 工作,(这里加延时改善---造成继电器不闭合,待分析原因)                        
  77.                                         di();
  78.                                         while(!key2);         //等待 开关松开
  79.                                         delayms(10);
  80.                                         while(!key2);         //等待 开关松开
  81.                                         jdq=0;                  //        关闭继电器  
  82.                                         TR0=1;                                 //        启动定时器 0
  83.                                 }                        
  84.                         }                           

  85.                  
  86.                   
  87.     /***自动检测水位控制上水,开定时器到达时间,默认水满停电***/
  88.                            
  89.                                  
  90.                 if(TR0==0)
  91.                 {
  92.                         if(key3==0)                               //检测按键“3”
  93.                          {
  94.                                 delayms(10);
  95.                                 if(key3==0)
  96.                                 {                        
  97.                                     jdq=1;                                //        开继电器        
  98.                                         TR1=1;                                //        启动定时器 1        
  99.                                         hm=1;                                                                  
  100.             //        while(!key3);        这里如果检测松手,如果没抽水,key2开关一直没松开,就一直等待松手,程序就死在这里
  101.                                 }
  102.                         }
  103.                 }               
  104.         
  105. }
  106. /***** 初始化函数 ******/
  107. void init()
  108. {

  109.         TMOD=0x11;
  110.         TH0=(65536-45872)/256;
  111.         TL0=(65536-45872)%256;

  112.          TH1=(65536-45872)/256;
  113.         TL1=(65536-45872)%256;

  114.         EA=1;                                           //  开总中断
  115.            EX0=1;                                           //  开外中断 0
  116.         ET0=1;                                           //  开定时器 0
  117.         ET1=1;                                           //  开定时器 1
  118.                                                                                           
  119.         TR0=0;
  120.         TR1=0;
  121.         jdq=0;
  122.         hm=0;
  123.         led=0;                                                
  124. }



  125. void main()
  126. {
  127.         init();
  128.         while(1)
  129.         {
  130.         
  131.                 keyscan();
  132.                 jias();

  133.         }
  134. }


  135. /**** 检测水漫过水箱 外部中断子函数 ****/
  136. void exter1() interrupt 0
  137. {
  138.         jdq=0;
  139.         TR0=0;
  140.         TR1=0;
  141.         while(zd==0)
  142.         {
  143.                 hm=1;
  144.                 delayms(1000);
  145.                 hm=0;
  146.                 delayms(90000);
  147.         }
  148. }

  149. ……………………

  150. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
自动送水.2.rar (36.95 KB, 下载次数: 48)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:96682 发表于 2017-6-9 23:54 | 只看该作者
LZ,古董级接触器和电线很多年没见到了,没个完整的电路图人家不好入手啊!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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