找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机自动喷雾设备程序

[复制链接]
跳转到指定楼层
楼主
自动喷雾设备程序


单片机源程序如下:
  1. #define __ZHUJI_C
  2. #include <STC12C5A60S2.H>
  3. #include <string.h>
  4. #include <intrins.h>
  5. #include "sys.h"
  6. #include "rom.h"
  7. #include "timer.h"
  8. #include "lcd.h"
  9. #include "zhuji.h"
  10. #include "setup.h"

  11. ////煤速(度)
  12. //sbit pSudu = P2^5;
  13. ////有煤无煤
  14. //sbit pMeiliu = P2^6;
  15. ////湿度高低
  16. //sbit pDamp = p2^7;
  17. ////洒水
  18. //sbit JD_Sasui   =  P1^4;

  19. //系统模式,工作/设置
  20. u8 SysMode;
  21. //工作模式,自动/手动
  22. u8 WorkMode;
  23. //工作状态
  24. u8 WorkState; //SUDU_STOP_MODE,速度启动检测3秒

  25. u8 fMeisu;
  26. u8 pSudu = Off;
  27. u8 MesuDelayStop_N;


  28. //洒水
  29. sbit Key_Return  =  P1^6;
  30. sbit Key_Setup   =  P1^7;
  31. sbit Key_Inc     =  P2^2;
  32. sbit Key_Dec     =  P2^3;

  33. u8 Key_Scan(void)
  34. {
  35.     u32 Key_Delay_N;

  36.     if(Key_Return == 0)
  37.     {
  38.         delay_ms(20);
  39.         if(Key_Return == 0)
  40.         {
  41.             return KEY_RETURN;
  42.         }
  43.     }
  44.     if(Key_Setup == 0)
  45.     {
  46.         delay_ms(20);

  47.         if(Key_Setup == 0)
  48.         {
  49.             while(Key_Setup == 0)
  50.             {
  51.             }
  52.             return KEY_SETUP;
  53.         }
  54.     }
  55.     if(Key_Inc == 0)
  56.     {
  57.         delay_ms(20);
  58.         if(Key_Inc == 0)
  59.         {
  60.             Key_Delay_N = Get_SysTime();
  61.             while(Key_Inc == 0)
  62.             {
  63.                 if((Get_SysTime() - Key_Delay_N) > (T_CNT_1S/3))
  64.                 {
  65.                     return KEY_INC;
  66.                 }
  67.             }
  68.             return KEY_INC;
  69.         }
  70.     }
  71.     if(Key_Dec == 0)
  72.     {
  73.         delay_ms(20);
  74.         if(Key_Dec == 0)
  75.         {
  76.             Key_Delay_N = Get_SysTime();
  77.             while(Key_Dec == 0)
  78.             {
  79.                 if((Get_SysTime() - Key_Delay_N) > (T_CNT_1S/3))
  80.                 {
  81.                     return KEY_DEC;
  82.                 }
  83.             }
  84.             return KEY_DEC;
  85.         }
  86.     }
  87.     return KEY_NULL;
  88. }

  89. void Sasui_Off(void)
  90. {
  91.     if(JD_Sasui != 1)
  92.     {
  93.         JD_Sasui = 1;
  94.         JD_Sasui_2 = 1;
  95.         lcd_Disp_Sasui();
  96.     }
  97. }

  98. void Sasui_On(void)
  99. {
  100.     if(JD_Sasui != 0)
  101.     {
  102.         JD_Sasui = 0;
  103.         JD_Sasui_2 = 0;
  104.         lcd_Disp_Sasui();
  105.     }
  106. }


  107. u32 Sudu_Cnt_Bak;
  108. void zhuji_Judge_Meisu(void)
  109. {
  110.     u32 TmpMesuDelayStop_N;

  111.     TmpMesuDelayStop_N = MesuDelayStop_N * T_CNT_1S / 10;

  112.     if(fMeisu == 0)
  113.     {
  114.         if((Get_SysTime() - Sudu_Cnt_Bak) > TmpMesuDelayStop_N)
  115.         {
  116.             pSudu = Off;
  117.         }
  118.     }
  119.     else
  120.     {
  121.         fMeisu = 0;
  122.         pSudu = On;
  123.         Sudu_Cnt_Bak = Get_SysTime();
  124.     }
  125. }

  126. u8 Meiliu_Bak;
  127. u8 Meiliu_State;
  128. u32 Meiliu_Start_Pre_Cnt;
  129.     u32 Saved_Disp_Sec_Meiliu;
  130. void zhuji_Judge_Meiliu(void)
  131. {
  132.     u32 Tmp_Disp_Sec;

  133.     if(pMeiliu == WUMEI)
  134.     {
  135.         if(Meiliu_Bak == YOUMEI)
  136.         {
  137.             Meiliu_State = WUMEI;
  138.             Meiliu_Bak = WUMEI;
  139.             lcd_Disp_Meiliu(-1);
  140.         }
  141.     }
  142.     else
  143.     {
  144.         if(Meiliu_Bak == WUMEI)
  145.         {
  146.             Meiliu_Start_Pre_Cnt = Get_SysTime();
  147.             Meiliu_Bak = YOUMEI;
  148.             lcd_Disp_Meiliu(0);
  149.             lcd_Disp_Meiliu(1);
  150.             Saved_Disp_Sec_Meiliu = 0;
  151.         }
  152.         else
  153.         {
  154.             if(Meiliu_State == WUMEI)
  155.             {
  156.                 Tmp_Disp_Sec = (Get_SysTime() - Meiliu_Start_Pre_Cnt) / T_CNT_1S;
  157.                 if((Get_SysTime() - Meiliu_Start_Pre_Cnt) >= (3 * T_CNT_1S))
  158.                 {
  159.                     Meiliu_State = YOUMEI;
  160.                     //lcd_Disp_Meiliu(0);
  161.                 }
  162.                 else if(Tmp_Disp_Sec != Saved_Disp_Sec_Meiliu)
  163.                 {
  164.                     Saved_Disp_Sec_Meiliu = Tmp_Disp_Sec;
  165.                     lcd_Disp_Meiliu((u16)Tmp_Disp_Sec + 1);
  166.                 }
  167.             }
  168.         }
  169.     }
  170. }

  171. u8 WumeiDelay_Bak;
  172. u8 WumeiDelay_State;
  173. u32 WumeiDelay_Start_Pre_Cnt;
  174.     u32 Saved_Disp_Sec_WumeiDelay;
  175. void zhuji_WumeiDelay_Delay(void)
  176. {
  177.     u32 Tmp_Disp_Sec;

  178.     if(JD_Sasui == Off)
  179.     {
  180.         WumeiDelay_Bak = WUMEI;
  181.         WumeiDelay_State = WUMEI;
  182.         lcd_Disp_WumeiDelay(-1);
  183.     }
  184.     else
  185.     {
  186.         //无煤-有煤
  187.         if(Meiliu_State == YOUMEI)
  188.         {
  189.             if(WumeiDelay_Bak == WUMEI)
  190.             {
  191.                 WumeiDelay_State = YOUMEI;
  192.                 WumeiDelay_Bak = YOUMEI;
  193.                 lcd_Disp_WumeiDelay(-1);
  194.             }
  195.         }
  196.         else
  197.         {
  198.             //有煤-无煤,洒水运行
  199.             if(WumeiDelay_Bak == YOUMEI)
  200.             {
  201.                 WumeiDelay_Start_Pre_Cnt = Get_SysTime();
  202.                 WumeiDelay_Bak = WUMEI;
  203.                 lcd_Disp_WumeiDelay(0);
  204.                 lcd_Disp_WumeiDelay(1);
  205.                 Saved_Disp_Sec_WumeiDelay = 0;
  206.             }
  207.             else
  208.             {
  209.                 if(WumeiDelay_State == YOUMEI)
  210.                 {
  211.                     Tmp_Disp_Sec = (Get_SysTime() - WumeiDelay_Start_Pre_Cnt) / T_CNT_1S;
  212.                     if((Get_SysTime() - WumeiDelay_Start_Pre_Cnt) >= (30 * T_CNT_1S))
  213.                     {
  214.                         WumeiDelay_State = WUMEI;
  215.                         lcd_Disp_WumeiDelay(0);
  216.                     }
  217.                     else if(Tmp_Disp_Sec != Saved_Disp_Sec_WumeiDelay)
  218.                     {
  219.                         Saved_Disp_Sec_WumeiDelay = Tmp_Disp_Sec;
  220.                         lcd_Disp_WumeiDelay((u16)Tmp_Disp_Sec + 1);
  221.                     }
  222.                 }
  223.             }
  224.         }
  225.     }
  226. }


  227. u8 Damp_Bak;
  228. u8 Damp_State;
  229. u32 Damp_Start_Pre_Cnt;
  230.     u32 Saved_Disp_Sec_Damp;
  231. //3秒才算湿度大,湿度正常立刻开洒水
  232. void zhuji_Judge_Damp(void)
  233. {
  234.     u32 Tmp_Disp_Sec;

  235.     if(pDamp == DAMP_NORMAL)
  236.     {
  237.         if(Damp_Bak == DAMP_H)
  238.         {
  239.             Damp_State = DAMP_NORMAL;
  240.             Damp_Bak = DAMP_NORMAL;
  241.             lcd_Disp_Damp(-1);
  242.         }
  243.     }
  244.     else
  245.     {
  246.         if(Damp_Bak == DAMP_NORMAL)
  247.         {
  248.             Damp_Start_Pre_Cnt = Get_SysTime();
  249.             Damp_Bak = DAMP_H;
  250.             lcd_Disp_Damp(0);
  251.             lcd_Disp_Damp(1);
  252.             Saved_Disp_Sec_Damp = 0;
  253.         }
  254.         else
  255.         {
  256.             if(Damp_State == DAMP_NORMAL)
  257.             {
  258.                 Tmp_Disp_Sec = (Get_SysTime() - Damp_Start_Pre_Cnt) / T_CNT_1S;
  259.                 if((Get_SysTime() - Damp_Start_Pre_Cnt) >= (3 * T_CNT_1S))
  260.                 {
  261.                     Damp_State = DAMP_H;
  262.                     //lcd_Disp_Damp(0);
  263.                 }
  264.                 else if(Tmp_Disp_Sec != Saved_Disp_Sec_Damp)
  265.                 {
  266.                     Saved_Disp_Sec_Damp = Tmp_Disp_Sec;
  267.                     lcd_Disp_Damp((u16)Tmp_Disp_Sec + 1);
  268.                 }
  269.             }
  270.         }
  271.     }
  272. }

  273. u32 Sudu_Start_Pre_Cnt;
  274. u32 Sudu_Start_Pre2_Cnt;
  275. u32 Runstate_Pre_Cnt;
  276. u32 RunState_Start_Flag;
  277.     u32 Saved_Disp_Sec_Sudustartpre2;
  278.     u32 Saved_Disp_Sec_Sudustartpre1;
  279. void zhuji_Auto_Mode_Proc(void)
  280. {
  281.     u32 Tmp_Disp_Sec;

  282.         //设置按键
  283.         if(Key_Scan() == KEY_SETUP)
  284.         {
  285.             Setup_Init();
  286.             return;
  287.         }
  288.         zhuji_Judge_Meisu();
  289.         if(pSudu == Off)
  290.         {
  291.             if(WorkState != SUDU_STOP_MODE)
  292.             {
  293.                 WorkState = SUDU_STOP_MODE;
  294.                 lcd_Disp_Sudu();
  295.                 lcd_Disp_Sudu_Pre1(0);
  296.                 lcd_Disp_Meiliu(-1);
  297.                 lcd_Disp_WumeiDelay(-1);
  298.                 lcd_Disp_Damp(-1);
  299.                 Sasui_Off();
  300.             }
  301.         }
  302.         switch(WorkState)
  303.         {
  304.             //停机模式
  305.             case SUDU_STOP_MODE:
  306.                 Sasui_Off();
  307.                 if(pSudu == On)
  308.                 {
  309.                     WorkState = SUDU_START_Pre;
  310.                     Sudu_Start_Pre_Cnt = Get_SysTime();
  311.                     lcd_Disp_Sudu();
  312.                     lcd_Disp_Sudu_Pre1(1);
  313.                     Saved_Disp_Sec_Sudustartpre1 = 0;
  314.                 }
  315.                 break;

  316.             //速度启动检测3秒 算有运行  洒水
  317.             case SUDU_START_Pre:
  318.                 //计时到
  319.                 if((Get_SysTime() - Sudu_Start_Pre_Cnt) >= (3 * T_CNT_1S))
  320.                 {
  321.                     WorkState = SUDU_START_Pre2;
  322.                     Sudu_Start_Pre2_Cnt = Get_SysTime();
  323.                     Sasui_On();
  324.                     lcd_Disp_Sudu_Pre2(1);
  325.                     Saved_Disp_Sec_Sudustartpre2 = 0;

  326.                     //湿度
  327.                     Damp_State = DAMP_NORMAL;
  328.                     Damp_Bak = DAMP_NORMAL;
  329.                 }
  330.                 //显示计时
  331.                 else
  332.                 {
  333.                     Tmp_Disp_Sec = (Get_SysTime() - Sudu_Start_Pre_Cnt) / T_CNT_1S;
  334.                     if(Tmp_Disp_Sec != Saved_Disp_Sec_Sudustartpre1)
  335.                     {
  336.                         Saved_Disp_Sec_Sudustartpre1 = Tmp_Disp_Sec;
  337.                         lcd_Disp_Sudu_Pre1((u16)Tmp_Disp_Sec + 1);
  338.                     }
  339.                 }
  340.                 break;

  341.             //速度正常60秒  洒水
  342.             case SUDU_START_Pre2:
  343.                 //计时到
  344.                 if((Get_SysTime() - Sudu_Start_Pre2_Cnt) >= (60 * T_CNT_1S))//60
  345.                 {
  346.                     WorkState = RUN_MODE;
  347.                     lcd_Disp_Sudu_Pre2(0);

  348.                     //煤流
  349.                     Meiliu_State = WUMEI;
  350.                     Meiliu_Bak = WUMEI;
  351.                     zhuji_Judge_Meiliu();
  352. //                    //湿度
  353. //                    Damp_State = DAMP_NORMAL;
  354. //                    Damp_Bak = DAMP_NORMAL;
  355. //                    zhuji_Judge_Damp();

  356.                     Runstate_Pre_Cnt = Get_SysTime();
  357.                     RunState_Start_Flag = 1;
  358.                 }
  359.                 //显示计时
  360.                 else
  361.                 {
  362.                     //湿度
  363.                     zhuji_Judge_Damp();
  364.                     if(Damp_State == DAMP_NORMAL)
  365.                     {
  366.                         Sasui_On();
  367.                     }
  368.                     else if(Damp_State == DAMP_H)
  369.                     {
  370.                         Sasui_Off();
  371.                     }


  372.                     Tmp_Disp_Sec = (Get_SysTime() - Sudu_Start_Pre2_Cnt) / T_CNT_1S;
  373.                     if(Tmp_Disp_Sec != Saved_Disp_Sec_Sudustartpre2)
  374.                     {
  375.                         Saved_Disp_Sec_Sudustartpre2 = Tmp_Disp_Sec;
  376.                         lcd_Disp_Sudu_Pre2(Tmp_Disp_Sec + 1);
  377.                     }
  378.                 }
  379.                 break;

  380.             //速度正常 有煤,湿度正常,洒水
  381.             case RUN_MODE:
  382.                 zhuji_Judge_Meiliu();
  383.                 zhuji_Judge_Damp();
  384.                 if((Get_SysTime() - Runstate_Pre_Cnt) >= (T_CNT_1S * 3))
  385.                 {
  386.                     RunState_Start_Flag = 0;
  387.                 }
  388.                 if(RunState_Start_Flag == 1)
  389.                 {
  390.                     //3秒内,Meiliu_State= YOUMEI没有测到不用关,
  391.                     if((pMeiliu == WUMEI) || (Damp_State == DAMP_H))
  392.                     {
  393.                         Sasui_Off();
  394.                         RunState_Start_Flag = 0;
  395.                         WumeiDelay_State = WUMEI;
  396.                         WumeiDelay_Bak = WUMEI;
  397.                     }
  398.                 }
  399.                 else
  400.                 {
  401.                     zhuji_WumeiDelay_Delay();
  402.                     if((Damp_State == DAMP_NORMAL)  && (Meiliu_State == YOUMEI))
  403.                     {
  404.                         Sasui_On();
  405.                     }
  406.                     else if((Damp_State == DAMP_H) || (WumeiDelay_State == WUMEI))
  407.                     {
  408.                         Sasui_Off();
  409.                     }
  410.                 }
  411.                 break;

  412.             default:
  413.                 break;
  414.         }
  415. }

  416. ……………………

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

所有资料51hei提供下载:
AP.rar (8.47 KB, 下载次数: 7)


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

使用道具 举报

沙发
ID:1 发表于 2018-10-8 12:51 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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