⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 control.h

📁 飞思卡尔智能车最终完整程序 具有很高的参考价值
💻 H
字号:
00#include <hidef.h>      /* common defines and macros */
#include <mc9s12dg128.h>     /* derivative information */
//#include "PWM.h"                
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
word kk1;
word kk2;
uint Rudder_Angle;
uint Car_Speed;
dword p;//存放直线加速时间
dword p1=0;//限制刹车时间
uchar u1=130;
uchar u11=90; //靠刹车那个等的速度
uchar u2=100;
uchar u3=100;
uchar u4=200;
uchar u5=70; //刹车后的速度
int ppp=0;//刹车前后的标志位
int flagk1=0;//黑道在左边的标志
int flagkk1=0;//标志是否长时间在左边的标志
int flagk2=0;//黑道在右边的标志
int flagkk2=0;//标志是否长时间在右边的标志
/*******************************获取上一次车的状态*********************/
void setRudder_Angle(uint angle)
{
  Rudder_Angle = angle;
}
void setCar_Speed(uint speed) 
{
  Car_Speed = speed;
}
uint getRudder_Angle() //记录舵机转角
{
  return Rudder_Angle;
}
uint getCar_Speed()//记录车速
{
  return Car_Speed;
}
/**********************************************************************/


void PWM_Init() 
{
  PWME_PWME5 = 0x00; //pwm通道禁止
  PWME_PWME6 = 0x00;
  PWME_PWME7 = 0; 
  PWMCTL_CON45=0x1; //通道45连用
  PWMPRCLK = 0x02; //都使用B口16分频 A口4分频
  PWMCLK=0xE0;//通道67都用sB时钟源 通道5用SA时钟源
  PWMSCLB=4; //s7口提供10kHz的频率 16MHZ/16/2/25=20K 
  PWMSCLA=1; //s45口提供10kHz的频率 16MHZ/4/2/1=2M
  PWMPOL = 0xE0; //用s7口做7通道的时钟 先高电平
  //对齐方式默认 左对齐 
  PWMPER45 = 20000; //舵机的频率是50Hz 1/10k*x=1/50Hz
  PWMDTY45 = 1500;
  PWME_PWME5 = 0x01;//PWM通道5输出 
  PWMPER6 = 200; //舵机的频率是50Hz 1/10k*x=1/50Hz
  PWMDTY6 = 1;
  PWMPER7 = 200; //舵机的频率是50Hz 1/10k*x=1/50Hz ,此时,周期为20ms
  PWMDTY7 =200;
 
  DDRP = 0xff; //控制输出
  PWMCNT45 = 0;
  PWMCNT6 = 0;
  PWMCNT7 = 0;
 
  PWME_PWME6 = 0x01;
  PWME_PWME7 = 1;
}	
void PWM_Init1(uint i,uchar j,uchar k) 
{  
  PWMDTY45 =i;	 //舵机控制
  PWMDTY6 =j;
  PWMDTY7 =k;
  setRudder_Angle(i);
  if(j == 200) 
  {
     setCar_Speed(k);
  }
  if(k == 200) 
  {
     setCar_Speed(j);
  }
}


 //a,b是实际采来的 c,d是实际采来的值减去了全白 c1,c2黑白差 avg1,avg2为全白
