找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3061|回复: 1
打印 上一主题 下一主题
收起左侧

K60_CCD直立小车源码(二等奖程序)

[复制链接]
跳转到指定楼层
楼主
k60 ccd二等奖程序

本程序配套4按键直立一体板

按键功能:
E0: 参数加
E1: 参数减
E2: 切换显示及功能
E3: 回到最初显示及功能


调试直立

A、修改直立静态偏移量: calcultion.c   s32 GRAVITY_OFFSET=485;//230  MPU6550为平衡时Z轴角度,放大10倍
B、main.c里 run()函数中:  修改  PWMout=MotorSpeedOut(AAngPWM,MotorSpeedPWM,MotorTurnPWM);//电机输出
                            为: PWMout=MotorSpeedOut(AAngPWM,0,0);//关闭速度环和转向环分量,直立后再加上两个分量



系统连线说明 :


单片机源程序如下:
  1. #include "include.h"
  2. #include "calculation.h"
  3. #include"VisualScope.h"
  4. #include "CCD.h"
  5. #include "LQ12864.h"
  6. #include "MPU6050.h"

  7. int16 angletmp,angle_g,angle_w;  //16位
  8. int16 angle6550;  //MPU6550计算

  9. extern byte F6x8[][6];
  10. extern s16 g_nLeftMotorPulseSigma,g_nRightMotorPulseSigma;
  11. extern float GYROSCOPE_ANGLE_RATIO;
  12. s32 TurnPosition;//实际位置
  13. s32 TurnPositionOld; //上一次位置
  14. int dline; //左右边界差

  15. float  ANGLE_CONTROL_P=240;//* 260    //直立P  260
  16. float  ANGLE_CONTROL_D=30;//1.5;//*  4.8   //直立D  5.8

  17. int16 xgout=1000;   //MPU6050六轴参数  x轴角速度
  18. int16 ygout=1000;
  19. int16 zgout=1000;
  20. int16 xaout=-1000;   //x轴加速度
  21. int16 yaout=-1000;
  22. int16 zaout=-1000;

  23. uint8 PWMDEADL = 0;  //死区电压左路电机
  24. uint8 PWMDEADR = 0;  //死区电压右路电机

  25. uint16 MAXTURNPWM= 200;  //电机转向最大PWM值

  26. #define   SAVEADRESS   (0X1C)

  27. extern s32 GRAVITY_OFFSET;
  28. uint8 disen;  //允许上传CCD图像

  29. uint16 A_P,A_D,V_P,V_I,T_P,T_D;  //从FLASH中读出的参数
  30. uint32 G_RATIO;
  31. uint8 flashreadbuf[6];

  32. u16 SpeedKP = 24;//4.4;//*              //速度P 放大10倍
  33. u16 SpeedKI = 6;//*               //速度D 放大10倍

  34. u16 TurnP1 = 80;  //直道前进时舵机PD值,放大10倍
  35. u16 TurnD1 = 2;

  36. //u16 TurnP2 = 34;//70;  //弯道时舵机转角比例系数 放大10倍
  37. //u16 TurnD2 = 140;//30;  //弯道时舵机转角积分系数  放大100倍
  38. //
  39. //u16 TurnP3 = 40;  //大弯时转角比例
  40. //u16 TurnD3 = 110;   //大弯时转角积分
  41. //
  42. //u16 TurnP4 = 48;  //大弯时转角比例
  43. //u16 TurnD4 = 90;   //大弯时转角积分

  44. u16 TurnP;     //* 94                 //方向P
  45. u16 TurnD;   //* 8.4              //方向D
  46. u16 turnsetmax;  //转向最大PWM值
  47. u16 turnpwmmax;
  48. u8  disccd[128][4];
  49. u8  paraadjflag;   //参数修改组切换


  50. extern int leftline, rightline; //左右边界值
  51. extern int leftlineold,rightlineold; //左右边界上一次值
  52. extern int yuzhizhi;//动态阈值
  53. extern signed int sumlspeed,sumrspeed;

  54. s16 SetSpeed= -250;
  55. s16 AmSpeed;//*   //目标速度 用于外部       设置速度时在这里设置
  56. s16 g_Speedgoal=0;//用于内部 自加速使用
  57. //时间标志位
  58. extern u8 TIME0flag_5ms,TIME0flag_10ms,TIME0flag_20ms;
  59. extern u8 TIME1flag_100ms,flag_1ms ;
  60. extern u8 TIME1flag_1s   ;  //PT1口1s定时标志位
  61. extern s16 whitelength;//91;   //具体看CCD图像,赛道宽度



  62. s32 ATimeCount=700;//100ms进入标志  由20个5ms构成,速度PID时使用
  63. s32 TimeCount=0 ;//1ms中断标志
  64. //角度传感器
  65. s32 GYROSCOPE_OFFSET,GYROSCOPE_turn_OFFSET;//陀螺仪静止时的零点
  66. s32 AD_ACC_Z;//加速度计的Z轴
  67. s32 AD_GYRO;//平衡陀螺仪
  68. s32 AD_GYRO_turn;//转向陀螺仪
  69. s32 AAngPWM=0,LastAAngPWM=0,AAngPeriodCount=0,MotorAAngPWM=0 ;
  70. //速度变量
  71. float g_SpeedControlOutNew,g_SpeedControlOutOld ;
  72. s16 SpeedPeriodCount=0;
  73. s32 MotorSpeedPWM=0 ;
  74. s32 PWMout ;
  75. int start_flag=0,stop_jiasu=0;
  76. //CCD变量
  77. int ccd_count=0;
  78. uint8_t Pixel[128];
  79. int ccd_flag=0;
  80. s16 TurnPeriodCount=0 ;
  81. s32 MotorTurnPWM=0 ;
  82. s16 TurnPWMOUT=0 ;
  83. s16 LastTurnPWMOUT=0;
  84. u16 discnt;
  85. u8  workflag;


  86. void run();//直立主函数
  87. void qibu();//起步不能一下把速度加上去,速度要慢慢加
  88. void GPIO_Init();
  89. void dispage1();
  90. void dispage2();
  91. void dispage3();
  92. void disdata1();
  93. void disdata2();
  94. void disdata3();
  95. void disccdval();
  96. extern void Pause(void);
  97. extern void LCD_CLS(void);

  98. void main()
  99. {  int16 ii;
  100.    discnt=0;
  101.    paraadjflag=0;
  102.    workflag=0;
  103.    AmSpeed = SetSpeed;
  104.    turnsetmax = 650;
  105.    s32 xgtemp,ygtemp;
  106.    DisableInterrupts; //禁止总中断
  107.    uart_init (UART0,115200);//初始化UART0,输出脚PTA15,输入脚PTA14
  108.    //AngleAcceleration_init() ;//AD初始化
  109.    FTM1_QUAD_Iint();//正交解码测速  A相---PTA8  B相---PTA9
  110.    FTM2_QUAD_Iint();//正交解码测速  A相---PTA10 B相---PTA11
  111.    oled_init();//oled初始化
  112.    CCD_init (); //CCD初始化
  113.    GPIO_Init(); //程序运行灯
  114.    pit_init_ms(PIT0, 1);  //初始化PIT0,定时时间为: 1ms
  115.    pit_init_ms(PIT1, 100);//初始化PIT1,定时时间为: 100ms
  116.    FTM_init() ; //PWM初始化
  117.    delayms(100);
  118.    MPU6050_Init();  //MPU6050初始化  , PD8  , PD9
  119.    delayms(300);
  120.    xgtemp=0;
  121.    ygtemp=0;
  122.    TurnP=TurnP1;
  123.    TurnD=TurnD1;
  124.    for(ii=0;ii<100;ii++)
  125.    {
  126.      xgtemp += MPU6050_GetDoubleData(MPU6050_GYRO_XOUT);//读X轴角速度,直立
  127.      Pause();
  128.      ygtemp += MPU6050_GetDoubleData(MPU6050_GYRO_YOUT);//读Y轴角速度,转向
  129.      Pause();
  130.    }
  131.    GYROSCOPE_OFFSET = xgtemp/100;        //静态X轴角速度值,直立,理论上为0,但实际可能不为0
  132.    GYROSCOPE_turn_OFFSET = ygtemp/100;   //静态Y轴角速度值,转向,理论上为0,但实际可能不为0
  133.    
  134.    EnableInterrupts;//开总中断  
  135.    uart_irq_EN(UART0);
  136.    
  137.    uart_putchar(UART0,'O');
  138.    uart_putchar(UART0,'K');

  139.    A_P = ANGLE_CONTROL_P;
  140.    A_D = ANGLE_CONTROL_D*10;
  141.    V_P = SpeedKP;
  142.    V_I = SpeedKI;
  143.    T_P = TurnP;
  144.    T_D = TurnD;
  145.    G_RATIO = GYROSCOPE_ANGLE_RATIO*100;
  146.    LCD_CLS();
  147.    dispage1(); //正常显示
  148.    while(1)
  149.    {
  150.      if(workflag==0)  //正常状态
  151.      { if(gpio_get(PORTE,3)==0)  //状态切换
  152.        { delayms(4);
  153.          if(gpio_get(PORTE,3)==0)
  154.          {
  155.            workflag=1;
  156.            LCD_CLS(); //清屏
  157.            dispage2();
  158.            while(gpio_get(PORTE,3)==0); //等待按键松开
  159.          }
  160.        }
  161.        discnt++;
  162.        if(discnt>=100)
  163.        { discnt=0;
  164.          disdata1();
  165.          delayms(2);
  166.        }
  167.        delayms(1);
  168.      }
  169.      else if(workflag==1)   //显示和上传CCD图像
  170.      { if(ccd_flag==1)//采完一副图像
  171.        {
  172.          ccd_flag=0;
  173.          tuxiang();  //红树伟业上位机
  174.          discnt++;
  175.          if(discnt>=100)
  176.          { discnt=0;
  177.            disdata2();  //显示图像
  178.            disccdval();
  179.            delayms(1);
  180.          }
  181.        }
  182.        if(gpio_get(PORTE,3)==0)  //状态切换
  183.        { delayms(4);
  184.          if(gpio_get(PORTE,3)==0)
  185.          {
  186.            workflag=2;
  187.            LCD_CLS(); //清屏
  188.            dispage3();
  189.            while(gpio_get(PORTE,3)==0); //等待按键松开
  190.          }
  191.        }
  192.        if(gpio_get(PORTE,2)==0)  //回正常状态
  193.        { delayms(4);
  194.          if(gpio_get(PORTE,2)==0)
  195.          {
  196.            workflag=0;
  197.            LCD_CLS(); //清屏
  198.            dispage1();
  199.            while(gpio_get(PORTE,5)==0); //等待按键松开
  200.          }
  201.        }
  202.      }
  203.      else if(workflag==2)  //调节参数
  204.      { if(gpio_get(PORTE,3)==0)  //修改参数变换
  205.        { delayms(4);
  206.          if(gpio_get(PORTE,3)==0)
  207.          {
  208.            paraadjflag++;
  209.            if(paraadjflag==5) paraadjflag=0;  // 切换。如果有更多的参数组,自行修改
  210.            if(paraadjflag==0)
  211.            { LCD_P6x8Str(0,1,"Speed Para:  <--");
  212.              LCD_P6x8Str(0,3,"Turn Para:      ");
  213.              LCD_P6x8Str(0,5,"Speed Set:      ");
  214.            }
  215.            else if(paraadjflag==1)
  216.            { LCD_P6x8Str(0,1,"Speed Para:  -->");
  217.              LCD_P6x8Str(0,3,"Turn Para:      ");
  218.              LCD_P6x8Str(0,5,"Speed Set:      ");
  219.            }  
  220.            else if(paraadjflag==2)
  221.            { LCD_P6x8Str(0,1,"Speed Para:     ");
  222.              LCD_P6x8Str(0,3,"Turn Para:   <--");
  223.              LCD_P6x8Str(0,5,"Speed Set:      ");
  224.            }
  225.            else if(paraadjflag==3)
  226.            { LCD_P6x8Str(0,1,"Speed Para:     ");
  227.              LCD_P6x8Str(0,3,"Turn Para:   -->");
  228.              LCD_P6x8Str(0,5,"Speed Set:      ");
  229.            }
  230.            else if(paraadjflag==4)
  231.            { LCD_P6x8Str(0,1,"Speed Para:     ");
  232.              LCD_P6x8Str(0,3,"Turn Para:      ");
  233.              LCD_P6x8Str(0,5,"Speed Set:   <--");
  234.            }
  235.            while(gpio_get(PORTE,3)==0); //等待按键松开
  236.          }
  237.        }
  238.        if(gpio_get(PORTE,2)==0)  //回正常状态
  239.        { delayms(4);
  240.          if(gpio_get(PORTE,2)==0)
  241.          {
  242.            workflag=0;
  243.            LCD_CLS(); //清屏
  244.            dispage1();
  245.            while(gpio_get(PORTE,2)==0); //等待按键松开
  246.          }
  247.        }
  248.        if(gpio_get(PORTE,0)==0)  //参数调节
  249.        { delayms(4);
  250.          if(gpio_get(PORTE,0)==0)
  251.          { if(paraadjflag==0)   //速度KP 加减
  252.            { SpeedKP++;
  253.              Dis_num(24,2,SpeedKP);
  254.            }
  255.            else if(paraadjflag==1)
  256.            { SpeedKI++;
  257.              Dis_num(90,2,SpeedKI);         
  258.            }
  259.            else if(paraadjflag==2)
  260.            { turnsetmax=turnsetmax+5;
  261.              Dis_num(24,4,turnsetmax);         
  262.            }
  263.            else if(paraadjflag==3)
  264.            { TurnD++;
  265.              Dis_num(90,4,TurnD);         
  266.            }
  267.            else if(paraadjflag==4)  //速度
  268.            { SetSpeed = SetSpeed - 5;
  269.              AmSpeed = SetSpeed;
  270.              Dis_num(24,6,SetSpeed);
  271.            }
  272.            while(gpio_get(PORTE,0)==0); //等待按键松开
  273.          }
  274.        }
  275.        if(gpio_get(PORTE,1)==0)  //参数调节
  276.        { delayms(4);
  277.          if(gpio_get(PORTE,1)==0)
  278.          {
  279.            if(paraadjflag==0)   //速度KP 加减
  280.            { SpeedKP--;
  281.              Dis_num(24,2,SpeedKP);
  282.            }
  283.            else if(paraadjflag==1)
  284.            { SpeedKI--;
  285.              Dis_num(90,2,SpeedKI);         
  286.            }
  287.            else if(paraadjflag==2)
  288.            { turnsetmax=turnsetmax-5;
  289.              Dis_num(24,4,turnsetmax);         
  290.            }
  291.            else if(paraadjflag==3)
  292.            { TurnD--;
  293.              Dis_num(90,4,TurnD);         
  294.            }
  295.            else if(paraadjflag==4)  //速度
  296.            { SetSpeed = SetSpeed + 5;
  297.              Dis_num(24,6,SetSpeed);
  298.              AmSpeed = SetSpeed;
  299.            }
  300.            while(gpio_get(PORTE,1)==0); //等待按键松开
  301.          }
  302.        }
  303.        delayms(5);
  304.      }
  305.    }
  306. }

  307. void GPIO_Init()
  308. {
  309.    gpio_init (PORTA, 17, GPO, 1u); //初始化PTE0为高电平输出---LED0
  310.    gpio_set  (PORTA, 19, 0);       //设置PTE0为高电平输出,LED0灭
  311.    gpio_init (PORTE,0,GPI,0);      //按键输入
  312.    gpio_init (PORTE,1,GPI,0);     //按键输入
  313.    gpio_init (PORTE,2,GPI,0);     //按键输入
  314.    gpio_init (PORTE,3,GPI,0);     //按键输入   
  315.    
  316. }

  317. void run()//直立函数 在isr.c中的1ms中断中调用  PIT0_IRQHandler
  318. {   
  319.   TimeCount++ ;
  320.   SpeedPeriodCount++;
  321.   TurnPeriodCount ++ ;
  322.   AAngPeriodCount ++ ;
  323.   if(AAngPeriodCount>=4) AAngPeriodCount=4;
  324.   
  325.   MotorTurnPWM  = TurnPWMOut(TurnPWMOUT,LastTurnPWMOUT,TurnPeriodCount) ;
  326.   MotorSpeedPWM = SpeedPWMOut(g_SpeedControlOutNew ,g_SpeedControlOutOld,SpeedPeriodCount);  
  327.   MotorAAngPWM  = AAangPWMOut(AAngPWM ,LastAAngPWM ,AAngPeriodCount);  
  328.   Checkcarstate();//开启停止判断
  329.   if(TimeCount>=5)//读速度  5ms
  330.   {
  331.     TimeCount=0;
  332.     GetMotorPulse();//读速度脉冲
  333.   }  
  334.   else if(TimeCount == 1)//读取MPU6050
  335.   {      
  336.      xaout=MPU6050_GetDoubleData(MPU6050_ACCEL_XOUT);//读X轴加速度
  337.      yaout=MPU6050_GetDoubleData(MPU6050_ACCEL_YOUT);//读X轴加速度
  338.      zaout=MPU6050_GetDoubleData(MPU6050_ACCEL_ZOUT);//读X轴加速度
  339.      xgout=MPU6050_GetDoubleData(MPU6050_GYRO_XOUT);//读X轴角速度,直立角速度
  340.      ygout=MPU6050_GetDoubleData(MPU6050_GYRO_YOUT);//读Y轴角速度,转向角速度
  341.      angle6550=MPU6050_Get_Angle(xaout,yaout,zaout,0);
  342.   }
  343.   else if(TimeCount == 2)//5ms 直立滤波,控制
  344.   {
  345.     AAngPeriodCount  = 0;
  346.     AngleCalculate();//计算加速值和角度值
  347.     LastAAngPWM = AAngPWM ;      
  348.     AAngPWM = AngleControl() ;     //计算平衡电机速度
  349.     PWMout=MotorSpeedOut(AAngPWM,MotorSpeedPWM,MotorTurnPWM);//电机输出
  350.     //PWMout=MotorSpeedOut(0,0,MotorTurnPWM);
  351.     //PWMout=MotorSpeedOut(AAngPWM,MotorSpeedPWM,0);//电机输出  刚开始用的时候可以把MotorSpeedPWM和MotorTurnPWM都设为0
  352.      //PWMout=MotorSpeedOut(AAngPWM,0,0);//电机输出  刚开始用的时候可以把MotorSpeedPWM和MotorTurnPWM都设为0
  353.     //先调直立,再加速度MotorSpeedPWM,最后加方向MotorTurnPWM
  354.    
  355.   }
  356.   else if(TimeCount == 3)//5ms  速度PI调节
  357.   {
  358.      ATimeCount ++ ;
  359.      if(ATimeCount >= 20)//20*5=100ms进行一次速度PID调节
  360.      {
  361.        ATimeCount=0;
  362.        SpeedPID() ;
  363.        SpeedPeriodCount = 0 ;
  364.        qibu();//起步  不可以一下就把速度加上,要缓慢加
  365.      }
  366.    }
  367.   else if(TimeCount == 4)// CCD图像采集与处理
  368.   {
  369.     ccd_count++;
  370.     if(ccd_count>=4)//20ms进一次
  371.     {
  372.         ccd_count=0;
  373.         ccd_flag=1;//发送图像到上位机标志
  374.         ImageCapture(Pixel) ;//将捕捉到的图像放在Pixel数组中
  375.         //process();//图像处理函数
  376.         FindLine();
  377.         dline = rightline - leftline;
  378.         if((dline>64)||(dline<12)) //十字路或桥上
  379.         { //TurnP = TurnP1;
  380.           //TurnD = TurnD1;
  381.           turnpwmmax=turnsetmax;
  382.         }
  383.         else if((dline>(whitelength+16))||(dline<(whitelength-16))) //丢线
  384.         { turnpwmmax=turnsetmax+50;
  385.           //TurnD = TurnD4;
  386.         }
  387.         else if((dline>(whitelength+9))||(dline<(whitelength-9))) //60度弯道
  388.         { //TurnP = TurnP4;
  389.           //TurnD = TurnD4;
  390.           turnpwmmax=turnsetmax+30;
  391.         }
  392.         else if((dline>(whitelength+4))||(dline<(whitelength-4))) //50度弯道
  393.         { //TurnP = TurnP3;
  394.           //TurnD = TurnD3;
  395.           turnpwmmax=turnsetmax+20;
  396.         }
  397.          else if((dline>(whitelength+2))||(dline<(whitelength-2))) //亚直道
  398.         { //TurnP = TurnP2;
  399.           //TurnD = TurnD2;
  400.           turnpwmmax=turnsetmax;
  401.         }
  402.         else //直道
  403.         { //TurnP = TurnP1;
  404.           //TurnD = TurnD1;
  405.           turnpwmmax=turnsetmax;
  406.         }
  407.         LastTurnPWMOUT = TurnPWMOUT ;
  408.         TurnPWM() ;
  409.         TurnPeriodCount = 0 ;
  410.     }
  411.   }  
  412.   if(TIME1flag_1s == 1)//程序运行灯
  413.   {
  414.     TIME1flag_1s = 0 ;
  415.     PTA17_OUT = ~PTA17_OUT ;
  416.   }
  417. }
  418. void qibu()//这一部分认真看一下,也可以根据自己的想法改一下
  419. {
  420.   if(AmSpeed!=0)//在目标速度不为0时才运行
  421.   {
  422.    start_flag++;
  423.    if(start_flag<30)//静止2S才出发  可根据规则修改
  424.    {  g_Speedgoal=0;
  425.       //SpeedKI=0;
  426.    }
  427.    else if(start_flag>=30)
  428.    {
  429.      if(g_Speedgoal>AmSpeed&&stop_jiasu==0)//然后逐渐加速
  430.      {
  431.          g_Speedgoal-=15; //  30  //单次加速值,值大加速能力强,比赛前可设两组值,一组快速加速,用于应对起步时是长
  432.                          //直道的情况,另一组为慢加速,用于应对起步时就是弯道的情况
  433.      }
  434.      else if(g_Speedgoal<=AmSpeed&&stop_jiasu==0) //内部速度高于设置速度,停止大幅度加速,进行小幅度调整加速
  435.      {
  436.          g_Speedgoal=AmSpeed;
  437.          stop_jiasu=1;
  438.      }                                
  439.      start_flag=3000;  //终止静止2s计数
  440.      //SpeedKI=0;
  441.      if(stop_jiasu==1)        //车模之后的目标速度调整主要在此函数中
  442.      {
  443.        if(g_Speedgoal>AmSpeed)//然后逐渐加速
  444.        {
  445.          g_Speedgoal-=15;//
  446.        }
  447.         else if(g_Speedgoal<=AmSpeed)
  448.        {
  449.          g_Speedgoal=AmSpeed;
  450.        }   
  451.      }
  452.    }
  453.   }
  454. }


  455. void dispage1()
  456. {  Dis_num(0,0,GRAVITY_OFFSET);  //设定值,垂直时加速度AD
  457.    Dis_num(42,0,GYROSCOPE_OFFSET);//陀螺仪零偏  自检平均值
  458.    LCD_P6x8Str(0,1,"Ap:");
  459.    Dis_num(20,1,A_P);//加计零偏 定值
  460.    LCD_P6x8Str(60,1,"Ad:");
  461.    Dis_num(80,1,A_D);
  462.    
  463.    LCD_P6x8Str(0,2,"Vp:");
  464.    Dis_num(20,2,V_P);
  465.    LCD_P6x8Str(60,2,"Vd:");
  466.    Dis_num(80,2,V_I);
  467.    
  468.    LCD_P6x8Str(0,3,"Tp:");
  469.    Dis_num(20,3,T_P);
  470.    LCD_P6x8Str(60,3,"Td:");
  471.    Dis_num(80,3,T_D);
  472.    
  473.    LCD_P6x8Str(0,4,"A      S      C");
  474.    
  475.    LCD_P6x8Str(0,5,"Spd");
  476.    LCD_P6x8Str(1,7,"LMB:");
  477.    LCD_P6x8Str(64,7,"RMB:");
  478. }

  479. void disdata1()
  480. {    Dis_num(6,4,angletmp);
  481.      Dis_num(48,4,-AmSpeed);
  482.      Dis_num(90,4,TurnPosition);
  483.      A_P = ANGLE_CONTROL_P;
  484.      A_D = ANGLE_CONTROL_D*10;
  485.      V_P = SpeedKP;
  486.      V_I = SpeedKI;  
  487.      T_P = TurnP;
  488.      T_D = TurnD;  
  489.      Dis_num(20,1,A_P);//加计零偏 定值
  490.      //Dis_num(80,1,A_D);
  491.      Dis_num(80,1,TurnPWMOUT);
  492.      Dis_num(20,2,V_P);
  493.      Dis_num(80,2,V_I);
  494.      Dis_num(20,3,T_P);
  495.      Dis_num(80,3,T_D);
  496.      delayms(50);
  497.      Dis_num(10,6,leftlineold);  //赛道左边界
  498.      Dis_num(94,6,rightlineold); //赛道右边界
  499.      Dis_num(52,6,dline); //赛道右-左
  500.      Dis_num(28,7,sumlspeed);
  501.      Dis_num(96,7,sumrspeed);
  502.      Dis_num(20,5,AmSpeed);
  503.      Dis_num(80,5,turnsetmax);
  504. }

  505. void dispage2()
  506. {  LCD_P6x8Str(0,0,"CCD DATA UP&DIS");
  507.    LCD_P6x8Str(0,1,"L:        R:");
  508.    Dis_num(20,1,leftlineold);  //赛道左边界
  509.    Dis_num(94,1,rightlineold); //赛道右边界
  510. }

  511. void disdata2()
  512. {  Dis_num(20,1,leftlineold);  //赛道左边界
  513.    Dis_num(94,1,rightlineold); //赛道右边界
  514. }
  515. ……………………

  516. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:

K60_CCD直立.rar (13.35 MB, 下载次数: 55)



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2018-5-12 06:08 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表