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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

51單片機(jī)循跡小車制作總結(jié) 附程序源碼

[復(fù)制鏈接]
ID:83710 發(fā)表于 2015-6-23 19:05 | 顯示全部樓層 |閱讀模式
本帖最后由 hongniu 于 2015-6-23 19:08 編輯

我的循跡小車歷經(jīng)兩整天,兩晚的奮戰(zhàn)終于與今天下午巡跡成功了,總結(jié)一下我最大的收獲就是:抓住關(guān)鍵點(diǎn),結(jié)點(diǎn)事件,先把最關(guān)鍵的問題加以解決,以后聯(lián)調(diào)試時(shí)會(huì)很快的,還有一點(diǎn),別人的東西不一定是對(duì)的,即使他做過,你要綜合各方面的信息,做出自己的判斷,還有就是手冊(cè)的重要性,這是一個(gè)思考問題、發(fā)現(xiàn)問題、解決問題的過程,很苦燥,但是結(jié)果是很甜的,就像做出了一道數(shù)學(xué)題,還是那句話:即使一小步,也有新高度


程序源碼:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit p0_0=P0^0;
  5. sbit p0_7=P0^7;

  6. sbit p1_7=P0^7;




  7. sbit EN1=P1^2;//m1脈沖輸入
  8. sbit EN2=P1^5;//m2脈沖輸入
  9. //*****************************
  10. sbit HW1=P2^0;//加建
  11. sbit HW2=P2^1;//減鍵  m1
  12. //***************************
  13. sbit p2_2=P2^2;
  14. sbit p2_3=P2^3;
  15.        // m2
  16. //*********************
  17. sbit p1_3=P1^3;
  18. sbit p1_4=P1^4;  //M2轉(zhuǎn)向組合
  19. //******************************
  20. sbit p1_1=P1^1;
  21. sbit p1_0=P1^0;    //M1轉(zhuǎn)向組合
  22. //*****M1***********************************************
  23. uint t=100;  //載波周期
  24. uint time0; // 低電平可按鍵調(diào)整量 我這里是 把周期和低電平設(shè)為一個(gè)是程序內(nèi)可調(diào),一個(gè)是程序外可調(diào)而高電平是死的,也可以反之是一樣的
  25. uint time1; // 高點(diǎn)平基準(zhǔn)量
  26. uint timeing0;//立即低電平動(dòng)態(tài)變量
  27. uint timeing1; //立即高電平動(dòng)態(tài)變量  
  28. //*****M2****************
  29. //uint t=500;  //載波周期
  30. uint time_0; // 低電平可按鍵調(diào)整量 我這里是 把周期和低電平設(shè)為一個(gè)是程序內(nèi)可調(diào),一個(gè)是程序外可調(diào)而高電平是死的,也可以反之是一樣的
  31. uint time_1; // 高點(diǎn)平基準(zhǔn)量
  32. uint timeing_0;//立即低電平動(dòng)態(tài)變量
  33. uint timeing_1; //立即高電平動(dòng)態(tài)變量
  34. //********傳感器中間變量定義****************************

  35.    uchar middate,middate1,middate2;



  36. //********************************
  37. //void delay(uint z) //延時(shí)1ms程序
  38. //{
  39. //uint x,a,b;
  40. //        for (x=0;x<z;x++)
  41. //  
  42.   //     {
  43. //       for(b=120;b>0;b--)
  44. //    {
  45.   //      for(a=3;a>0;a--);
  46. //   
  47. //             }
  48. //    }
  49.   //

  50. // }

  51. void stop() //停止函數(shù)    停止     HW1=HW2=0;
  52. {

  53.   EA=0;  //禁止中斷
  54.   EN1=0;
  55.   EN2=0;







  56. }
  57. void goon()//               直著走      HW1=1=HW2;
  58. {

  59.   EA=1;
  60.   
  61.   time0=50;
  62.   time_0=50;
  63.   time1=50;
  64.   time_1=50;





  65. }
  66. void left()//向左轉(zhuǎn)彎                         HW1=1;HW2=0;                 修改定時(shí)數(shù)據(jù),實(shí)現(xiàn)實(shí)時(shí)PWM調(diào)制
  67. {
  68. EA=1;
  69.      
  70.    
  71.      
  72.             
  73.              //***************
  74.           time_0=50;
  75.          time_1=50;    // //通過調(diào)整左輪的轉(zhuǎn)速來調(diào)整轉(zhuǎn)彎力度,這里要配合傳感器實(shí)時(shí)采集才行
  76.           time0=(time0-1);
  77.           time1=(t-time0);
  78.           //***********************
  79.           timeing0=0;
  80.           timeing1=0;
  81.         
  82.       

  83.       
  84.       
  85.         


  86.      
  87. }





  88.             
  89.   void right()//向右轉(zhuǎn)彎        HW1=0;HW2=1;
  90. {
  91.     EA=1;
  92.    
  93.    
  94.    

  95.      
  96.            //***************
  97.            time0=50;
  98.           time1=50;      //通過調(diào)整右輪的轉(zhuǎn)速來調(diào)整轉(zhuǎn)彎力度,這里要配合傳感器實(shí)時(shí)采集才行
  99.           time_0=(time_0-1);
  100.           time_1=(t-time_0);
  101.           //******************




  102.           timeing_0=0;
  103.           timeing_1=0;  //太關(guān)鍵了!這一步,因?yàn)椴患拥脑挘?dāng)再一次的time0被修改時(shí)timeing0,和timeing1不為0
  104.          //             所以才會(huì)發(fā)生錯(cuò)誤,表現(xiàn)為波形時(shí)斷時(shí)續(xù),而且有尖鋒脈沖,這都是沒有在刷新TIME0的同時(shí)刷新tineing的后果
  105.          //             沒想到很簡單的一點(diǎn)事竟差點(diǎn)釀成PWM做不出來!真是有有教訓(xùn)了
  106.          //             2010年10月7日晚8:34分與天津開發(fā)區(qū)第四項(xiàng)目部宿舍1
  107.         
  108.         

  109.       
  110.       
  111.         


  112. }








  113. void InitTimer0(void) //10us 定時(shí)器初始化設(shè)置函數(shù)
  114. {
  115.     TMOD = 0x01;

  116.     TH0 =0xff;
  117.     TL0 =0xf7;
  118.     EA = 1;
  119.     ET0 = 1;
  120.     TR0 = 1;


  121. }

  122. void main(void)//主函數(shù)
  123. { P2=0x0f;
  124.     InitTimer0(); //10 us(可變啊,根據(jù)不同的精準(zhǔn)度和頻率要求)
  125. //************
  126.    p1_0=0;
  127.    p1_1=1;    //M2
  128.   
  129.   
  130.                     //決策轉(zhuǎn)向
  131.    p1_3=1;
  132.    p1_4=0;  //M1
  133. //************
  134.    time0=50; //**************************************************************************************************************//
  135.    time1=50; //                            //
  136.   time_0=50; //                            //
  137.   time_1=50; //        通知                   //
  138.        //     L293B的8腳是要接>5V的,16腳要接5V,但是別人的不是這樣的,我是看了手冊(cè),和失敗后這樣做的     //                       //
  139.     //   這里我用了周期是1000us的但是我的定時(shí)器是10us一次的所以我這里取t=100;表示我把周期分成100份    //
  140.     //    占空比(q)=高電平(time1)/周期(t);故而time1/100=占空比;            //
  141.     //    電壓(u)=占空比*最大電壓(Um)故而我的輸出電壓函數(shù)為:U0=Um*q =time1/100*5V(這里我用的是5v電壓=Um)  //
  142.     //    根據(jù)上述公式可以算出MCU輸出電壓:例如:我要輸出1.5V電壓只要讓time1=30即可,當(dāng)然time0=70(保證頻率不變) //
  143.     //            我要輸出3V只要讓time1=60,tim0=40;即可    呵呵呵呵       //
  144.     //             大概這也就是數(shù)模轉(zhuǎn)換的原理吧         //
  145.     //                            //
  146.     //       2010年10月24日下午與天津第四項(xiàng)目部宿舍              //
  147.     //**************************************************************************************************************//



  148.   while(1) //主循環(huán)
  149.   {  



  150.       //***********************
  151.           middate=0x00;
  152.           middate1=0x00;
  153.     middate2=0x00;
  154.     middate1=HW1;     //傳感器信號(hào)采集后處理
  155.    middate2=HW2;
  156.    CY=0;
  157.    middate2=(middate2<<1) ;
  158.    middate=(middate1+middate2) ;
  159.    // ****************************



  160.     switch(middate)   //轉(zhuǎn)向關(guān)鍵步函數(shù)
  161.     {
  162.       case 3:{stop();break;     }//停止>>>>>>>>>>>>>>HW1=0=HW2;                                 
  163.    case 1:{left();break;     }//左轉(zhuǎn)>>>>>>>>>>>>>>HW1=1;HW2=0;
  164.    case 2:{right();break;    }//右轉(zhuǎn)>>>>>>>>>>>>>>HW1=0;HW2=1;
  165.    case 0:{goon();break;     }//直行>>>>>>>>>>>>>>HW1=1=HW2;
  166.    
  167.    
  168.    
  169.    
  170.    
  171.    
  172.     }























  173.   
  174.    }












  175. }

  176. void Timer0Interrupt(void) interrupt 1    //定時(shí)器中斷函數(shù)生成PWM,接口單元為:time0(PWM1號(hào)低電平時(shí)間),time1(PWM1號(hào)高電平時(shí)間),time_0(PWM2號(hào)低電平時(shí)間),time_1(PWM2號(hào)高電平時(shí)間) ,t(周期)
  177. {                   //   MCU:P1.2是第一路PWM,P1.5是第二路PWM         
  178.    

  179.      if(time0==timeing0)
  180.   {
  181.         if(time1!=timeing1)
  182.      {     //高電平時(shí)間段
  183.    
  184.         TH0 =0xff;
  185.               TL0 =0xf7;
  186.           EN1=1;
  187.           timeing1++;
  188.    
  189.    
  190.    
  191.      }
  192.        //中斷子函數(shù)(定時(shí)器參量修改)




  193.   }
  194.    else
  195.    if(time0!=timeing0)
  196.      {
  197.    TH0 =0xff;
  198.         TL0 =0xf7;
  199.     EN1=0;      //低電平時(shí)間段
  200.    timeing0++;
  201.       



  202.   }

  203.   if(time0==timeing0)
  204.   {
  205.   if(time1==timeing1)

  206.   {
  207.   
  208.    timeing0=0;
  209.    timeing1=0;
  210.   }

  211.   }

  212. //****************M2的************************************************************************************************************************************************************






  213.      if(time_0==timeing_0)
  214.   {
  215.         if(time_1!=timeing_1)
  216.      {     //高電平時(shí)間段
  217.    
  218.         TH0 =0xff;
  219.               TL0 =0xf7;
  220.           EN2=1;
  221.           timeing_1++;
  222.    
  223.    
  224.    
  225.      }
  226.        //中斷子函數(shù)(定時(shí)器參量修改)




  227.   }
  228.    else
  229.    if(time_0!=timeing_0)
  230.      {
  231.    TH0 =0xff;
  232.         TL0 =0xf7;
  233.    EN2=0;      //低電平時(shí)間段
  234.    timeing_0++;
  235.       



  236.   }

  237.   if(time_0==timeing_0)
  238.   {
  239.   if(time_1==timeing_1)

  240.   {
  241.   
  242.    timeing_0=0;
  243.    timeing_1=0;
  244.   }

  245.   }
  246.   

  247.   
  248. }