void control_1(){
  ppp=1;
  if(flagkk2==1) {
  PORTB=0x55;  
  PWM_Init1(1860,u1,u4);  
  }
   else{  PORTB=0xF0;
    PWM_Init1(1900,u4,u1); 
   }
   flagk2=1; 
  flagkk1=0;
 
}
void control_11(){
  PWM_Init1(1860,50,u4);
   flagk2=1; 
  flagkk1=0;
}
void control_2(word a,word b,word c,word d,word c1,word c2,word avg1,word avg2){
  //  ppp=0;
   p=0;
    kk1= c1/4;
   kk2= c2/4;
   flagk2=1; 
   flagkk1=0;
   if(flagkk2==1) {
  
  PORTB=0x55;  u11=u5;  
   }
   else{ PORTB=0xF0;
   if(ppp==0) u11=100;
   else if(ppp==1) u11=u5;	 
   }
   if(c>d) {
       
       if(c-d<0x0A)PWM_Init1(1800,u11,u4);
       else {
          if(a==c1+avg1+0x02||a==c1+avg1+0x01||a==c1+avg1||a==c1+avg1-0x01||a==c1+avg1-0x02)
            PWM_Init1(1860,u11,u4); 
          else if(a==3*kk1+avg1) PWM_Init1(1845,u11,u4);
          else if(a==2*kk1+avg1) PWM_Init1(1830,u11,u4); 
          else if(a==kk1+avg1)  PWM_Init1(1815,u11,u4);
       }
   }else if(c<d){
     if(d-c<0x0A)PWM_Init1(1800,u11,u4);
   
       else {
          if(b==c2+avg2+0x02||b==c2+avg2+0x01||b==c2+avg2||b==c2+avg2-0x01||b==c2+avg2-0x02)
          PWM_Init1(1740,u11,u4);
          else if(b==3*kk2+avg2) PWM_Init1(1755,u11,u4);
          else if(b==2*kk2+avg2) PWM_Init1(1770,u11,u4);
          else if(b==kk2+avg2) PWM_Init1(1785,u11,u4);
       }
   }else PWM_Init1(1800,u11,u4);
   
}
void control_3(word a,word b,word c,word d,word c1,word c2,word avg1,word avg2){
  kk1= c1/4;
   kk2= c2/4;
    flagk2=1; 
   flagkk1=0;	 
    if(flagkk2==1) {
  PORTB=0x55;  u3=u5;	 
    }
   else{ PORTB=0xF0;
   if(ppp==0)u3=100;
   else if(ppp==1) u3=u5;  
   }
   if(c>d) {
       
       if(c-d<0x0A)PWM_Init1(1680,u3,u4);
       else {
          if(a==c1+avg1+0x02||a==c1+avg1+0x01||a==c1+avg1||a==c1+avg1-0x01||a==c1+avg1-0x02)
            PWM_Init1(1740,u3,u4); 
          else if(a==3*kk1+avg1) PWM_Init1(1725,u3,u4);
          else if(a==2*kk1+avg1) PWM_Init1(1710,u3,u4); 
          else if(a==kk1+avg1)  PWM_Init1(1695,u3,u4);
       }
   }else if(c<d){
     if(d-c<0x0A)PWM_Init1(1680,u3,u4);
       else {
          if(b==c2+avg2+0x02||b==c2+avg2+0x01||b==c2+avg2||b==c2+avg2-0x01||b==c2+avg2-0x02)
          PWM_Init1(1620,u3,u4);
          else if(b==3*kk2+avg2) PWM_Init1(1635,u3,u4);
          else if(b==2*kk2+avg2) PWM_Init1(1650,u3,u4);
          else if(b==kk2+avg2) PWM_Init1(1665,u3,u4);
       }
   }else PWM_Init1(1680,u3,u4);	 
 
}

//a,b是实际采来的 c,d是实际采来的值减去了全白 c1,c2黑白差
void control_4(word a,word b,word c,word d,word c1,word c2,word avg1,word avg2){
  kk1= c1/4;
   kk2= c2/4;
   ppp=0;
   flagk1=0;
   flagk2=0;
   if(c>d) {
       
       if(c-d<0x0A)PWM_Init1(1560,u1,u4);
       else {
          if(a==c1+avg1+0x02||a==c1+avg1+0x01||a==c1+avg1
          ||a==c1+avg1-0x01||a==c1+avg1-0x02)
            PWM_Init1(1620,u1,u4); 
          else if(a==3*kk1+avg1) PWM_Init1(1605,u1,u4);
          else if(a==2*kk1+avg1) PWM_Init1(1590,u1,u4); 
          else if(a==kk1+avg1)  PWM_Init1(1575,u1,u4);
       }
   }else if(c<d){
   
     if(d-c<0x0A)PWM_Init1(1560,u1,200);
       else { 
        	 
          if(b==c2+avg2+0x02||b==c2+avg2+0x01||b==c2+avg2
          ||b==c2+avg2-0x01||b==c2+avg2-0x02)
            PWM_Init1(1500,u1,u4);
          else if(b==3*kk2+avg2) PWM_Init1(1515,u1,u4);
          else if(b==2*kk2+avg2) PWM_Init1(1530,u1,u4);
          else if(b==kk2+avg2) PWM_Init1(1545,u1,u4);	
       }
   }else PWM_Init1(1560,u2,u4);
 
}
  
