找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4346|回复: 0
收起左侧

51单片机白底黑线寻迹车决赛程序

[复制链接]
ID:248346 发表于 2017-11-11 14:20 | 显示全部楼层 |阅读模式
使用的12C5A60S2单片机,白底黑线寻迹,自己想出来的信号判断方法,让你扔掉靠多个if else判断路况的写法

单片机源程序如下:
  1. #ifndef _CONTROL_H
  2. #define _CONTROL_H

  3. extern uchar temp1;
  4. extern uchar temp2;//temp2左侧灯数据变量
  5. uchar i;

  6. int v=230;//直线跑时的速度   方案1:255  方案2:230

  7. //方案一
  8. /*
  9. int code table1[]={0,255,255,255};//1.普通弯道左轮速度 2.锐角弯道左轮速度 3.直角弯道左轮速度
  10. int code table2[]={0,80,140,130};//1.普通弯道左轮速度 2.锐角弯道左轮倒转 3.直角弯道左轮倒转
  11. int code table3[]={0,255,255,250};//1.普通弯道右轮速度 2.锐角弯道右轮速度 3.直角弯道右轮速度
  12. int code table4[]={0,80,140,130};//1.普通弯道右轮倒转 2.锐角弯道右轮倒转 3.直角弯道右轮倒转
  13. */

  14. //方案二

  15. int code table1[]={0,230,230,230};//1.普通弯道左轮速度 2.锐角弯道左轮速度 3.直角弯道左轮速度
  16. int code table2[]={0, 70,140,140}; //1.普通弯道左轮倒转 2.锐角弯道左轮倒转 3.直角弯道左轮倒转
  17. int code table3[]={0,230,230,230};//1.普通弯道右轮速度 2.锐角弯道右轮速度 3.直角弯道右轮速度
  18. int code table4[]={0, 70,140,140}; //1.普通弯道右轮倒转 2.锐角弯道右轮倒转 3.直角弯道右轮倒转


  19. void control()
  20. {
  21.         detect();
  22.         if(temp1>temp2)//左拐情形
  23.         {
  24.                 i=temp1-temp2;
  25.                 switch(i)
  26.                 {
  27.                         case 1 : PWM_SET(0,table2[i],0,table3[i]);break;                        //普通弯道
  28.                         case 2 : PWM_SET(1,table2[i],0,table3[i]);break;                        //锐角弯道
  29.                         case 3 : PWM_SET(1,table2[i],0,table3[i]);delayms(40);break;//直角弯道
  30.                         default : break;
  31.                 }
  32.                 while(led3);
  33.         }
  34.         else if(temp1<temp2)//右拐
  35.         {
  36.                 i=temp2-temp1;
  37.                 switch(i)
  38.                 {
  39.                         case 1 : PWM_SET(0,table1[i],0,table4[i]);break;
  40.                         case 2 : PWM_SET(0,table1[i],1,table4[i]);break;
  41.                         case 3 : PWM_SET(0,table1[i],1,table4[i]);delayms(40);break;
  42.                         default : break;
  43.                 }
  44.                 while(led3);       
  45.         }
  46.         else
  47.         {
  48.                 if(!temp1)//直走和停止
  49.                 {
  50.                         PWM_SET(0,v,0,v-2);
  51.                         delayms(66);
  52.                         detect();
  53.                         if(!temp1&&!temp2)
  54.                         {
  55.                                 PWM_SET(0,0,0,0);
  56.                                 while(1);
  57.                         }
  58.                         else
  59.                         {
  60.                                 PWM_SET(0,v,0,v-2);
  61.                         }
  62.                 }
  63.                 else
  64.                 {
  65.                         PWM_SET(0,v,0,v-2);
  66.                 }
  67.         }
  68. }

  69. /**********************************************
  70. 根据两侧灯读回的数据值来进行电机控制
  71. ……………………

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

源程序如下:

  1. #include<12c5a60s2.h>
  2. #include<stdio.h>
  3. #include<sbitdef.h>
  4. #include<yanshi.h>
  5. #include<pwm.h>
  6. #include<zhuanquan.h>
  7. #include<detect.h>
  8. #include<lanya.h>
  9. #include<xunji.h>

  10. uchar flag=0;

  11. void main()
  12. {
  13.         flag=0;
  14.         PWM_clock_init();
  15.         lanyainit();
  16.         while(1)
  17.         {
  18.                 if(!flag)
  19.                 {
  20.                         xunji1();
  21.                         lanya();
  22.                 }
  23.                 else
  24.                 {
  25.                         xunji2();
  26.                 }
  27.         }
  28. }


复制代码

所有资料51hei提供下载:
决赛程序.zip (28.89 KB, 下载次数: 28)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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