欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

只需一步,快速開始

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

藍(lán)牙無線遙控避障

[復(fù)制鏈接]
ID:79748 發(fā)表于 2015-5-12 15:18 | 顯示全部樓層 |閱讀模式
  1. /******************************************
  2. *******************************************
  3.                 程序名稱:藍(lán)牙無線遙控避障
  4. ******************************************
  5. *******************************************/
  6. #include <at89x51.h>
  7. #include <stdio.h>
  8. #include <PWM.h>  //包含前面講到的PWM頭文件,此頭文件導(dǎo)入后能產(chǎn)生1KHZ的PWM信號(hào)
  9. #include <intrins.h>

  10. #define Forward_L_DATA  200
  11. #define Forward_R_DATA  200      
  12. #define Back_L_DATA  190
  13. #define Back_R_DATA  190      
  14. #define Turn_Left_L_DATA  230
  15. #define Turn_Left_R_DATA  230
  16. #define Turn_Right_L_DATA  230
  17. #define Turn_Right_R_DATA  230
  18. /***自定義一些數(shù)據(jù),這些數(shù)據(jù)對(duì)應(yīng)軟件上的數(shù)據(jù)設(shè)置**/      
  19. #define leftdata    0x11
  20. #define rightdata   0x22
  21. #define forwarddata 0x33
  22. #define backdata    0x44
  23. /*******L293D邏輯電平口定義******/
  24. sbit L293D_IN1=P1^5;
  25. sbit L293D_IN2=P1^6;
  26. sbit L293D_IN3=P1^1;
  27. sbit L293D_IN4=P1^0;
  28. sbit L293D_EN1=P1^3;
  29. sbit L293D_EN2=P1^4;
  30. /*****左傳感器和右傳感器接線定義***/
  31. sbit Left_InSen=P2^3;      
  32. sbit Right_InSen=P2^0;
  33. /******寄存器地址賦值******/
  34. sfr AUXR=0x8e;
  35. sfr BRT=0x9c;
  36. /******全局變量定義******/
  37. unsigned char SBUF_DATA,flag1,flag2,flag3,flag4,Last_SBUF_DATA;
  38. unsigned int count1=0;
  39. unsigned int speed;
  40. char s[10];                 //存放速度值的緩沖區(qū)
  41. /*******函數(shù)聲明*******/
  42. void SendString(unsigned char *pt);
  43. void Send_Char(unsigned char DATA);

  44. //—————————————延時(shí)1ms函數(shù)————————————
  45. void Delay1ms(unsigned int i)
  46. {
  47.         unsigned char j,k;
  48.         do{
  49.                 j = 44;
  50.                 do{
  51.                         k = 100;
  52.                         do{ _nop_(); }while(--k);                              
  53.                 }while(--j);
  54.         }while(--i);
  55. }
  56. /*************************電機(jī)控制函數(shù)******************/
  57. void Forward(unsigned char Speed_Right,unsigned char Speed_Left)//前進(jìn)
  58. {
  59.          L293D_IN1=1;
  60.          L293D_IN2=0;
  61.          L293D_IN3=1;
  62.          L293D_IN4=0;
  63.      PWM_Set(255-Speed_Right,255-Speed_Left);
  64. }
  65. void Back(unsigned char Speed_Right,unsigned char Speed_Left)//后退
  66. {
  67.          L293D_IN1=0;
  68.          L293D_IN2=1;               
  69.          L293D_IN3=0;
  70.          L293D_IN4=1;
  71.      PWM_Set(255-Speed_Right,255-Speed_Left);
  72. }
  73. void Turn_Left(unsigned char Speed_Right,unsigned char Speed_Left)//左轉(zhuǎn)
  74. {
  75.     L293D_IN1=1;
  76.         L293D_IN2=0;
  77.         L293D_IN3=0;
  78.         L293D_IN4=1;
  79.         PWM_Set(255-Speed_Right,255-Speed_Left);

  80. }
  81. void Turn_Right(unsigned char Speed_Right,unsigned char Speed_Left)//右轉(zhuǎn)
  82. {
  83.     L293D_IN1=0;
  84.         L293D_IN2=1;
  85.         L293D_IN3=1;
  86.         L293D_IN4=0;
  87.         PWM_Set(255-Speed_Right,255-Speed_Left);
  88. }
  89. void Stop(void)        //停止
  90. {
  91.      L293D_IN1=0;
  92.          L293D_IN2=0;
  93.          L293D_IN3=0;
  94.          L293D_IN4=0;
  95.          PWM_Set(0,0);
  96. }

  97. /****************發(fā)送字符串函數(shù)****************/
  98. void SendString(unsigned char *pt)
  99. {
  100.     while(*pt)
  101.                 Send_Char(*(pt++));
  102. }
  103. /****************發(fā)送字符函數(shù)****************/
  104. void Send_Char(unsigned char DATA)
  105. {
  106.      ES=0;//關(guān)閉串口中斷
  107.          flag1=0;
  108.      SBUF=DATA; //將數(shù)據(jù)發(fā)送出去,可以在電腦串口工具的接收區(qū)觀察
  109.      while(!TI);//數(shù)據(jù)發(fā)送完畢之后,T1會(huì)置1
  110.      TI=0;
  111.      ES=1;//重新允許串口中斷      
  112. }
  113. /****************************串口中斷函數(shù)****************************/
  114. void serial() interrupt 4
  115. {
  116.         flag1=1;//如果產(chǎn)生了中斷,說明單片機(jī)串口接收到數(shù)據(jù),串口中斷標(biāo)志置1      
  117.         SBUF_DATA=SBUF;        //存放接收到的數(shù)據(jù)
  118.         RI=0;//中斷標(biāo)志
  119. }
  120. /****************************障礙檢測函數(shù)**************************/
  121. void jiance(void)
  122. {
  123.         if(Left_InSen==0&& Right_InSen==1) //如果左邊傳感器檢測到物體,提示左邊有障礙物
  124.           {
  125.                  if(flag2!=1)
  126.                    {
  127.                           Delay1ms(500);
  128.                           flag2=1;
  129.                           SendString("\r\n左方有障礙物...\r\n\r\n");      
  130.                    }
  131.           }
  132.         else
  133.           {
  134.                  flag2=0;
  135.           }
  136.         if(Left_InSen==1&& Right_InSen==0) //如果右邊傳感器檢測到物體,提示右邊有障礙物
  137.           {
  138.                  if(flag3!=1)
  139.                    {
  140.                           Delay1ms(500);
  141.                           flag3=1;
  142.                       SendString("\r\n右方有障礙物...\r\n\r\n");      
  143.                    }
  144.           }
  145.         else
  146.           {
  147.                  flag3=0;
  148.           }
  149.         if(Left_InSen==0&& Right_InSen==0) //如果前方傳感器檢測到物體,提示前方有障礙物
  150.           {
  151.                  if(flag4!=1)
  152.                    {
  153.                           Delay1ms(500);
  154.                           flag4=1;
  155.                           SendString("\r\n前方有障礙物...\r\n\r\n");      
  156.                    }
  157.           }
  158.         else
  159.           {
  160.                  flag4=0;
  161.           }
  162. }