void control_5(word a,word b,word c,word d,word c1,word c2,word avg1,word avg2){
  	 	kk1= c1/4;
   kk2= c2/4;
   ppp=0;
   flagk1=0;
   flagk2=0;
   
   if(c>d) {
       
       if(c-d<0x0A)PWM_Init1(1440,u1,u4);
       else {	
          if(a==c1+avg1+0x02||a==c1+avg1+0x01||a==c1+avg1||a==c1+avg1-0x01||a==c1+avg1-0x02)
            PWM_Init1(1500,u1,u4); 
          else if(a==3*kk1+avg1) PWM_Init1(1485,u1,u4);
          else if(a==2*kk1+avg1) PWM_Init1(1470,u1,u4); 
          else if(a==kk1+avg1)  PWM_Init1(1455,u1,u4); 
       }
      
       
   }
   else if(c<d){
     if(d-c<0x0A)PWM_Init1(1440,u1,u4);
       else {
          if(b==c2+avg2+0x02||b==c2+avg2+0x01||b==c2+avg2||b==c2+avg2-0x01||b==c2+avg2-0x02)
           PWM_Init1(1380,u1,u4);
          else if(b==3*kk2+avg2) PWM_Init1(1425,u1,u4);
          else if(b==2*kk2+avg2) PWM_Init1(1410,u1,u4);
          else if(b==kk2+avg2) PWM_Init1(1395,u1,u4);
       }
   }else PWM_Init1(1440,u1,u4);	 
  
}
void control_6(word a,word b,word c,word d,word c1,word c2,word avg1,word avg2){
  	 
   kk1= c1/4;
   kk2= c2/4;
   flagk1=1;
   flagkk2=0; 	 
    if(flagkk1==1) {
  PORTB=0x55;  u3=u5;	 
    }
   else{ PORTB=0xF0;
  if(ppp==0)u3=100;
   else if(ppp==1) u3=u5; 
   }
   if(c>d) {
       
       if(c-d<0x0A)PWM_Init1(1320,u3,u4);
       else {
          if(a==c1+avg1+0x02||a==c1+avg1+0x01||a==c1+avg1||a==c1+avg1-0x01||a==c1+avg1-0x02)
            PWM_Init1(1340,u3,u4); 
          else if(a==3*kk1+avg1) PWM_Init1(1365,u3,u4);
          else if(a==2*kk1+avg1) PWM_Init1(1350,u3,u4); 
          else if(a==kk1+avg1)  PWM_Init1(1335,u3,u4);
       }
   }else if(c<d){
     if(d-c<0x0A)PWM_Init1(1320,u3,u4);
       else {
          if(b==c2+avg2+0x02||b==c2+avg2+0x01||b==c2+avg2||b==c2+avg2-0x01||b==c2+avg2-0x02)
           PWM_Init1(1260,u3,u4);
          else if(b==3*kk2+avg2) PWM_Init1(1275,u3,u4);
          else if(b==2*kk2+avg2) PWM_Init1(1290,u3,u4);
          else if(b==kk2+avg2) PWM_Init1(1305,u3,u4);
       }
   }else PWM_Init1(1320,u3,u4);	 
 
}		
void control_7(word a,word b,word c,word d,word c1,word c2,word avg1,word avg2){
    p=0;
     flagk1=1;
   flagkk2=0; 	 
    if(flagkk1==1) {
  PORTB=0x55;  u11=u5;  
     }
   else{ PORTB=0xF0;
   if(ppp==0) u11=100;
   else if(ppp==1) u11=u5; 
   }
  	kk1= c1/4;
   kk2= c2/4;
   if(c>d) {
       
       if(c-d<0x0A)PWM_Init1(1200,u11,u4);
       else {
          if(a==c1+avg1+0x02||a==c1+avg1+0x01||a==c1+avg1||a==c1+avg1-0x01||a==c1+avg1-0x02)
            PWM_Init1(1260,u11,u4); 
          else if(a==3*kk1+avg1) PWM_Init1(1245,u11,u4);
          else if(a==2*kk1+avg1) PWM_Init1(1230,u11,u4); 
          else if(a==kk1+avg1)  PWM_Init1(1215,u11,u4);
       }
   }else if(c<d){
     if(d-c<0x0A)PWM_Init1(1200,u11,u4);
       else {
          if(b==c2+avg2+0x02||b==c2+avg2+0x01||b==c2+avg2||b==c2+avg2-0x01||b==c2+avg2-0x02)
           PWM_Init1(1140,u11,u4);
          else if(b==3*kk2+avg2) PWM_Init1(1155,u11,u4);
          else if(b==2*kk2+avg2) PWM_Init1(1170,u11,u4);
          else if(b==kk2+avg2) PWM_Init1(1185,u11,u4);
       }
   }else PWM_Init1(1200,u11,u4);	
  
}
void control_8(){
  ppp=1;
  flagk1=1;
   flagkk2=0;
  if(flagkk1==1){
  PORTB=0x55;  
  PWM_Init1(1100,u4,u1);  
  }
  else 	{
    PORTB=0xF0;
    PWM_Init1(1140,u1,u4); 
  }
  
  
}
void control_88(){
  	 PWM_Init1(1140,50,u4);
  	flagk1=1;
   flagkk2=0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -