微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 中间循迹不好用,谁帮忙看一下为什么?

中间循迹不好用,谁帮忙看一下为什么?

时间:10-02 整理:3721RD 点击:
C51 COMPILER V9.00   MAIN                                                                  02/18/2016 14:27:20 PAGE 1   
C51 COMPILER V9.00, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level    source
   1          /**********************ZYWIFI0939C-WIFI机器人实验板例程************************
   2          *  平台:ZYWIFI0939C-WIFI机器人 + Keil U4 + STC89C52
   3          *  名称:ZY-1智能小车参考程序
   4          *  公司:湖南智宇科教设备有限公司
   
   7          *  编写:智宇公司研发一部
   8          *  日期:2015-1-15
   9          *  交流:智能车QQ:261339276
  10          *  晶振:11.0592MHZ
  11          *  说明:免费开源,不提供源代码分析
  12          *  硬件设置:要有自己动手能力,才能完成实验
  13          *  使用说明:根据下面IO口自己用杜邦线连接各种模块,可以自己修改各种模块IO口
  14          *  视频教程:本小车配套学习C语言详细视频教程,资料统一网盘下载
  15             重点提示:本程序只做参考,不提供技术支持,请自己研究吸收。
  16         
  17          /******************************************************************/
  18                  
  19                  //注意程序只做参考之用,要达到最理想的寻迹效果,还需要同学们细心调试。  
  20                  #include<AT89X52.H>               //包含51单片机头文件,内部有各种寄存器定义
  21                  #include<ZY-4WD_PWM.H>            //包含HL-1蓝牙智能小车驱动IO口定义等函数
  22              
  23          //主函数
  24                  void main(void)
  25          {      
  26   1      
  27   1              unsigned char i;
  28   1          P1=0X00;   //关电机
  29   1      
  30   1                              TMOD=0X01;
  31   1                      TH0= 0XFc;                //1ms定时
  32   1                      TL0= 0X18;
  33   1                      TR0= 1;
  34   1                      ET0= 1;
  35   1                      EA = 1;                    //开总中断
  36   1      
  37   1      
  38   1              while(1)        //无限循环
  39   1              {
  40   2               
  41   2                               //有信号为0  没有信号为1
  42   2      
  43   2                    if(Left_1_led==0 &&  interm_1_led  ==1 && Right_1_led == 0)
  44   2      
  45   2                                 run();  //调用前进函数
  46   2                                 //delay(40);
  47   2                                else
  48   2                               {                        
  49   3                                                    if(Left_1_led==1 &&  interm_1_led  ==0 && Right_1_led == 0)           //左边检测到黑线
  50   3                                       {
  51   4                                                leftrun();              //调用小车左转  函数
  52   4                                                delay(2);
  53   4                                   }
  54   3      
  55   3                                 
C51 COMPILER V9.00   MAIN                                                                  02/18/2016 14:27:20 PAGE 2   
  56   3                                             if(Left_1_led==1 &&  interm_1_led  ==1 && Right_1_led == 0)          //左边检测到黑线
  57   3                                       {
  58   4                                                leftrun();              //调用小车左转  函数
  59   4                                                delay(2);
  60   4                                   }
  61   3      
  62   3                                                                  if(Left_1_led==0 &&  interm_1_led  ==0 && Right_1_led == 1)                 //右边检测到黑线
  63   3                                        {      
  64   4                                            rightrun();                  //调用小车右转       函数
  65   4                                                delay(2);
  66   4                                        }
  67   3      
  68   3                                                    if(Left_1_led==0 &&  interm_1_led  ==1 && Right_1_led == 1)           //左边检测到黑线
  69   3                                       {
  70   4                                                rightrun();             //调用小车右转  函数
  71   4                                                delay(2);
  72   4                                   }
  73   3                                                          if(Left_1_led==1 &&  interm_1_led  ==1 && Right_1_led == 1)                 //悬空状态  避悬崖
  74   3                                        {      
  75   4                                             stop();             //调用小车停止
  76   4      
  77   4                                        }
  78   3      
  79   3                                                          if(Left_1_led==0 &&  interm_1_led  ==0 && Right_1_led == 0)                 //
  80   3                                        {      
  81   4                                              run();             //调用小车后退
  82   4                                                  delay(2);
  83   4                                                //rightrun();           //调用小车左转  函数
  84   4                                                //delay(10);
  85   4      
  86   4                                        }
  87   3      
  88   3                              }        
  89   2               }
  90   1      }