復(fù)制代碼






回復(fù)

使用道具 舉報(bào)

ID:129918 發(fā)表于 2017-1-11 21:04 | 顯示全部樓層
圖畫的我給滿分
回復(fù)

使用道具 舉報(bào)

ID:200853 發(fā)表于 2017-5-15 10:18 | 顯示全部樓層
樓主用的是哪些傳感器
回復(fù)

使用道具 舉報(bào)

ID:198608 發(fā)表于 2017-5-16 20:44 | 顯示全部樓層
看了你的圖我還以為你是學(xué)畫畫的
回復(fù)

使用道具 舉報(bào)

ID:201562 發(fā)表于 2017-5-16 21:14 | 顯示全部樓層
學(xué)習(xí)  學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:33452 發(fā)表于 2017-8-15 18:25 | 顯示全部樓層

學(xué)習(xí)  學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:167884 發(fā)表于 2018-9-27 23:12 | 顯示全部樓層
樓主的思路很好,值得參考
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 福利一区视频 | 国产ts人妖另类 | 国产激情视频网址 | 亚洲精品第一页 | 日日爱夜夜操 | 久久精品免费观看 | 九九久久免费视频 | 亚洲国产aⅴ成人精品无吗 综合国产在线 | 国产精品成人在线观看 | 精品国产欧美一区二区三区不卡 | 亚洲精品视频在线观看视频 | 福利网址 | 日本三级全黄三级三级三级口周 | 日韩欧美在线观看 | 色综合成人网 | 亚洲三区在线观看 | 一区二区三区在线观看视频 | 欧美在线色视频 | 亚洲成人国产精品 | 国产精品免费一区二区三区 | 99在线国产 | 香蕉二区| 亚洲综合资源 | 激情欧美日韩一区二区 | 成年人免费在线视频 | 午夜男人的天堂 | 99视频在线播放 | 国产一区亚洲 | 亚洲一区 中文字幕 | 久草99| 韩国成人在线视频 | 黄a网站 | 亚洲精品乱码久久久久久蜜桃91 | 欧美亚洲视频 | 国产一区二区欧美 | 欧美日韩综合一区 | 中文字幕免费视频 | 亚洲男人网 | 国产a级毛片 | 中文字幕国产精品 | 成人久久18免费 |