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

標(biāo)題: 基于51單片機(jī)的藍(lán)牙循跡小車設(shè)計(jì)源程序 [打印本頁]

作者: till_valhalla    時(shí)間: 2019-9-30 11:43
標(biāo)題: 基于51單片機(jī)的藍(lán)牙循跡小車設(shè)計(jì)源程序
渣渣為了湊積分,發(fā)一個(gè)以前做過的小玩意

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

  5. /*****電機(jī)驅(qū)動(dòng)*****/
  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. /*****電機(jī)驅(qū)動(dòng)*****/
  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; //左電機(jī)占空比N/20
  28. uchar pwm_val_right =0;
  29. uchar push_val_right=4;//右電機(jī)占空比N/20
  30. bit Right_moto_stop=1;
  31. bit Left_moto_stop =1;

  32. /********************************************
  33. 毫秒延時(shí)函數(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. /*****延時(shí)*****/
  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;                //定時(shí)器1時(shí)鐘為Fosc/12,即12T
  59.         //AUXR &= 0xFE;                //串口1選擇定時(shí)器1為波特率發(fā)生器
  60.         TMOD &= 0x0F;                //清除定時(shí)器1模式位
  61.         TMOD |= 0x20;                //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式
  62.         TL1 = 0xF3;                //設(shè)定定時(shí)初值
  63.         TH1 = 0xF3;                //設(shè)定定時(shí)器重裝值
  64.         ET1 = 0;                //禁止定時(shí)器1中斷
  65.         TR1 = 1;                //啟動(dòng)定時(shí)器1
  66.         SM0 = 0;
  67.         SM1 = 1;
  68.         REN = 1;
  69.         EA = 1;
  70.         ES = 1;

  71. }

  72. /*****前進(jìn)*****/
  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左電機(jī)*****/
  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右電機(jī)*****/
  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) //當(dāng)硬件接收到一個(gè)數(shù)據(jù)時(shí),RI會(huì)置位
  140.         {
  141.                 M = SBUF;
  142.                 RI = 0;
  143.         }
  144.         EA = 1;
  145. }


  146. /*TIMER0中斷服務(wù)子函數(shù)產(chǎn)生PWM信號(hào)*/
  147. void timer0()interrupt 1   using 2
  148. {
  149.         TH0=0XFC;          //1ms定時(shí)
  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定時(shí)
  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提供下載:
藍(lán)牙尋跡終極.zip (1.86 KB, 下載次數(shù): 20)




作者: admin    時(shí)間: 2019-9-30 16:54
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产乱码精品一区二区三区中文 | 成人a免费 | 伊人精品一区二区三区 | 一区二区三区av | 日韩有码在线播放 | 激情自拍偷拍 | 中文字幕一区二区三区日韩精品 | 色在线免费视频 | 黄色一级网 | 91久久精品视频 | 日韩欧美大片在线观看 | 欧美不卡一区二区三区 | 中文字幕av网 | 国产美女自拍视频 | 亚洲一区在线观看视频 | 99re99| 观看毛片| 久久精品一区二 | 亚洲一区二区久久久 | 日韩精品一区二区久久 | 精品久久久久久久久久久久 | 亚洲免费在线 | www.久久精品| 国产精品久久久久久久久久久久久 | 一级毛片视频 | 亚洲一区二区三区四区五区午夜 | 精品国产一区二区久久 | 亚洲精品成人av久久 | 亚洲电影专区 | 亚洲 中文 欧美 日韩 在线观看 | 欧美黑人巨大videos精品 | 天堂中文在线播放 | 亚洲不卡一 | 久久99久久99久久 | 黄色永久免费 | 日韩色视频 | 免费观看色 | 国产精品小视频在线观看 | 亚洲欧美激情精品一区二区 | 亚洲精品一区二区在线观看 | 久草视频在线播放 |