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

QQ登錄

只需一步,快速開始

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

四輪紅外模塊尋跡小車的單片機(jī)代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:293165 發(fā)表于 2018-11-1 21:48 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
這個(gè)代碼是我參加比賽時(shí)用的,有興趣的可以參考下
硬件連接
    P1_6 接驅(qū)動(dòng)模塊 ENA 使能端,輸入PWM信號(hào)調(diào)節(jié)速度
      P1_7 接驅(qū)動(dòng)模塊 ENB  使能端,輸入PWM信號(hào)調(diào)節(jié)速度

      P3_4 P3_5 接IN1  IN2    當(dāng)  P3_4=1,P3_5=0; 時(shí)左電機(jī)正轉(zhuǎn)   驅(qū)動(dòng)藍(lán)色輸出端 OUT1
OUT2接左電機(jī)   
      P3_4 P3_5 接IN1  IN2    當(dāng)  P3_4=0,P3_5=1; 時(shí)左電機(jī)反轉(zhuǎn)                  
      P3_6 P3_7 接IN3  IN4   當(dāng)  P3_6=1,P3_7=0; 時(shí)右電機(jī)正轉(zhuǎn)   驅(qū)動(dòng)藍(lán)色輸出端 OUT3
OUT4接右電機(jī)
      P3_6 P3_7 接IN3  IN4   當(dāng)  P3_6=0,P3_7=1; 時(shí)右電機(jī)反轉(zhuǎn)

      P1_0接四路尋跡模塊接口第一路輸出信號(hào)即中控板上面標(biāo)記為OUT1
      P1_1接四路尋跡模塊接口第二路輸出信號(hào)即中控板上面標(biāo)記為OUT2   
      P1_2接四路尋跡模塊接口第三路輸出信號(hào)即中控板上面標(biāo)記為OUT3
    P1_3接四路尋跡模塊接口第四路輸出信號(hào)即中控板上面標(biāo)記為OUT4
   四路尋跡傳感器有信號(hào)(白線)為0  沒有信號(hào)(黑線)為 1
   四路尋跡傳感器電源+5V GND 取自于單片機(jī)板靠近液晶調(diào)節(jié)對(duì)比度的電源輸出接口
                       
                        
   關(guān)于單片機(jī)電源:本店驅(qū)動(dòng)模塊內(nèi)帶 LDO 穩(wěn)壓芯片,當(dāng)電池輸入最低的電壓 6V 時(shí)候
可以輸出穩(wěn)定的5V
   分別在針腳標(biāo)+5 與GND 。這個(gè)電源可以作為單片機(jī)系統(tǒng)的供電電源。
  ****************************************************************************/

  #include<AT89x51.H>

  #define Left_moto_pwm     P1_6      //接驅(qū)動(dòng)模塊ENA  使能端,輸入 PWM 信
號(hào)調(diào)節(jié)速度
  #define Right_moto_pwm    P1_7      //接驅(qū)動(dòng)模塊ENB

     #define Left_1_led        P1_0      //四路尋跡模塊接口第一路
  #define Left_2_led        P1_1      //四路尋跡模塊接口第二路
     #define Right_1_led       P1_2      //四路尋跡模塊接口第三路
  #define Right_2_led       P1_3      //四路尋跡模塊接口第四路


  #define Left_moto_go      {P3_4=0,P3_5=1;} //P3_4 P3_5  接 IN1  IN2     當(dāng)
P3_4=0,P3_5=1; 時(shí)左電機(jī)前進(jìn)
  #define Left_moto_back    {P3_4=1,P3_5=0;} //P3_4 P3_5  接 IN1  IN2     當(dāng)
P3_4=1,P3_5=0; 時(shí)左電機(jī)后退      
  #define Left_moto_stp     {P3_4=1,P3_5=1;} //P3_4 P3_5  接 IN1  IN2     當(dāng)
P3_4=1,P3_5=1; 時(shí)左電機(jī)停轉(zhuǎn)                 
  #define Right_moto_go     {P3_6=0,P3_7=1;} //P3_6 P3_7 接 IN1  IN2   當(dāng)
P3_6=0,P3_7=1; 時(shí)右電機(jī)前轉(zhuǎn)
  #define Right_moto_back   {P3_6=1,P3_7=0;} //P3_6 P3_7 接 IN1  IN2   當(dāng) P3_6=1,P3_7=0; 時(shí)右電機(jī)后退
     #define Right_moto_stp    {P3_6=1,P3_7=1;} //P3_6 P3_7  接IN1  IN2   當(dāng)
P3_6=1,P3_7=0; 時(shí)右電機(jī)停轉(zhuǎn)
      unsigned char pwm_val_left  =0;//變量定義
  unsigned char push_val_left =0;// 左電機(jī)占空比 N/10
  unsigned char pwm_val_right =0;
  unsigned char push_val_right=0;// 右電機(jī)占空比 N/10
  bit Right_moto_stop=1;
  bit Left_moto_stop =1;
  unsigned  int  time=0;
