找回密码
 立即注册

QQ登录

只需一步,快速开始

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

路过哪位大佬可以帮我修改一下这个小车避障单片机代码吗

[复制链接]
跳转到指定楼层
楼主
ID:569281 发表于 2019-6-22 09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<AT89X52.H>        //包含51单片机头文件,内部有各种寄存器定义
    sbit  DJ=P1^7;  //电机输出控制线
//主函数
void main(void)
{
unsigned char i;
    //P1=0X00; //关电车电机
    TMOD=0X01;
         TH0= 0XFc;    //1ms定时
          TL0= 0X18;
            TR0= 1;
         ET0= 1;
         EA = 1;       //开总中断
while(1) //无限循环
{
  
    //有信号为0  没有信号为1
              if(Left_1_led==1&&Right_1_led==1)
     run();  //调用前进函数
     else
    {     
          if(Left_1_led==1&&Right_1_led==0)     //右边检测到红外信号
      {
           leftrun();   //调用小车左转函数
        }
      
        if(Right_1_led==1&&Left_1_led==0)  //左边检测到红外信号
      {   
             rightrun();  //调用小车右转函数
   
      }
   }  
  }
}


Build target 'Target 1'
assembling STARTUP.A51...
compiling 11.c...
11.C(21): error C202: 'Left_1_led': undefined identifier
Target not created
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:405033 发表于 2019-6-22 13:00 | 只看该作者
兄台,你这个肯定是有个h文件没有加进去,你这个Left_1_led都没有定义到,肯定有错误呀,这个应该是循迹模块的定义,你去找找吧,要不然你自己定义一个也可以的,一般h文件里面帮你定义好了
回复

使用道具 举报

板凳
ID:552614 发表于 2019-6-22 15:41 | 只看该作者
如果只是这个头文件的问题的话,那应该可以解决,但是不知道你定义的小车移动的函数有没有问题
回复

使用道具 举报

地板
ID:155507 发表于 2019-6-22 22:41 | 只看该作者
我给你来个程序试试

  1. #include <AT89X52.H>        //包含51单片机头文件,内部有各种寄存器定义
  2. #define Left_1_led        P3_4      //P3_4接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1
  3. #define Left_2_led        P3_5      //P3_5接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2        

  4. #define Right_1_led       P3_6      //P3_6接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3
  5. #define Right_2_led       P3_7      //P3_7接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4


  6. #define Left_moto_pwm     P1_1      //PWM信号端
  7. #define Left_moto_pwm1    P1_3

  8. #define Right_moto_pwm    P1_5
  9. #define Right_moto_pwm1   P1_7


  10. #define Left_moto_go      {P1_0=1,P1_1=0,P1_2=1,P1_3=0;}    //左边两个电机向前走
  11. #define Left_moto_back    {P1_0=0,P1_1=1,P1_2=0,P1_3=1;}    //左边两个电机向后转
  12. #define Left_moto_Stop    {P1_0=0,P1_1=0,P1_2=0,P1_3=0;}    //左边两个电机停转                     
  13. #define Right_moto_go     {P1_4=1,P1_5=0,P1_6=1,P1_7=0;}    //右边两个电机向前走
  14. #define Right_moto_back   {P1_4=0,P1_5=1,P1_6=0,P1_7=1;}    //右边两个电机向前走
  15. #define Right_moto_Stop   {P1_4=0,P1_5=0,P1_6=0,P1_7=0;}    //右边两个电机停转   

  16. unsigned char pwm_val_left  =0;//变量定义
  17. unsigned char push_val_left =0;// 左电机占空比N/10
  18. unsigned char pwm_val_right =0;
  19. unsigned char push_val_right=0;// 右电机占空比N/10
  20. bit Right_moto_stop=1;
  21. bit Left_moto_stop =1;
  22. unsigned  int  time=0;

  23. //前速前进
  24. void  run(void)
  25. {
  26.         push_val_left=7;         //速度调节变量 0-9。。。9最小,0最大
  27.         push_val_right=7;
  28.         Left_moto_go ;   //左电机往前走
  29.         Right_moto_go ;  //右电机往前走
  30. }

  31. //前速后退
  32. void  backrun(void)
  33. {
  34.         push_val_left=3;         //速度调节变量 0-9。。。0最小,1最大
  35.         push_val_right=3;
  36.         Left_moto_back ;   //左电机往前走
  37.         Right_moto_back ;  //右电机往前走
  38. }

  39. //左转
  40. void  leftrun(void)
  41. {
  42.        
  43.         Left_moto_back ;   //左电机往前走
  44.         Right_moto_go ;  //右电机往前走
  45. }

  46. //右转
  47. void  rightrun(void)
  48. {
  49.        
  50.         Left_moto_go ;   //左电机往前走
  51.         Right_moto_back ;  //右电机往前走
  52. }
  53. /************************************************************************/
  54. /*                    PWM调制电机转速                                   */
  55. /************************************************************************/
  56. /*                    左电机调速                                        */
  57. /*调节push_val_left的值改变电机转速,占空比            */
  58. void pwm_out_left_moto(void)
  59. {  
  60.         if(Left_moto_stop)
  61.         {
  62.                 if(pwm_val_left<=push_val_left)
  63.                 {
  64.                         Left_moto_pwm=1;
  65.                         Left_moto_pwm1=1;
  66.                 }
  67.                 else
  68.                 {
  69.                         Left_moto_pwm=0;
  70.                         Left_moto_pwm1=0;
  71.                 }
  72.                 if(pwm_val_left>=10)
  73.                 pwm_val_left=0;
  74.         }
  75.         else   
  76.         {
  77.                 Left_moto_pwm=0;
  78.                 Left_moto_pwm1=0;
  79.         }
  80. }
  81. /******************************************************************/
  82. /*                    右电机调速                                  */  
  83. void pwm_out_right_moto(void)
  84. {
  85.         if(Right_moto_stop)
  86.         {
  87.                 if(pwm_val_right<=push_val_right)
  88.                 {
  89.                         Right_moto_pwm=1;
  90.                         Right_moto_pwm1=1;
  91.                 }
  92.                 else
  93.                 {
  94.                         Right_moto_pwm=0;
  95.                         Right_moto_pwm1=0;
  96.                 }
  97.                 if(pwm_val_right>=10)
  98.                 pwm_val_right=0;
  99.         }
  100.         else   
  101.         {
  102.                 Right_moto_pwm=0;
  103.                 Right_moto_pwm1=0;
  104.         }
  105. }

  106. /***************************************************/
  107. ///*TIMER0中断服务子函数产生PWM信号*/
  108. void timer0()interrupt 1   using 2
  109. {
  110.         TH0=0XFc;          //1Ms定时
  111.         TL0=0X18;
  112.         time++;
  113.         pwm_val_left++;
  114.         pwm_val_right++;
  115.         pwm_out_left_moto();
  116.         pwm_out_right_moto();
  117. }        

  118. //主函数
  119. void main(void)
  120. {
  121.         unsigned char i;
  122.         //P1=0X00; //关电车电机
  123.         TMOD|=0x01;
  124.         TH0= 0xFc;    //1ms定时
  125.         TL0= 0x18;
  126.         TR0= 1;
  127.         ET0= 1;
  128.         EA = 1;       //开总中断
  129.         while(1) //无限循环
  130.         {

  131.                 //有信号为0  没有信号为1
  132.                 if(Left_1_led==1&&Right_1_led==1)
  133.                 run();  //调用前进函数
  134.                 else
  135.                 {     
  136.                         if(Left_1_led==1&&Right_1_led==0)     //右边检测到红外信号
  137.                         {
  138.                                 leftrun();   //调用小车左转函数
  139.                         }
  140.                        
  141.                         if(Right_1_led==1&&Left_1_led==0)  //左边检测到红外信号
  142.                         {   
  143.                                 rightrun();  //调用小车右转函数
  144.                                
  145.                         }
  146.                 }  
  147.         }
  148. }


复制代码
回复

使用道具 举报

5#
ID:282095 发表于 2019-6-23 06:25 | 只看该作者
首先没有添加避障小车的相关内容模块,并且没有使用电机正反转控制小车运动。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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