*** WARNING C280 IN LINE 27 OF MAIN.C: 'i': unreferenced local variable
MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    316    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)
平台:ZYWIFI0939C-WIFI机器人 + Keil U4 + STC89C52
*  名称:ZY-1智能小车参考程序
*  公司:湖南智宇科教设备有限公司
*  *  日期:2015-1-15
*  交流:智能车QQ:261339276
*  晶振:11.0592MHZ
*  说明:免费开源,不提供源代码分析
*  硬件设置:要有自己动手能力,才能完成实验
*  使用说明:根据下面IO口自己用杜邦线连接各种模块,可以自己修改各种模块IO口
*  视频教程:本小车配套学习C语言详细视频教程,资料统一网盘下载
   重点提示:本程序只做参考,不提供技术支持,请自己研究吸收。
  ZYWIFI0939WIFI控制智能机器人杜邦线接线方法,请一定照做,否则可能不工作,并烧毁小车。
******************************************************************/
#ifndef _LED_H_
#define _LED_H_
    //定义小车驱动模块输入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 BUZZ=P2^3;

    #define Left_1_led        P3_7  //左传感器  

    #define Right_1_led       P3_6  //右传感器

#define interm_1_led      P0_0  //中传感器   
   
#define Left_moto_pwm   P1_6  //PWM信号端
#define Right_moto_pwm   P1_7  //PWM信号端

#define Left_moto_go      {P1_2=1,P1_3=0;}  //左电机向前走
#define Left_moto_back    {P1_2=0,P1_3=1;}  //左边电机向后转
#define Left_moto_Stop    {P1_2=0,P1_3=0;}         //左边电机停转                     
#define Right_moto_go     {P1_4=1,P1_5=0;} //右边电机向前走
#define Right_moto_back   {P1_4=0,P1_5=1;} //右边电机向后走
#define Right_moto_Stop   {P1_4=0,P1_5=0;}       //右边电机停转   
unsigned char pwm_val_left  =0;//变量定义
unsigned char push_val_left =0;// 左电机占空比N/20
unsigned char pwm_val_right =0;
unsigned char push_val_right=0;// 右电机占空比N/20
bit Right_moto_stop=1;
bit Left_moto_stop =1;
unsigned  int  time=0;
   
/************************************************************************/
//延时函数
   void delay(unsigned int k)
{   
     unsigned int x,y;
  for(x=0;x<k;x++)
    for(y=0;y<2000;y++);
}
/************************************************************************/
//前速前进
     void  run(void)
{
     push_val_left=15;  //速度调节变量 0-20。0最小,20最大
  push_val_right=15;
  Left_moto_go ;   //左电机往前走
  Right_moto_go ;  //右电机往前走
}
//后退函数
     void  backrun(void)
{
     push_val_left=15;  //速度调节变量 0-20。0最小,20最大
  push_val_right=15;
  Left_moto_back;   //左电机往后走
  Right_moto_back;  //右电机往后走
}
//左转
     void  leftrun(void)
{  
     push_val_left=6;
  push_val_right=15;
  Left_moto_back  ;  //左电机往后走
     Right_moto_go  ;  //右电机往前
}
//右转
     void  rightrun(void)
{
  push_val_left=15;
  push_val_right=6;
     Right_moto_back  ;   //左电机往前走
  Left_moto_go   ;  //右电机往后
}
//停止
     void  stop(void)
{  
     
  Right_moto_Stop ;  //右电机停止
     Left_moto_Stop  ;  //左电机停止
}
/************************************************************************/
/*                    PWM调制电机转速                                   */
/************************************************************************/
/*                    左电机调速                                        */
/*调节push_val_left的值改变电机转速,占空比            */
  void pwm_out_left_moto(void)
{  
   if(Left_moto_stop)
   {
    if(pwm_val_left<=push_val_left)
        {
       Left_moto_pwm=1;
//       Left_moto_pwm1=1;
     }
else
        {
          Left_moto_pwm=0;
//       Left_moto_pwm1=0;
     }
if(pwm_val_left>=20)
        pwm_val_left=0;
   }
   else   
          {
           Left_moto_pwm=0;
//           Left_moto_pwm1=0;
    }
}
/******************************************************************/
/*                    右电机调速                                  */  
   void pwm_out_right_moto(void)
{
  if(Right_moto_stop)
   {
    if(pwm_val_right<=push_val_right)
       {
        Right_moto_pwm=1;
//     Right_moto_pwm1=1;
     }
else
       {
     Right_moto_pwm=0;
//     Right_moto_pwm1=0;
    }
if(pwm_val_right>=20)
        pwm_val_right=0;
   }
   else   
          {
           Right_moto_pwm=0;
//           Right_moto_pwm1=0;
       }
}
      
