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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1891|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

基于51單片機的藍牙循跡小車設(shè)計源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:618309 發(fā)表于 2019-9-30 11:43 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
渣渣為了湊積分,發(fā)一個以前做過的小玩意

單片機源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. /*****電機驅(qū)動*****/
  6. sbit IN1=P1^0;
  7. sbit IN2=P1^1;
  8. sbit IN3=P1^2;
  9. sbit IN4=P1^3;
  10. /*****紅外尋跡*****/
  11. sbit RSEN1=P2^1;
  12. sbit RSEN2=P2^2;
  13. sbit LSEN1=P2^3;
  14. sbit LSEN2=P2^4;
  15. /*****使能A、B*****/
  16. sbit ENA=P1^4;
  17. sbit ENB=P1^5;
  18. /*****電機驅(qū)動*****/
  19. #define Left_moto_go      {IN1=1,IN2=0;}
  20. #define Left_moto_back    {IN1=0,IN2=1;}               
  21. #define Right_moto_go     {IN3=1,IN4=0;}
  22. #define Right_moto_back   {IN3=0,IN4=1;}
  23. #define Left_moto_s              {IN1=0,IN2=0;}               
  24. #define Right_moto_s      {IN3=0,IN4=0;}

  25. uchar M; //從串口接收的數(shù)據(jù)
  26. uchar pwm_val_left  =0;//變量定義
  27. uchar push_val_left=4; //左電機占空比N/20
  28. uchar pwm_val_right =0;
  29. uchar push_val_right=4;//右電機占空比N/20
  30. bit Right_moto_stop=1;
  31. bit Left_moto_stop =1;

  32. /********************************************
  33. 毫秒延時函數(shù)
  34. **********************************************/
  35. void Delay_ms(uint x) //12.000MHz
  36. {  

  37. uchar a,b;
  38.   for(a=x;a>0;a--)
  39.     for(b=199;b>0;b--);

  40. }

  41. /*****延時*****/
  42. void delay50ms(void)   //誤差 0us
  43. {
  44.     unsigned char a,b;
  45.     for(b=173;b>0;b--)
  46.         for(a=143;a>0;a--);
  47. }

  48. /********************************************************************
  49. * 名稱 : Com_Init()
  50. * 功能 : 串口初始化,晶振12,波特率2400,使串口中斷
  51. * 輸入 : 無
  52. * 輸出 : 無
  53. ***********************************************************************/

  54. void Com_Init(void)
  55. {
  56.         PCON &= 0x00;                //波特率不倍速
  57.         SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  58.         //AUXR &= 0xBF;                //定時器1時鐘為Fosc/12,即12T
  59.         //AUXR &= 0xFE;                //串口1選擇定時器1為波特率發(fā)生器
  60.         TMOD &= 0x0F;                //清除定時器1模式位
  61.         TMOD |= 0x20;                //設(shè)定定時器1為8位自動重裝方式
  62.         TL1 = 0xF3;                //設(shè)定定時初值
  63.         TH1 = 0xF3;                //設(shè)定定時器重裝值
  64.         ET1 = 0;                //禁止定時器1中斷
  65.         TR1 = 1;                //啟動定時器1
  66.         SM0 = 0;
  67.         SM1 = 1;
  68.         REN = 1;
  69.         EA = 1;
  70.         ES = 1;

  71. }

  72. /*****前進*****/
  73. void  go()       
  74. {  
  75.          Left_moto_go ;               
  76.          Right_moto_go ;       
  77. }
  78. /*****后退*****/
  79. void  back()       
  80. {  
  81.          Left_moto_back ;               
  82.          Right_moto_back ;       
  83. }
  84. /*****左轉(zhuǎn)*****/
  85. void turn_left()
  86. {
  87.          Left_moto_back;
  88.          Right_moto_go ;
  89. }
  90. /*****右轉(zhuǎn)*****/
  91. void turn_right()
  92. {
  93.          Left_moto_go;
  94.          Right_moto_back;
  95. }
  96. /*****急停*****/
  97. void stop()
  98. {
  99.          Left_moto_s;  
  100.          Right_moto_s;
  101. }

  102. /*****PWM左電機*****/
  103. void pwm_out_left_moto(void)
  104. {  
  105.    if(Left_moto_stop)
  106.    {
  107.     if(pwm_val_left<=push_val_left)
  108.                ENA=1;
  109.         else
  110.                ENA=0;
  111.         if(pwm_val_left>=20)
  112.         pwm_val_left=0;
  113.    }
  114.    else  ENA=0;
  115. }
  116. /*****PWM右電機*****/
  117.    void pwm_out_right_moto(void)
  118. {
  119.   if(Right_moto_stop)
  120.    {
  121.     if(pwm_val_right<=push_val_right)
  122.                ENB=1;
  123.         else
  124.                ENB=0;
  125.         if(pwm_val_right>=20)
  126.         pwm_val_right=0;
  127.    }
  128.    else    ENB=0;
  129. }

  130. /********************************************************************
  131. * 名稱 : Com_Int()
  132. * 功能 : 串口中斷子函數(shù)
  133. * 輸入 : 無
  134. * 輸出 : 無
  135. ***********************************************************************/
  136. void Com_Int(void) interrupt 4
  137. {
  138.         EA = 0;
  139.         if(RI) //當硬件接收到一個數(shù)據(jù)時,RI會置位
  140.         {
  141.                 M = SBUF;
  142.                 RI = 0;
  143.         }
  144.         EA = 1;
  145. }


  146. /*TIMER0中斷服務(wù)子函數(shù)產(chǎn)生PWM信號*/
  147. void timer0()interrupt 1   using 2
  148. {
  149.         TH0=0XFC;          //1ms定時
  150.         TL0=0X18;
  151.         pwm_val_left++;
  152.         pwm_val_right++;
  153.         pwm_out_left_moto();
  154.         pwm_out_right_moto();
  155. }

  156. /*****循跡函數(shù)*****/
  157. void xunji()

  158. {
  159.         uchar flag;
  160.         if((RSEN1==0)&&(RSEN2==0)&&(LSEN1==0)&&(LSEN2==0))
  161.         { flag=0; }//*******直行*******//
  162.         else if((RSEN1==0)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==0))
  163.         { flag=1;} //***右偏,左轉(zhuǎn)***//
  164.         else if((RSEN1==0)&&(RSEN2==0)&&(LSEN1==1)&&(LSEN2==0))
  165.         { flag=2;} //***左偏,右轉(zhuǎn)***//
  166.         else if((RSEN1==1)&&(RSEN2==0)&&(LSEN1==0)&&(LSEN2==0))
  167.         { flag=1;} //***右偏,左轉(zhuǎn)***//
  168.         else if((RSEN1==0)&&(RSEN2==0)&&(LSEN1==0)&&(LSEN2==1))
  169.         { flag=2;} //***左偏,右轉(zhuǎn)***//
  170.         else if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==0))
  171.         { flag=1;} //***右偏,左轉(zhuǎn)***//
  172.         else if((RSEN1==0)&&(RSEN2==0)&&(LSEN1==1)&&(LSEN2==1))
  173.         { flag=2;} //***左偏,右轉(zhuǎn)***//
  174.         else if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==1)&&(LSEN2==1))
  175.         { flag=3; }//*******急停*******//
  176.         switch (flag)
  177.         {
  178.                 case 0:go();break;
  179.                 case 1:turn_left();delay50ms();break;
  180.                 case 2:turn_right();delay50ms();break;
  181.                 case 3:stop();delay50ms();break;
  182.                 default: break;
  183.         }
  184. }

  185. /********循跡模式*******/
  186. void tracing()
  187. {
  188.         while(1)
  189.         {
  190.                 TMOD|=0X01;
  191.                 TH0=0XFC;//1ms定時
  192.                 TL0=0X18;
  193.                 TR0=1;
  194.                 ET0=1;
  195.                 EA =1;
  196.                 if(M == '1')
  197.                         break;
  198.                 while(1)/*無限循環(huán)*/
  199.                 {
  200.                         xunji();
  201.                         if(M == '1')
  202.                                 break;
  203.                 }
  204.         }
  205. }

  206. void main()
  207. {
  208.         Delay_ms(100);
  209.         Com_Init();//串口初始化
  210.         while(1)
  211.         {
  212.                                 switch(M)
  213.                         {
  214.                                 case 'A': go();Delay_ms(100); break;
  215.                                 case 'B': back();Delay_ms(100); break;
  216.                                 case 'C': turn_left();Delay_ms(100); break;
  217.                                 case 'D': turn_right();Delay_ms(100); break;
  218.                                 case 'F': stop();Delay_ms(100); break;
  219.                                 case '2': tracing(); break;
  220.                                 case '3': push_val_left =4;push_val_right =4; break;
  221.                                 case '4': push_val_left =10;push_val_right =10; break;
  222.                                 case '5': push_val_left =20;push_val_right =20; break;
  223.                                 default:break;
  224.                         }
  225.         }
  226. }
