专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

基于51单片机的气泵控制程序

作者:liutaodd   来源:本站原创   点击数:  更新时间:2010年10月09日   【字体:
用stc89c52单片机来控制气泵,带有2种工作模式,端口可自行修改
#include<reg52.h>
sbit a=P1^5;//闪烁灯
sbit b=P1^4;//气泵
sbit c=P3^7;//状态指示灯
sbit ss1=P3^2;//一分钟工作模式
sbit ss4=P3^3;//四分钟工作模式
unsigned int q,w,e,r,y,u,i,n,m,l,h;
csh();//初始化子程序声明
ys();//延时子程序
ys2();//延时子程序2声明
void main()
{
csh();//初始化

while(1)  //死循环 一号 
 {
 if(ss1==0){n=1;}  //判定一分钟工作模式接通启动二号循环
 if(ss1==1){n=0;b=1;}  //判定一分钟工作模式为启动断二号循环
 if(ss4==0){m=1;}  //判定四分钟工作模式接通启动*号循环
 if(ss4==1){m=0;b=1;}  //判定四分钟工作模式未启用断*号循环

/*...........以下为一分钟工作模式...分割线......................*/
  while(n)    //二号循环 一分钟工作模式n被赋值1 开始进入循环体
 {
   if(ss1==0) //判定一分钟工作模式开启 执行语句
   {
    for(l;l>0;l--); //延时判定
    if(ss4==0){n=0;}//判定四分钟模式启用断开二号循环体 退出执行
    for(q;q>0;q--); //延时判定 q
    if(ss4==1)      //判定四分钟模式未开启 向下执行
     {
     if(q==0) //判定q减到0
  {
   b=1;   //断开气泵
   w=1;   //循环体2 w为1
   e=1;   //循环体1 e赋值为1
   }
    while(e)  //三号循环体
   {
   if(P3==0x7b)    //判定指示灯和一分钟启动执行下面
    {
 while(w)          //四号循环体 w为1 初值 
 {
       ys(); //半秒延时 好像不准自己改
  a=0;  //闪烁灯点亮
  r++;//秒数自加1
  if(ss1==1)  //判定一分钟工作模式断开时
  {
        ys2(); //延时判定
  if(ss1==1)     //一分钟工作模式确实断开
  {n=0;e=0;w=0;r=0;b=1;}//判定成立退出所有
  }
    ys(); //半秒延时 好像不准自己改
  a=1; //闪烁灯灭
       
 if(r==60) // 等待秒数加到60执行
 {  
   w=0;   //断开循环体2
   r=60;  //保持秒数等于60
   b=0;   //启动水泵
   h=1;   //五号循环体()
   while(h)   //五号循环体
   if(ss1==1)  //判定一分钟退出向下执行
   {    ys2(); //延时判定
   if(ss1==1)  //经过延时确实判定一分钟工作模式断开
   {
   b=1;    //断开气泵
      n=0;    //退出二号循环体
   e=0;    //退出四号循环体
   r=0;    //一分钟时间归零
   while(1)
   {
   if(m==0);
   {
   h=0;
   break;
   }    
       //退出五号循环体 自身
   
      }
   }} } }  }  }  }/*判定*/ }/*二号循环体*/ }/*一号循环体*/
/*..................以下为四分钟工作模式.......我是分割线...........*/
本程序下载地址:http://www.51hei.com/ziliao/file/qibang.rar
  while(m)    //二号循环 一分钟工作模式n被赋值1 开始进入循环体
 {
   if(ss4==0) //判定四分钟工作模式开启 执行语句
   {
    for(l;l>0;l--); //延时判定
    if(ss1==0){m=0;}//判定一分钟模式启用断开二号循环体 退出执行
    for(q;q>0;q--); //延时判定 q
    if(ss1==1)      //判定一分钟模式未开启 向下执行
     {
     if(q==0) //判定q减到0
  {
   b=1;   //断开气泵
   w=1;   //循环体2 w为1
   e=1;   //循环体1 e赋值为1
   }
    while(e)  //三号循环体
   {
   if(P3==0x77)    //判定指示灯和四分钟启动执行下面
    {
 while(w)          //四号循环体 w为1 初值 
 {
       ys(); //半秒延时 好像不准自己改
  a=0;  //闪烁灯点亮
  r++;//秒数自加1
  if(ss4==1)  //判定四分钟工作模式断开时
  {
        ys2(); //延时判定
  if(ss4==1)     //四分钟工作模式确实断开
  {m=0;e=0;w=0;r=0;b=1;}//判定成立退出所有
  }
     ys(); //半秒延时 好像不准自己改
  a=1; //闪烁灯灭
       
 if(r==240) // 等待秒数加到240执行
 {  
   w=0;   //断开循环体2
   r=240;  //保持秒数等于240
   b=0;   //启动水泵
   h=1;   //五号循环体()
   while(h)   //五号循环体
   if(ss4==1)  //判定四分钟退出向下执行
   {    ys2(); //延时判定
   if(ss4==1)  //经过延时确实判定四分钟工作模式断开
   {
   b=1;    //断开气泵
      n=0;    //退出二号循环体
   e=0;    //退出四号循环体
   r=0;    //四分钟时间归零
   q=60000;

   
   while(1)
   {
   if(n==0);
   {
   h=0; //退出五号循环体 
   break; //退出自身循环
   }    
       
      }
    } }  }  }  }/*判定*/ }/*二号循环体*/ }/*一号循环体*/}}}} 

/*.......................初始化子程序........................................*/
csh()//初始化子程序
{
 a=1;  //闪烁灯不闪烁
 b=1;  //气泵不开启
 c=0;  //状态指示灯点亮
 ss1=1;//一分钟工作模式未启动
 ss4=1;//四分钟工作模式未启动
 r=0;  //一分钟60秒数
 e=0;  //循环体 e赋值为1
 q=60000; //第一延时判定q初始值
 l=60000; //延时用
 h=0;  //五号循环体
}
ys()
{
 for(y=23;y>0;y--)
        for(u=152;u>0;u--)
        for(i=70;i>0;i--); //半秒延时 好像不准自己改
}
ys2()
{
 for(y=167;y>0;y--) 
        for(u=171;u>0;u--) 
        for(i=16 ;i>0;i--);
}

关闭窗口

相关文章