📄 water_v1.0.c
字号:
/********************************************************************
太阳能热水器自动上水控制 V1.0
V1.0无阀门到位检测
K1 控制上水阀开阀上水
YS 检测太阳能热水器水满溢水信号
LED 上水开阀时闪烁,开阀完成上水时闪亮(长时间灭,瞬间亮),水满
后关阀闪烁,结束后灭。
Beep完成一个操作后鸣叫
********************************************************************/
#include<reg51.h>
#include<intrins.h>
sbit K1 =P1^1; //上水控制键
sbit YS =P1^0; //水满后溢水信号,开关信号
sbit LED =P0^7; //操作批示灯
sbit KF=P2^6;
sbit GF=P2^7;
sbit Beep =P2^5 ;//蜂鸣器,关阀后继续收到溢水信号5个以上,间歇鸣叫提示
void KaiFa();
void GuanFa();
void delayms(unsigned char ms);
void delayled(unsigned char ll);
void MingJiao();
/*********************************************************/
void main()
{
unsigned int n;
unsigned char led_bz,GFbz,KFbz,n_mj;
LED=1;
KF=1;
GF=1;
led_bz=0;
Beep=0;
GFbz=0; //标志位,设置为不可关阀
KFbz=1; //标志位,设置为可开阀
while(1)
{
if(led_bz) //瞬闪LED
{
n++;
if(n==65500)
{
n=0;
LED=0;
delayms(50);
LED=1;
}
}
if(K1 ==0 & KFbz==1)
{
GFbz=1; //标志位,设置为可关阀
KFbz=0; //标志位,设置为不可开阀
n_mj=0;
KaiFa();
MingJiao();
led_bz=1; //LED标志,打开瞬闪LED
}
if(YS==0 & GFbz==1)
{
KFbz=1; //标志位,设置为可开阀
GFbz=0; //标志位,设置为不可关阀
GuanFa();
MingJiao();
LED=1;
led_bz=0; //LED标志,关闭瞬闪LED
}
if(YS==0 & GFbz==0)
{
n_mj++;
if(n_mj>=5) MingJiao();
}
}
}
/*开阀子程序********************************************/
void KaiFa()
{
KF=1;
GF=0;
delayled(300);
KF=1;
GF=1;
}
/*关阀子程序********************************************/
void GuanFa()
{
KF=0;
GF=1;
delayled(300);
KF=01;
GF=1;
}
/*延时子程序**************************************/
void delayms(unsigned char ms)
{
unsigned char i ;
while(ms--)
{
for(i = 0 ; i < 120 ; i++) ;
}
}
/*开关阀延时并闪烁LED子程序**************************************/
void delayled(unsigned char ms)
{
unsigned int i ;
while(ms--)
{
for(i = 0 ; i < 12000 ; i++) ;
LED=!LED;
}
}
/*鸣叫子程序********************************************/
void MingJiao()
{
Beep=1;
delayms(100);
Beep=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -