精华内容
下载资源
问答
  • 基于51单片机智能小车超声波避障程序,希望有用
  • /* Main.c file generated by New Project wizard** Created: 周五 4月 3 2020* Processor: AT89C52* Compiler:Keil for 8051*/#include #include #include #defineTXP1_3#defineRXP1_2#define Forward_L_D...

    /* Main.c file generated by New Project wizard

    *

    * Created:   周五 4月 3 2020

    * Processor: AT89C52

    * Compiler:  Keil for 8051

    */

    #include

    #include

    #include

    #define  TX  P1_3

    #define  RX  P1_2

    #define Forward_L_DATA  180

    #define Forward_R_DATA  180

    /*****°′???-í??ó???¨ò?******/

    sbit L293D_IN1=P0^0;

    sbit L293D_IN2=P0^1;

    sbit L293D_IN3=P0^2;

    sbit L293D_IN4=P0^3;

    sbit L293D_EN1=P0^4;

    sbit L293D_EN2=P0^5;

    sbit BUZZ=P0^6;

    void Delay400Ms(void);

    unsigned char disbuff[4]={0,0,0,0};

    void Count(void);

    unsigned int  time=0;

    unsigned long S=0;

    bit  flag =0;

    bit  turn_right_flag;

    //**********************************************************

    //oˉêy??3?:Delay1ms(unsigned int i)

    //oˉêy1|?ü:?óê±i*1msμ?×ó3ìDò(??ó|óú22.1184Mhz?§??)

    //D?ê?2?êy:unsigned int i

    //DD2??μ?÷:?T

    //·μ??2?êy:?T

    //ê1ó??μ?÷:i?aòa?óê±μ?ê±??3¤?è£?μ¥??ê?MS£?×?′ó?éò??óê±65536 ms

    //**********************************************************

    void Delay1ms(unsigned int i)

    {

    unsigned char j,k;

    do{

    j = 10;

    do{

    k = 50;

    do{

    _nop_();

    }while(--k);

    }while(--j);

    }while(--i);

    }

    //**********************************************************

    //oˉêy??3?:Delay10us(unsigned char i)

    //oˉêy1|?ü:?óê±i*10usμ?×ó3ìDò(??ó|óú22.1184Mhz?§??)

    //D?ê?2?êy:?T

    //DD2??μ?÷:?T

    //·μ??2?êy:?T

    //ê1ó??μ?÷:i?aòa?óê±μ?ê±??3¤?è£?μ¥??ê?US£?×?′ó?éò??óê±250 ms

    //**********************************************************

    void Delay10us(unsigned char i)

    {

    unsigned char j;

    do{

    j = 10;

    do{

    _nop_();

    }while(--j);

    }while(--i);

    }

    //=========================================================================================================================

    void Forward()//           ?°??

    {

    L293D_IN1=1;

    L293D_IN2=0;

    L293D_IN3=1;

    L293D_IN4=0;

    //     PWM_Set(255-Speed_Right,255-Speed_Left);

    }

    void Stop(void)        //é23μ

    {

    L293D_IN1=0;

    L293D_IN2=0;

    L293D_IN3=0;

    L293D_IN4=0;

    //         PWM_Set(0,0);

    }

    void Turn_Retreat()         //oó

    {

    L293D_IN1=0;

    L293D_IN2=1;

    L293D_IN3=0;

    L293D_IN4=1;

    //        PWM_Set(255-Speed_Right,255-Speed_Left);

    }

    void Turn_left()         //×ó

    {

    L293D_IN1=0;

    L293D_IN2=1;

    L293D_IN3=1;

    L293D_IN4=0;

    //        PWM_Set(255-Speed_Right,255-Speed_Left);

    }

    //=========================================================================================================================

    /********?àà?????3ìDò***************/

    void Conut(void)

    {

    time=TH1*256+TL1;

    TH1=0;

    TL1=0;

    S=time*2;

    S=S*0.17;

    if(S<=300)

    {

    if(turn_right_flag!=1)

    {

    Stop();

    Delay1ms(5);

    }

    turn_right_flag=1;

    P1_7=0;

    P2_0=0;

    P0_6=0;

    Delay1ms(10);

    P1_7=1;

    P2_0=1;

    P0_6=1;

    Delay1ms(5);

    Turn_left();

    Delay1ms(10);

    }

    else

    {

    turn_right_flag=0;

    Forward();

    }

    if((S>=5000)||flag==1)

    {

    flag=0;

    }

    else

    {

    disbuff[0]=S%10;

    disbuff[1]=S/10%10;

    disbuff[2]=S/100%10;

    disbuff[3]=S/1000;

    }

    }

    /********************************************************/

    void zd0() interrupt 3

    {

    flag=1;

    RX=0;

    }

    /********3?éù2¨??μ?????3??í?è????3ìDò***************/

    void Timer_Count(void)

    {

    TR1=1;

    while(RX);

    TR1=0;

    Conut();

    }

    /********************************************************/

    void  StartModule()

    {

    TX=1;

    Delay10us(2);

    TX=0;

    }

    /********************************************************/

    /*************?÷3ìDò********************/

    void main(void)

    {

    unsigned char i;

    unsigned int a;

    Delay1ms(400);

    //        LCMInit()

    Delay1ms(5);

    TMOD=TMOD|0x10;

    EA=1;

    TH1=0;

    TL1=0;

    ET1=1;

    turn_right_flag=0;

    BUZZ=0;

    Delay1ms(50);

    BUZZ=1;

    while(1)

    {

    RX=1;

    StartModule();

    for(a=951;a>0;a--)

    {

    if(RX==1)

    {

    Timer_Count();

    }

    }

    }

    }

    }

    展开全文
  • 本程序配套基于51单片机超声波避障小车(含Proteus仿真)博客,现分享给大家学习使用,如有错误,希望批评指正,多多指教。
  • 超声波避障程序随处可见,基于51单片机超声波避障小车也很成熟,但是完整的Proteus仿真并不容易找到开源资料。这次主要给大家分享其Proteus仿真部分。涉及到的模块有:超声波模块(hc-sr04)、L293D电机驱动器和...
  • 基于ATS单片机智能超声波避障PPT学习教案.pptx
  • 超声波避障程序随处可见,基于51单片机超声波避障小车也很成熟,但是完整的Proteus仿真并不容易找到开源资料。这次主要给大家分享其Proteus仿真部分。涉及到的模块有:超声波模块(hc-sr04)、L293D电机驱动器和...
  • 基于STC89C52单片机超声波避障小车设计.pdf
  • 基于单片机超声波避障小车,能实现自动躲避障碍物和显示行驶过的路程
  • 超声波避障程序随处可见,基于51单片机超声波避障小车也很成熟,但是完整的Proteus仿真并不容易找到开源资料。 这次主要给大家分享其Proteus仿真部分。 涉及到的模块有:超声波模块(hc-sr04)、L293D电机驱动器和...

    超声波避障程序随处可见,基于51单片机的超声波避障小车也很成熟,但是完整的Proteus仿真并不容易找到开源资料。

    这次主要给大家分享其Proteus仿真部分。

    涉及到的模块有:超声波模块(hc-sr04)、L293D电机驱动器和直流减速电机。这/样配合51单片机的控制,小车可以完成自主避障功能。

    超声波模块

    在这里插入图片描述
    此图为Proteus 8 提供的超声波模块(SRF04),它有5个引脚,其中GND接地、VCC接高电平、NC可不接。TR用作激发信号的输入,当超声波模块在TR引脚上检测到了连续的10us以上的高电平时,超声波模块才开始工作。ECHO用作反馈信号输出,当超声波检测到有障碍物时,从该引脚输出相应信号。

    电机驱动模块

    在这里插入图片描述
    上图为Proteus 8提供的电机驱动模块(L293D),4个IN 引脚与单片机连接,控制电机转动及方向,2个使EN 能引脚同样与单片机连接。4个OUT,连接两个直流电机。VSS引脚与VS引脚接高电平即可。

    加载程序

    双击添加的AT89C51单片机,出现如下对话框。
    在这里插入图片描述

    点击 Program File 此行文件夹图标,添加HEX文件(keil软件编写程序后编译生成)
    在这里插入图片描述
    点击运行即可。
    在这里插入图片描述

    示波器

    在这里插入图片描述
    示波器可以辅助我们调试程序和仿真,关于在Proteus里调用示波器以及示波器的使用,我不做介绍,很多资料都能查到,本例中我运用示波器观察超声波模块的TR引脚和ECHO引脚的波形。

    超声波模块原理图

    在这里插入图片描述

    电机驱动模块原理

    在这里插入图片描述

    单片机最小系统

    在这里插入图片描述

    总原理图

    在这里插入图片描述

    51程序

    #include <at89x51.h> 
    #include <intrins.h
    #define  TX  P1_3
    #define  RX  P1_2
    #define Forward_L_DATA  180 //当前进不能走直线时,调节这两个参数,理想是100,100,最大时256,最小是0.
    #define Forward_R_DATA  180
    sbit L293D_IN1=P0^0; 
    sbit L293D_IN2=P0^1;
    sbit L293D_IN3=P0^2;
    sbit L293D_IN4=P0^3;
    sbit L293D_EN1=P0^4;
    sbit L293D_EN2=P0^5;
    void Delay400Ms(void);//延时400毫秒函数
    unsigned char disbuff[4]={0,0,0,0};//用于分别存放距离的值0.1mm,mm,cm,m
    void Count(void);//距离计算函数
    unsigned int  time=0;//用于存放定时器的时间值
    unsigned long S=0;//用于存放距离的值
    bit  flag =0;//量程溢出标志位
    bit  turn_right_flag;
    void Delay1ms(unsigned int i) 
    { 
    unsigned char j,k; 
    do{ 
      j = 10; 
      do{ 
       k = 50; 
       do{ 
        _nop_(); 
       }while(--k);     
      }while(--j); 
    }while(--i); 
    } 
    void Delay10us(unsigned char i) 
    { 
       unsigned char j; 
    do{ 
      j = 10; 
      do{ 
       _nop_(); 
       }while(--j); 
    }while(--i); 
    }
    void Forward()//前进
    {
      L293D_IN1=1; 
      L293D_IN2=0;
      L293D_IN3=1;
      L293D_IN4=0;
    }
    void Stop(void)//刹车
    {
      L293D_IN1=0; 
      L293D_IN2=0;
      L293D_IN3=0;
      L293D_IN4=0;
    }
    void Turn_Retreat()//后
    {
     L293D_IN1=0; 
     L293D_IN2=1;
     L293D_IN3=0;
     L293D_IN4=1;
    }
    void Turn_left()//左
    {
     L293D_IN1=0; 
     L293D_IN2=1;
     L293D_IN3=1;
     L293D_IN4=0;
    }
    void Conut(void)//计算距离
     {
      time=TH1*256+TL1;
      TH1=0;
      TL1=0;
      S=time*2;
      S=S*0.17;
      if(S<=300)
      {
      if(turn_right_flag!=1)
      {
          Stop();
          Delay1ms(5);
      }
      turn_right_flag=1;
      P1_7=0;
      P2_0=0;
      P0_6=0;
      Delay1ms(10);
      P1_7=1;
      P2_0=1;
      P0_6=1;
      Delay1ms(5);
      Turn_left();
      Delay1ms(10);
     }
     else
     {
     turn_right_flag=0;
     Forward();
     }
     if((S>=5000)||flag==1)//超出测量范围
     {
     flag=0;
     }
     else
      {
       disbuff[0]=S%10;
       disbuff[1]=S/10%10;
       disbuff[2]=S/100%10;
       disbuff[3]=S/1000;
      }
     }
     void zd0() interrupt 3//T0中断用来计数器溢出,超过测距范围
     {
     flag=1;
     RX=0;
     }
     void Timer_Count(void)
     {
     TR1=1;//开启计数
     while(RX);//当RX为1计数并等待
     TR1=0;//关闭计数
     Conut();//计算
     }
     void  StartModule()//启动模块
     {
     TX=1;//启动一次模块
     Delay10us(2);
     TX=0;
     }
     void main(void)
     {
     unsigned char i;
     unsigned int a;
     Delay1ms(400);
     Delay1ms(5);
     TMOD=TMOD|0x10;
        EA=1;
        TH1=0;
        TL1=0;          
        ET1=1;
        turn_right_flag=0;
     B:  for(i=0;i<50;i++)//判断k3是否按下
     {
     Delay1ms(1);
     if(P3_2!=0 )
     goto B;
     }
    while(1)
       {
      RX=1;
         StartModule();
            for(a=951;a>0;a--)
         {
         
            if(RX==1)
         {
               Timer_Count();
         }
          }
        }
    }

    分享决定高度,学习拉开差距

    作为学习者给大家分享自己完成的此作品,希望对大家有帮助,当然上文若有不妥之处,欢迎指正。

    欢迎大家留言,批评指正!

    展开全文
  • cs-程序\避障\基于80C51单片机小车超声波避障技术设计
  • 基于单片开机的超声波避障小车,能实现自动避障,显示行驶过的路程 源程序
  • 51单片机超声波避障小车的避障程序,能实现小车的避障,左转,右转和后退等。
  • 超声波避障智能小车采用stc12c5a60s2作为主控芯片,外接测试器和电机驱动模块以及12864液晶显示、超声波模块等。 该硬件提供资料有主控板和电机驱动板原理图和PCB源文件,用AD软件打开。软件资料有舵机转动超声波...

    该超声波避障智能小车采用stc12c5a60s2作为主控芯片,外接测试器和电机驱动模块以及12864液晶显示、超声波模块等。

    该硬件提供资料有主控板和电机驱动板原理图和PCB源文件,用AD软件打开。软件资料有舵机转动超声波避障小车程序。

    12864LCD液晶显示

    【资源下载】下载地址如下(794):https://docs.qq.com/doc/DTlRSd01BZXNpRUxl

    #include"12864.h"
    #include"pwm.h"
    sbit   tuo =  P1^7;
    sbit   Trig = P3^1;//超声波发射端口
    sbit   Echo = P3^2;//超声波接收端口(外部中断0)
    uchar  flag,bai,shi,ge,tuozd,tuopwm;
    ulong  disyou,diszuo,diszho,distan;
    
    void  SR04_init()
    {
     TMOD = 0x11;//超声波就用定时器1
     EA = 1;//开总中断
     ET1 = 0;//如果ET1=1计数器中断可以记录中断次数,也就是扩展计数器位数,
     //计数为 0-需要大(>65535用中断再计数)如果ET1=0计数器,计数为 0-65535               
     TR1 = 0;
     TF1 = 0;
     EX0 = 0;
     IT0 = 0;//低电平触发
    }
    
    ulong  sonic()
    {
     uint   timeout;
     ulong  s;
     Trig = 1;
     delay15us();//10uS以上的脉冲触发信号
     Trig = 0;

     

     
    展开全文
  • 超声波避障小车设计,基于单片机控制的超声波避障小车设计
  • 本设计是基于单片机避障小车及自动循迹的设计,主要实现以下功能: 可实现通过超声波距离传感器测得障碍物距离 可实现通过红外对管自动循迹 可实现通过温度传感器测得车内温度 可实现自动避障、自动循迹等功能 可...

    【资源下载】下载地址如下:
    https://docs.qq.com/doc/DTlRSd01BZXNpRUxl

    设计简介:
    本设计是基于单片机的避障小车及自动循迹的设计,主要实现以下功能:

    可实现通过超声波距离传感器测得障碍物距离
    可实现通过红外对管自动循迹
    可实现通过温度传感器测得车内温度
    可实现自动避障、自动循迹等功能
    可实现通过LCD1602显示当前检测到的障碍物距离、车内温度数值以及左右偏差值

    展开全文
  • 基于AT89S51单片机的智能超声波避障小车,里面包括超声波避障原理等==
  • 基于AT89S51单片机的智能超声波避障.doc
  • AT89S51单片机的智能超声波避障小车.doc
  • C8051F320 单片机 C 语言 超声波避障 躲避前方20厘米 后退
  • 智能小车-51单片机-智能小车超声波避障 智能小车-51单片机-智能小车超声波避障
  • 基于AT89S51单片机的智能超声波避障小车.doc
  • 148【毕设课设】基于51单片机超声波红外避障语音导盲仪设计(电路图+程序+论文) 【资源下载】下载地址如下:https://docs.qq.com/doc/DTlRSd01BZXNpRUxl 基于51单片机的超声波红外避障语音导盲仪设计-(电路图+...
  • 基于80C51单片机电动智能超声波避障小车设计 论文.doc
  • 基于STC89C51单片机的智能超声波避障小车.doc
  • 基于at89c51单片机的智能超声波避障小车
  • 基于AT89S51单片机的智能超声波避障小车电路图.pdf
  • 基于AT89S51单片机的智能超声波避障小车电路图.doc
  • 可以通过使用51单片机智能小车实现超声波避障的功能

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 712
精华内容 284
关键字:

单片机超声波避障