微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机控制水泵求源代码

51单片机控制水泵求源代码

时间:10-02 整理:3721RD 点击:
麻烦各位大侠,有时间的帮写段源代码将感激不尽:
因本人从事多年强电方面的设计,最近刚接触51单片机,为入门级别,想自己写一个先前自己用接触器、热继电器及中间继电器等组成的一个控制电路;但写了好多次,就是达不到控制目的及要求,恳请前辈们指点一二:
具体情况如为,2台水泵互为主备,可手动切换运行,单台过载可自动切换;2台同时过载停机报故障,具备水流检测保护功能。
先前写的源代码如下:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint tt;
uchar temp;
sbit SW=P2^0;//水位检测
sbit SL=P2^1;//水流检测
sbit ZH=P2^2;//A B水泵运转检测
sbit BJ=P2^3;//报警输出
sbit GZA=P2^4;//水泵A过载
sbit GZB=P2^5;//水泵B过载
sbit QD=P2^6;//机组启动信号触角
sbit BA=P1^0;//水泵A
sbit BB=P1^1;//水泵B
void QH();//AB泵检测
void CSH();//初始化程序
void ys(uint z)//带参延时子函数
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void main()
{
CSH();//初始化函数
while(QD==0)//检测是否有启动信号
  {
   if(SW==0)//开机检测水位,若水位正常,执行if语句内容
    {
     QH();//开机检测AB泵及过载
//     ys(20000);
     if(tt==100)//水泵运行10S后检测水流
      {
       tt=0;
       if(SL==0)//水流检测,若有水流则进入if语句
        {
         QH();//按检测状态进行运行
        }
       while(SL==1)//若无水流,则AB泵停机及报警打开
        {
         BA=1;//水泵A关闭
         BB=1;//水泵B关闭
         BJ=0;//蜂鸣器打开
        }
      }
    }
   else//开机检测水位,若水位异常,执行else语句内容
    {
     CSH();//返回初始化
     BJ=0;//蜂鸣器打开
    }
  }
}
void QH()//AB泵检测
{
temp=GZA|GZB;//检测水泵A与水泵B是否同时过载
if(ZH==0)//当ZH等于0时,进入以下程序
  {
   if(temp==0)//AB泵同时过载检测
    {
     ys(10);
     if(temp==0)
      {
       BA=1;//水泵A关闭
       BB=1;//水泵B关闭
       BJ=0;//蜂鸣器打开
      }
    }
   else if(GZA==0)//水泵A过载检测
    {
     BA=1;//水泵A关闭
     BB=0;//水泵B打开
     BJ=0;//蜂鸣器打开
    }
   else if(GZB==0)//水泵B过载检测
    {
     BA=0;//水泵A打开
     BB=1;//水泵B关闭
     BJ=0;//蜂鸣器打开
    }
   else//以上若均不能满足条件,则说明无过载故障,则执行以下命令;
    {
     BA=0;//水泵A打开
     BB=1;//水泵B关闭
     BJ=1;//蜂鸣器关闭
    }
  }
else//当ZH≠0时则进入以下程序
  {
   if(temp==0)//AB泵同时过载检测
    {
     BA=1;//水泵A关闭
     BB=1;//水泵B关闭
     BJ=0;//蜂鸣器打开
    }
   else if(GZB==0)//水泵B过载检测
    {
     ys(10);
      if(GZB==0)
       {
        BA=0;//水泵A打开
        BB=1;//水泵B关闭
        BJ=0;//蜂鸣器打开
       }
    }
   else if(GZA==0)//水泵A过载检测
    {
     BA=1;//水泵A关闭
     BB=0;//水泵B打开
     BJ=0;//蜂鸣器打开
    }
   else//以上若均不能满足条件,则说明无过载故障,则执行以下命令;
    {
     BA=1;//水泵A关闭
     BB=0;//水泵B打开
     BJ=1;//蜂鸣器关闭
    }
  }
}
void DS0()interrupt 1//定时器0中断程序,
//特别注意:中断程序不需要声明哦
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
}
void CSH()//初始化程序
{
BA=1;
BB=1;
// BJ=1;
TMOD=0X01;//设置定时0为工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1; //开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
}

有时间看看咯

看来大虾们真的很忙!

弱势的我没人理啊!

跪求指点!

不错的资料,值得收藏

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top