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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5303|回復: 8
打印 上一主題 下一主題
收起左側

求一個51單片機的紅外壁障加藍牙遙控的小車程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:156528 發表于 2016-12-27 15:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
40黑幣
單片機是stc89c52rc 芯片,電機是L298N驅動模塊。3路紅外對管,HC-06藍牙,小弟萬分感謝!!!

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

使用道具 舉報

沙發
ID:155507 發表于 2016-12-27 23:21 | 只看該作者
  1. #include "STC15W201S.h"
  2. #include "intrins.h"

  3. typedef unsigned char BYTE;
  4. typedef unsigned int WORD;

  5. sbit D1 = P1^4;  //用于控制左邊發光二極管
  6. sbit D2 = P3^7;   //用于控制右邊發光二極管

  7. bit busy;

  8. bit l9110s_1 ;
  9. bit l9110s_2 ;

  10. bit R9110s_1 ;
  11. bit R9110s_2 ;

  12. unsigned char func;

  13. void Delay500ms()                //@11.0592MHz
  14. {
  15.   unsigned char i, j, k;

  16.   _nop_();
  17.   _nop_();
  18.   i = 2;
  19.   j = 2;
  20.   k = 2;
  21.   do
  22.   {
  23.     do
  24.     {
  25.       while (--k);
  26.     } while (--j);
  27.   } while (--i);
  28. }

  29. BYTE usart_recv;

  30. /*----------------------------
  31. UART 中斷處理函數
  32. -----------------------------*/
  33. void Uart() interrupt 4 using 1
  34. {
  35.   if (RI)
  36.   {
  37.     RI = 0;                 //??RI?
  38.     usart_recv = SBUF;
  39.   }
  40.   if (TI)
  41.   {
  42.     TI = 0;                 //??TI?
  43.     busy = 0;               //????
  44.   }
  45. }

  46. //串口初始化為9600波特率
  47. void Usart_init(void)
  48. {
  49.   SCON = 0x50;       
  50.   T2L = 0xE0;               
  51.   T2H = 0xFE;               
  52.   AUXR |= 0x01;               
  53.   AUXR |= 0x4;               
  54.   AUXR |= 0x10;               
  55.   ES = 1;
  56.   EA = 1;
  57. }


  58. //電機PWM方式驅動

  59. void PWM_Init(void)                //100??@11.0592MHz
  60. {
  61.   AUXR |= 0x80;               
  62.   TMOD = 0x02;       
  63.   TL0 = 0x00;               
  64.   TH0 = 0x00;               
  65.   TF0 = 0;               
  66.   TR0 = 1;               
  67.   ET0 = 1;
  68.   EA  = 1;
  69. }

  70. unsigned char R_PWM,L_PWM;
  71. unsigned char count;
  72. void timer0_int (void) interrupt 1
  73. {
  74.   count++;
  75.   if(count > 100)
  76.   {
  77.     P32 = l9110s_1;
  78.     P33 = l9110s_2;
  79.     P54 = R9110s_1;
  80.     P55 = R9110s_2;
  81.     count = 0;
  82.   }
  83.   
  84.   if(count == L_PWM)
  85.   {
  86.     P54 = 0;
  87.     P55 = 0;
  88.   }
  89.   
  90.   if(count == R_PWM)
  91.   {
  92.     P32 = 0;
  93.     P33 = 0;
  94.   }
  95.   
  96. }


  97. void SendData(BYTE dat)
  98. {
  99.   while (busy);               //???????????
  100.   busy = 1;
  101.   SBUF = dat;                 //????UART?????
  102. }


  103. //電機控制,注意電機驅動芯片9110兩個控制端只能有一個為高電平,
  104. //若同時為高電平則芯片內部短路,危險,極易損壞芯片。
  105. void stop(void);
  106. void front(void);
  107. void back(void);
  108. void right(void);
  109. void left(void);

  110. //停止
  111. void stop(void)
  112. {
  113.   l9110s_1 = 0;
  114.   l9110s_2 = 0;
  115.   R9110s_1 = 0;
  116.   R9110s_2 = 0;
  117. }

  118. //前進
  119. void front(void)
  120. {
  121.   l9110s_1 = 0;
  122.   l9110s_2 = 1;
  123.   R9110s_1 = 0;
  124.   R9110s_2 = 1;
  125. }

  126. //倒退
  127. void back(void)
  128. {
  129.   l9110s_1 = 1;
  130.   l9110s_2 = 0;
  131.   R9110s_1 = 1;
  132.   R9110s_2 = 0;
  133. }


  134. //右轉
  135. void right(void)
  136. {
  137.   l9110s_1 = 1;
  138.   l9110s_2 = 0;
  139.   R9110s_1 = 0;
  140.   R9110s_2 = 1;
  141. }

  142. //左轉
  143. void left(void)
  144. {
  145.   l9110s_1 = 0;
  146.   l9110s_2 = 1;
  147.   R9110s_1 = 1;
  148.   R9110s_2 = 0;
  149. }




  150. //循跡避障 藍牙控制功能選擇
  151. unsigned char func_sel(void)
  152. {
  153.   unsigned long c;
  154.   unsigned char i;
  155.   i = 0;
  156.   c = 0;
  157.   D1 = D2 = 1;
  158.   stop();
  159.   Delay500ms();Delay500ms();Delay500ms();Delay500ms();
  160.   while((P15 == 0)&& (c <0x3ffff))
  161.   {
  162.     c++;
  163.     if((c > 0xffff) && (c < 0x1ffff))
  164.     {
  165.       D1 = 0;
  166.       i = 1;
  167.     }
  168.    
  169.     if((c > 0x1ffff) && (c < 0x2ffff))
  170.     {
  171.       D1 = 1; D2 = 0;
  172.       i = 2;
  173.     }
  174.    
  175.     if((c > 0x2ffff) && (c < 0x3ffff))
  176.     {
  177.       D1 = 0; D2 = 0;
  178.       i = 3;
  179.     }
  180.   }
  181.   
  182.   if(c < 0xffff)
  183.   {
  184.     return func;
  185.   }
  186.   return i;
  187. }



  188. void main(void)
  189. {
  190.   BYTE last_recv;
  191.   
  192.   P32 = P33 = P54 = P55 = 0;
  193.   l9110s_1 = l9110s_2 = R9110s_1 = R9110s_2 = 0;
  194.   
  195.   R_PWM = 99;
  196.   L_PWM = 99;
  197.   P3M1 = 0;
  198.   P3M0 = 0x0C;
  199.   P5M1 = 0;
  200.   P5M0 = 0x30;
  201.   P1M1 = 0xf;
  202.   P1M0 = 0;
  203.   IP =0x10;
  204.   PWM_Init();
  205.   Usart_init();
  206.   D1 = D2 = 1;
  207.   P15 = 1;
  208.   func = 1;
  209.   
  210.   while(func == 1)   //功能1:循跡
  211.   {
  212.     while((P11 == 1)&& (P13 == 0))
  213.     {
  214.       right(); D2 = 0;D1 = 1;
  215.     }
  216.     while((P13 == 1)&&(P11 == 0))
  217.     {
  218.       left();D1 = 0;D2 =1;
  219.     }
  220.    
  221.     while((P13 == 0)&&(P11 == 0))
  222.     {
  223.       front();D1 = 0;D2 =0;
  224.     }
  225.     front();Delay500ms();
  226.     if(P15 == 0)
  227.     {
  228.       func = func_sel();
  229.     }
  230.   }

  231.   while(func == 2)  //功能2:避障
  232.   {
  233.     if(P15 == 0)
  234.     {
  235.       func = func_sel();
  236.     }
  237.    
  238.     while((P12 == 1)&& (P10 == 0))
  239.     {
  240.       left(); D2 = 0;D1 = 1;
  241.     }
  242.    
  243.     while((P12 == 0)&& (P10 == 1))
  244.     {
  245.       right(); D2 = 1;D1 = 0;
  246.     }
  247.    
  248.     while((P12 == 1)&& (P10 == 1))
  249.     {
  250.       front(); D2 = 0;D1 = 0;
  251.     }
  252.    
  253.     while((P12 == 0)&& (P10 == 0))
  254.     {
  255.       back(); D2 = 1;D1 = 1;
  256.     }
  257.   }

  258.   
  259.   while(func == 3)    //功能3:藍牙遙控
  260.   {
  261.     if(P15 == 0)
  262.     {
  263.       func = func_sel();
  264.     }
  265.    
  266.     if(last_recv != usart_recv)
  267.     {
  268.       last_recv = usart_recv;
  269.       switch(usart_recv)
  270.       {
  271.       case 0x14:
  272.       case 0x15:
  273.       case 0x16:
  274.       case 0x17:
  275.       case 0x18:
  276.       case 0x19:
  277.       case 0x1a:
  278.       case 0x1b:
  279.       case 0x1c:
  280.       case 0x1d:
  281.       case 0x1e:
  282.       case 0x1f:       
  283.         front();
  284.         R_PWM = 69+(usart_recv-0x10)*2;
  285.         L_PWM = 69+(usart_recv-0x10)*2;
  286.         D1 = D2 = 0;
  287.         break;
  288.         
  289.       case 0x24:
  290.       case 0x25:
  291.       case 0x26:
  292.       case 0x27:
  293.       case 0x28:
  294.       case 0x29:
  295.       case 0x2a:
  296.       case 0x2b:
  297.       case 0x2c:
  298.       case 0x2d:
  299.       case 0x2e:
  300.       case 0x2f:       
  301.         back();
  302.         R_PWM = 69+(usart_recv-0x20)*2;
  303.         L_PWM = 69+(usart_recv-0x20)*2;
  304.         D1 = D2 = 1;
  305.         break;
  306.         
  307.       case 0x34:
  308.       case 0x35:
  309.       case 0x36:
  310.       case 0x37:
  311.       case 0x38:
  312.       case 0x39:
  313.       case 0x3a:
  314.       case 0x3b:
  315.       case 0x3c:
  316.       case 0x3d:
  317.       case 0x3e:
  318.       case 0x3f:       
  319.         left();
  320.         R_PWM = 69+(usart_recv-0x30)*2;
  321.         L_PWM = 69+(usart_recv-0x30)*2;
  322.         D1 = 0; D2 = 1;
  323.         break;               
  324.         
  325.         
  326.       case 0x44:
  327.       case 0x45:
  328.       case 0x46:
  329.       case 0x47:
  330.       case 0x48:
  331.       case 0x49:
  332.       case 0x4a:
  333.       case 0x4b:
  334.       case 0x4c:
  335.       case 0x4d:
  336.       case 0x4e:
  337.       case 0x4f:       
  338.         right();
  339.         R_PWM = 69+(usart_recv-0x40)*2;
  340.         L_PWM = 69+(usart_recv-0x40)*2;
  341.         D1 = 1; D2 = 0;
  342.         break;                       
  343.         
  344.       case 0x54:
  345.       case 0x55:
  346.       case 0x56:
  347.       case 0x57:
  348.       case 0x58:
  349.       case 0x59:
  350.       case 0x5a:
  351.       case 0x5b:
  352.       case 0x5c:
  353.       case 0x5d:
  354.       case 0x5e:
  355.       case 0x5f:       
  356.         front();
  357.         R_PWM = 99;
  358.         L_PWM = 100-(usart_recv-0x50)*2;
  359.         D1 = 1; D2 = 0;
  360.         break;                                       
  361.         

  362.       case 0x64:
  363.       case 0x65:
  364.       case 0x66:
  365.       case 0x67:
  366.       case 0x68:
  367.       case 0x69:
  368.       case 0x6a:
  369.       case 0x6b:
  370.       case 0x6c:
  371.       case 0x6d:
  372.       case 0x6e:
  373.       case 0x6f:       
  374.         front();
  375.         R_PWM = 100-(usart_recv-0x60)*2;
  376.         L_PWM = 99;
  377.         D1 = 0; D2 = 1;
  378.         break;                                       
  379.         
  380.         
  381.       case 0x74:
  382.       case 0x75:
  383.       case 0x76:
  384.       case 0x77:
  385.       case 0x78:
  386.       case 0x79:
  387.       case 0x7a:
  388.       case 0x7b:
  389.       case 0x7c:
  390.       case 0x7d:
  391.       case 0x7e:
  392.       case 0x7f:       
  393.         back();
  394.         R_PWM = 99;
  395.         L_PWM = 100-(usart_recv-0x70)*2;
  396.         D1 = 1; D2 = 1;
  397.         break;               
  398.         
  399.       case 0x84:
  400.       case 0x85:
  401.       case 0x86:
  402.       case 0x87:
  403.       case 0x88:
  404.       case 0x89:
  405.       case 0x8a:
  406.       case 0x8b:
  407.       case 0x8c:
  408.       case 0x8d:
  409.       case 0x8e:
  410.       case 0x8f:       
  411.         back();
  412.         R_PWM = 100-(usart_recv-0x80)*2;
  413.         L_PWM = 99;
  414.         D1 = 1; D2 = 1;
  415.         break;                                       
  416.         
  417.       case 0:
  418.         stop();
  419.         D1 = 1; D2 = 1;
  420.         break;
  421.       }
  422.     }
  423.   }
  424. }

