找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机寻迹小车算法寻黑线程序

  [复制链接]
跳转到指定楼层
楼主
ID:262645 发表于 2018-4-25 18:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51寻迹小车算法

单片机源程序如下:
  1. /*****************ZY08-C智能循迹、遥控、避障、寻光机器人*****************
  2. //=====================================================================//
  3. //                      寻迹与直流电机驱动演示程序                     //
  4. //  本程序通过前方的红外探头来检测地面的信号,根据道路的要求,当道路为白 //
  5. // 色时,红外接收到信号,与地面检测的红外相应端口低电平,当道路为黑色时 //
  6. //,与地面检测的红外相应端口为高电平,我们就可以根据这和判断条件来进行  //
  7. //道路黑白线的寻找.                                                    //
  8. //  声明:由于红外接收头对光线要求较高,所以对于黑白两种颜色选择对比度  //
  9. //高为好,而且因为道路建立不同,需要根据实际的需要来改写相应的延迟时间 //
  10. //以适应角度的最有较转弯,道路应根据红外接收头的两个宽度来制定,如果道 //
  11. //路较小,或较大者,请调整以适应小车的正确运行.                        //
  12. //  备注:这里的程序以走白线为主,当用户需要选择走黑线时,请根据例程作出//
  13. //实际修改。并改写相应的延迟时间函数,以进行转弯角度在的最优化调整.    //
  14. //---------------------------------------------------------------------//

  15. *  平台:ZY08-C智能循迹、遥控、避障、寻光机器人 + Keil U4 + STC89C52
  16. *  程序名称:ZY08-C循迹寻黑线程序
  17. *  公司:湖南智宇科教设备有限公司
  18. *  编写:智宇公司研发一部
  19. *  交流:智能车QQ:1018973181
  20. *  晶振:11.0592MHZ
  21. ******************************************************************/                     //

  22. #include <REGX52.H> //包含51单片机相关的头文件

  23. sbit LeftLed=P2^0;                        //定义前方左侧指示灯端口
  24. sbit RightLed=P0^7;                       //定义前方右侧指示灯端口
  25. sbit FontLled=P1^0;

  26. sbit LeftIR=P3^5;                         //定义前方左侧红外探头端口
  27. sbit RightIR=P3^6;                        //定义前方右侧红外探头端口
  28. sbit FontIR=P3^7;                         //定义前方正前方红外探头端口

  29. sbit M1A=P0^0;                            //定义左侧电机驱动A端
  30. sbit M1B=P0^1;                            //定义左侧电机驱动B端

  31. sbit M2A=P0^2;                            //定义右侧电机驱动A端
  32. sbit M2B=P0^3;                            //定义右侧电机驱动B端

  33. sbit B1=P0^4;                             //定义语音识识别传感器端口
  34. sbit SB1=P0^6;                            //定义蜂鸣器端口


  35. void tingzhi()
  36. {
  37.    M1A=0;                                   //将M1电机A端初始化为0
  38.    M1B=0;                                   //将M1电机B端初始化为0
  39.    M2A=0;                                   //将M2电机A端初始化为0
  40.    M2B=0;

  41. }

  42. void qianjin()
  43. {
  44.    M1A=1;                                   
  45.    M1B=0;                                   
  46.    M2A=1;                                   
  47.    M2B=0;
  48. }

  49. void houtui()
  50. {
  51.    M1A=0;                                   
  52.    M1B=1;                                   
  53.    M2A=0;                                   
  54.    M2B=1;
  55. }

  56. void zuozhuan()
  57. {
  58.    M1A=0;                                   
  59.    M1B=1;                                   
  60.    M2A=1;                                   
  61.    M2B=0;
  62. }

  63. void youzhuan()
  64. {
  65.    M1A=1;                                   
  66.    M1B=0;                                   
  67.    M2A=0;                                   
  68.    M2B=1;
  69. }

  70. void delay_nus(unsigned int i)  //延时:i>=12 ,i的最小延时单12 us
  71. {
  72.   i=i/10;
  73.   while(--i);
  74. }   
  75. void delay_nms(unsigned int n)  //延时n ms
  76. {
  77.   n=n+1;
  78.   while(--n)  
  79.   delay_nus(900);         //延时 1ms,同时进行补偿
  80.   
  81. }  


  82. void ControlCar(unsigned char ConType)    //定义电机控制子程序
  83. {

  84.   tingzhi();
  85. switch(ConType)                          //判断用户设定电机形式
  86. {
  87.   case 1:  //前进                         //判断用户是否选择形式1
  88.   {
  89.     qianjin();
  90.     break;
  91.   }
  92.   case 2: //后退                          //判断用户是否选择形式2
  93.   {
  94.     houtui();                                //M2电机反转
  95.     break;
  96.   }
  97.   case 3: //左转                          //判断用户是否选择形式3
  98.   {
  99.     zuozhuan();                               //M2电机正转
  100.         break;
  101.   }
  102.   case 4: //右转                          //判断用户是否选择形式4
  103.   {
  104.     youzhuan();                                //M1电机正转
  105.                                           //M2电机反转
  106.         break;
  107.   }
  108.   case 8: //停止                          //判断用户是否选择形式8
  109.   {
  110.     tingzhi();
  111.         break;                                //退出当前选择
  112.   }
  113. }
  114. }
  115. void main()                               //主程序入口
  116. {
  117.   bit RunFlag=0;                          //定义小车运行标志位
  118.   //RunShow=0;                              //初始化显示状态

  119.   ControlCar(8);                          //初始化小车运行状态
  120.   while(1)                                //程序主循环
  121.   {
  122.    Start:

  123.    LeftLed=LeftIR;                        //前方左侧指示灯指示出前方左侧红外探头状态
  124.    RightLed=RightIR;                      //前方右侧指示灯指示出前方右侧红外探头状态
  125.    FontLled= FontIR;
  126.    SB1=LeftIR;
  127.    if(LeftIR == 0 && RightIR == 0)    //三个红外检测到黑线,就前进
  128.    {
  129.       ControlCar(1);                      //左侧没有信号时,开始向右转一定的角度
  130.       delay_nms (10);
  131.           goto NextRun;
  132.    }
  133.    
  134.    if(LeftIR == 0 && RightIR == 1)
  135.    {
  136.       ControlCar(3);                      //右侧没有信号时,开始向左转一定的角度
  137.       delay_nms (10);
  138.           goto NextRun;
  139.    }

  140.    if(LeftIR == 1 && RightIR == 0)
  141.    {
  142.       ControlCar(4);                      //右侧没有信号时,开始向左转一定的角度
  143.       delay_nms (10);
  144.           goto NextRun;
  145.    }


  146.    goto Start;
  147.    NextRun:
  148.    ControlCar(8);
  149.   }
  150. }

  151. //备注:此例程仅为参考程序,请根据自己的道路进行最优化调整。