復(fù)制代碼

所有資料51hei提供下載:
藍牙尋跡終極.zip (1.86 KB, 下載次數(shù): 20)



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2019-9-30 16:54 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品一区二区在线 | 欧美1区 | 免费1区2区3区 | 美国av片在线观看 | 免费看一级毛片 | 蜜桃av鲁一鲁一鲁一鲁 | 欧美精品久久久久 | 亚洲精品视频一区二区三区 | 亚洲精品福利视频 | 日韩影院在线观看 | 久久久久亚洲 | 国产一级视频在线播放 | 午夜色婷婷 | 91视频国产精品 | 天天插天天搞 | 成人在线观看免费视频 | 精品欧美乱码久久久久久1区2区 | 日操夜操 | 国产精品久久久久久中文字 | 午夜视频一区二区三区 | 午夜成人免费视频 | 精品国产91乱码一区二区三区 | 久久久精品一区二区三区 | 9999在线视频 | 精品视频免费 | 国产黄色精品在线观看 | 91精品在线播放 | 国产欧美精品在线 | 91精品久久久久久久久久入口 | 日本三级电影免费观看 | 色综网 | 欧美精三区欧美精三区 | 国产精品久久亚洲 | 在线观看www视频 | 日韩中文一区二区三区 | 中文字幕高清免费日韩视频在线 | 午夜视频在线播放 | www.日日夜夜| 欧美a在线 | 国产精品久久久久久久久久久久久 | 97视频精品 |