復制代碼
回復

使用道具 舉報

板凳
ID:156528 發表于 2016-12-28 10:43 | 只看該作者
程序中是不是沒有定義電機控制P0口,我是個初學者不懂,求教了
回復

使用道具 舉報

地板
ID:155822 發表于 2016-12-28 11:39 | 只看該作者
很好 謝謝拉
回復

使用道具 舉報

5#
ID:118338 發表于 2016-12-28 12:29 | 只看該作者
我有整套藍牙小車資料,89C52的單片機,驅動也是L298N,,手機藍牙遙控,自己加下紅外蔽障功能就可以。

藍牙小車程序.zip

30.15 KB, 下載次數: 45

回復

使用道具 舉報

6#
ID:152682 發表于 2016-12-31 12:00 | 只看該作者
fanchunping 發表于 2016-12-28 12:29
我有整套藍牙小車資料,89C52的單片機,驅動也是L298N,,手機藍牙遙控,自己加下紅外蔽障功能就可以。

可以發一下整套資料嗎?謝謝!
回復

使用道具 舉報

7#
ID:189908 發表于 2017-4-15 20:02 | 只看該作者
fanchunping 發表于 2016-12-28 12:29
我有整套藍牙小車資料,89C52的單片機,驅動也是L298N,,手機藍牙遙控,自己加下紅外蔽障功能就可以。