复制代码

所有资料51hei提供下载:
循迹 寻黑线程序.rar (31.88 KB, 下载次数: 86)


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

使用道具 举报

沙发
ID:317858 发表于 2018-4-27 16:18 | 只看该作者
你好,方便发一张仿真图的照片吗?
回复

使用道具 举报

板凳
ID:307030 发表于 2018-4-29 17:58 | 只看该作者
请问一下,第146行的SB1是什么意思?
回复

使用道具 举报

地板
ID:341867 发表于 2018-6-1 01:02 来自手机 | 只看该作者
电机反转是怎么做到的
回复

使用道具 举报

5#
ID:397847 发表于 2018-9-14 11:12 | 只看该作者
荷去河从 发表于 2018-4-29 17:58
请问一下,第146行的SB1是什么意思?

蜂鸣器的端口,前面定义P0^6端口
回复

使用道具 举报

6#
ID:262645 发表于 2018-11-30 14:30 来自手机 | 只看该作者
956791664 发表于 2018-4-27 16:18
你好,方便发一张仿真图的照片吗?

没有仿真图,这是上学期的课设
回复

使用道具 举报

7#
ID:575799 发表于 2019-7-1 16:53 | 只看该作者
用什么软件编程呀
回复

使用道具 举报

8#
ID:580104 发表于 2019-7-17 15:25 | 只看该作者
备注很详细,资料不错,学习一下 ...
回复

使用道具 举报

9#
ID:617081 发表于 2019-9-27 11:10 | 只看该作者
采用几个红外对管
回复

使用道具 举报

10#
ID:710390 发表于 2020-3-17 20:02 | 只看该作者
方便分享一下设计吗ummm
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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