28BYJ48为什么不根据脉冲数转相应圈数 而是一直在转?

2019-07-15 15:31发布

本帖最后由 todd1345 于 2015-11-27 10:14 编辑

光控窗帘设计 28BYJ48为什么不根据脉冲数转相应圈数 而是一直在转?设置N值小一点就转动几十度,大一点就一直转了,为什么? 谢谢!
uchar code FFW[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
uchar code REV[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
int a;
int n;
char m_flag=1;          //窗帘状态 0 关 1开
char mm;
sbit MAN_ATUO=P3^5;
sbit open_shart=P3^6;
uint m;
int   MANATUO()                                 //为0时 自动 为  1 时手动
        {
                if(MAN_ATUO==0)
                {          { a=!a; }
                        while(!MAN_ATUO);
                }
         return a;
        }
        
int openshart()                           //为 0时 关闭 为1时 打开
        {
                if(open_shart==0&&MANATUO()==1)
                {         {  n=!n; }
                          while(!open_shart);                        
                }
           return n;
        }

void DelayMS(uint ms)
{
  uchar i;
while(ms--)
{
   for(i=0;i<120;i++);
}   }
void SETP_MOTOR_FFW(uchar n)
{
  uchar i,j;
for(i=0;i<5*n;i++)
{
   for(j=0;j<8;j++)
  {
   P1 = FFW[j];
   DelayMS(2);
  }}}
void SETP_MOTOR_REV(uchar n)
{
  uchar i,j;
for(i=0;i<5*n;i++)
{
   for(j=0;j<8;j++)
  {
   P1 = REV[j];
   DelayMS(2);
  }}}
//********************************************************************************************
if(MANATUO()==1)                          //          手动
   {
                   if(openshart()==1 && m_flag==0)                   //开启信号。并且 窗子是关闭的 则打开。
                {
             m_flag=1;
         SETP_MOTOR_FFW(N);

                    }
                        else if (openshart()==0&&m_flag==1)
                        {
                              m_flag=0;
                SETP_MOTOR_REV(N);
                 
                        }        
   }

/*************************************************************************************/  
if(MANATUO()==1)                          //          手动
   {
                   if(openshart()==1 && m_flag==0)                   //开启信号。并且 窗子是关闭的 则打开。
                {
             m_flag=1;
         SETP_MOTOR_FFW(N);
                    }
                        else if (openshart()==0&&m_flag==1)
                        {
                              m_flag=0;
                SETP_MOTOR_REV(N);
                        }         }   


   if(MANATUO()==0)                                                   //自动
   {         
   if(m_flag==0&&m_flag==1)
         {        
         }         
   if(signal>=100&&m_flag==1)                  //自动关闭
          {        m_flag=0;
        SETP_MOTOR_REV(N);
      }
   else        if(signal<=25&&m_flag==0)                  //自动打开窗帘
          {        m_flag=1;
        SETP_MOTOR_FFW(N);
      }

    }

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。