/************************************************************************/
    void delay(unsigned int k)      //延時(shí)函數(shù)
{      
      unsigned int x,y;
    for(x=0;x<k;x++)   
      for(y=0;y<2000;y++);
}

/************************************************************************/
      void  run(void)  //前進(jìn)函數(shù)
{
      push_val_left  =3;  //PWM 調(diào)節(jié)參數(shù) 1-10   1 為最慢,10 是最快  改這個(gè)值可以改變
其速度
    push_val_right =3;    //PWM 調(diào)節(jié)參數(shù) 1-10   1為最慢,10是最快   改這
個(gè)值可以改變其速度
    Left_moto_go ;      //左電機(jī)前進(jìn)
    Right_moto_go ;    //右電機(jī)前進(jìn)
}

/************************************************************************/
      void  left(void)  //左轉(zhuǎn)函數(shù)
{
      push_val_left  =8;  //PWM 調(diào)節(jié)參數(shù) 1-10   1 為最慢,10 是最快  改這個(gè)值可以改變
其速度
    push_val_right =8;    //PWM 調(diào)節(jié)參數(shù) 1-10   1為最慢,10是最快   改這
個(gè)值可以改變其速度
    Right_moto_go;    //右電機(jī)繼續(xù)
    Left_moto_stp;      //左電機(jī)停走
}
  /************************************************************************/
      void  right(void)  //右轉(zhuǎn)函數(shù)
{
      push_val_left  =8;  //PWM 調(diào)節(jié)參數(shù) 1-10   1 為最慢,10 是最快  改這個(gè)值可以改變
其速度
    push_val_right =8;    //PWM 調(diào)節(jié)參數(shù) 1-10   1為最慢,10是最快   改這個(gè)值可以改變其速度
    Right_moto_stp;    //右電機(jī)停走
    Left_moto_go;   //左電機(jī)繼續(xù)
}
   
   
/************************************************************************/
/*                    PWM 調(diào)制電機(jī)轉(zhuǎn)速                                    */
/************************************************************************/
/*                    左電機(jī)調(diào)速                                         */
/*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比             */
    void pwm_out_left_moto(void)
{   
    if(Left_moto_stop)
    {
     if(pwm_val_left<=push_val_left)
          Left_moto_pwm=1;   
  else   
          Left_moto_pwm=0;
  if(pwm_val_left>=10)
  pwm_val_left=0;
    }
    else  Left_moto_pwm=0;
}
/******************************************************************/
/*                    右電機(jī)調(diào)速                                   */   
    void pwm_out_right_moto(void)
{   
   if(Right_moto_stop)
    {   
     if(pwm_val_right<=push_val_right)
          Right_moto_pwm=1;   
  else   
          Right_moto_pwm=0;
  if(pwm_val_right>=10)
  pwm_val_right=0;
    }
    else    Right_moto_pwm=0;
}
/***************************************************/
///*TIMER0中斷服務(wù)子函數(shù)產(chǎn)生 PWM信號(hào)*/
    void timer0()interrupt 1   using 2
{
      TH0=0XF8;     //1Ms定時(shí)
    TL0=0X30;     time++;
    pwm_val_left++;
    pwm_val_right++;
    pwm_out_left_moto();
    pwm_out_right_moto();
  }   
  /***************************************************/

  void main(void)
{

  TMOD=0X01;
  TH0= 0XF8;       //1ms定時(shí)
    TL0= 0X30;
  TR0= 1;
  ET0= 1;
  EA = 1;

  while(1)              /*無限循環(huán)*/
  {   
   
       //四路尋跡傳感器有信號(hào)(白線)為0  沒有信號(hào)(黑線)為1   

       switch(P1&0x0f)
  {
    case 0x00:            // 全部沒有壓線,直轉(zhuǎn)
      run();
      break;
    case 0x01:            // 右壓線,左轉(zhuǎn)
      left();
      break;
    case 0x02:            // 右壓線,左轉(zhuǎn)
         left();
      break;
    case 0x04:            // 左壓線,右轉(zhuǎn)
      right();
      delay(6);          //轉(zhuǎn)向延時(shí)
      break;
    case 0x08:            // 左壓線,右轉(zhuǎn)
      right();           
      delay(6);          //轉(zhuǎn)向延時(shí)
      break;
   
     }
     }
}
   
全部資料51hei下載地址:
尋跡小車.pdf (117.16 KB, 下載次數(shù): 79)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:583076 發(fā)表于 2019-7-15 21:19 | 只看該作者
謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

板凳
ID:627663 發(fā)表于 2019-10-25 21:14 | 只看該作者
您是用了四個(gè)電機(jī)嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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