復(fù)制代碼




/****************************主函數(shù)***********************/
void main(void)
{
    PWM_ini();

        TMOD|=0x10;
        TMOD&=0x1F;
        TH1=(65536-36815)/256;
        TL1=(65536-36815)%256;          // 20ms
        TR1=1;
        ET1=1;

        EX0=1;
        IT0=1; //

        SCON=0x50;//設(shè)置串口工作在方式1,允許串口接收數(shù)據(jù)
        BRT=0xff;
        AUXR=0x11;
               
        ES=1;  //允許串行中斷
        EA=1; //開總中斷
        SendString("已經(jīng)進(jìn)入藍(lán)牙無線控制模式,\r\n\r\n請(qǐng)按下對(duì)應(yīng)的鍵盤按鍵,無線遙控小車。\r\n");

while(1)
{
jiance();
if(flag1==1)        //如果產(chǎn)生過中斷,證明串口接收到了數(shù)據(jù)
{                        
        flag1=0;
        if(SBUF_DATA!=Last_SBUF_DATA)
        {
        switch(SBUF_DATA)
        {
                case leftdata: SendString("小車正在左轉(zhuǎn)...\r\n\r\n");break;
                case rightdata: SendString("小車正在右轉(zhuǎn)...\r\n\r\n");break;
                default: break;
                }
               
        }
         switch(SBUF_DATA)
        {
        case leftdata: Turn_Left(Turn_Left_R_DATA,Turn_Left_L_DATA);break;
        case rightdata: Turn_Right(Turn_Right_R_DATA,Turn_Right_L_DATA);break;
        case forwarddata: Forward(Forward_R_DATA,Forward_L_DATA);SendString("小車正在前進(jìn)...\r\n\r\n");SendString(s); break;
case backdata: Back(Back_R_DATA,Back_L_DATA);SendString("小車正在后退...\r\n\r\n");SendString(s);break;
                                         default: break;
                }
                        
         Last_SBUF_DATA = SBUF_DATA;
        Delay1ms(30);
        }
                    else Stop();
}
}  

void int0() interrupt 0
{
        count1++;
}

void timer1() interrupt 3
{
        static unsigned char n=0;
        TH1=(65536-36815)/256;
        TL1=(65536-36815)%256;          // 20ms
        n++;
        if(n>=50)
        {               
                n=0;
                speed=(float)count1*1.0053096;        
                count1=0;
                sprintf(s,"speed:%3dcm/s\r\n\r\n",(unsigned short)speed);//將速度轉(zhuǎn)化為字符串送到S數(shù)組中
        }
}

小車通訊部分原理圖.pdf

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

回復(fù)

使用道具 舉報(bào)

ID:79782 發(fā)表于 2015-5-12 19:30 | 顯示全部樓層
可以實(shí)現(xiàn)嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表