標(biāo)題: 51單片機(jī)白底黑線尋跡車決賽程序 [打印本頁]

作者: Taliban    時間: 2017-11-11 14:20
標(biāo)題: 51單片機(jī)白底黑線尋跡車決賽程序
使用的12C5A60S2單片機(jī),白底黑線尋跡,自己想出來的信號判斷方法,讓你扔掉靠多個if else判斷路況的寫法

單片機(jī)源程序如下:
  1. #ifndef _CONTROL_H
  2. #define _CONTROL_H

  3. extern uchar temp1;
  4. extern uchar temp2;//temp2左側(cè)燈數(shù)據(jù)變量
  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.銳角彎道左輪倒轉(zhuǎn) 3.直角彎道左輪倒轉(zhuǎn)
  11. int code table3[]={0,255,255,250};//1.普通彎道右輪速度 2.銳角彎道右輪速度 3.直角彎道右輪速度
  12. int code table4[]={0,80,140,130};//1.普通彎道右輪倒轉(zhuǎn) 2.銳角彎道右輪倒轉(zhuǎn) 3.直角彎道右輪倒轉(zhuǎn)
  13. */

  14. //方案二

  15. int code table1[]={0,230,230,230};//1.普通彎道左輪速度 2.銳角彎道左輪速度 3.直角彎道左輪速度
  16. int code table2[]={0, 70,140,140}; //1.普通彎道左輪倒轉(zhuǎn) 2.銳角彎道左輪倒轉(zhuǎn) 3.直角彎道左輪倒轉(zhuǎn)
  17. int code table3[]={0,230,230,230};//1.普通彎道右輪速度 2.銳角彎道右輪速度 3.直角彎道右輪速度
  18. int code table4[]={0, 70,140,140}; //1.普通彎道右輪倒轉(zhuǎn) 2.銳角彎道右輪倒轉(zhuǎn) 3.直角彎道右輪倒轉(zhuǎn)


  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. 根據(jù)兩側(cè)燈讀回的數(shù)據(jù)值來進(jìn)行電機(jī)控制
  71. ……………………

  72. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

源程序如下:

  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. }


復(fù)制代碼

所有資料51hei提供下載:
決賽程序.zip (28.89 KB, 下載次數(shù): 28)







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1