这个小程序哪里有问题吗

2019-07-15 09:52发布

程序如下,不大,但是就是调试不好,帮忙看下,谢谢
//控制程序,控制时序说明:按下电源键,系统供电,按下供膜,夹持电磁铁得电,延时500ms后电机启动,膜送至指定位置
//后传感器1发出信号,固定电磁铁吸合,电机自锁,夹持松开,500ms延时后电机反转,反转回指定位置时传感器2发出信号,
//电机停转,蜂鸣器提示待装入微孔板;微孔板装入后按下热封键,热封机启动热封,定时6s后固定电磁铁失电松开,热封结束
//后取出微孔板,此为一个工作循环。
#include<reg52.h>
#define uint  unsigned int
#define uchar unsigned char
sbit supply= P3^7;
sbit sealer= P3^6;
sbit power= P3^5;
sbit in1= P0^0;
sbit in2= P0^1;
sbit in3= P0^2;
sbit in4= P0^3;
sbit jiachi= P1^4;
sbit guding= P2^7;
sbit refeng= P2^6;
sbit chuangan1= P3^3;
sbit chuangan2= P3^2;
sbit buzzer= P1^5;
uchar code zz[]={0x03,0x06,0x0C,0x09};                        //步进电机正转
uchar code fz[]={0x09,0x0A,0x06,0x03};                    //步进电机反转



void delay(uint ms)        //毫秒延时函数
{
        uint t;
        while(ms--)
                for(t=0;t<120;t++);
}

void motor_zz()                                               //步进电机正转
  {
     while(1)
            {
                uint i;
                for(i=0;i<4;i++)
                    {
                        P0=zz[i];
                        delay(5);
                    }
                }
           
  }


void motor_fz()                                       //步进电机反转
  {
      while(1)
            {
                uint j;
                for(j=0;j<4;j++)
                    {
                        P0=fz[j];
                        delay(5);
                    }
                }
  }






void main()
{
        while(1)                    //工作循环
            {

                  supply=1;                            //清零操作
          sealer=1;
          power= 1;
          jiachi= 1;
          buzzer= 1;
          guding=1;
          chuangan1= 1;
          chuangan2=1;
          refeng= 1;


              if(supply==0)                   //供膜检查
              delay(10);                   //按键防抖
              if(supply==0)
                {         
                      jiachi=0;
                 delay(20);                  
                         while(chuangan1==1)
                              {
                                    motor_zz();
                                         if(chuangan1==0)
                                         break;
                                }
                     guding=0;
                         delay(20);
                         jiachi=1;
                         while(chuangan2==1)
                              {
                                          motor_fz();
                                         if(chuangan2==0)
                                         break;
                                }
                          buzzer=0;
                          delay(20);
                          buzzer=1;

                         }
             if(sealer==0)                  //热封检查
             delay(20);
             if(sealer==0)
             {         
                      refeng=0;
                
                 }
       
                }
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
人中狼
1楼-- · 2019-07-15 16:02
 精彩回答 2  元偷偷看……
chu23000
2楼-- · 2019-07-15 16:41
正如楼上所说,你在电机转动的过程中,使用的是while(1)这种方式写的,不过最好在里面加一个超时机制,这样增加程序的稳定性,另外,你的流程里每一步对电机都有控制,而你程序里, 类似 if(chuangan1==0)之后,并没有对电机进行操作,这边首先就不对了,先把这部分改了,后续再调
amos236
3楼-- · 2019-07-15 19:19
统一回复了,哈哈,已调试成功,谢谢

一周热门 更多>