久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8596|回復(fù): 2
收起左側(cè)

六路循跡時間顯示小車

[復(fù)制鏈接]
ID:117724 發(fā)表于 2016-6-11 23:04 | 顯示全部樓層 |閱讀模式
六路循跡小車,紅外模塊作循跡部分,主控芯片用STC89C52RC,lcd1602顯示小車行駛時間,小車通過設(shè)定標(biāo)志位來通過復(fù)雜的賽道,小車賽道如圖:

白色區(qū)域是上坡,兩個凹槽是障礙物

白色區(qū)域是上坡,兩個凹槽是障礙物


對賽道解析:中間白色,兩邊黑色的是橋,藍(lán)色的區(qū)域是一個坡,中間的凹槽是障礙物.

程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit En_L=P1^4;
  6. sbit En_R=P1^5;        //定義使能端

  7. sbit l2 = P2^0;
  8. sbit ml = P2^1;
  9. sbit r2 = P2^2;
  10. sbit mr = P2^3;
  11. sbit l1 = P1^6;
  12. sbit r1 = P1^7;       //定義傳感器位置: (l1) (l2) (ml) (mr) (r2) (r1)
  13.                                          
  14. sbit IN1 = P1^0;
  15. sbit IN2 = P1^1;
  16. sbit IN3 = P1^2;
  17. sbit IN4 = P1^3;      //定義驅(qū)動IO口
  18. uchar count,num;
  19. uchar bz=0;          //定義標(biāo)志位
  20. #define PWM_CHUZHI 100
  21. #define S_CIRCLE 100
  22. uchar Speed_L_Now;
  23. uchar Speed_R_Now;          //左右輪實(shí)時速度

  24. #define Data P0                    //lcd數(shù)據(jù)端口
  25. sbit RS = P2^7;                            //lcd的rs口
  26. sbit RW = P2^6;                                //lcd的rw口
  27. sbit E = P2^5;                            //lcd的e口
  28. int sec=0,min=0;
  29. uchar FirstLine[]="  Time:00min00s";
  30. /********功能函數(shù)********/
  31. /***延時函數(shù)***/
  32. void DelayMs(uint z)
  33. {
  34.         uint x,y;
  35.         for(x=z;x>0;x--)
  36.                 for(y=110;y>0;y--);
  37. }
  38. /******液晶寫命令******/
  39. void lcd_write_com(uchar c)
  40. {
  41.         DelayMs(5);       //操作前短暫延時,保證信號穩(wěn)定
  42.         E=0;
  43.         RS=0;
  44.         RW=0;
  45.         _nop_();
  46.         E=1;
  47.         Data=c;
  48.         E=0;
  49. }
  50. /*****寫數(shù)據(jù)*****/
  51. void lcd_write_dat(uchar c)
  52. {
  53.         DelayMs(5);// 操作前短暫延時,保證信號穩(wěn)定
  54.         E=0;
  55.         RS=1;
  56.         RW=0;
  57.         _nop_();
  58.         E=1;
  59.         Data=c;
  60.         E=0;
  61.         RS=0;
  62. }
  63. /*******LCD初始化****/
  64. void lcd_init()
  65. {
  66.         DelayMs(15);
  67.         lcd_write_com(0x38);
  68.         DelayMs(10);
  69.         lcd_write_com(0x38);
  70.         DelayMs(10);
  71.         lcd_write_com(0x38);
  72.         DelayMs(10);
  73.         lcd_write_com(0x06);
  74.         DelayMs(10);                  //顯示光標(biāo)移動位置
  75.         lcd_write_com(0x0c);
  76.         DelayMs(10);                  //顯示開及光標(biāo)設(shè)置
  77.         lcd_write_com(0x01);
  78.         DelayMs(10);                  //顯示清屏
  79.         for(num=0;num<15;num++)
  80.         {
  81.                 lcd_write_dat(FirstLine[num]);     //將“Time:”寫入LCD
  82.                 DelayMs(5);       
  83.         }
  84. }


  85. /****定時器T1:液晶實(shí)時顯示***/
  86. void timer1()interrupt 3
  87. {
  88.         TH1=(65536-50000)/256;
  89.         TL1=(65536-50000)%256;
  90.         count++;        
  91. }

  92. /******定時器0用于輸出PWM控制電機(jī)速度*******/
  93. void motor_pwm_out()interrupt 1
  94. {
  95.         static uchar count;
  96.         TH0=(65536-PWM_CHUZHI)/256;
  97.         TL0=(65536-PWM_CHUZHI)%256;
  98.         count++;
  99.         if(count>=Speed_L_Now)
  100.   {
  101.         En_L=0;       
  102.   }
  103.         if(count>=Speed_R_Now)
  104.         {
  105.                 En_R=0;
  106.         }
  107.         if(count==S_CIRCLE)
  108.         {
  109.                 En_L=1;
  110.                 En_R=1;
  111.                 count=0;       
  112.         }
  113. }
  114. void write_fm(uchar add,uchar date)   //將分秒寫進(jìn)lcd的函數(shù)
  115. {       
  116.         uint shi,ge;
  117.         lcd_write_com(0x80+add);
  118.         shi=date/10;
  119.         ge =date%10;
  120.         lcd_write_dat(0x30+shi);
  121.         lcd_write_dat(0x30+ge);
  122. }
  123. void ahead()     //前進(jìn)函數(shù)
  124. {
  125.         IN1=1;
  126.         IN2=0;
  127.         IN3=1;
  128.         IN4=0;
  129.         Speed_L_Now=46;
  130.         Speed_R_Now=43;
  131. }
  132. void poahead()     //上坡后的前進(jìn)函數(shù)
  133. {
  134.         IN1=1;
  135.         IN2=0;
  136.         IN3=1;
  137.         IN4=0;
  138.         Speed_L_Now=43;
  139.         Speed_R_Now=40;
  140. }
  141. void turn_left()   //左轉(zhuǎn)函數(shù)
  142. {
  143.         IN1=0;
  144.         IN2=1;
  145.         IN3=1;
  146.         IN4=0;
  147.         Speed_L_Now=44;
  148.         Speed_R_Now=42;
  149. }
  150. void turn_right()    //右轉(zhuǎn)函數(shù)
  151. {
  152.         IN1=1;
  153.         IN2=0;
  154.         IN3=0;
  155.         IN4=1;
  156.         Speed_L_Now=44;
  157.         Speed_R_Now=42;
  158. }
  159. void big_turn()   //上坡后大轉(zhuǎn)彎函數(shù)
  160. {
  161.         IN1=1;
  162.         IN2=0;
  163.         IN3=0;
  164.         IN4=1;
  165.         Speed_L_Now=43;
  166.         Speed_R_Now=20;               
  167. }
  168. void stop()          //停止函數(shù)
  169. {
  170.         IN1=0;
  171.         IN2=0;
  172.         IN3=0;
  173.         IN4=0;
  174. }
  175. void xunji1()    //循跡控制函數(shù)
  176. {
  177.         if(l1==0&&ml==0&&r1==0&&mr==0&&l2==0&&r2==0)  //六個都沒檢測到黑線
  178.         ahead();
  179.         if(l1==1&&ml==0&&r1==0&&mr==0&&l2==0&&r2==0)  //l1檢測到
  180.         turn_left();
  181.         if(l1==0&&ml==0&&r1==0&&mr==0&&l2==1&&r2==0)  //l2檢測到
  182.         turn_left();
  183.         if(l1==1&&ml==1&&r1==0&&mr==0&&l2==1&&r2==0)  //l1,l2,ml檢測到
  184.         ahead();
  185.         if(l1==0&&ml==1&&r1==0&&mr==0&&l2==1&&r2==0)  //l2,ml檢測到
  186.         turn_left();
  187.         if(l1==0&&ml==0&&r1==1&&mr==0&&l2==0&&r2==1)  //r1,r2檢測到
  188.         turn_right();
  189.         if(l1==0&&ml==0&&r1==0&&mr==1&&l2==0&&r2==1)  //mr,r2檢測到
  190.         turn_right();
  191.         if(l1==0&&ml==1&&r1==0&&mr==0&&l2==0&&r2==0)  //ml檢測到
  192.         turn_left();
  193.         if(l1==0&&ml==1&&mr==1&&r1==0&&l2==0&&r2==0) //ml,mr檢測到
  194.         poahead();
  195.         if(l1==0&&ml==0&&mr==1&&r1==0&&l2==0&&r2==0) //mr檢測到
  196.         turn_right();
  197.         if(l1==0&&ml==0&&mr==0&&r1==1&&l2==0&&r2==0) //r1檢測到
  198.         turn_right();
  199.         if(l1==0&&ml==0&&mr==1&&r1==0&&l2==0&&r2==1) //mr,r2檢測到
  200.         turn_right();
  201.         if(l1==0&&ml==0&&mr==1&&r1==1&&l2==0&&r2==1) //r1,r2,mr檢測到
  202.         ahead();
  203.         if(l1==0&&ml==1&&mr==1&&r1==1&&l2==0&&r2==1) //r1,r2,mr,ml檢測到
  204.         ahead();
  205.         if(l1==1&&ml==1&&mr==1&&r1==0&&l2==1&&r2==0) //l1,l2,mr,ml檢測到
  206.         ahead();
  207.         if(l1==0&&ml==1&&mr==1&&r1==0&&l2==1&&r2==1) //l2,r2,ml,mr檢測到
  208.         ahead();               
  209.         if(l1==1&&ml==1&&mr==1&&r1==1&&l2==1&&r2==1) //六個都檢測到
  210.         ahead();       
  211. }
  212. void xunji2()
  213. {
  214.         if(l1==0&&ml==0&&r1==0&&mr==0&&l2==0&&r2==0)  //六個都沒檢測到黑線
  215.         ahead();
  216.         if(l1==1&&ml==0&&r1==0&&mr==0&&l2==0&&r2==0)  //l1檢測到
  217.         turn_right();
  218.         if(l1==0&&ml==0&&r1==0&&mr==0&&l2==1&&r2==0)  //l2檢測到
  219.         turn_right();
  220.         if(l1==1&&ml==1&&r1==0&&mr==0&&l2==1&&r2==0)  //l1,l2,ml檢測到
  221.         ahead();
  222.         if(l1==0&&ml==1&&r1==0&&mr==0&&l2==1&&r2==0)  //l2,ml檢測到
  223.         turn_right();
  224.         if(l1==0&&ml==0&&r1==1&&mr==0&&l2==0&&r2==1)  //r1,r2檢測到
  225.         turn_left();
  226.         if(l1==0&&ml==0&&r1==0&&mr==1&&l2==0&&r2==1)  //mr,r2檢測到
  227.         turn_left();
  228.         if(l1==0&&ml==0&&mr==0&&r1==1&&l2==0&&r2==0) //r1檢測到
  229.         turn_left();
  230.         if(l1==0&&ml==0&&mr==1&&r1==0&&l2==0&&r2==1) //mr,r2檢測到
  231.         turn_left();
  232.         if(l1==0&&ml==0&&mr==1&&r1==1&&l2==0&&r2==1) //r1,r2,mr檢測到
  233.         ahead();
  234.         if(l1==1&&ml==1&&mr==1&&r1==0&&l2==1&&r2==0) //l1,l2,mr,ml檢測到
  235.         big_turn();
  236.         if(l1==0&&ml==1&&mr==1&&r1==1&&l2==0&&r2==1) //r1,r2,mr,ml檢測到
  237.         turn_right();               
  238.         if(l1==1&&ml==1&&mr==1&&r1==1&&l2==1&&r2==1) //六個都檢測到
  239.         big_turn();         
  240.         bz++;               
  241. }
  242. void xunji3()
  243. {
  244.         if(l1==0&&ml==0&&r1==0&&mr==0&&l2==0&&r2==0)  //六個都沒檢測到黑線
  245.         poahead();
  246.         if(l1==1&&ml==0&&r1==0&&mr==0&&l2==0&&r2==0)  //l1檢測到
  247.         turn_right();
  248.         if(l1==0&&ml==0&&r1==0&&mr==0&&l2==1&&r2==0)  //l2檢測到
  249.         turn_right();
  250.         if(l1==1&&ml==1&&r1==0&&mr==0&&l2==1&&r2==0)  //l1,l2,ml檢測到
  251.         turn_right();
  252.         if(l1==0&&ml==1&&r1==0&&mr==0&&l2==1&&r2==0)  //l2,ml檢測到
  253.         turn_right();
  254.         if(l1==0&&ml==0&&r1==1&&mr==0&&l2==0&&r2==1)  //r1,r2檢測到
  255.         turn_left();
  256.         if(l1==0&&ml==0&&r1==0&&mr==1&&l2==0&&r2==1)  //mr,r2檢測到
  257.         turn_left();
  258.         if(l1==0&&ml==0&&mr==0&&r1==1&&l2==0&&r2==0) //r1檢測到
  259.         turn_left();
  260.         if(l1==0&&ml==0&&mr==1&&r1==0&&l2==0&&r2==1) //mr,r2檢測到
  261.         turn_left();
  262.         if(l1==0&&ml==0&&mr==1&&r1==1&&l2==0&&r2==1) //r1,r2,mr檢測到
  263.         turn_left();
  264.         if(l1==0&&ml==1&&mr==1&&r1==1&&l2==0&&r2==1) //r1,r2,mr,ml檢測到
  265.         turn_right();               
  266.         if(l1==1&&ml==1&&mr==1&&r1==1&&l2==1&&r2==1) //六個都檢測到
  267.         poahead();                        
  268.         bz++;               
  269. }
  270. void xunji4()
  271. {
  272.         if(l1==0&&ml==0&&r1==0&&mr==0&&l2==0&&r2==0)  //六個都沒檢測到黑線
  273.         poahead();
  274.         if(l1==1&&ml==0&&r1==0&&mr==0&&l2==0&&r2==0)  //l1檢測到
  275.         turn_right();
  276.         if(l1==0&&ml==0&&r1==0&&mr==0&&l2==1&&r2==0)  //l2檢測到
  277.         turn_right();
  278.         if(l1==1&&ml==1&&r1==0&&mr==0&&l2==1&&r2==0)  //l1,l2,ml檢測到
  279.         poahead();
  280.         if(l1==0&&ml==1&&r1==0&&mr==0&&l2==1&&r2==0)  //l2,ml檢測到
  281.         turn_right();
  282.         if(l1==0&&ml==0&&r1==1&&mr==0&&l2==0&&r2==1)  //r1,r2檢測到
  283.         turn_left();
  284.         if(l1==0&&ml==0&&r1==0&&mr==1&&l2==0&&r2==1)  //mr,r2檢測到
  285.         turn_left();
  286.         if(l1==0&&ml==0&&mr==0&&r1==1&&l2==0&&r2==0) //r1檢測到
  287.         turn_left();
  288.         if(l1==0&&ml==0&&mr==1&&r1==0&&l2==0&&r2==1) //mr,r2檢測到
  289.         turn_left();
  290.         if(l1==0&&ml==0&&mr==1&&r1==1&&l2==0&&r2==1) //r1,r2,mr檢測到
  291.         poahead();
  292.         if(l1==1&&ml==1&&mr==1&&r1==0&&l2==1&&r2==0) //l1,l2,mr,ml檢測到
  293.         poahead();
  294.         if(l1==0&&ml==1&&mr==1&&r1==1&&l2==0&&r2==1) //r1,r2,mr,ml檢測到
  295.         poahead();               
  296.         if(l1==1&&ml==1&&mr==1&&r1==1&&l2==1&&r2==1) //六個都檢測到
  297.         stop();
  298. }

  299. /******mcu初始化*******/
  300.         void mcu_init()
  301. {
  302.         TMOD=0x11;                    // 設(shè)置定時器0和為工作方式1(0001 0001)
  303.         TH0=(65536-PWM_CHUZHI)/256;  //裝初值
  304.         TL0=(65536-PWM_CHUZHI)%256;
  305.         TH1=(65536-50000)/256;     //裝初值(50ms溢出一次)
  306.         TL1=(65536-50000)%256;
  307.         EA=1;                //開總中斷
  308.         ET0=1;                //開定時器0中斷
  309.         ET1=1;                //開定時器1中斷
  310.         TR0=1;                //啟動定時器0
  311.         TR1=1;           //啟動定時器1
  312.                                        
  313.         IT0=1;
  314.         IT1=1;
  315.         EX0=1;
  316.         EX1=1;
  317.         En_L=1;
  318.         En_R=1;
  319.         ahead();       
  320. }
  321. /*********main********/       
  322.         void main()
  323. {                               
  324.         lcd_init();                        //液晶初始化
  325.         DelayMs(20);
  326.         mcu_init();                    //mcu初始化
  327.         while(1)
  328.     {         
  329.                 switch(bz)
  330.                 {
  331.                   case 0: xunji1();break;
  332.                   case 1: xunji1();break;
  333.                   case 2: xunji1();break;
  334.                   case 3: xunji2();break;
  335.                   case 4: xunji2();break;
  336.                   case 5: xunji3();break;
  337.                   case 6: xunji4();break;
  338.                   default: xunji4();               
  339.                 }
  340.                  if(count==20)                          //將分和秒的數(shù)值寫進(jìn)lcd
  341.                 {
  342.                         count=0;
  343.                         sec++;
  344.                         if(sec==60)
  345.                         {
  346.                           sec=0;
  347.                           min++;
  348.                         }                                                  
  349.                         write_fm(12,sec);
  350.                         write_fm(7,min);                       
  351.                 }               
  352.         }
  353.   }

