很瞌睡 2022-09-27 17:12 采纳率: 100%
浏览 58
已结题

基于51单片机hc05控制小车无响应

**通过hc05蓝牙模块来控制小车的前进方向和避障功能,程序编译0错误0警告,但是烧录到51上面用spp蓝牙串口发送数据小车没有反应

img


**
程序如下

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char 
#define uint  unsigned int 
 sbit IN1=P2^4;  
 sbit IN2=P2^3;  
 sbit IN3=P2^2; 
 sbit IN4=P2^1;
 sbit ENA=P2^5;
 sbit ENB=P2^0;
 sbit Echo = P0^6;                                  
 sbit Trig = P0^7;                                   
 sbit DJ = P0^5;
 uint stime = 0;                                 
 uint timer = 0;                                 
 uint S = 0;                                            
 uchar flag =0;                                                        
uchar PWMA,PWMB;
uint counter;
uchar i,j;
uchar jiaodu;
void delayms(uint ms)
{
    uint msi,msj;
    for(msi = 0;msi < ms;msi++)
        for(msj = 0;msj < 112;msj++);
}
void stop() 
{ 
  IN1=0;
  IN2=0;
  IN3=0;
  IN4=0; 
}

void turnleft() 
{ 
 IN1=1; 
 IN2=0; 
 PWMA = 25;
 IN3=1; 
 IN4=0;
 PWMB = 25; 
} 
void turnright()  
{ 
 IN1=0; 
 IN2=1;
 PWMA = 25; 
 IN3=0; 
 IN4=1;
 PWMB = 25; 
} 
void back() 
{ 
 IN1=1; 
 IN2=0;
 PWMA = 25; 
 IN3=0; 
 IN4=1; 
 PWMB = 25;
} 
void straight() 
{ 
 IN1=0; 
 IN2=1; 
 PWMA = 25;
 IN3=1; 
 IN4=0; 
 PWMB = 25;
}
void timer_init(){
    TMOD|=0x11;               
    TH0=0;
    TL0=0;          
    TH1=0xFE;                       
    TL1=0x33;
    ET0=1;                  
    ET1=1;                          
    TR1=1;                          
    EA=1;
    jiaodu=3;  
}
void hcsr04()
{
    Trig=1;                       
    _nop_(); 
    _nop_(); 
    _nop_(); 
    _nop_(); 
    _nop_();
    _nop_(); 
    _nop_(); 
    _nop_(); 
    _nop_(); 
    _nop_(); 
    _nop_();                       
    Trig=0;
    while(!Echo);               
    TR0=1;                          
    while(Echo);                    
    TR0=0;                            
}
void distance(void)
{
    stime=TH0*256+TL0;         
    TH0=0;
    TL0=0;                                 
    S=(stime*1.8)/100;      
}
void compare_distance()
{
     if(jiaodu ==3 && S >= 15)
    {
        straight();
        hcsr04();
        distance();
    }
    else if(jiaodu ==3 && S < 15)
    {
        stop();
        jiaodu = 2;
        delayms(200);
        hcsr04();
        distance();
    }
    if(jiaodu == 2 && S >=15)
    {
        turnright();
        delayms(500);
        jiaodu =3;
        delayms(200);
        hcsr04();
        distance();
    }
    else if(jiaodu == 2 && S < 15)
    {
        jiaodu = 4;
        delayms(200);
        hcsr04();
        distance();
    }
    if(jiaodu == 4 && S >=15)
    {
        turnleft();
        delayms(500);
        jiaodu =3;
        delayms(200);
        hcsr04();
        distance();
    }
    else if(jiaodu == 4 && S <15)
    {
        jiaodu =3;
        delayms(200);
        hcsr04();
        distance();
    }
}
void run(){
        hcsr04();                       
        distance();                    
       compare_distance();    
}
void Tmr1_isr() interrupt 3 
{
    TH1=0xFE;                          
    TL1=0x33;
    i++;
    j++;
    counter++;
  if(counter <= jiaodu) DJ = 1;
    if(counter > jiaodu && counter <= 40) DJ = 0;
    if(counter > 40) counter = 0;
    if(i < PWMA)
    {
        ENA = 1;
    }
    else
    {
        ENA = 0;
        if(i >= 100)
        {
            i = 0;
        }
    }
    if(j < PWMB)
    {
        ENB = 1;
    }
    else
    {
        ENB = 0;
        if(j >= 100)
        {
            j = 0;
        }
    }
}

void Tmr0_isr() interrupt 1  
{
    flag=1;                                    
}
 
void usartinit() 
{ 
 SCON=0X50; 
 TMOD=0X20; 
 PCON=0X80; 
 TH1=0XFA; 
 TL1=0XFA; 
 ES=1; 
 EA=1; 
 TR1=1; 
 ET1 = 0; 
} 
void main() 
{ 
 usartinit();
 timer_init(); 
 while(1);
} 
void usart()interrupt 4 
{  
uchar res; 
if(RI==1) 
 { 
    RI=0; 
    IN1=0; 
    IN2=0; 
    IN3=0; 
    IN4=0; 
    res=SBUF; 
switch(res) 
  { 
 case('1'):turnleft();
 break; 
 case('2'):turnright();
 break; 
 case('3'):back();
 break; 
 case('4'):straight();
 break;
 case('5'):run();
 break; 
 case('0'):stop();
 break; 
  } 
 } 
}

  • 写回答

4条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 系统已结题 10月5日
      • 已采纳回答 9月27日
      • 创建了问题 9月27日

      悬赏问题

      • ¥15 postman测试正常,在代码运行报错
      • ¥15 关于#C语言#的问题,如何解决?
      • ¥20 Vs2017 Help Viewer2.3 问题
      • ¥35 基于嵌入式linux的日程管理软件
      • ¥50 如何将list字符串添加到CSV文件表头?
      • ¥15 关于#javascript#的问题:通过ajax实现的局部刷新 如何将项目打包
      • ¥15 海思uboot USB3.0无法识别
      • ¥15 无法调用库文件,自己可以找到,但编译时显示没有
      • ¥15 安装PyQt5的时候这里创建虚拟环境是哪里?具体是怎么的?能录个视频吗
      • ¥20 php程序设计题不会!求解答!