找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51循跡小車程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:255961 發(fā)表于 2017-12-1 21:43 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
/****************************************************************
************
硬件連接
P1_4接驅(qū)動模塊ENA使能端輸入PWM信號調(diào)節(jié)速度
P1_5接驅(qū)動模塊ENB使能端輸入PWM信號調(diào)節(jié)速度

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

P1_0接四路尋跡模塊接口第一路輸出信號即中控板上面標(biāo)記為OUT1
P1_1接四路尋跡模塊接口第二路輸出信號即中控板上面標(biāo)記為OUT2  
P1_2接四路尋跡模塊接口第三路輸出信號即中控板上面標(biāo)記為OUT3
P1_3接四路尋跡模塊接口第四路輸出信號即中控板上面標(biāo)記為OUT4
八路尋跡傳感器有信號(白線為0  沒有信號黑線為1

*****************************************************************
***********/
#include<AT89x51.H>            
#define Right_moto_pwm    P1_4    //接驅(qū)動模塊ENA使能端輸入PWM
信號調(diào)節(jié)速度
#define Left_moto_pwm     P1_5    //接驅(qū)動模塊ENB使能端輸入PWM   
信號調(diào)節(jié)速度
#define Left_1_led        P2_0    //四路尋跡模塊接口第一路
#define Left_2_led        P2_1    //四路尋跡模塊接口第二路
#define Right_1_led       P2_2   //四路尋跡模塊接口第三路
#define Right_2_led       P2_3   //四路尋跡模塊接口第四路
#define Left_moto_go      {P1_0=0,P1_1=1;} //左電機(jī)前進(jìn)
#define Left_moto_back    {P1_0=1,P1_1=0;} //左電機(jī)后退     
#define Left_moto_stop    {P1_0=1,P1_1=1;} //左電機(jī)停轉(zhuǎn)               
#define Right_moto_go     {P1_2=0,P1_3=1;} //右電機(jī)前轉(zhuǎn) #define Right_moto_back   {P1_2=1,P1_3=0;} //右電機(jī)后退
#define Right_moto_stop   {P1_2=1,P1_3=1;} //右電機(jī)停轉(zhuǎn)
#define uchar unsigned char
#define uint unsigned int
uchar pwm_val_left  =0;
uchar push_val_left =0; //左電機(jī)占空比N/10
uchar pwm_val_right =0;
uchar push_val_right=0; //右電機(jī)占空比N/10
bit Right_moto_stp=1;
bit Left_moto_stp =1;
/****************************************************************
********/
void  run(void) //前進(jìn)函數(shù)
{
push_val_left  =13; //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢20是最快  改這
個值可以改變其速度
push_val_right =15; //PWM 調(diào)節(jié)參數(shù)1-20   1為最慢20是最快 改
這個值可以改變其速度
Left_moto_go ;  //左電機(jī)前進(jìn)
Right_moto_go ;     //右電機(jī)前進(jìn)
}

/****************************************************************
********/
void  left(void) //左轉(zhuǎn)函數(shù)
{
  push_val_left  =8;  
push_val_right =9;  
Right_moto_go;  //右電機(jī)繼續(xù)
Left_moto_stop;   //左電機(jī)停走
}      


/************************************************************************/
void  right(void) //右轉(zhuǎn)函數(shù)
{
push_val_left  =8;   
push_val_right =9;   
Right_moto_stop;  //右電機(jī)停走
Left_moto_go;  //左電機(jī)繼續(xù)
}
void Delayms(uint x)  
{  
uchar i;  
  while(x--)for(i=0;i<120;i++);  
}  
void  stop(void)
{
  Right_moto_stop;  //右電機(jī)停走  
  Left_moto_stop;   //左電機(jī)停走
  Delayms(3000);
  run();
  Delayms(100);   
}  


/*************************PWM調(diào) 制 電 機(jī) 轉(zhuǎn) 速
********************************/
void pwm_out_left_moto(void)  //左電機(jī)調(diào)速,調(diào)節(jié)push_val_left的值改變
電機(jī)轉(zhuǎn)速,占空比     
{   
if(Left_moto_stp)
{
  if(pwm_val_left<=push_val_left)
   Left_moto_pwm=1;  
  else  
   Left_moto_pwm=0;    if(pwm_val_left>=20)
    pwm_val_left=0;
}
else   
  Left_moto_pwm=0;
}  
void pwm_out_right_moto(void) //右電機(jī)調(diào)速,調(diào)節(jié)push_val_left的值改變
電機(jī)轉(zhuǎn)速,占空比
{  
if(Right_moto_stp)
{  
  if(pwm_val_right<=push_val_right)
   Right_moto_pwm=1;  
  else
   Right_moto_pwm=0;
   if(pwm_val_right>=20)
    pwm_val_right=0;
}
else     
  Right_moto_pwm=0;
}
/***************************************************/   
void xunji()
{
switch(P2&0x0f)
{
  case 0x00:      // 全部沒有壓線直走
   run();  break;   
  case 0x01:      // 右壓線左轉(zhuǎn)
   left(); break;   
  case 0x02:      // 右壓線左轉(zhuǎn)
      left(); break;   
  case 0x04:      // 左壓線轉(zhuǎn)右  
   right(); break;           case 0x08:      // 左壓線右轉(zhuǎn)
   right();break;  
  case 0x0f:
   stop();break;        
  default:  
   run(); break;

   }
}

/***********TIMER0中斷服務(wù)子函數(shù)產(chǎn)生PWM信號**********/
void timer0()interrupt 1   using 2
{
TH0=0XF8;   //2Ms定時
TL0=0X30;      
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
}

/***************************************************/
void main(void)
{
TMOD=0X01;
TH0= 0XF8;    //2ms定時
  TL0= 0X30;
TR0= 1;
ET0= 1;
EA = 1;
while(1)       /*無限循環(huán)*/
{  

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

使用道具 舉報

沙發(fā)
ID:287974 發(fā)表于 2018-3-30 13:29 | 只看該作者
最后主函數(shù)的循跡函數(shù)是啥
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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