復(fù)制代碼



注:小車選擇上坡和過橋,不繞過障礙物

循跡小車.zip

36.3 KB, 下載次數(shù): 27, 下載積分: 黑幣 -5

循跡小車程序

評分

參與人數(shù) 2黑幣 +105 收起 理由
sax_yang + 5 很給力!
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:126509 發(fā)表于 2016-6-13 22:02 | 顯示全部樓層
我愛你版主親愛的母親
回復(fù)

使用道具 舉報

ID:146651 發(fā)表于 2016-11-8 08:42 | 顯示全部樓層
好資料,收藏學(xué)習(xí)了,評分給您5黑幣。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美美乳| 亚洲久草视频 | 成人做爰9片免费看网站 | 日韩a视频 | 午夜精品一区二区三区在线视频 | 日日干天天干 | 亚洲成人一区二区 | 欧美精品一区二区在线观看 | 色婷婷综合网站 | 欧美一二区 | 不卡一区二区三区四区 | 亚洲一区二区三区在线视频 | 免费在线播放黄色 | 欧美美女一区二区 | 国产欧美日韩一区二区三区 | 色婷婷婷婷色 | 亚洲国产一区二区视频 | 欧美日韩黄色一级片 | 91视频网址 | 成人欧美一区二区三区色青冈 | 一区观看 | 久久久久久久久久久久久久久久久久久久 | 97国产一区二区精品久久呦 | a在线免费观看 | 国产999精品久久久久久绿帽 | 久久激情视频 | 在线91| 亚洲一级av毛片 | 亚洲嫩草 | 九色在线观看 | 久热电影 | 久久com| 欧美一区二区三区,视频 | 国产精品精品视频一区二区三区 | 欧美xxxx在线 | 亚洲精品中文在线观看 | 亚洲国产视频一区 | 欧美视频在线看 | 亚洲欧美bt | 91精品一区二区三区久久久久久 | 电影午夜精品一区二区三区 |