标题:
单片机自动喷雾设备程序
[打印本页]
作者:
jx_guoli
时间:
2018-10-8 08:56
标题:
单片机自动喷雾设备程序
自动喷雾设备程序
0.png
(10.51 KB, 下载次数: 12)
下载附件
2018-10-8 12:51 上传
单片机源程序如下:
#define __ZHUJI_C
#include <STC12C5A60S2.H>
#include <string.h>
#include <intrins.h>
#include "sys.h"
#include "rom.h"
#include "timer.h"
#include "lcd.h"
#include "zhuji.h"
#include "setup.h"
////煤速(度)
//sbit pSudu = P2^5;
////有煤无煤
//sbit pMeiliu = P2^6;
////湿度高低
//sbit pDamp = p2^7;
////洒水
//sbit JD_Sasui = P1^4;
//系统模式,工作/设置
u8 SysMode;
//工作模式,自动/手动
u8 WorkMode;
//工作状态
u8 WorkState; //SUDU_STOP_MODE,速度启动检测3秒
u8 fMeisu;
u8 pSudu = Off;
u8 MesuDelayStop_N;
//洒水
sbit Key_Return = P1^6;
sbit Key_Setup = P1^7;
sbit Key_Inc = P2^2;
sbit Key_Dec = P2^3;
u8 Key_Scan(void)
{
u32 Key_Delay_N;
if(Key_Return == 0)
{
delay_ms(20);
if(Key_Return == 0)
{
return KEY_RETURN;
}
}
if(Key_Setup == 0)
{
delay_ms(20);
if(Key_Setup == 0)
{
while(Key_Setup == 0)
{
}
return KEY_SETUP;
}
}
if(Key_Inc == 0)
{
delay_ms(20);
if(Key_Inc == 0)
{
Key_Delay_N = Get_SysTime();
while(Key_Inc == 0)
{
if((Get_SysTime() - Key_Delay_N) > (T_CNT_1S/3))
{
return KEY_INC;
}
}
return KEY_INC;
}
}
if(Key_Dec == 0)
{
delay_ms(20);
if(Key_Dec == 0)
{
Key_Delay_N = Get_SysTime();
while(Key_Dec == 0)
{
if((Get_SysTime() - Key_Delay_N) > (T_CNT_1S/3))
{
return KEY_DEC;
}
}
return KEY_DEC;
}
}
return KEY_NULL;
}
void Sasui_Off(void)
{
if(JD_Sasui != 1)
{
JD_Sasui = 1;
JD_Sasui_2 = 1;
lcd_Disp_Sasui();
}
}
void Sasui_On(void)
{
if(JD_Sasui != 0)
{
JD_Sasui = 0;
JD_Sasui_2 = 0;
lcd_Disp_Sasui();
}
}
u32 Sudu_Cnt_Bak;
void zhuji_Judge_Meisu(void)
{
u32 TmpMesuDelayStop_N;
TmpMesuDelayStop_N = MesuDelayStop_N * T_CNT_1S / 10;
if(fMeisu == 0)
{
if((Get_SysTime() - Sudu_Cnt_Bak) > TmpMesuDelayStop_N)
{
pSudu = Off;
}
}
else
{
fMeisu = 0;
pSudu = On;
Sudu_Cnt_Bak = Get_SysTime();
}
}
u8 Meiliu_Bak;
u8 Meiliu_State;
u32 Meiliu_Start_Pre_Cnt;
u32 Saved_Disp_Sec_Meiliu;
void zhuji_Judge_Meiliu(void)
{
u32 Tmp_Disp_Sec;
if(pMeiliu == WUMEI)
{
if(Meiliu_Bak == YOUMEI)
{
Meiliu_State = WUMEI;
Meiliu_Bak = WUMEI;
lcd_Disp_Meiliu(-1);
}
}
else
{
if(Meiliu_Bak == WUMEI)
{
Meiliu_Start_Pre_Cnt = Get_SysTime();
Meiliu_Bak = YOUMEI;
lcd_Disp_Meiliu(0);
lcd_Disp_Meiliu(1);
Saved_Disp_Sec_Meiliu = 0;
}
else
{
if(Meiliu_State == WUMEI)
{
Tmp_Disp_Sec = (Get_SysTime() - Meiliu_Start_Pre_Cnt) / T_CNT_1S;
if((Get_SysTime() - Meiliu_Start_Pre_Cnt) >= (3 * T_CNT_1S))
{
Meiliu_State = YOUMEI;
//lcd_Disp_Meiliu(0);
}
else if(Tmp_Disp_Sec != Saved_Disp_Sec_Meiliu)
{
Saved_Disp_Sec_Meiliu = Tmp_Disp_Sec;
lcd_Disp_Meiliu((u16)Tmp_Disp_Sec + 1);
}
}
}
}
}
u8 WumeiDelay_Bak;
u8 WumeiDelay_State;
u32 WumeiDelay_Start_Pre_Cnt;
u32 Saved_Disp_Sec_WumeiDelay;
void zhuji_WumeiDelay_Delay(void)
{
u32 Tmp_Disp_Sec;
if(JD_Sasui == Off)
{
WumeiDelay_Bak = WUMEI;
WumeiDelay_State = WUMEI;
lcd_Disp_WumeiDelay(-1);
}
else
{
//无煤-有煤
if(Meiliu_State == YOUMEI)
{
if(WumeiDelay_Bak == WUMEI)
{
WumeiDelay_State = YOUMEI;
WumeiDelay_Bak = YOUMEI;
lcd_Disp_WumeiDelay(-1);
}
}
else
{
//有煤-无煤,洒水运行
if(WumeiDelay_Bak == YOUMEI)
{
WumeiDelay_Start_Pre_Cnt = Get_SysTime();
WumeiDelay_Bak = WUMEI;
lcd_Disp_WumeiDelay(0);
lcd_Disp_WumeiDelay(1);
Saved_Disp_Sec_WumeiDelay = 0;
}
else
{
if(WumeiDelay_State == YOUMEI)
{
Tmp_Disp_Sec = (Get_SysTime() - WumeiDelay_Start_Pre_Cnt) / T_CNT_1S;
if((Get_SysTime() - WumeiDelay_Start_Pre_Cnt) >= (30 * T_CNT_1S))
{
WumeiDelay_State = WUMEI;
lcd_Disp_WumeiDelay(0);
}
else if(Tmp_Disp_Sec != Saved_Disp_Sec_WumeiDelay)
{
Saved_Disp_Sec_WumeiDelay = Tmp_Disp_Sec;
lcd_Disp_WumeiDelay((u16)Tmp_Disp_Sec + 1);
}
}
}
}
}
}
u8 Damp_Bak;
u8 Damp_State;
u32 Damp_Start_Pre_Cnt;
u32 Saved_Disp_Sec_Damp;
//3秒才算湿度大,湿度正常立刻开洒水
void zhuji_Judge_Damp(void)
{
u32 Tmp_Disp_Sec;
if(pDamp == DAMP_NORMAL)
{
if(Damp_Bak == DAMP_H)
{
Damp_State = DAMP_NORMAL;
Damp_Bak = DAMP_NORMAL;
lcd_Disp_Damp(-1);
}
}
else
{
if(Damp_Bak == DAMP_NORMAL)
{
Damp_Start_Pre_Cnt = Get_SysTime();
Damp_Bak = DAMP_H;
lcd_Disp_Damp(0);
lcd_Disp_Damp(1);
Saved_Disp_Sec_Damp = 0;
}
else
{
if(Damp_State == DAMP_NORMAL)
{
Tmp_Disp_Sec = (Get_SysTime() - Damp_Start_Pre_Cnt) / T_CNT_1S;
if((Get_SysTime() - Damp_Start_Pre_Cnt) >= (3 * T_CNT_1S))
{
Damp_State = DAMP_H;
//lcd_Disp_Damp(0);
}
else if(Tmp_Disp_Sec != Saved_Disp_Sec_Damp)
{
Saved_Disp_Sec_Damp = Tmp_Disp_Sec;
lcd_Disp_Damp((u16)Tmp_Disp_Sec + 1);
}
}
}
}
}
u32 Sudu_Start_Pre_Cnt;
u32 Sudu_Start_Pre2_Cnt;
u32 Runstate_Pre_Cnt;
u32 RunState_Start_Flag;
u32 Saved_Disp_Sec_Sudustartpre2;
u32 Saved_Disp_Sec_Sudustartpre1;
void zhuji_Auto_Mode_Proc(void)
{
u32 Tmp_Disp_Sec;
//设置按键
if(Key_Scan() == KEY_SETUP)
{
Setup_Init();
return;
}
zhuji_Judge_Meisu();
if(pSudu == Off)
{
if(WorkState != SUDU_STOP_MODE)
{
WorkState = SUDU_STOP_MODE;
lcd_Disp_Sudu();
lcd_Disp_Sudu_Pre1(0);
lcd_Disp_Meiliu(-1);
lcd_Disp_WumeiDelay(-1);
lcd_Disp_Damp(-1);
Sasui_Off();
}
}
switch(WorkState)
{
//停机模式
case SUDU_STOP_MODE:
Sasui_Off();
if(pSudu == On)
{
WorkState = SUDU_START_Pre;
Sudu_Start_Pre_Cnt = Get_SysTime();
lcd_Disp_Sudu();
lcd_Disp_Sudu_Pre1(1);
Saved_Disp_Sec_Sudustartpre1 = 0;
}
break;
//速度启动检测3秒 算有运行 洒水
case SUDU_START_Pre:
//计时到
if((Get_SysTime() - Sudu_Start_Pre_Cnt) >= (3 * T_CNT_1S))
{
WorkState = SUDU_START_Pre2;
Sudu_Start_Pre2_Cnt = Get_SysTime();
Sasui_On();
lcd_Disp_Sudu_Pre2(1);
Saved_Disp_Sec_Sudustartpre2 = 0;
//湿度
Damp_State = DAMP_NORMAL;
Damp_Bak = DAMP_NORMAL;
}
//显示计时
else
{
Tmp_Disp_Sec = (Get_SysTime() - Sudu_Start_Pre_Cnt) / T_CNT_1S;
if(Tmp_Disp_Sec != Saved_Disp_Sec_Sudustartpre1)
{
Saved_Disp_Sec_Sudustartpre1 = Tmp_Disp_Sec;
lcd_Disp_Sudu_Pre1((u16)Tmp_Disp_Sec + 1);
}
}
break;
//速度正常60秒 洒水
case SUDU_START_Pre2:
//计时到
if((Get_SysTime() - Sudu_Start_Pre2_Cnt) >= (60 * T_CNT_1S))//60
{
WorkState = RUN_MODE;
lcd_Disp_Sudu_Pre2(0);
//煤流
Meiliu_State = WUMEI;
Meiliu_Bak = WUMEI;
zhuji_Judge_Meiliu();
// //湿度
// Damp_State = DAMP_NORMAL;
// Damp_Bak = DAMP_NORMAL;
// zhuji_Judge_Damp();
Runstate_Pre_Cnt = Get_SysTime();
RunState_Start_Flag = 1;
}
//显示计时
else
{
//湿度
zhuji_Judge_Damp();
if(Damp_State == DAMP_NORMAL)
{
Sasui_On();
}
else if(Damp_State == DAMP_H)
{
Sasui_Off();
}
Tmp_Disp_Sec = (Get_SysTime() - Sudu_Start_Pre2_Cnt) / T_CNT_1S;
if(Tmp_Disp_Sec != Saved_Disp_Sec_Sudustartpre2)
{
Saved_Disp_Sec_Sudustartpre2 = Tmp_Disp_Sec;
lcd_Disp_Sudu_Pre2(Tmp_Disp_Sec + 1);
}
}
break;
//速度正常 有煤,湿度正常,洒水
case RUN_MODE:
zhuji_Judge_Meiliu();
zhuji_Judge_Damp();
if((Get_SysTime() - Runstate_Pre_Cnt) >= (T_CNT_1S * 3))
{
RunState_Start_Flag = 0;
}
if(RunState_Start_Flag == 1)
{
//3秒内,Meiliu_State= YOUMEI没有测到不用关,
if((pMeiliu == WUMEI) || (Damp_State == DAMP_H))
{
Sasui_Off();
RunState_Start_Flag = 0;
WumeiDelay_State = WUMEI;
WumeiDelay_Bak = WUMEI;
}
}
else
{
zhuji_WumeiDelay_Delay();
if((Damp_State == DAMP_NORMAL) && (Meiliu_State == YOUMEI))
{
Sasui_On();
}
else if((Damp_State == DAMP_H) || (WumeiDelay_State == WUMEI))
{
Sasui_Off();
}
}
break;
default:
break;
}
}
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
AP.rar
(8.47 KB, 下载次数: 7)
2018-10-8 08:55 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2018-10-8 12:51
补全原理图或者详细说明一下电路连接即可获得100+黑币
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1