精华内容
下载资源
问答
  • HC-SR04使用Raspberry Pi Pico PIO HC-SR04是超声波测距仪()。 基本上,它通过向Trig引脚发送脉冲并测量Echo引脚上的脉冲来工作。 回波脉冲的长度表示到设备前面的物体的距离。 HC-SR04使用5V,而Pico使用3V3。 ...
  • HC-SR04测距,利用OLED 显示距离。自主修改,亲测有效。
  • 基于正点原子的精英板的程序,超声波模块HC-SR04HC-SR05都可以使用,对应的两个引脚采用的PF0和PF1
  • rosserial-hc-sr04 一个由rosserial用hc-sr04发布超声波测距仪的arduino脚本 见我的网站: :
  • spark_HC-SR04_ultrasonic_sensor Dealextreme 的 HC-SR04_ultrasonic_sensor 的文件、代码和参考 在这里购买: : 我将它用于 Spark Core 项目。 您可以使用 spark-cli 编译项目: : 接线: Spark pin GND -...
  • 使用STM32定时器写超声波模块HC-SR04程序前言首先,来说说大伙常见的超声波模块,一般就俩,HC-SR04和HY-SRF05,这两种模块电路有些许不一样,但是就功能来说,没什么区别,甚至可以兼容用,所以也没必要纠结用哪一...

    使用STM32定时器写超声波模块HC-SR04程序

    前言

    首先,来说说大伙常见的超声波模块,一般就俩,HC-SR04和HY-SRF05,这两种模块电路有些许不一样,但是就功能来说,没什么区别,甚至可以兼容用,所以也没必要纠结用哪一个,就我来说,遇到的一个小区别或者说小问题大概就是,貌似HY-SRF05有时候只能用5V供电,3.3V用不了?是不是都这样得看大家具体的情况。

    本文用HC-SR04,关于这个超声波模块使用了两种程序,本次为使用定时器功能,完整程序和工程文件见文末,另外还有使用输入捕获的程序:常用模块原理程序秘技——超声波模块HC-SR04(2)。

    超声波模块小介绍

    1d9d1d072dddae58c4a777170fe0abc7.png

    HC-SR04

    60d1413bd9dc39825266038aeaf9f708.png

    HY-SRF05

    电气参数:

    fc7db427b44ec6bbe05bb63363164e61.png

    原理和两种程序

    原理

    下面是写程序的关键部分,时序图:

    c6466eac306f010b88c19022f8f87747.png

    从这个图里面可以看到,首先你的主控MCU要发出触发信号给模块,这个触发信号有要求,必须是10us的高电平(当然你长一点点也可以),模块收到这个触发信号,它发射一个超声波脉冲信号到空气中,这个脉冲信号是频率40KHz的8个脉冲方波,经前方物体平面反射后,模块自己又接收到了这个脉冲信号,返回一个回响信号给主控MCU。

    从发射起的时间点,输出回响信号由低电平变为高电平,接收到反射的时间点,输出回响信号又变回低电平。

    所以,很简单可以看出,这个高电平的时间和超声波在空气中的传输时间有关,即和到反射物体的距离相关,并且是正相关。

    这个高电平的时间和到反射物体的距离的关系为:

    距离=时间*340/2

    340是声速(如果你可以测出当下的声速最佳哈),单位M/S,所以算出的距离单位为M。

    程序

    重点来了,程序(本程序基于STM32F103,开发板是正点原子的迷你板),引脚连接(若你使用HY-SRF05,OUT引脚不连即可,无影响):

    MCU

    HC-SR04

    3.3V

    VCC

    PC5

    Trig

    PC4

    Echo

    GND

    GND

    首先Trig给模块一个10us的高电平,然后就可以计算时间,接着使用公式转换一下得到距离,计算时间的方式可以使用STM32的输入捕获,但是如果你仅仅使用这一个模块,可以简单一点,不使用输入捕获,仅使用定时器算个时间。本详解会给出两种程序并都解释!

    首先第一种简单点的,初始化GPIO和定时器这里我用的TIM3。

    这是对超声波模块引脚初始化的函数,触发信号TRIG引脚接PC5,回响信号ECHO接PC4。

    void hc_sr04_init(void)

    {

    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC ,ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

    GPIO_Init(GPIOC, &GPIO_InitStructure);

    GPIO_ResetBits(GPIOC,GPIO_Pin_5);//触发信号

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

    GPIO_Init(GPIOC, &GPIO_InitStructure);//echo信号

    GPIO_ResetBits(GPIOC,GPIO_Pin_4);

    }

    定时器TIM3初始化,定时器频率为72M/(71+1)=1MHz,自动重装值arr给65535是因为给了个CNT寄存器一个尽量可以记到最大的数(我给了最大的65535,虽然可能用不到哈)(注意和定时器中断给值的区别!)另外还有注意最后,不是给TIM3使能,是DISABLE。

    //arr:自动重装值。

    //psc:时钟预分频数

    void TIM3_Int_Init()

    {

    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能

    TIM_TimeBaseStructure.TIM_Period = 65535; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms

    TIM_TimeBaseStructure.TIM_Prescaler =71; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率

    TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式

    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

    TIM_Cmd(TIM3, DISABLE);

    }

    这是得到回响信号时间的函数(划重点),首先给一个10us的高电平触发信号(我给了12us,可以多一点点!)。

    后面这两个while循环,是判断回响信号的高低电平,若回响信号一直是低电平则会在第一个while内一直循环,给TIM3->CNT寄存器一个0值,同时保持失能TIM3。

    当回响信号变为高电平时,来到了第二个while循环,会使TIM3保持使能有效状态,TIM3->CNT开始正常计数。

    回响信号变回低电平后,来到了value=TIM_GetCounter(TIM3);这一句,这个时候获得TIM3->CNT寄存器的值,然后返回这个值。

    u16 Gets(void)

    {

    GPIO_SetBits(GPIOC,GPIO_Pin_5);

    delay_us(12);

    GPIO_ResetBits(GPIOC,GPIO_Pin_5);//高电平触发信号

    while(PCin(4)==0)

    {

    TIM_SetCounter(TIM3, 0);

    TIM_Cmd(TIM3,DISABLE);

    }

    while(PCin(4)==1)

    {

    TIM_Cmd(TIM3,ENABLE);

    }

    value=TIM_GetCounter(TIM3);

    return value;

    }

    主程序中的while(1),仅第一句为得到距离,后面部分为显示信息在LCD显示屏上。

    Get()函数的返回值为TIM3->CNT的值,这个值的大小计算了回响信号的高电平时间,定时器频率为1M,所以TIM3->CNT里的值加1的时间是1us,所以前面距离和时间的关系公式在程序里是如此的。

    LCD的显示部分我将小数点往左移了三位,所以单位是米M。

    int main(void)

    {

    delay_init();

    TIM3_Int_Init();

    LCD_Init();

    POINT_COLOR=RED;

    hc_sr04_init();

    LCD_ShowString(80,100,200,24,24,"Distance");

    while(1)

    {

    distance=(Gets()*340/1000/2);//单位mm

    LCD_ShowNum(100,150,distance/1000,1,24);

    LCD_ShowChar(112,150,'.',24,0);

    LCD_ShowNum(124,150,distance%1000/100,1,24);

    LCD_ShowNum(136,150,distance%100/10,1,24);

    LCD_ShowNum(148,150,distance%10,1,24);

    LCD_ShowString(160,150,24,12,24,"M");

    delay_ms(100);

    }

    }

    将以上的部分,加上变量的定义和函数的声明,即可完成程序。奉上完整工程。

    展开全文
  • 用于HC-SR04超声波距离传感器的Arduino / ESP8266 / ESP32库。 该库用于与HC-SR04进行距离测量,HC-SR04是一种超声波传感器,可测量2到400cm的距离。 我的库具有温度校正功能,可以使用一个触发引脚和多个并行回波...
  • Illuminate-NeoPixels-using-an-HC-SR04-Distance-Sensor-and-an-Arduino 此代码是教程的一部分。 它将允许 Arduino 使用 HC-SR04 超声波 (Ping) 距离传感器照亮一条 NeoPixels。 在找到完整的教程
  • JHHC-SR04HC-SR04距离传感器与NVIDIA Jetson TK1接口 一个简单的库,用于将HC-SR04超声波距离传感器与NVIDIA Jetson TK1接口。 有关更多信息,请访问JetsonHacks.com网站: ://wp.me/p51nTS-kf
  • 此附加组件扩展了 Arduino 硬件的 MATLAB 支持包,以读取来自 HC-SR04 超声波传感器的距离测量值。 使用此附加组件,您可以读取以米为单位的距离或以秒为单位的旅行时间,以更精确地计算距离。 用法示例: -------...
  • HC-SR04-Rover--源码

    2021-03-13 02:12:49
    HC-SR04-Rover-
  • HC-SR04超声波模块.rar

    2021-05-25 16:26:05
    HC-SR04超声波
  • STM32F103C8T6-HC-SR04超声波传感器采集含主要代码、参考程序、相关资料 STM32F103C8T6-HC-SR04超声波传感器采集含主要代码、参考程序、相关资料 STM32F103C8T6-HC-SR04超声波传感器采集含主要代码、参考程序、相关...
  • HC-SR04测量距离

    2019-02-27 09:22:23
    HC-SR04测量距离
  • STM32—驱动HC-SR04超声波测距模块

    万次阅读 多人点赞 2019-11-23 20:21:52
    文章目录超声波测距原理HC-SR04工作原理STM32实现驱动1.引脚的配置2.时序控制3.时间差测量4.如何将距离测出来 超声波测距原理 利用HC-SR04超声波测距模块可以实现比较精确的直线测距,其测距原理图如下: HC-SR04的...

    超声波测距原理

    利用HC-SR04超声波测距模块可以实现比较精确的直线测距,其测距原理图如下:
    在这里插入图片描述
    HC-SR04的一端发出超声波,接触到反射物后反射,被另一个端口接收到,所以只要知道发射和接收的时间差,就可以根据声波传播的速率算出HC-SR04和反射物直接的距离。
    所以实现超声波测距就需要俩个条件:

    • 发射和接收的时间差
    • 超声波传输的速率

    HC-SR04工作原理

    HC-SR04模块的电气参数如示:
    在这里插入图片描述
    HC-SR04模块的实物图如示:
    在这里插入图片描述
    有四个引脚:

    • Vcc:+5V电源供电
    • Trig:输入触发信号(可以触发测距)
    • Echo:传出信号回响(可以传回时间差)
    • Gnd:接地

    用Trig和Echo引脚实现测距的流程:
    1.通过Trig输出一段至少10us的高电平(脉冲),触发一次测距,超声波在传输的过程中Echo一直输出高电平。
    2.在Trig脉冲输出后,立即检测Echo引脚的电平,测出Echo高电平持续的时间t,t就是超声波在所测距离一个来回所需时间。
    测距时序图如示:
    在这里插入图片描述

    STM32实现驱动

    利用STM32驱动HC-SR04需要做好几个关键点:

    • 引脚的配置
    • 时序的控制
    • 时间差的测量

    下面来分开实现几个关键点

    1.引脚的配置

    HC-SR04四个引脚,Vcc和Gnd直接接在开发板的电源上即可,主要是Trig和Echo引脚的配置,我选择了PB1连接Trig引脚、PB2连接Echo引脚。
    因为要控制Trig输出电平,所以PB1引脚模式是推挽输出GPIO_Mode_Out_PP
    Echo要检测高电平持续的时间,所以PB2引脚模式是浮空输入GPIO_Mode_IN_FLOATING
    相关的配置代码如下:

    void SR04_GPIO_Init( void )
    {
    	GPIO_InitTypeDef GPIO_InitStruct;
    	RCC_APB2PeriphClockCmd( Trig_Clock  |Echo_Clock , ENABLE );
    	
    	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    	GPIO_InitStruct.GPIO_Pin = Trig_PIN;
    	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(Trig_PORT, &GPIO_InitStruct);
    	
    	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    	GPIO_InitStruct.GPIO_Pin = Echo_PIN;
    	GPIO_Init(Echo_PORT, &GPIO_InitStruct);
    }
    

    2.时序控制

    HC-SR04的时序是:先来一段10us的Trig高电平,接着接收一段Echo的高电平,伪代码如下:

    #define Trig_H  GPIO_SetBits(GPIOB, GPIO_Pin_1)
    #define Trig_L  GPIO_ResetBits(GPIOB, GPIO_Pin_1)
    
    /* Trig给一个至少10us的高电平,超声波进行一次测距 */
    	Trig_H;
    	Delay_us( 10 );
    	Trig_L;
    /* 等待Echo高电平 */
    

    3.时间差测量

    这个是最重要的一步,要测量Echo高电平持续的时间,因为光传播的速率是340m/s,而测距的范围大多是cm级别,所以相应Echo高电平持续的时间也就是us级别的。
    所以,测量时间差的条件就比较苛刻,我是利用SysTick(系统计数器)的原理实现计时的。SysTick计数器原理是对通过SysTick_Config()函数配置每俩次中断之间的节拍数,也就是俩次中断之间的机器周期,我大概算出了,测出0.1cm距离的Echo高电平时间约为6um,而系统时钟的频率是72MHz,所以配置每俩次中断之间的节拍为432的时候,进入一次中断就代表0.1cm的距离,所以只需要记录进入中断的次数就可以算出距离。通过一个全局变量在中断函数中自增来记录中断次数。SysTick_Config函数源代码如下:

    static __INLINE uint32_t SysTick_Config(uint32_t ticks)
    { 
    	/* 判断ticks 是否超出装填值和重装值的最大值 */
      if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            
      
      /* 配置 装载寄存器 */	
      SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;     
    	/* 配置 内核中断的优先级,也是在NVIC中 */
      NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); 
    	/* 加载计数器的值 */
    	/* SysTick->VAL是当前数值寄存器的值 */
      SysTick->VAL   = 0;      
     
    	/* CTRL是SysTick控制及状态寄存器:
    		CLKSOURCE:位段2 时钟源选择,0=APB/8;1=APB  APB即72MHz
    	  TICKINT:   位段1 当置为1时,计数器递减到0时会产生中断请求;当置为0时无动作
    	  ENABLE:   位段0 使能位,可以启动SysTick定时器*/
    	SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk | 
                       SysTick_CTRL_TICKINT_Msk   | 
                       SysTick_CTRL_ENABLE_Msk;                  
      return (0);                                              
    }
    
    

    SysTick的具体原理可以参考一下我之前的博客:SysTick原理

    注意:SysTick_Config()函数执行完就开启了中断,所以必须在Echo为低电平后及时关闭中断,并且将记录中断的变量清零。
    中断函数如示:

    /* 用extern和volatile关键字修饰的 全局变量n */
    extern volatile uint32_t n;
    
    void SysTick_Handler(void)
    {
    	n++;
    }
    

    关闭中断及清零n的代码如下:

    /* 本来的使能位取反 */
    SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
    

    SysTick->CTRL寄存器的0位控制着中断的使能,具体情况在之前SysTick的博客中已做详细说明。

    4.如何将距离测出来

    我在main函数中实现了距离的测量,并且通过串口打印函数将距离传到上位机,具体代码如示:

    int main(void)
    {
    
    	int i=1,q;
    	float p;
    	/* HC-SR04模块引脚初始化 */
    	SR04_GPIO_Init();
    	/* 串口相关配置 */
    	GQ_UART_Config();
    	/* 打印调试信息 */
    	printf("慢漫的测距实验\n ");
    	
    	
    	while( 1 )
    	{
    		/* 每0.5s测一次距离 */
    		Delay_ms( 500 );
    	
    		/* Trig给一个至少10us的高电平,超声波进行一次测距 */
    		Trig_H;
    		Delay_us( 10 );
    		Trig_L;
    		/* 等待Echo高电平 */
    		while( Echo_Value != 1 );
    		/* 打开中断,对Echo高电平时间计时 */
    		/* 配置计数器的装载值是72*6=432,即一次中断6um,正好是超声波的0.1cm,所以中断次数n对应着n*0.1cm */
    		/* SysTick_Config()中已经使能计数器了,所以无需再开启	*/
    		SysTick_Config( 432 );
    		/* 等待直到Echo为低电平 */
    		while(Echo_Value == 1);
    		/* 关闭中断,通过参数n来取得距离参数 */
    		/* 本来的使能位取反 */
    		SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
    		/* p、q分别是距离的整数部分和小数部分 */
    		p=n/10;
    		q=n%10;
    		/* 打印距离信息 */
    		/* p-50时经过调试的,因为测量的距离和诸多因素有关,这个操作减小了误差 */
    		printf("第%d次测量为:%.0f.%dcm\n",i,p-50,q);
    		i++;
    		/* 清零中断记录变量n */
    		n=0;
    	}
    	
    }
    

    主要的代码就是这些,有什么问题可以和博主交流,大家一起进步!
    q:2723808286

    展开全文
  • HC-SR04.zip

    2021-05-06 15:03:36
    HC-SR04.zip
  • hc-sr04 测距

    2018-05-08 19:47:16
    利用stm32f407 控制hc-sr04实现测量距离,使用拉低,拉高电平,实现测距
  • 详解超声波测距模块HC-SR04的使用

    万次阅读 多人点赞 2019-10-27 15:08:36
    HC-SR04超声波模块常用于机器人避障、物体测距、液位检测、公共安防、停车场检测等场所。HC-SR04超声波模块主要是由两个通用的压电陶瓷超声传感器,并加外围信号处理电路构成的。如图: 两个压电陶瓷超声传感器,一...

    1.模块简介

    HC-SR04超声波模块常用于机器人避障、物体测距、液位检测、公共安防、停车场检测等场所。HC-SR04超声波模块主要是由两个通用的压电陶瓷超声传感器,并加外围信号处理电路构成的。如图:
    在这里插入图片描述
    两个压电陶瓷超声传感器,一个用于发出超声波信号,一个用于接收反射回来的超声波信号。由于发出信号和接收信号都比较微弱,所以需要通过外围信号放大器提高发出信号的功率,和将反射回来信号进行放大,以能更稳定地将信号传输给单片机。模块整体电路如图:
    在这里插入图片描述

    2.模块参数

    (1)模块主要电气参数

    1. 使用电压:DC—5V
    2. 静态电流:小于2mA
    3. 电平输出:高5V
    4. 电平输出:底0V
    5. 感应角度:不大于15度
    6. 探测距离:2cm-450cm
    7. 高精度 可达0.2cm

    (2)模块引脚
    超声波模块有4个引脚,分别为Vcc、 Trig(控制端)、 Echo(接收端)、 GND;其中VCC、GND接上5V电源, Trig(控制端)控制发出的超声波信号,Echo(接收端)接收反射回来的超声波信号。模块如图:
    在这里插入图片描述
    与单片机的连接如图:在这里插入图片描述
    控制原理:通过Trig引脚发一个 10US 以上的高电平,就可以在Echo接收口等待高电平输出;一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离.如此不断的周期测,就可以达到你移动测量的值了。

    3.控制程序

    (1)工作流程
    a.单片机引脚触发Trig测距,给至少 10us 的高电平信号;
    b.模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;
    c.有信号返回,通过 IO 输出一高电平,并单片机定时器计算高电平持续的时间;
    d.超声波从发射到返回的时间.
    计算公式:测试距离=(高电平时间*声速(340M/S))/2;

    整个控制时序如图:
    在这里插入图片描述
    (2)驱动程序
    1.单片机引脚触发Trig测距,给至少 10us 的高电平信号;

    void  StartModule() 		         //启动模块
    {
    	  TX=1;			                     //启动一次模块
    	  _nop_(); 
    	  _nop_(); 
    	  _nop_(); 
    	  _nop_(); 
    	  _nop_(); 
    	  _nop_(); 
    	  _nop_(); 
    	  _nop_(); 
    	  _nop_(); 
    	  _nop_(); 
    	  _nop_(); 
    	  _nop_(); 
    	  _nop_(); 
    	  _nop_(); 
    	  _nop_(); 
    	  _nop_(); 
    	  _nop_();
    	  _nop_(); 
    	  _nop_(); 
    	  _nop_(); 
    	  _nop_();
    	  TX=0;
    }
    

    2.自动检测是否有信号返回,如果有,启动定时器;

    while(!RX);		//当RX为零时等待
    TR0=1;			    //开启计数
    while(RX);			//当RX为1计数并等待
    TR0=0;				//关闭计数
    Conut();			//计算
    

    3.定时器计算高电平持续的时间,并计算出距离;

     void Conut(void)
    {
    	 time=TH0*256+TL0;
    	 TH0=0;
    	 TL0=0;	
    	 S=(time*1.7)/100;     //算出来是CM
    }
    

    更多超声波测距模块HC-SR04设计资料及例程 请关注公众号,首页回复“超声波”获取资料
    在这里插入图片描述

    展开全文
  • HC-SR04.rar

    2020-04-10 17:27:38
    通过STM32F103RCT6来实现用HC-SR04测距基本实现其功能有一定误差。根据正点原子输入捕获改编,新手代码多多包涵。
  • HC-SR04测距

    2017-08-06 21:09:08
    基于MSP430单片机通过HC-SR04测距 单位mm
  • HC-SR04超声波测距

    2017-08-16 18:48:22
    基于MSP430的HC-SR04超声波测距
  • HC-SR04 HC-SR04 HC-SR04 HC-SR04 超声波测距模块可提供 2cm-400cm 2cm-400cm 2cm-400cm 2cm-400cm 的非接触式距离感测功能,测距精度可达高到 3mm;模块包括超声波发射器、接收器与控制电路。 基本工作原理: (1)...
  • 51单片机测距c语言HC-SR04
  • 低成本准确的HC-SR04的基本介绍!
  • hc-sr04超声波51程序

    2019-03-20 19:56:17
    实现测距,解决了网上大部分hc-sr04程序需调试失败的缺陷
  • 1602和HC-SR04超声波模块测距C语言程序#define uchar unsigned char#define uint unsigned int/**************************Trig超声波传感器控制端,Echo超声波传感器接收端。***************************/sbit Trig...

    1602和HC-SR04超声波模块测距C语言程序

    #define uchar unsigned char

    #define uint unsigned int

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

    Trig超声波传感器控制端,

    Echo超声波传感器接收端。

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

    sbit Trig=P2^4;

    sbit Echo=P3^2;

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

    lcd_rs为1602液晶数据命令选择,

    lcd_en为1602液晶使能端,lcd_rw

    为1602液晶读写控制端。

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

    sbit lcd_rs=P2^5;

    sbit lcd_rw=P2^6;

    sbit lcd_en=P2^7;

    #include

    #include

    #include"ZNCCSB1.h"

    void init(); //函数初始化

    void LCD_init(); //LCD的初始化

    void LCD_write_date(uchar date); //lcd的写数据函数

    void LCD_write_com(uchar com); //lcd的写指令函数

    void delay(uint); //延时函数

    void dev_delay(); //读写延时函数

    void distance_display(); //lcd的显示函数

    uchar code num[] ={'0','1','2','3','4','5','6','7','8','9','m'};

    uchar code warning[]={"Measurement error!"};

    uchar T0_cout,display_flag;

    uint T0_time;

    void main()

    {

    delay(1500);

    init();

    while(1)

    {

    Trig=1;

    delay(20);

    Trig=0;

    while(Echo==0);

    TR0=1;

    while(Echo==1);

    //TR0=0;

    while(display_flag==0);

    while(display_flag==1)

    {

    display_flag=0;

    LCD_init();

    distance_display();

    delay(1500);

    }

    }

    }

    void dev_delay()

    {

    _nop_();

    _nop_();

    _nop_();

    _nop_();

    }

    void delay(uint time)

    {

    uchar x;

    uint y;

    for(y=time;y>0;y--)

    for(x=220;x>0;x--);

    }

    void LCD_write_com(uchar com)

    {

    lcd_en=0;

    lcd_rs=0;

    lcd_rw=0;

    P0=com;

    dev_delay();

    lcd_en=1;

    delay(1);

    lcd_en=0;

    dev_delay();

    }

    void LCD_write_date(uchar date)

    {

    lcd_rs=1;

    lcd_rw=0;

    lcd_en=0;

    P0=date;

    dev_delay();

    lcd_en=1;

    delay(1);

    lcd_en=0;

    dev_delay();

    }

    void LCD_init()

    {

    LCD_write_com(0x38);

    LCD_write_com(0x0c);

    LCD_write_com(0x06);

    LCD_write_com(0x01);

    }

    void init()

    {

    LCD_init();

    TMOD=0x01;

    TH0=0

    展开全文
  • HC-SR04超声波测距模块及原理图
  • 超声波模块hc-sr04

    2020-04-02 23:10:25
    本文主要详解HC-SR04模块吉他的工作原理,首先介绍的是HC-SR04模块的优势及应用领域,其次阐述了超声波测距模块工作原理及电路图,最后介绍了电气参数、超声波时序图、操作以及程序,具体的跟随小编来了解一下。
  • HC-SR04模块的优势及应用领域 HC-SR04模块优势: 此模块性能稳定,测度距离精确,模块高精度,盲区小。 产品应用领域: 1、机器人避障 2、物体测距 3、液位检测 4、公共安防 5、停车场检测 超声波测距模块工作原理...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,642
精华内容 1,856
关键字:

HC-SR04