标题: 请教一个遥控升降控制单片机程序上下需要按两次的问题,谢谢大家 [打印本页]

作者: 深圳芙蓉王    时间: 2023-3-21 16:57
标题: 请教一个遥控升降控制单片机程序上下需要按两次的问题,谢谢大家
大咖好,本人才疏学浅,业余尝试自己写写简单的程序,现在遇到一个困惑:
遥控升降过程中,电机从底部向上走,或者从顶部向下走,会被行程开关影响到停机的问题,我现在把我程序贴出,看能否指点一二,感谢!

单片机源程序如下:
#include<STC15.H>

sbit  A = P3^2;//遥控升
sbit  B1 = P3^3;//遥控停
sbit  C = P3^4;        //遥控降         
sbit  M1 = P1^0;//电机正
sbit  M2 = P1^1;//电机反
sbit  UP = P2^0;//上限位开关
sbit  DN = P2^1;//下限位开关

void main ()
{
                P1M0 = 0XFF;//配置为强输出
                P1M1 = 0X00;//配置为强输出
                P3M0 = 0X00;//配置为高阻输入
               P3M1 = 0XFF;//配置为高阻输入
               P2M0 = 0X00;//配置为准双向口
               P2M1 = 0X00; //配置为准双向口  
              A = 0;         //上电初始置低
              B1 = 0;        //上电初始置低
              C = 0;        //上电初始置低
              M1 = 0;        //上电初始置低
              M2 = 0;        //上电初始置低
        while (1)
         {         
                                if(A==1)        //当按下遥控升且同时上限位开关打开
                      {
                   M1=1;          //电机上升
                    M2=0;         
                         }
                         if(C==1)        //当按下遥控升且同时上限位开关打开
                      {
                    M1=0;          //电机下降
                    M2=1;         
                         }
               
         if(UP==0||DN==0||B1==1)  //当上限开关或者下限开关闭合或者遥控停
              {
                    M1=0;  //电机停
                    M2=0;
                                  }
                       
                while(UP==0) //当上限开关闭合后进入遥控降等待状态
                        {

                        if(C==1)  //遥控降给信号
                       {
                          M1=0;          //电机下降
                          M2=1;}
                           }
                while(DN==0) //当下限开关闭合后进入遥控升等待状态
                        {
                         if(A==1)
                          {
                          M1=1;          //电机上升
                          M2=0;
                          }      
                          
                        }
                        
                          }
}
         

作者: lkc8210    时间: 2023-3-21 21:28
你把按键引脚设为高阻
然后检测高电平(按下)
那引脚有没有加下拉电阻?
作者: glinfei    时间: 2023-3-22 15:04
没看懂你的问题,但你程序确实有问题,主要是if 和 while 判断事项有重合且不能在时序上分开,比如在升的过程,如果被while(UP==0)截获,那就停不下来了。
作者: yzwzfyz    时间: 2023-3-22 16:41
建议:
先画个逻辑流程图,走通流程后,按图写程序。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1