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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2772|回復: 0
收起左側

51單片機藍牙紅外尋跡紅外避障小車代碼

[復制鏈接]
ID:967186 發表于 2022-6-25 11:00 | 顯示全部樓層 |閱讀模式
做51單片機小車的硬件部分:一個開發板,帶電機車輪的小車底盤,藍牙模塊,充電寶為小車供電

軟件部分,串口助手,需要了解藍牙AT指令用以改藍牙名字,避免干擾,keli51開發環境

制作出來的實物圖如下:

小車成品

小車成品


單片機源程序如下:
#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義

  //定義電機輸入端口
sbit right_b=P1^3;  
sbit right_a=P1^2;
sbit left_b=P1^1;
sbit left_a=P1^0;
sbit out3=P3^3;  //定義紅外輸入端口
sbit out2=P3^2;
sbit out0=P0^2;
sbit out1=P0^4;
sbit fm=P0^7;    //定義蜂鳴器輸出端口


void delay(int n)    //延時函數
{
  int i;
  while(n--)
  {
  for(i=0;i<113;i++);
  }
}
/*void come(int n)    //利用電機差速調速 本次全速,所以注釋了。
{
    int i=0;
    left_a=1;
    left_b=0;

    right_b=0;
    while(i++<5)
    {
    right_a=1;
    delay(n);
    right_a=0;
    delay(10-n);
    }
}*/
void go_up()       //前進函數
{
         left_a=1;
         left_b=0;
        right_b=0;
         right_a=1;


}
void go_back()    //后退函數
{
  left_a=0;
         left_b=1;
        right_b=1;
         right_a=0;
}

void left()      //左轉函數
{
            fm=1;
             delay(10);
          fm=0;
        left_a=1;
          left_b=0;
        right_b=0;
            right_a=0;
}

void right()   /右轉函數
{

        fm=1;
            delay(10);
          fm=0;
        left_a=0;
           left_b=0;
        right_b=0;
            right_a=1;  
}

void stop()   //停止函數
{
       left_a=0;
         left_b=0;
        right_b=0;
            right_a=0;

}
void ssz()   //順時針旋轉
{
          fm=1;
            delay(3);
          fm=0;
        left_a=0;
          left_b=1;
        right_b=0;
        right_a=1;
}
void nsz()   //逆時針旋轉
{
      fm=1;
        delay(3);
    fm=0;
    left_a=1;
    left_b=0;
    right_b=1;
         right_a=0;
}
void UART_Init(void)        
{
    PCON &= 0x7F;        
    SCON = 0x50;        
    TMOD &= 0x0F;        
    TMOD |= 0x20;        
    TL1 = 0xFD;   
    TH1 = 0xFD;        
    ET1 = 0;        
    TR1 = 1;        
    EA=1;        
    ES=1;        
}

  
void UART_Routine() interrupt 4  //藍牙數據接收以及判斷
{
    unsigned char S;
    if(RI==1)  
    {
            stop();
            S=SBUF;
            switch(S)        
            {
                case ('1'):        
                    go_up();break;
                case ('2'):        
                    go_back();break;
                case ('3'):
                    nsz();break;
                case ('4'):
                    ssz();break;
                case ('0'):
                    stop();break;
            }   
            
            RI=0;
    }
}
void main (void)       //主函數
{
        UART_Init();   // 串口通信初始化   
while (1)   //主循環 尋跡功能, 避障功能 在此部分改動
  {
            if(out0==0&out1==0)//&out2==0&out3==0  
                     {
                    go_back();
                     }
            else
         stop();                  
                     
//                     if(out0==0&out1==0&S=='1')//&out2==0&out3==0
//                     {
//                    go_back();
//                     }
//                         if(out0==1&out1==0)//&out2==1&out3==0
//                     {
//                     nsz();
//                     }
//                     else if(out0==0&out1==1)//&out2==0&out3==1
//                     {
//                     ssz();
//                     }
//                        else if(out0==1&out1==1)//&out2==1&out3==1
//                     {
//                            go_up();
//                     }
  }   
}  


//——————————————————測試功能————————————————————

////單片機接收PC發出的數據  用于測試串口通信
//#include<reg51.h>       //包含單片機寄存器的頭文件
///*****************************************************
//函數功能:接收一個字節數據
//***************************************************/
//sbit KEY2=P3^4;
//void delay(int n)
//{
//  int i;
//  while(n--)
//  {
//  for(i=0;i<113;i++);
//  }
//}
// unsigned char Receive(void)
//{
//  unsigned char dat;
//  while(RI==0)  //只要接收中斷標志位RI沒有被置“1”
//         ;      //等待,直至接收完畢(RI=1)
//      RI=0;      //為了接收下一幀數據,需將RI清0
//     dat=SBUF;  //將接收緩沖器中的數據存于dat
//      return dat;
//}
///*****************************************************
//函數功能:主函數
//***************************************************/
//void main(void)
//{
//   TMOD=0x20;  //定時器T1工作于方式2
//   SCON=0x50;  //SCON=0101 0000B,串口工作方式1,允許接收(REN=1)
//   PCON=0x00;  //PCON=0000 0000B,波特率9600
//   TH1=0xfd;  //根據規定給定時器T1賦初值
//   TL1=0xfd;  //根據規定給定時器T1賦初值      
//   TR1=1;    //啟動定時器T1   
//   REN=1;    //允許接收
//   
//  while(1)
//   {  
//         P1=0xFF;
//         P1=Receive(); //將接收到的數據送P1口顯示
//         delay(1000);            
//    }

//   }
//}


////單片機向PC發送數據    用于測試串口通信
//#include<reg51.h>       //包含單片機寄存器的頭文件
//unsigned char code Tab[ ]="hello word ";
///*****************************************************
//函數功能:向PC發送一個字節數據
//***************************************************/
//void Send(unsigned char dat)
//{
//   SBUF=dat;
//   while(TI==0)
//      ;
//    TI=0;
//}
///**************************************************************
//函數功能:延時約150ms
//**************************************************************/
// void delay(void)   
//{
//   unsigned char m,n;
//     for(m=0;m<200;m++)
//      for(n=0;n<250;n++)      
//           ;
// }
///*****************************************************
//函數功能:主函數
//***************************************************/
//void main(void)
//{
//   unsigned char i;
//   TMOD=0x20;  //TMOD=0010 0000B,定時器T1工作于方式2
//   SCON=0x40;  //SCON=0100 0000B,串口工作方式1
//   PCON=0x00;  //PCON=0000 0000B,波特率9600
//   TH1=0xfd;    //根據規定給定時器T1賦初值
//   TL1=0xfd;    //根據規定給定時器T1賦初值
//   TR1=1;      //啟動定時器T1   
//  while(1)
//   {
//      for(i=0;i<8;i++)   //模擬檢測數據
//         {
//            Send(Tab[ i]);        //發送數據i
//              delay();   //150ms發送一次數據              
//          }        
//   }
//}      

開發板原理圖

開發板原理圖

紅外模塊原理圖

紅外模塊原理圖

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表