精华内容
下载资源
问答
  • 51单片机超声波避障小车
    2021-04-24 18:33:22

    /* 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仿真并不容易找到开源资料。这次主要给大家分享其Proteus仿真部分。涉及到的模块有:超声波模块(hc-sr04)、L293D电机驱动器和...
  • 超声波避障程序随处可见,基于51单片机超声波避障小车也很成熟,但是完整的Proteus仿真并不容易找到开源资料。 这次主要给大家分享其Proteus仿真部分。 涉及到的模块有:超声波模块(hc-sr04)、L293D电机驱动器和...
  • 本程序配套基于51单片机超声波避障小车(含Proteus仿真)博客,现分享给大家学习使用,如有错误,希望批评指正,多多指教。
  • 超声波避障程序随处可见,基于51单片机超声波避障小车也很成熟,但是完整的Proteus仿真并不容易找到开源资料。这次主要给大家分享其Proteus仿真部分。涉及到的模块有:超声波模块(hc-sr04)、L293D电机驱动器和...
  • 51单片机小项目--超声波避障小车

    超声波模块

    电路连接

    超声波HCSR04模块有四个引脚,VCC,GND,TRIG和ECHO。

    VCC接5V即可。

    TRIG引脚负责发射超声波信号的信号引脚。这个引脚需要用超过10us的高电平来启动,所以写了一个20us的函数。每一点HCSR04会发射8个40khz的方波。方波发射后,ECHO引脚会输出高电平。

    ECHO引脚是用来测量距离的数据引脚。当一个超声波信号发射后,ECHO引脚会输出高电平。当ECHO引脚直到检测到超声波信号回来的时,ECHO引脚输出低电平。

    //以定时器0和定时器1为例
    #define uint unsigned int
    uint PWM=0;  //定义PWM值,控制电机转速
    unit pwm=0;
     
    sbit IN11 = P1^0; //定义逻辑口
    sbit IN21 = P1^1;    
     
    sbit IN31 = P1^2;                                      
    sbit IN41 = P1^3;
     
    sbit a1=P2^1; //定义驱动使能口a1
    sbit b1=P2^32 //定义驱动使能口b1
        
    sbit RX=P1^6;//定义超声波接收端Echo
    sbit TX=P1^7;//定义超声波控制端Trig
    
    uint i=0,j=0;
     
    void Time() //定时器0和1初始函数
    { 
        TMOD |= 0x11;  //设置定时器0方式为1 定时器1为方式1
    //  TMOD |= Ox01;  //设置定时器0方式为1
        EA=1;          //打开总中断
        TH0 = 0xfc;    //设置定时器处置为高四位,定时1ms
        TL0 = 0x18;    //设置定时器设置为低四位
        ET0 = 1;	  //打开定时器0中断允许
        TR0 = 1;   	  //打开定时器0
        
        TH1 = 0xfc;    //设置定时器处置为高四位,定时1ms
        TL1 = 0x18;    //设置定时器设置为低四位
        ET1 = 1;	  //打开定时器1中断允许
        TR1 = 1;   	  //打开定时器1
        
    }
     
    void Timer0() interrupt 1
    {
        TH0=0xfc; 
    	TL0=0x18;		
    	if(i>PWM)a1=1;else a1=0;			
    	i++;
    	if(i>=100)i=0;
    }
    void Timer1() interrupt 3
    {
        TH1=0xfc; 
    	TL1=0x18;		
    	if(j>pwm)b1=1;else b1=0;		
    	j++;
    	if(j>=100)j=0;
    }
     
    void delay_20us()  //超声波延时20微秒
    {
    	TX=1;			                
    	_nop_();_nop_();_nop_();_nop_(); 
    	_nop_();_nop_();_nop_();_nop_();
    	_nop_();_nop_();_nop_();_nop_();
    	_nop_();_nop_();_nop_();_nop_();	   
    	_nop_();
    	TX=0;
    }
    
    void forward_move()  //电机正转函数,速度50,最大速度100
    {
        PWM = 50;
        pwm = 50;
     
        IN11 = 0; 
        IN21 = 1;    
     
        IN31 = 0;                                      
        IN41 = 1;					
    }
     
    void stop()  //电机停止
    {
        PWM = 0;
        pwm = 0;
     
        IN11 = 0; 
        IN21 = 0;    
     
        IN31 = 0;                                      
        IN41 = 0;					
    }
    
    void count_distence()  //定义超声波测距函数
    {
    	time=TH0*256+TL0;
    	TH0=0;
    	TL0=0;
        //s = 340m/s * time us /2 = 170*time *10^-6 m = 0.17*time mm
    	S= (long)(time*0.17);  
    	if(S<100)
    	{
    		stop();
    	}
    	if(S>=100)
    	{
    		forward_move(); 
    	}	
    }
    
    void main()
    {
        Timer();
        while(1)
        {
        	delay_20us();
            while(!RX);//等待TX发出
            TR0=1;     //开始计时
            while(RX); //当TX发出时,RX为高电平
            TR0=0;     //终止计时
            count_distence();
        }
    }

    展开全文
  • 基于51单片机避障小车

    千次阅读 2021-09-15 11:33:45
    标签:51单片机、LCD1602、超声波避障、红外避障 题目扩展:小车避障 资料预览 效果图: 总体资料: 原理图: 软件设计流程: 系统框图: 本设计以STC89C52单片机为核心控制器,...

    设计简介:

    本设计是基于单片机的防碰撞小车,主要实现以下功能:

    • LCD1602显示小车状态以及超声波测距值
    • 通过手机控制小车动作(前进、后退、左转、右转、停止)
    • 前进为超声波避障、后退为红外避障

    标签:51单片机、LCD1602、超声波避障、红外避障

    题目扩展:小车、避障

    防碰撞小车-实物设计 - 电子校园 编号: HJJ-51-2021-020-SW 仿真链接: 防碰撞小车-仿真设计 软件安装: Proteus...https://www.mcude.com/mcudesign/505/

    更多设计可以在特纳斯电子校园网下载

    电子校园 - 特纳斯电子专注于单片机毕业设计参考、单片机课程设计参考、毕业答辩PPT模板、单片机设计与开发的电子校园设计网站特纳斯电子专注于单片机、电子嵌入式、物联网设计,打造入门开发者学习开发新天地,毕业设计代做、单片机课程设计代做、单片机设计与开发的电子校园设计网站https://www.mcude.com/

    效果图:

    总体资料:

    原理图:

    软件设计流程:

    系统框图:

    本设计以STC89C52单片机为核心控制器,加上其他的模块一起组成无人车防碰撞控制的整个系统,其中包含中控部分、输入部分和输出部分。中控部分采用了STC89C52单片机,其主要作用是获取输入部分数据,经过内部处理,控制输出部分。输入由三部分组成,第一部分是HC-SR04超声波测距模块,通过该模块可检测到障碍物的距离;第二部分是红外避障模块,通过两个红外避障模块检测前后是否有障碍物;第三部分是供电电路,给整个系统进行供电。输出由六部分组成,第一部分是LCD1602显示模块, 通过该模块显示小车行驶状态;第二部分是MX1508直流电机及驱动模块,通过该模块控制车轮的转动;第三部分是JDY-31蓝牙模块,通过该模块连接手机,通过手机控制小车的行驶状态;第四部分是舵机,通过两个舵机控制红外避障模块的左转和右转;第五部分是LED指示灯,第六部分是蜂鸣器,当到障碍物的距离大于25cm时,LED亮,蜂鸣器进报警。

    展开全文
  • 基于单片开机的超声波避障小车,能实现自动避障,显示行驶过的路程 源程序
  • 标题基于51单片机制作超声波避障小车+舵机` #include<reg52.h> #define uint unsigned int #define uchar unsigned char #define left_qian IN3=0,IN4=1 //左前进 #define right_qian IN1=0,IN2=1 //右...

    基于51单片机制作超声波避障小车+舵机`

    补充一下,主控芯片用的stc89c52,避障小车没有使用PWM波驱动电机,直接将电源降压给电机供电。

    #include<reg52.h>          
    #define uint unsigned int           
    #define uchar unsigned char
    #define left_qian IN3=0,IN4=1 //左前进 
    #define right_qian IN1=0,IN2=1   //右前进
    #define left_hou  IN3=1,IN4=0// 左后退
    #define right_hou IN1=1,IN2=0  //右后退
    #define enable {ENA=1,ENB=1;}  //电机使能
    #define disable {ENA=0,ENB=0;} 
    uint s=40,pwm_zkb=0,time; 
    uchar num=3;
    uchar i=1,t=0;
    uchar distance[4]={0,0,0,0};  //distance[1] 右距离distance[2]正前距离 distance[3] 左距离              
    sbit trig=P0^0;            
    sbit echo=P0^1;           
    sbit IN1=P1^1;
    sbit ENA=P1^0;
    sbit IN2=P1^2;
    sbit ENB=P1^3;
    sbit IN3=P1^4;
    sbit IN4=P1^5;
    sbit PWM=P0^3;
      /********************************************函数声明**********************/
      int juli();            //测距函数
      void delay(uint z);          //延迟函数
      void init();                      //初始化
      void delayms(unsigned int ms);
      void delay1(void)   //延迟20us
    {
        unsigned char a,b;
        for(b=3;b>0;b--)
            for(a=1;a>0;a--);
    }
    void culibijiso()
    {         
       if(distance[1]<=5 &&distance[2]<=5 && distance[3]<=5  )
       {
    	      enable;          //先后退后右转
    	     left_hou;
    	     right_hou;
    	     delay(1000);
    	       enable;
    	     left_qian;
    	     right_hou;
    	     delay(200);   
    	     }
       else
       {
         if(distance[1]<=15 || distance[2]<=15 || distance[3]<=15)
        {
         if(distance[1]>=distance[2])
         {
    	        if(distance[2]>=distance[3])  //左有障碍物 右转
    	        {
    		          enable;
    		        left_qian;
    		        right_hou;
    		        delay(800);
    		}
    	        else        
    	        {
    		         if(distance[2]<=5)   //先后退后左转
    		         { 
    			         enable;
    			        left_hou;
    			        right_hou;
    			        delay(800);
    			        left_hou;
    			        right_qian;
    			        delay(200);
    			 }
    		       else       //右转
    		       {
    			          enable;
    			         left_qian;
    			         right_hou;
    			         delay(800);
    			}
    		}
         }
      else
      {
           if(distance[1]>=distance[3])  //左有障碍物 右转
           {
    	         enable;
    	         left_qian;
    	         right_hou;
    	         delay(800);       
    	}
           else         //左转
           {
    	         enable;
    	         left_hou;
    	         right_qian;
    	         delay(800);
    	}
       }
      }
        
    else    //直行
    {
    	       enable;
    	     left_qian;
    	     right_qian;
    }
    }
       
    }
     void main()
     {       
     	init();
      	disable;
    	   while(1)      
    	  { 
    		    if(t==150) //70ms为一个周期检测一次
    		   {
    			    t=0;
    			    s=juli();
    			    if(s>20)
    			    {
    			     enable;
    			     left_qian;
    			     right_qian; 
    		             }
    		    else
    		    {
    		     disable;
    		     for(num=2;num<5;num++)
    		     {  
    			      pwm_zkb=0;
    	
    	
    	
    			 delay(1000);
    			  distance[i]=juli();       
    			   i++;
    			  pwm_zkb=0;
    			 
    			
    			}      
    		        num=3;
    		       delay(300);
    		       i=1;
    		       culibijiso();
    		      
    		       disable;     t=0;       
    		    }
    		  }
    		    
    	}
    }
    		 
    	
    	 void init()
    	 {            
    	  TMOD=0X11;           //选择定时器1和定时器0
    	 TH0=0;      
    	 TL0=0;
    	 TH1=(65536-461)/256;        //t1赋初值
    	 TL1=(65536-461)%256;  
    	 EA=1;            //开总中断
    	 ET1=1;            //开定时器1中断
    	 TR1=1;            //打开定时器1
     }
    void time1() interrupt 3
     {
     TH1=(65536-461)/256;
     TL1=(65536-461)%256;
     t++;
     if(pwm_zkb<num)
     {
       PWM=1;
     }
     else
     {
       PWM=0;
     }
      
     pwm_zkb++;
     if(pwm_zkb==40)
     {
      pwm_zkb=0;
     }
     }
    int  juli()
     {
      	int ss;
            trig=1;
            delay1();                                      //延时20us
            trig=0;
            while(echo==0);          //等待回音
            TR0=1;                       // 开定时器0
            while(echo==1);          //当为高电平时等待
            TR0=0;                       //关闭定时器0
            time=TH0*256+TL0;          //读取脉冲长度
            ss=(time*1.72)/100;          //计算距离 单位为cm
            TH0=0;                             //重新赋初值
            TL0=0;
            return ss; 
      }
     void delay(uint z)
     {
    	  uint i,k;
    	 for(i=z;i>0;i--)
    	 {
    	      for(k=100;k>0;k--);
    	 }
    }
    
    
    
    展开全文
  • 基于51单片机,驱动芯片采用L298N,两个按键模拟红外对管,当按下对应按键的时候,相应的电机开始启动,从而实现避障的功能 仿真图2: A. 由LCD1602作为显示器,具有温度显示、声光报警器,ULN2003A作为电机驱动。 ...
  • 可不可以再给个连接,那个百度网盘链接失效了,想自己试一下可不可以做出来这个东西。
  • 智能小车-51单片机-智能小车超声波避障 智能小车-51单片机-智能小车超声波避障
  • 使用51单片机+超声波传感器来设计一台能实现避障功能的小车,使小车对其运动方向受到的阻碍作出各种躲避障碍的动作。
  • 这是基于STM32f407单片机超声波避障蓝牙遥控小车的Keil程序。这份文件包含了蜂鸣器报警beep.c,电机驱动PWM控制car.c,蓝牙遥控小车行驶方向car_turn.c,超声波避障hc_sr04.c,OLED显示距离、行驶方向和报警状态...
  • 单片机技术
  • 这个小车是我大一实验室考核的时候做的,里面的内容较为浅显且有些代码有冲突(不过还是能跑),请各位大佬轻喷。接下来我会介绍实现这个小车的各个步骤。
  • 基于51单片机超声波避障小车,使用舵机控制方向,超声波采集障碍物距离,点击可变速,使用oled显示障碍物距离,有proteus仿真,代码附有详细注释
  • 智能小车-51单片机-红外避障(带后退掉头) 智能小车-51单片机-红外避障(带后退掉头)
  • 51单片机避障小车

    2021-11-11 14:05:47
    51单片机避障小车
  • 51超声波避障小车

    万次阅读 多人点赞 2018-12-26 13:24:11
    超声波避障小车 简介 本文小车的功能主要有两个:超声波测距避障,以及蓝牙遥控。主控芯片用的是STC89C52,电机驱动模块用的是L298N,超声波传感器HC-SR04,蓝牙模块使用的是HC-05,电机采用5V的直流电机。 总体设计...
  • 资源包括:程序,程序设计报告 ...思路:通过驱动超声波模块,测量出小车与障碍物之间的距离,并通过蓝牙反馈数据到手机,同时根据测量数据进行舵机的转动控制,从而实现智能避障(建议先看程序设计报告总结部分)
  • 自己写的简易版本的基于51单片机超声波避障小车的工程文件,包含输出的.hex文件。如有写的不好的地方还请多多包涵。
  • 做这个超声波避障小车的原因是因为单片机课程设计 一、硬件部分 1、电机驱动 电机驱动四个输入端IN1、IN2、IN3和IN4,四个输出端OUT1、OUT2、OUT3和OUT4,一个接地端GND,单片机的P2.1~P2.4端口分别与 引脚IN1、IN2...
  • 避障小车使用超声波进行距离测量,根据测量距离决定小车行驶方向。对于避障做了简化处理,只要有障碍物就右转。为了节省成本,只用了一个超声波模块,因此只能对正前方物体进行避障。小车采用三轮结构,速度差进行...
  • 该程序源代码用于51单片机智能小车超声波避障+PM2.5监测实验。 1、采用KEIL软件开发。 2、程序对应处理器:STC15W4K56S4。 3、电机驱动芯片型号:L293D。 4、液晶模块型号:1602(5V)。 5、电机型号:直流减速电机...
  • 该程序源代码用于51单片机智能小车超声波避障+温湿度监测实验。 1、采用KEIL软件开发。 2、程序对应处理器:STC15W4K56S4。 3、电机驱动芯片型号:L293D。 4、液晶模块型号:LCD1602(5V)。 5、电机型号:直流减速...
  • 基于AT89S51单片机的智能超声波避障小车电路图.pdf
  • 该程序源代码用于51单片机智能小车超声波避障实验。 1、采用KEIL软件开发。 2、程序对应处理器:STC15W4K56S4。 3、电机驱动芯片型号:L293D。 4、液晶模块型号:1602(5V)。 5、电机型号:直流减速电机。 6、需要...
  • 该程序源代码用于51单片机智能小车超声波避障+可燃性气体监测实验。 1、采用KEIL软件开发。 2、程序对应处理器:STC15W4K56S4。 3、电机驱动芯片型号:L293D。 4、液晶模块型号:1602(5V)。 5、电机型号:直流减速...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 758
精华内容 303
热门标签
关键字:

51单片机超声波避障小车