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

QQ登錄

只需一步,快速開(kāi)始

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

為什么我的單片機(jī)小車(chē)程序只能一個(gè)輪子動(dòng),求大神解惑

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:945628 發(fā)表于 2021-6-28 21:18 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include<reg52.h>//包含51單片機(jī)頭文件,內(nèi)部有各種寄存器定義

    //定義小車(chē)驅(qū)動(dòng)模塊輸入IO口
   sbit L293D_IN1=P1^2;
   sbit L293D_IN2=P1^3;
   sbit L293D_IN3=P1^4;
   sbit L293D_IN4=P1^5;
   sbit L293D_EN1=P1^6;
   sbit L293D_EN2=P1^7;

   sbit Left_moto_pwm=P1^6;           //PWM信號(hào)端
   sbit Right_moto_pwm=P1^7;   //PWM信號(hào)端

        sbit Left_1_led =P3^7;           //左傳感器
        sbit zhong_1_led =P3^5;
    sbit Right_1_led = P3^6;         //右傳感器
        /***蜂鳴器接線定義*****/
    sbit BUZZ=P2^3;
         
                                                                   /*        
                                                                        #define Left_moto_go      {P1_2=1,P1_3=0;}  //左電機(jī)向前走
                                                                        #define Left_moto_back    {P1_2=0,P1_3=1;}         //左邊電機(jī)向后轉(zhuǎn)
                                                                        #define Left_moto_Stop    {P1_2=0,P1_3=0;}         //左邊電機(jī)停轉(zhuǎn)                     
                                                                        #define Right_moto_go     {P1_4=1,P1_5=0;}        //右邊電機(jī)向前走
                                                                        #define Right_moto_back   {P1_4=0,P1_5=1;}        //右邊電機(jī)向后走
                                                                        #define Right_moto_Stop   {P1_4=0,P1_5=0;}              //右邊電機(jī)停轉(zhuǎn)   
                                                                           */
        unsigned char pwm_val_left  =0;//變量定義
        unsigned char push_val_left =15;// 左電機(jī)占空比N/20
        unsigned char pwm_val_right =0;
        unsigned char push_val_right=15;// 右電機(jī)占空比N/20
                                                                        //        bit Right_moto_stop=1;
                                                                        //        bit Left_moto_stop =1;
                                                        
                                                                //unsigned  int  time=0;
                                                                 
                                                        
                                                        /*        unsigned int tt = 0x00;
                                                            unsigned int ii = 0x00;
                                                                unsigned int xx = 0x00;
                                                                        unsigned int i = 0x00;
                                                                unsigned char yy,vv,bb;*/
/************************************************************************/        
//延時(shí)函數(shù)        
/*  void delay(unsigned int k)
{   
     unsigned int x,y;
         for(x=0;x<k;x++)
           for(y=0;y<2000;y++);
} */
/************************************************************************/
/*                    PWM調(diào)制電機(jī)轉(zhuǎn)速                                   */
/************************************************************************/
/*                    左電機(jī)調(diào)速                                        */
/*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比            */
                void left_moto(void)
{  

    if(pwm_val_left<=push_val_left)           //17
               {
                     Left_moto_pwm=1;
                   }
        else
               {
                 Left_moto_pwm=0;
                   }

                 
}         
/******************************************************************/
/*                    右電機(jī)調(diào)速                                  */  
void right_moto(void)
{

    if(pwm_val_right<=push_val_right)
              {
               Right_moto_pwm=1;
                   }
        else
              {
                     Right_moto_pwm=0;
                    }

         
}  
/************************************************************************/
//前速前進(jìn)
void  run(void)
{
     push_val_left=17;         //速度調(diào)節(jié)變量 0-20。。。0最小,20最大
         push_val_right=17;
         
         L293D_IN1=1,L293D_IN2=0,L293D_IN3=1,L293D_IN4=0;

}

                                        //后退函數(shù)
                                        //     void  backrun(void)
                                        //{
                                        //     push_val_left=12;         //速度調(diào)節(jié)變量 0-20。。。0最小,20最大
                                        //         push_val_right=12;
                                        //         Left_moto_back;   //左電機(jī)往后走
                                        //         Right_moto_back;  //右電機(jī)往后走
                                        //}

//左轉(zhuǎn)

void  leftrun(void)
{         //vv++;         
     push_val_left=5;
         push_val_right=10;


         L293D_IN1=1; L293D_IN2=0, L293D_IN3=0;  L293D_IN4=1;
        
}

//右轉(zhuǎn)
void  rightrun(void)
{
         //bb++;
         push_val_left=10;
         push_val_right=5;

         L293D_IN1=1;  L293D_IN2=0,L293D_IN3=0; L293D_IN4=1;

         
}







/*********************************************************************/        

                                        //#endif   
                                        //主函數(shù)
                                       
                                        //unsigned int leijia=1;
        void main(void)
{        
        
    P1=0X00;   //關(guān)電機(jī)        

                         TMOD=0X01;
                TH0= 0XFc;                  //1ms定時(shí)
                 TL0= 0X18;
                   TR0= 1;
                ET0= 1;
                EA = 1;                           //開(kāi)總中斷


        while(1)        //無(wú)限循環(huán)
        {
         
                         //有信號(hào)為0 沒(méi)有信號(hào)為1


         
         
          if(Left_1_led==0&&Right_1_led==0&&zhong_1_led==0)
                        {
                        
                //        run();   //調(diào)用前進(jìn)函數(shù)
                         }
                                 
                                                
                                    
                else if(Left_1_led==1&&Right_1_led==0&&zhong_1_led==1)            //左邊檢測(cè)到黑線
                 {
                                           rightrun();
                                
                                        }
                                         

                           
         else if(Right_1_led==1&&Left_1_led==0&&zhong_1_led==1)                //右邊檢測(cè)到黑線
                                     {         
                                       leftrun();
                                          
                                     }
                else if(Right_1_led==1&&Left_1_led==1&&zhong_1_led==0)                //右邊檢測(cè)到黑線
                                     {         
                                     run();        
                                         
                                     }

                                 
                else
                                          {    L293D_IN1=0;
                                                   L293D_IN2=0;
                                                    L293D_IN3=0;
                                                    L293D_IN4=0;        }                                                                                                               
                                        }

                        }         
/***************************************************/
///*TIMER0中斷服務(wù)子函數(shù)產(chǎn)生PWM信號(hào)*/
         void timer0()interrupt 1   using 2
{
     TH0=0XFc;          //1Ms定時(shí)
         TL0=0X18;
         //time++;
         
         pwm_val_right++;
         pwm_val_left++;
         right_moto() ;
        left_moto()          ;

        if(pwm_val_left>=20)
                 { pwm_val_left=0;}
          if(pwm_val_right>=20)
          {pwm_val_right=0; }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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