找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2747|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

這個(gè)程序單獨(dú)循跡好使 單獨(dú)避障好使 現(xiàn)在弄在一起就不好使 這是問(wèn)為什么

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:160768 發(fā)表于 2017-2-3 22:28 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include <reg52.h>               
#define uint unsigned int
#define  uchar unsigned char
#define  P0_State P0
sbit  leftmotor_in1=P2^7;
sbit  leftmotor_in2=P2^6;
sbit  rightmotor_in3=P2^5;
sbit        rightmotor_in4=P2^4;
sbit    Trig=P1^1;
sbit    Echo=P1^2;
sbit en_1=P2^3;
sbit en_2=P2^2;
uint S,time,i,j,pwm1,pwm2;
void stop();
void straight();
void turn_left();
void turn_right();
void Sensor_5_Car_State_Adjustment();
void delay20us(unsigned char t)
{   
        while(--t);
}
/*******延時(shí)函數(shù)——延時(shí)50ms*******/
void delay(uint xms)                //@11.0592MHz
{
       
           unsigned char m, n;
      for(m=xms;m>0;m--)
              for(n=110;n>0;n--);
                               
}

void csb()
        {
                Trig=1;
                delay20us(20);
                Trig=0;
                while(!Echo);               
            TR0=1;       
          while(Echo);               
           TR0=0;                               
          time=TH0*256+TL0;
                S=(time*1.7)/100;
                         
             TH0=0;
         TL0=0;
         
        }
void T0_time()interrupt 1
{

}
void T1_time()interrupt 3
{  
        TR1=0;
        TH1=(65536-100)/256;
        TL1=(65536-100)%256;
        i++;
        j++;
          if(i<pwm1)
                                                {
                                                         en_1=1;
                                                }
            else
                         en_1=0;
           if(j<pwm2)
                                                {
                                                                 en_2=1;
                                                }
      else
                        en_2=0;
                     
        if(i>=100)
                                {
                                         i=0;
                                }
        if(j>=100)
                                {
                                                j=0;
                                }
                TR1=1;
}
void main()

  {  
   TMOD=0x10;
   TH1=(65536-100)/256;
         TL1=(65536-100)%256;
         TH0=0;
         TL0=0;     
                ET1=1;
    ET0=1;
    TR1=1;               
    TR0=0;                  
                EA=1;                          

        while(1)
        {
    csb();
                 if(S>10)
                 {
                         straight();
            
                 }
                 else if(S<=10)
                 {
                stop();
                         
                 }
                 
}


}  
void straight()      //直走函數(shù)
{

        leftmotor_in1=0;
        leftmotor_in2=1;
  rightmotor_in3=0;
        rightmotor_in4=1;
}
void turn_left()    //左轉(zhuǎn)函數(shù)
{

        leftmotor_in1=1;
        leftmotor_in2=0;
  rightmotor_in3=0;
        rightmotor_in4=1;
}
void turn_right()   //右轉(zhuǎn)函數(shù)
{

        leftmotor_in1=0;
        leftmotor_in2=1;
  rightmotor_in3=1;
        rightmotor_in4=0;
}

