精华内容
下载资源
问答
  • 51超声波避障小车
    千次阅读
    2021-10-10 10:12:50
    #include <REGX52.H>
    #include <intrins.h>
    #include <QXA51.H>
    
    sbit DU = P2^6;//数码管段选
    sbit RX = P2^0;//ECHO超声波模块回响端
    sbit TX = P2^1;//TRIG超声波模块触发端
    sbit LCM_RW = P3^6;     //定义LCD引脚
    sbit LCM_RS = P3^5;
    sbit LCM_E = P3^4;
    #define LCM_Data  P0   //定义液晶屏数据口
    #define Busy    0x80   //用于检测LCM状态字中的Busy标识
    
    unsigned char pwm_left_val = 180;//左电机占空比值 取值范围0-170,0最快
    unsigned char pwm_right_val = 180;//右电机占空比值取值范围0-170 ,0最快
    unsigned char pwm_t;//周期
    unsigned int  time = 0;//传输时间
    unsigned long S = 0;//距离
    bit      flag = 0;//超出测量范围标志位
    
    unsigned char code Range[] ="==Range Finder==";//LCD1602显示格式
    unsigned char code ASCII[13] = "0123456789.-M";
    unsigned char code table[]="Distance:000.0cm";
    unsigned char code table1[]="!!! Out of range";
    unsigned char disbuff[4] = { 0,0,0,0};//距离显示缓存
    
    void delay(unsigned int z)//毫秒级延时
    {
    	unsigned int x,y;
    	for(x = z; x > 0; x--)
    		for(y = 114; y > 0 ; y--);
    }
    
    void Delay10us(unsigned char i)    	//10us延时函数 启动超声波模块时使用
    { 
       unsigned char j; 
    	do{ 
    		j = 10; 
    		do{ 
    			_nop_(); 
    		}while(--j); 
    	}while(--i); 
    }
     
    void cmg88()//关数共阴极码管
    {
        DU=1;  	  
        P0=0X00;//共阴极数码管阳极给低电平,全部熄灭
        DU=0;
    } 
    
    /************************************LCD1602液晶屏驱动函数************************************************/
    //*******************读状态*************************//
    unsigned char ReadStatusLCM(void)
    {
    	LCM_Data = 0xFF; 
    	LCM_RS = 0;
    	Delay10us(1); 
    	LCM_RW = 1;
    	Delay10us(1); 
    	do{
    	LCM_E = 0;
    	Delay10us(1); 
    	LCM_E = 0;
    	Delay10us(1); 
    	LCM_E = 1;
    	Delay10us(1); 
    	}
    	while (LCM_Data & Busy); //检测忙信号
    	return(LCM_Data);
    }
    
    /****************写数据************************/
    void WriteDataLCM(unsigned char WDLCM) 
    {
    	ReadStatusLCM(); //检测忙
    	LCM_Data = WDLCM;
    	LCM_RS = 1;
    	Delay10us(1); 
    	LCM_RW = 0;
    	Delay10us(1); 
    	LCM_E = 0; //若晶振速度太高可以在这后加小的延时
    	Delay10us(1); 
    	LCM_E = 0; //延时
    	Delay10us(1); 
    	LCM_E = 1;
    	Delay10us(1); 
    }
    
    //****************写指令*************************//
    void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测
    {
    	if (BuysC) ReadStatusLCM(); //根据需要检测忙
    	LCM_Data = WCLCM;
    	LCM_RS = 0;
    	Delay10us(1); 
    	LCM_RW = 0;	
    	Delay10us(1); 
    	LCM_E = 0;
    	Delay10us(1); 
    	LCM_E = 0;
    	Delay10us(1); 
    	LCM_E = 1;
    	Delay10us(1); 
    }
    
    
    
    //*******************LCM初始化**********************//
    void LCMInit(void) 
    {
    	LCM_Data = 0;
    	WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
    	delay(5); 
    	WriteCommandLCM(0x38,0);
    	delay(5); 
    	WriteCommandLCM(0x38,0);
    	delay(5); 
    
    	WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
    	WriteCommandLCM(0x08,1); //关闭显示
    	WriteCommandLCM(0x01,1); //显示清屏
    	WriteCommandLCM(0x06,1); // 显示光标移动设置
    	WriteCommandLCM(0x0c,1); // 显示开及光标设置
    }
    
    //*********************按指定位置显示一个字符***********************//
    void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
    {
    	Y &= 0x1;
    	X &= 0xF; //限制X不能大于15,Y不能大于1
    	if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
    	X |= 0x80; //算出指令码
    	WriteCommandLCM(X, 1); //发命令字
    	WriteDataLCM(DData); //发数据
    }
    
    //**********************按指定位置显示一串字符*************************//
    void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
    {
    	unsigned char ListLength;
    
      ListLength = 0;
    	Y &= 0x1;
    	X &= 0xF; //限制X不能大于15,Y不能大于1
    	while (DData[ListLength]>0x19) //若到达字串尾则退出
    		{
    			if (X <= 0xF) //X坐标应小于0xF
    				{
    					DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
    					ListLength++;
    					X++;
    				}
    		}
    }
    
    
    /***************************************************************************/
    
    /*定时器0中断*/
    void timer0() interrupt 1	//T0中断用来计数器溢出,超过测距范围
    {
    	flag=1;							 //中断溢出标志			 
    }
    void  StartModule() 		         //启动超声波模块
    {
    	  TX=1;			                     //启动一次模块
          Delay10us(2);
    	  TX=0;
    }
    	
    /*小车前进*/
    void forward()
    {
    	left_motor_go; //左电机前进
    	right_motor_go; //右电机前进
    }
    
    /*PWM控制使能 小车后退*/
    void backward()
    {
    	left_motor_back; //左电机后退
    	right_motor_back; //右电机后退	
    }
    
    /*小车停止*/
    void stop()
    {
    	right_motor_stops;//右电机停止
    	left_motor_stops; //左电机停止	
    }
    
    /*PWM控制使能 小车高速左转*/
    void left_rapidly()
    {
    	left_motor_back;
    	right_motor_go;	
    }
    
    /*定时器1中断输出PWM信号*/
    void timer1() interrupt 3
    {
    	pwm_t++;//周期计时加
    	if(pwm_t == 255)
    		pwm_t = EN1 = EN2 = 0;
    	if(pwm_left_val == pwm_t)//左电机占空比	
    		EN1 = 1;		
    	if(pwm_right_val == pwm_t)//右电机占空比
    		EN2 = 1;			 
    }
    /*判断S2是否被按下*/
    void keyscan()
    {
    	for(;;)	//死循环
    	{
    		if(key_s2 == 0)// 实时检测S2按键是否被按下
    		{
    			delay(5); //软件消抖
    			if(key_s2 == 0)//再检测S2是否被按下
    			{
    				while(!key_s2);//松手检测
    				beep = 0;	//使能有源蜂鸣器
    				delay(200);//200毫秒延时
    				beep = 1;	//关闭有源蜂鸣器
    				break;		//退出FOR死循环
    			}
    		}
    	}	
    }
    
    /*计算超声波所测距离并显示*/
    void Conut(void)
    {
    	time=TH0*256+TL0;
    	TH0=0;
    	TL0=0;
    	
    	S=(float)(time*1.085)*0.17;     //算出来是MM
    	if((S>=7000)||flag==1) //超出测量范围
    	{	 
    		flag=0;
    		DisplayListChar(0, 1, table1);//1602显示数组table1
    	}
    	else
    	{
    		disbuff[0]=S/1000; //距离数值千位
    		disbuff[1]=S%1000/100;//距离数值百位
    		disbuff[2]=S%100/10;//距离数值十位
    		disbuff[3]=S%10; //距离数值个位
    	    DisplayListChar(0, 1, table); //显示:Distance:000.0cm
    	    DisplayOneChar(9, 1, ASCII[disbuff[0]]); //显示千位
    	    DisplayOneChar(10, 1, ASCII[disbuff[1]]);	
    	    DisplayOneChar(11, 1, ASCII[disbuff[2]]);
            DisplayOneChar(12, 1, ASCII[10]);		//显示 .	
    	    DisplayOneChar(13, 1, ASCII[disbuff[3]]);
    	}
    }
    
    /*超声波避障*/
    void	Avoid()
    {
    	if(S < 400)//设置避障距离 ,单位毫米	刹车距离
    	{
    		beep = 0;//使能蜂鸣器
    		stop();//停车
    		backward();//后退
    		delay(100);//后退时间越长、距离越远。后退是为了留出车辆转向的空间
    		do{
    			left_rapidly();//高速左转
    			delay(70);//时间越长 转向角度越大,与实际行驶环境有关
    			stop();//停车
    			delay(200);//时间越长 停止时间越久长
    
    			StartModule();	//启动模块测距,再次判断是否
    			while(!RX);		//当RX(ECHO信号回响)为零时等待
    			TR0=1;			    //开启计数
    			while(RX);			//当RX为1计数并等待
    			TR0=0;				//关闭计数
    			Conut();			//计算距离
    			}while(S < 280);//判断前面障碍物距离
    		beep = 1;//关闭蜂鸣器
    	}
    	else
    	{
    		forward();//前进
    	}	
    }
    
    void main()
    {
    
    	
    	cmg88();//关数码管
    	LCMInit(); //LCM初始化
    	delay(5);//延时片刻
    
    	DisplayListChar(0, 0, Range);//1602第一行显示Range数组内容
    	DisplayListChar(0, 1, table);//1602第二行显示table数组内容
    	keyscan();//等待按下S2启动小车
    	delay(1000);//延时1秒
    	TMOD |= 0x20;//定时器1工作模式2,8位自动重装。用于产生PWM
    	TMOD |= 0x01;//定时器0工作模块1,16位定时模式。T0用测ECH0脉冲长度
    	TH1 = 220; //
    	TL1 = 220; //100HZ T1
    	TH0	= 0;
        TL0	= 0;//T0,16位定时计数用于记录ECHO高电平时间         
        ET1	= 1;//允许T1中断
    	ET0 = 1;//允许T0中断
    	TR1 = 1;//启动定时器1
    	EA  = 1;//启动总中断
    	
    	while(1)
    	{
    		 StartModule();	//启动模块测距
    		 while(!RX);		//当RX(ECHO信号回响)为零时等待
    		 TR0=1;			    //开启计数
    		 while(RX);			//当RX为1计数并等待
    		 TR0=0;				//关闭计数
    	     Conut();			//计算距离
    		 Avoid();			//避障
    		 delay(65);			//测试周期不低于60MS		  
    	}
    }
    #ifndef __QXA51_H__
    #define __QXA51_H__
    
    /*电机驱动IO定义*/
    sbit IN1=P1^2; //为1 左电机反转
    sbit IN2=P1^3; //为1 左电机正转
    sbit IN3=P1^6; //为1 右电机正转
    sbit IN4=P1^7; //为1 右电机反转
    sbit EN1=P1^4; //为1 左电机使能
    sbit EN2=P1^5; //为1 右电机使能
    sbit left_led1=P3^3;//左寻迹信号 为0没有识别到黑线 为1识别到黑线
    sbit right_led1=P3^2;//右寻迹信号 为0没有识别到黑线 为1识别到黑线
    sbit left_led2=P3^4;//左避障信号 为0识别到障碍物 为1没有识别到障碍物
    sbit right_led2=P3^5;//右避障信号 为0识别到障碍物 为1没有识别到障碍物
    sbit beep=P2^3;
    sbit key_s2=P3^0;
    sbit key_s3=P3^1;
    #define left_motor_en		    EN1=1 //左电机使能
    #define left_motor_stops		EN1=0 //左电机停止
    #define right_motor_en		  EN2=1 //右电机使能
    #define right_motor_stops		EN2=0 //右电机停止
    
    #define left_motor_go		    IN1=0,IN2=1 //左电机正转
    #define left_motor_back		  IN1=1,IN2=0 //左电机反转
    #define right_motor_go		  IN3=1,IN4=0 //右电机正转
    #define right_motor_back		IN3=0,IN4=1 //右电机反转
    
    #endif
    

    这里运用了LCD1602的显示数据,按键启动,超声波测距,蜂鸣器,定时器,中断功能,

    避障原理:运用超声波测距来检测距离如果距离小于指定距离的话,蜂鸣器开始响,然后停车开始向后退,高速左转后停车,然后继续运用超声波模块测距,如果大于指定距离继续前进

    更多相关内容
  • //超声波测距模块Trig sbit echo=P1^1; //超声波测距模块Echo sbit trig2=P1^3; //超声波测距模块2Trig sbit echo2=P1^4; //超声波测距模块2Echo sbit in1=P2^1; sbit in2=P2^2; sbit in3=P2^3; sbit in4=P2^4; ...
  • 超声波避障程序随处可见,基于51单片机的超声波避障小车也很成熟,但是完整的Proteus仿真并不容易找到开源资料。 这次主要给大家分享其Proteus仿真部分。 涉及到的模块有:超声波模块(hc-sr04)、L293D电机驱动器和...
  • 超声波避障程序随处可见,基于51单片机的超声波避障小车也很成熟,但是完整的Proteus仿真并不容易找到开源资料。这次主要给大家分享其Proteus仿真部分。涉及到的模块有:超声波模块(hc-sr04)、L293D电机驱动器和...
  • 51超声波避障小车

    万次阅读 多人点赞 2018-12-26 13:24:11
    超声波避障小车 简介 本文小车的功能主要有两个:超声波测距避障,以及蓝牙遥控。主控芯片用的是STC89C52,电机驱动模块用的是L298N,超声波传感器HC-SR04,蓝牙模块使用的是HC-05,电机采用5V的直流电机。 总体设计...

    超声波避障小车

    简介

    本文小车的功能主要有两个:超声波测距避障,以及蓝牙遥控。主控芯片用的是STC89C52,电机驱动模块用的是L298N,超声波传感器HC-SR04,蓝牙模块使用的是HC-05,电机采用5V的直流电机。

    总体设计

    总体方案框图

    在这里插入图片描述

    硬件篇

    1. 主控芯片STC89C52
      本实验使用的最小系统主控芯片是STC89C52,功能不是很多。该最小系统是学习单片机时,在淘宝购买集成好的开发板Mini51。(建议:自己购买洞洞板和其他配件搭建最小系统,需要的功能模块再拓展,这样能学到的东西比较多)
      Mini51实物图

    2. 超声波模块HC-SR04
      能测距的传感器有很多,如红外传感器,激光传感器等等。也考虑过使用红外传感器,因为价格成本比较低,但红外传感器的抗干扰能力就没超声波好,红外传感器主要是利用光反射的原理,对于透明的障碍物就会有影响。所以本实验使用的是超声波传感器。
      其原理也并不难理解,超声波测距的原理正是基于其物理基础,当超声波模块产生超声波后,单片机的计时器开始计时。超声波在遇到障碍物后会被反射,超声波模块接收到反射波后,单片机的计时器停止计时。根据收发超声波所产生的时间差,便可计算出超声波模块与障碍物的距离。超声波模块在接收超声波时存在能量转化,当超声波接收到反射波后,声信号转换为电信号,从而使单片机的停止计时。设超声波的声速为v,时间差为t0则超声波的测距公式如下:

      S = v × t 0/2

      附上超声波传感器的实物图:
      HC-SR04超声波传感器

    3. 蓝牙模块HC-05
      该模块价格不会很高,网上基本有该模块的使用方法,首先要连接USB转TTL的模块接入电脑,使用串口调试软件,输入AT指令配置蓝牙模块。该蓝牙模块的源码资料有提供,也可从其他网站或 Github 找。
      详细的蓝牙模块的配置和使用方法参考:
      【常用模块】HC-05蓝牙串口通信模块使用详解(实例:手机蓝牙控制STM32单片机)—Yngz_Miao

    软件篇

    编程环境是使用Keil5 C51。

    展示几个流程图,代码就不放了,需要就在链接中下载。

    主程序流程图:
    主程序流程图

    超声波测距:
    在这里插入图片描述

    避障程序:
    避障程序

    总结

    本项目成本不高,功能也不多,适合课程设计,练练手,熟悉一下做项目的流程,如何写文档等。小车的功能可以继续扩展,如自动循迹,实时测速等等。或者使用更加强大的芯片,如STM32系列的芯片,可以扩展的功能就可以很多

    本文最后附上几张小车实物图:
    小车1

    小车2

    小车3

    手机蓝牙终端控制App(app商城有很多,或者自己开发):
    手机蓝牙终端控制App

    另附
    小车的详细资料源码下载:https://pan.baidu.com/s/1kyYyLXyMrLQX8SMp5YrOZg (提取密码:twk7)

    展开全文
  • 本程序配套基于51单片机的超声波避障小车(含Proteus仿真)博客,现分享给大家学习使用,如有错误,希望批评指正,多多指教。
  • 超声波避障程序随处可见,基于51单片机的超声波避障小车也很成熟,但是完整的Proteus仿真并不容易找到开源资料。这次主要给大家分享其Proteus仿真部分。涉及到的模块有:超声波模块(hc-sr04)、L293D电机驱动器和...
  • 51写的一个红外 控制小车的动态 加上避障功能 避障用的超声波模块
  • 自己写的简易版本的基于51单片机的超声波避障小车的工程文件,包含输出的.hex文件。如有写的不好的地方还请多多包涵。
  • 基于51单片机的超声波避障小车,使用舵机控制方向,超声波采集障碍物距离,点击可变速,使用oled显示障碍物距离,有proteus仿真,代码附有详细注释
  • 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单片机,驱动芯片采用L298N,两个按键模拟红外对管,当按下对应按键的时候,相应的电机开始启动,从而实现避障的功能 仿真图2: A. 由LCD1602作为显示器,具有温度显示、声光报警器,ULN2003A作为电机驱动。 ...

    硬件设计

    仿真图1:
    基于51单片机,驱动芯片采用L298N,两个按键模拟红外对管,当按下对应按键的时候,相应的电机开始启动,从而实现避障的功能
    在这里插入图片描述
    仿真图2:
    A. 由LCD1602作为显示器,具有温度显示、声光报警器,ULN2003A作为电机驱动。
    B. ADC0832作为ADC采集芯片,两个电位器模拟红外管。

    在这里插入图片描述

    程序设计

    /* 买了个四驱车的底盘,双直流电机,一只驱动左边两轮,一只驱动		   
    右边两轮。驱动电压为4.5-9V,配两个红外对管,打算一直装在小车前方		  
    ,一只装在小车底盘,分别检测前方障碍和台阶,小车碰到前方障碍后		    
    左边两轮停止,右轮驱动,实现转弯。碰到台阶后小车先后退,然后左轮		   
    停止,右轮驱动实现转弯,转弯结束后小车继续前进,如此循环*/           
    
    #include<reg52.h>
    #define uchar unsigned char
    #define uint unsigned int
    uchar cs1,cs2,num1,num2;
    uchar code table[]={0,1};	  //占空比50% 
    sbit qdg=P3^4;				  //前红外对管,检测小车前方障碍 
    sbit xdg=P3^5;				  //下红外对管,检测小车是否碰到台阶 
    sbit in1=P1^0;				  //L298输入 
    sbit in2=P1^1;				  //L298输入 
    sbit in3=P1^2;				  //L298输入 
    sbit in4=P1^3;			      //L298输入 
    sbit ena=P1^4;			      //L298输入使能A   
    sbit enb=P1^5;			      //L298输入使能B 
    
    void delay(int z)			  //延时函数 
    {
    	uint x,y;
    	for(x=z;x>0;x--)
    	   for(y=110;y>0;y--);
    }
    
    void init()					//初始化函数 
    {
    	TMOD=0x11;
    	TH0=(65536-500)/256;
    	TL0=(65536-500)%256;
    	ET0=1;
    	TR0=1;
    	EA=1;
    }
    
    void main()
    {
      init();
      while(1)
       {
    	  if(qdg==1)		  //如果前方没有检测到障碍,对管输出高电平		 
    		{
    		   ena=1;		  //L298使能端A为高 
    		   enb=1;		  //L298使能端B为高 
    		   in2=0;		  //L298IN2为低,小车左轮前进	  
    		   in4=0;		  //L298IN4为低,小车右轮前进	  
    		}
    	  else
    		{
    		   ena=0;		  //如果前方检测到障碍,L298使能端为低 ,左轮停止(小车转弯)		   
    		   delay(1000);
    		   ena=1;		  //一秒后转弯结束,继续两轮驱动前进 
    		}
    	  if(xdg==0)		  //如果小车下方未检测到障碍(碰到台阶)	   
    	    {
    		   in2=1;		  //L298IN2为高,小车左轮后退 
    		   in4=1;		  //L298IN4为高,小车右轮后退 
    		   delay(1000);
    		   ena=0;		  //后退一秒后,左轮停止(转弯)  
    		   delay(1000);	  //一秒后转弯结束,小车继续前进 
    		}
    	}
    }
    
    void timer0() interrupt 1
    {
        TH0=(65536-500)/256;
        TL0=(65536-500)%256;
        cs1++;
        if (cs1==10)   
    	  {
    		cs1=0;   
        	num1++;
    		if(num1==3)
    		num1=0;
    		in1=table[num1];
    
    		num2++;
    		if(num2==3)
    		num2=0;
    		in3=table[num2];
    	  }
    }
    
    

    附:http://www.jh-tec.cn/archives/7131

    展开全文
  • 超声波避障+蓝牙遥控小车,已调试程序,基于51单片机使用超声波模块与蓝牙模块, push_val_left=23; //¶æ»úÏò×óת90¶È timer=0; while(timer); //ÑÓʱ400MSÈöæ»úתµ½ÆäλÖ...
  • 基于单片开机的超声波避障小车,能实现自动避障,显示行驶过的路程 源程序
  • /* 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...
  • 使用51单片机+超声波传感器来设计一台能实现避障功能的小车,使小车对其运动方向受到的阻碍作出各种躲避障碍的动作。
  • 本资源是红外循迹+超声波避障的多功能小车,里面包含仿真软件,源程序,原理图等一些必备资源,是大家学习单片机的技术提高的很好的一个教程,欢迎大家下载学习
  • 智能小车-51单片机-智能小车超声波避障 智能小车-51单片机-智能小车超声波避障
  • 超声波避障小车设计超声波避障小车设计超声波避障小车设计超声波避障小车设计超声波避障小车设计超声波避障小车设计超声波避障小车设计超声波避障小车设计超声波避障小车设计超声波避障小车设计超声波避障小车设计...
  • 我做了一个基于fpga的超声波避障小车(ego1),上面是相应的工程文件,基于FPGA的超声波避障小车,利用ego1的100HZ时钟,我们可以自己定义不同占空比的PWM来控制电机的转速和舵机的角度,我们可以通过自己写计时器...
  • 超声波避障小车.zip

    2019-10-02 19:34:29
    基于51单片机的超声波避障代码和资料,小车可以自动避障,走迷宫。确保代码直接可以使用,不会有错误。代码中的注释很清楚,具体的接线问题也有注明。
  • 基于AT89S51单片机的智能超声波避障小车电路图.pdf
  • 超声波避障小车源程序【精】

    千次阅读 2021-05-23 02:04:28
    电子制作空间收集的这套入门级小车(只是入门级的,仅供参考)希望诸位入门智能车的吧友有所帮助。可以实现避障、寻迹、测距、寻找静态物体。...如寻线是用红外还是用激光……、测距是用超声波还是激光……、避障是用...
  • 51制作小车,拥有红外循迹,超声波避障,蓝牙控制功能
  • 基于AT89S51单片机的智能超声波避障小车.doc
  • AT89S51单片机的智能超声波避障小车.doc
  • (可用于避障小车) #include"reg51.h" #include <intrins.h> sbit Echo=P2^7; sbit Trig=P2^6; sbit led1=P2^0; #define u8 unsigned char #define u16 unsigned int u16 time,distance,flag; voi.

空空如也

空空如也

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

51超声波避障小车