/***************************************************/
///*TIMER0中断服务子函数产生PWM信号*/
  void timer0()interrupt 1   using 2
{
     TH0=0XFc;   //1Ms定时
  TL0=0X18;
  time++;
  pwm_val_left++;
  pwm_val_right++;
  pwm_out_left_moto();
  pwm_out_right_moto();
}
/*********************************************************************/
#endif
AT89X52.H
Header file for the low voltage Flash Atmel AT89C52 and AT89LV52.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __AT89X52_H__
#define __AT89X52_H__
/*------------------------------------------------
Byte Registers
------------------------------------------------*/
sfr P0      = 0x80;
sfr SP      = 0x81;
sfr DPL     = 0x82;
sfr DPH     = 0x83;
sfr PCON    = 0x87;
sfr TCON    = 0x88;
sfr TMOD    = 0x89;
sfr TL0     = 0x8A;
sfr TL1     = 0x8B;
sfr TH0     = 0x8C;
sfr TH1     = 0x8D;
sfr P1      = 0x90;
sfr SCON    = 0x98;
sfr SBUF    = 0x99;
sfr P2      = 0xA0;
sfr IE      = 0xA8;
sfr P3      = 0xB0;
sfr IP      = 0xB8;
sfr T2CON   = 0xC8;
sfr T2MOD   = 0xC9;
sfr RCAP2L  = 0xCA;
sfr RCAP2H  = 0xCB;
sfr TL2     = 0xCC;
sfr TH2     = 0xCD;
sfr PSW     = 0xD0;
sfr ACC     = 0xE0;
sfr B       = 0xF0;
/*------------------------------------------------
P0 Bit Registers
------------------------------------------------*/
sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
sbit P0_3 = 0x83;
sbit P0_4 = 0x84;
sbit P0_5 = 0x85;
sbit P0_6 = 0x86;
sbit P0_7 = 0x87;
/*------------------------------------------------
PCON Bit Values
------------------------------------------------*/
#define IDL_    0x01
#define STOP_   0x02
#define PD_     0x02    /* Alternate definition */
#define GF0_    0x04
#define GF1_    0x08
#define SMOD_   0x80
/*------------------------------------------------
TCON Bit Registers
------------------------------------------------*/
sbit IT0  = 0x88;
sbit IE0  = 0x89;
sbit IT1  = 0x8A;
sbit IE1  = 0x8B;
sbit TR0  = 0x8C;
sbit TF0  = 0x8D;
sbit TR1  = 0x8E;
sbit TF1  = 0x8F;
/*------------------------------------------------
TMOD Bit Values
------------------------------------------------*/
#define T0_M0_   0x01
#define T0_M1_   0x02
#define T0_CT_   0x04
#define T0_GATE_ 0x08
#define T1_M0_   0x10
#define T1_M1_   0x20
#define T1_CT_   0x40
#define T1_GATE_ 0x80
#define T1_MASK_ 0xF0
#define T0_MASK_ 0x0F
/*------------------------------------------------
P1 Bit Registers
------------------------------------------------*/
sbit P1_0 = 0x90;
sbit P1_1 = 0x91;
sbit P1_2 = 0x92;
sbit P1_3 = 0x93;
sbit P1_4 = 0x94;
sbit P1_5 = 0x95;
sbit P1_6 = 0x96;
sbit P1_7 = 0x97;
sbit T2   = 0x90;       /* External input to Timer/Counter 2, clock out */
sbit T2EX = 0x91;       /* Timer/Counter 2 capture/reload trigger & dir ctl */
/*------------------------------------------------
SCON Bit Registers
------------------------------------------------*/
sbit RI   = 0x98;
sbit TI   = 0x99;
sbit RB8  = 0x9A;
sbit TB8  = 0x9B;
sbit REN  = 0x9C;
sbit SM2  = 0x9D;
sbit SM1  = 0x9E;
sbit SM0  = 0x9F;
/*------------------------------------------------
P2 Bit Registers
------------------------------------------------*/
sbit P2_0 = 0xA0;
sbit P2_1 = 0xA1;
sbit P2_2 = 0xA2;
sbit P2_3 = 0xA3;
sbit P2_4 = 0xA4;
sbit P2_5 = 0xA5;
sbit P2_6 = 0xA6;
sbit P2_7 = 0xA7;
/*------------------------------------------------
IE Bit Registers
------------------------------------------------*/
sbit EX0  = 0xA8;       /* 1=Enable External interrupt 0 */
sbit ET0  = 0xA9;       /* 1=Enable Timer 0 interrupt */
sbit EX1  = 0xAA;       /* 1=Enable External interrupt 1 */
sbit ET1  = 0xAB;       /* 1=Enable Timer 1 interrupt */
sbit ES   = 0xAC;       /* 1=Enable Serial port interrupt */
sbit ET2  = 0xAD;       /* 1=Enable Timer 2 interrupt */
sbit EA   = 0xAF;       /* 0=Disable all interrupts */
/*------------------------------------------------
P3 Bit Registers (Mnemonics & Ports)
------------------------------------------------*/
sbit P3_0 = 0xB0;
sbit P3_1 = 0xB1;
sbit P3_2 = 0xB2;
sbit P3_3 = 0xB3;
sbit P3_4 = 0xB4;
sbit P3_5 = 0xB5;
sbit P3_6 = 0xB6;
sbit P3_7 = 0xB7;
sbit RXD  = 0xB0;       /* Serial data input */
sbit TXD  = 0xB1;       /* Serial data output */
sbit INT0 = 0xB2;       /* External interrupt 0 */
sbit INT1 = 0xB3;       /* External interrupt 1 */
sbit T0   = 0xB4;       /* Timer 0 external input */
sbit T1   = 0xB5;       /* Timer 1 external input */
sbit WR   = 0xB6;       /* External data memory write strobe */
sbit RD   = 0xB7;       /* External data memory read strobe */
/*------------------------------------------------
IP Bit Registers
------------------------------------------------*/
sbit PX0  = 0xB8;
sbit PT0  = 0xB9;
sbit PX1  = 0xBA;
sbit PT1  = 0xBB;
sbit PS   = 0xBC;
sbit PT2  = 0xBD;
/*------------------------------------------------
T2CON Bit Registers
------------------------------------------------*/
sbit CP_RL2= 0xC8;      /* 0=Reload, 1=Capture select */
sbit C_T2 = 0xC9;       /* 0=Timer, 1=Counter */
sbit TR2  = 0xCA;       /* 0=Stop timer, 1=Start timer */
sbit EXEN2= 0xCB;       /* Timer 2 external enable */
sbit TCLK = 0xCC;       /* 0=Serial clock uses Timer 1 overflow, 1=Timer 2 */
sbit RCLK = 0xCD;       /* 0=Serial clock uses Timer 1 overflow, 1=Timer 2 */
sbit EXF2 = 0xCE;       /* Timer 2 external flag */
sbit TF2  = 0xCF;       /* Timer 2 overflow flag */
/*------------------------------------------------
T2MOD Bit Values
------------------------------------------------*/
#define DCEN_   0x01    /* 1=Timer 2 can be configured as up/down counter */
#define T2OE_   0x02    /* Timer 2 output enable */
/*------------------------------------------------
PSW Bit Registers
------------------------------------------------*/
sbit P    = 0xD0;
sbit F1   = 0xD1;
sbit OV   = 0xD2;
sbit RS0  = 0xD3;
sbit RS1  = 0xD4;
sbit F0   = 0xD5;
sbit AC   = 0xD6;
sbit CY   = 0xD7;
/*------------------------------------------------
Interrupt Vectors:
Interrupt Address = (Number * 8) + 3
------------------------------------------------*/
#define IE0_VECTOR 0  /* 0x03 External Interrupt 0 */
#define TF0_VECTOR 1  /* 0x0B Timer 0 */
#define IE1_VECTOR 2  /* 0x13 External Interrupt 1 */
#define TF1_VECTOR 3  /* 0x1B Timer 1 */
#define SIO_VECTOR 4  /* 0x23 Serial port */
#define TF2_VECTOR 5  /* 0x2B Timer 2 */
#define EX2_VECTOR 5  /* 0x2B External Interrupt 2 */
#endif


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top