void stop()        //停止函數(shù)
{
  leftmotor_in1=0;
        leftmotor_in2=0;
  rightmotor_in3=0;
        rightmotor_in4=0;
}
void Sensor_5_Car_State_Adjustment()
{     
              P0_State=P0_State&0x00;
                       switch(P0_State)
                 {
                  
                                                case 0x1b:  pwm1=40;
                                                                                                pwm2=40;                         
                                         straight();     //P0.0|P0.1|P0.2|P0.3|P0.4為11011說(shuō)明小車正常尋跡下一步小車直行
                                                                                                break;
                                                case 0x1d:                       //P0.0|P0.1|P0.2|P0.3|P0.4為11101說(shuō)明小車左偏下一步小車右拐                         
                                                    
                                   pwm2=30;
                                   pwm1=30;                                                                                         
                              turn_right();
                                                                                                                                 
                                                                                                                                 
                                                                                                         
                                         break;
                              case 0x17:                                            //10111
                                                                                                             
                                                                                                                        pwm2=35;
                                                                                                                                                pwm1=35;
                                                                                                                                turn_left();
                                                                                                                                       
                                                                                                                               
                                                                                                                                                                                         //P0.0|P0.1|P0.2|P0.3|P0.4為10111說(shuō)明小車右偏下一步左拐  
                                   break;
            case 0x03:
                                                                                                                        pwm1=50;
                                                                                                                        pwm2=50;
                                                                                                         straight();
                                                                                                                 delay(1);
                                                                                                                                                                   //P1.0|P1.1|P1.2|P1.3|P1.4為00011說(shuō)明小車遇到左T標(biāo)置物小車左拐
                                                                                                                                         
                                                                                                                                                pwm1=30;
                                                                                                                                                pwm2=40;
                                                                                                                          turn_left();                       
                                                                                                                                                       
                                                                                                                                                          
                                                                                                                                                          
                                                                                                                                                               
                                                                                                                                         
                                        break;
     case 0x18:  
                                                pwm1=50;
                                                                              pwm2=50;
                                                                           straight();
                             delay(1);                                                                 
                                                                                                                                                               //P0.0|P0.1|P0.2|P0.3|P0.4為11000說(shuō)明小車遇到右T標(biāo)志物下一步小車右拐
                                                                                                                                                  
                                                                                                                                                                pwm1=40;
                                                                                                                                                          pwm2=40;
                                                                                                                                         turn_right();
                                                                                                                                                       
                                                                                                                                                                               
                                                                                                                                                  
                    break;

               
      case 0x11:                          //P0.0|P0.1|P0.2|P0.3|P0.4為00001說(shuō)明小車遇到十字標(biāo)志物下一步直行
                  case 0x10:                         //P0.0|P0.1|P0.2|P0.3|P0.4為10001說(shuō)明小車遇到十字標(biāo)志物體下一步小車直行
                  case 0x01:                        //P0.0|P0.1|P0.2|P0.3|P0.4為10000說(shuō)明小車遇到十字標(biāo)志物下一步直行
      case 0x00:                       //P0.0|P0.1|P0.2|P0.3|P0.4為00000說(shuō)明小車遇到十字標(biāo)志物下一步小車直行
                                                                                                                      
                                                                                                                         
                                                                                                                                            pwm1=40;
                                                                                                                                            pwm2=40;
                                                                                                                                 turn_right();
                                                                                                                                                delay(50);
                                                                                                                                                  
                                                                                                                                                       
                                                                                                                                                         
                                                                                                                                                          
                                                                                                                             
                   break;
                        case 0x1c:      
                                                                                                      //11100
                                                                                                               
                                                                                                                        pwm1=40;
                                                                                                                        pwm2=40;
                                                                                                                       
                                                                                                                         turn_right();
                                                                                                                        if(P0^2==0)
                                                                                                                                break;

                                                                                                               
                                    
                break;
                        case 0x07:      
                                                                       //00111
                                              
                                  pwm1=40;
                                                                                                                            pwm2=40;
                                                                                                                        turn_left();
                                                                                                                delay(100);

                                     
                                                      break;        
      case 0x0b :                              //01011
                                               
                               pwm1=40;
                               pwm2=20;
                              turn_left();

                                break;
                        case 0x1a:                                  //11010
                                                                                                    
                                                                                               
                                                                                                                         pwm1=30;
                                                                                                                         pwm2=40;
                                                                                                        turn_right();
                                                                                                               
                                                                  
                                        
                                    break;
                        case   0x0f:             //01111
                                                                                                     
                                                                                                                                                pwm1=40;
                                                                                                                                                pwm2=40;
                                                                                                                                 turn_left();
                                                                                                                            delay(50);
                                                                                                                         
                                            break;
                        case  0x1e:
                                           
                                                                                                             pwm1=40;
                                                                                                             pwm2=40;
                                                                                                        turn_right();                                                                                //11110
                                                                                                           delay(50);
                                                                                                  
                                break;
                        default:   
                                      break;                                //P.0|P0.1|P0.2|P0.3|P0.4    其他情況不做任何改動(dòng)
      }

}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:160768 發(fā)表于 2017-2-3 22:30 | 只看該作者
這個(gè)是我自己寫的   我現(xiàn)在通過(guò)測(cè)試應(yīng)該是定時(shí)器有問(wèn)題   但是不知道怎么改   改了很多回還是沒(méi)改到點(diǎn)上
回復(fù)

使用道具 舉報(bào)

板凳
ID:171033 發(fā)表于 2017-3-25 21:48 | 只看該作者
解決沒(méi)有
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表