注釋很清楚,正在找類似程序,感謝分享
回復

使用道具 舉報

8#
ID:298261 發表于 2018-10-12 17:24 | 只看該作者
我最近也在做壁障,給我的你看
void keys()//按鍵掃描
{
        if(R_redlight == 0)//右紅外探頭檢測到障礙物,往左拐
    {
        delay(20);//延時消抖
        if(R_redlight == 0)
        {        
           JD--;
          //  JD = JD - angle;
        }
    }

    //---------------------------   
    if(L_redlight == 0)//左紅外探頭檢測到障礙物,往右拐
    {
        delay(20);
        if(L_redlight == 0)   
        {  
           JD++;
           //JD = JD + angle;  
        }
    }
    if(L_redlight == 1 && R_redlight == 1)//當左右兩邊探頭沒有檢測到物體時舵機保持中間值
    {
        JD = median;
    }
   
    if(JD <= 1)
        JD = 1;
    if(JD > 150)
        JD = 150;
   
}
回復

使用道具 舉報

9#
ID:408692 發表于 2018-10-12 17:44 | 只看該作者
幫助非常大。謝謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本久久久久久 | 精品视频在线播放 | 欧美日韩精品一区二区三区视频 | 综合激情av| 日韩欧美综合在线视频 | 日韩中文字幕一区 | 国产精品久久久久久久久久久久 | 免费日韩av网站 | 激情欧美一区二区三区 | 国产剧情一区 | 精品久久久久国产免费第一页 | 蜜臀网| 夜久久 | 日日干日日操 | 在线不卡一区 | 欧美日韩美女 | 成人免费精品视频 | 欧美不卡网站 | 欧美精品国产精品 | 国产精品99久久久久久大便 | 久久久久久久久久久久91 | 黄免费观看视频 | 国产95在线| 国产精品久久毛片av大全日韩 | 久久久影院 | 成人免费在线视频 | 日韩一区二区在线视频 | 逼逼网| 中文字幕 在线观看 | 亚洲国产视频一区二区 | 美女爽到呻吟久久久久 | 日韩精品一区二区三区中文字幕 | 欧美精品福利视频 | 成人午夜视频在线观看 | 日韩高清一区 | 欧美激情一区二区 | 欧美国产日韩在线 | 一级黄色播放 | 亚洲www啪成人一区二区麻豆 | 涩在线 | 五月天天色|