找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机循迹小车测试程序

[复制链接]
跳转到指定楼层
楼主
ID:538865 发表于 2019-6-21 09:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


单片机源程序如下:
  1. //        CCAP0H的数值为控制左轮快慢        CCAP1H的数值为控制右轮快慢         CCAP0H与CCAP1数值只能在0-255之内
  2. //        通过修改        CCAP0H 与        CCAP1H         的数值来使小车可以直线前进,再进一步调整向左向右的函数来实现目标
  3. //注 void xunji() 与 void PWM_init()函数不必修改
  4. //CCAP0L/0H=P1.3  左轮  L298N控制左电机线接单片机        P1.3
  5. //CCAP1L/1H=P1.4  右轮        L298N控制右电机线接单片机        P1.4
  6. #include<STC12C5A.h>
  7. #define uchar unsigned char
  8. #define uint  unsigned int
  9. void PWM_init();                //定义调速函数
  10. void ys(uint i);                //定义延时函数
  11. sbit b=P1^1;                 //        L298N控制右电机第二根线线接单片P1.1
  12. sbit d=P1^2;                //        L298N控制左电机第二根线线接单片机        P1.2

  13. sbit z2=P2^0;                //循迹模块左二信号线接单片机P2.0
  14. sbit z1=P2^1;                //循迹模块左一信号线接单片机P2.1
  15. sbit zj=P2^2;                 //循迹模块中间信号线接单片机P2.2
  16. sbit y1=P2^3;                //循迹模块右一信号线接单片机P2.3
  17. sbit y2=P2^4;                 //循迹模块右二信号线接单片机P2.4
  18. void zuo()         //控制车向左走
  19. {

  20.         CCAP0H = 180;
  21.         CCAP1H = 160;         //55
  22.         b=0;
  23.         d=0;
  24. }
  25. void you()           //控制车向右走
  26. {

  27.         CCAP0H = 160;        //55
  28.         CCAP1H = 180;
  29.         b=0;
  30.         d=0;
  31. }
  32. void dazuo()
  33. {

  34.         CCAP0H = 150;
  35.         CCAP1H = 100;         //55
  36.         b=0;
  37.         d=0;
  38. }
  39. void dayou()
  40. {

  41.         CCAP0H = 100;        //55
  42.         CCAP1H = 150;
  43.         b=0;
  44.         d=0;
  45. }
  46. void qian()                 //控制直线前进
  47. {

  48.         CCAP0H = 150;// 左
  49.         CCAP1H = 147;//右
  50.         b=0;
  51.         d=0;
  52. }
  53. void xunji()
  54.        
  55.                 {
  56.                 qian();

  57.   if(z1==1&&y1==0)
  58.     {
  59.      zuo();
  60.      while(zj==0);
  61.          qian();
  62.     }
  63.   if(y1==1&&z1==0)
  64.     {
  65.      you();
  66.      while(zj==0);
  67.          qian();
  68.     }
  69.      if(z2==1&&y2==0)
  70.     {
  71.      dazuo();
  72.      while(zj==0);
  73.          qian();
  74.     }
  75.   if(y2==1&&z2==0)
  76.     {
  77.      dayou();
  78.      while(zj==0);
  79.          qian();
  80.          }
  81.   if(z1==1&&y1==1&&zj==1)
  82.     {
  83.      qian();
  84.         ys(200);
  85.     }
  86.          }


  87. void PWM_init()
  88. {
  89.         CCON=0X00;                //CF中断标志位为0 CR运行控制位清零 CCF1 CCF2模块中断标志位为0
  90.         CMOD=0x02;                //CIDL在空闲状态下继续工作  时钟源选择系统时钟/2  ECF计数器中断溢出使能位 0
  91.         CCAPM0=0X42;                //模式选择位0
  92.         CCAPM1=0X42;            //模式选择位1
  93.         CL=CH=0;                //PWM内的计数器高低位TH0 TL0
  94.         CR=1;                        //运行控制位 打开PWM
  95. }
  96. void ys(uint i)   
  97. {
  98.         uint c;
  99.     unsigned char a,b;
  100.     for(c=i;c>0;c--)
  101.         for(b=222;b>0;b--)
  102.             for(a=12;a>0;a--);
  103. }
复制代码

所有资料51hei提供下载:
222.zip (27.4 KB, 下载次数: 9)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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