找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1866|回复: 9
收起左侧

51单片机超声波小车的疑问

[复制链接]
ID:702493 发表于 2020-3-13 23:50 | 显示全部楼层 |阅读模式
程序没有有关超声波的内容,只是一个直走的命令,但HC-SR04超声波模块连在单片机上,小车不走。
拔掉echo端口,小车直走。
检查超声波模块,超声波模块完好。
这什么原因啊?求解答。
回复

使用道具 举报

ID:699902 发表于 2020-3-14 09:25 | 显示全部楼层
你可以检测主板波形
回复

使用道具 举报

ID:164602 发表于 2020-3-14 10:11 | 显示全部楼层
你不提供软件、硬件的信息,我们怎么猜得到有什么问题。就是平时你在学校问师傅,也是要拿着那个东西问吧?
回复

使用道具 举报

ID:702493 发表于 2020-3-14 12:00 | 显示全部楼层
HC6800-ES-V2.0 发表于 2020-3-14 10:11
你不提供软件、硬件的信息,我们怎么猜得到有什么问题。就是平时你在学校问师傅,也是要拿着那个东西问吧?

#include<reg52.h>
#include<intrins.h>
#define uint  unsigned int
#define uchar unsigned char
sbit trig=P1^0;
sbit echo=P2^0;    //触发控制信号输入
sbit pwm=P2^6;     //回响信号输出
sbit M1A=P0^0;
sbit M1B=P0^1;
sbit M2A=P0^2;  
sbit M2B=P0^3;
uchar count,jd;
uint  time=0,timer=0;   
bit flag =0;   
unsigned long s=0,zs=0,ys=0;
void delay(uint x)  
{
uint i,j;
     for(i=x;i>0;i--)   
for(j=110;j>0;j--);  
}
  void tingzhi()  //停止
  {
  M1A=0;
    M1B=0;
    M2A=0;
    M2B=0;
  }
  void qianjin()  //前进
  {
  M1A=0;
    M1B=1;
    M2A=0;
    M2B=1;
  }
  void houtui()   //后退
  {
  M1A=1;
    M1B=0;
    M2A=1;
    M2B=0;
  }
  void zuozhuan()  //左转
  {
  M1A=1;
    M1B=0;
    M2A=0;
    M2B=1;
  }  
    void youzhuan()  //右转
{
    M1A=0;
    M1B=1;
    M2A=1;
    M2B=0;
}  
void ceju(void)
{
  while(!echo);   //当echo为零时等待
    TR0=1;          //开启计数
    while(echo);    //当echo为1计数并等待
  TR0=0;
  time=TH0*256+TL0;
  TH0=0;
  TL0=0;
  s=(time*1.7)/100;  //单位cm
}
   void qingling()
   {
    time=0;
    TH1=65036/256;
  TL1=65036%256;
    count=0;
   }
  void zd0()interrupt 1  //T0中断用来计数器溢出,超过测距范围
  {
  flag=1;                //中断溢出标志
  }
  void zd1()interrupt 3
  {
  TH1=65036/256;
  TL1=65036%256;
   if(count<jd) pwm=1;
   else pwm=0;
   count++;
   count=count%40;
   timer++;
    if(timer>=800)
    {
    timer=0;
     trig=1;
  _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
     trig=0;
    }
  }
  void main(void)
  {
  jd=3;
   count=0;
   TMOD=0x11;
   TH0=0;
   TL0=0;
   TH1=65036/256;
  TL1=65036%256;
   IE=0x8a;
   while(1)
   {
   TR1=1;
    ceju();
    if(s<=10);
    {
    tingzhi();
     jd=1;
     count=0;
     delay(20);
     TR1=0;
     qingling();
     TR1=1;
     ceju();
     ys=s;
     jd=5;
     count=0;
     delay(20);
     TR1=0;
     qingling();
     TR1=1;
     ceju();
     zs=s;
     jd=3;
     count=0;
     delay(20);
     TR1=0;
     if((zs>=ys)&&(zs>10))
     {
     zuozhuan();
     }
     else if((ys>=zs)&&(ys>10))
     {
     youzhuan();
     }
     else
     {
     houtui();
     }
     if((s>10)||(flag==1))
     {
      qianjin();
     }
    }
   }
  }
小车代码
用的51单片机,HC-SR04超声波模块,l298n电机驱动,还有HC-06蓝牙模块。
大佬,我这都快卡半个月了,一直找不出问题。
回复

使用道具 举报

ID:648281 发表于 2020-3-14 13:27 | 显示全部楼层
你好!
先检查下,超声波模块的收发是不是装反了
回复

使用道具 举报

ID:702493 发表于 2020-3-14 15:13 | 显示全部楼层
51hei**1140 发表于 2020-3-14 13:27
你好!
先检查下,超声波模块的收发是不是装反了

没有啊
回复

使用道具 举报

ID:285473 发表于 2020-3-14 17:58 | 显示全部楼层
应该是你程序问题,加入你的程序设置的是lenth<3.5m(实际距离远小于3.5m)小车走,则小车一直动
回复

使用道具 举报

ID:691449 发表于 2020-3-15 10:51 | 显示全部楼层
每次超声波测距之前需要先给trig一个触发信号,你的触发放在中断里了。
回复

使用道具 举报

ID:164602 发表于 2020-3-15 11:34 | 显示全部楼层
1145421628 发表于 2020-3-14 12:00
#include
#include
#define uint  unsigned int

至少要改改这一句:
s=(time*1.7)/100;  //单位cm
改成这样:
S= (long)(time*0.17);
如果不强制进行类型转换,很可能s一直是零,所以车不动。

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:405079 发表于 2020-3-15 12:18 | 显示全部楼层
好好检查一下硬件连接是否短路
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表