基于 HC_SR04的超声波测距数码管显示(智能小车超声波避障部分)

超声波测距模块HC-SR04
1、产品特色
①典型工作用电压:5V
②超小静态工作电流:小于 5mA
③感应角度(R3 电阻越大,增益越高,探测角度越大):
R3 电阻为 392,不大于 15 度
R3 电阻为 472, 不大于 30 度
④探测距离(R3 电阻可调节增益,即调节探测距离):
R3 电阻为 392 2cm-450cm
R3 电阻为 472 2cm-700cm
⑤高精度:可达 0.3cm
⑥盲区(2cm)超近
2、接口定义
Vcc
Trig(控制端)
Echo(接收端)
Gnd
控制口发一个 10US 以上的高电平,就可以在接收口等待高电平输出。一有输出就可以开
定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距
离.如此不断的周期测,就可以达到你移动测量的值了。
1、原理
①采用 IO 触发测距,给至少10us 的高电平信号;
②模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;
③有信号返回,通过 IO 输出一高电平,高电平持续的时间就是
④ 测试距离=(高电平时间*声速(340M/S))/2;
在这里插入图片描述

以上时序图表明你只需要提供一个10us 以上脉冲触发信号,该模块内部将发出8个40kHz周
期电平并检测回波。一旦检测到有回波信号则输出回响信号。回响信号的脉冲宽度与所测的
距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。公
式:us/58=厘米或者us/148-英寸;或是:距离=高电平时间*声速(340M/S)/2;建议测量周期为
60ms 以上,以防止发射信号对回响信号的影响。

代码部分

`timescale 1ns / 1ps

module HC_SR04(
    input     wire          clk  ,
    input     wire          rst_n,
    input     wire          echo ,
    output    wire          trig ,
    output    wire  [3:0]   sel  ,
    output    wire  [7:0]   seg 
    );
parameter CUNT_MAX  =12_500_000;//00 ;//60ms=3_000_000
parameter CUNT_10US =600       ;//10us=500


// reg [ 1:0] temp;

// always @(posedge clk ) begin
//     temp[0] <=  echo;
//     temp[1] <= temp[0];
// end



reg [30:0] cunt  ;
reg [30:0] cunt_t;
wire [24:0] dis ;
reg        flag  ;

wire [13:0] data  ;

assign trig= flag;
assign dis=(cunt_t*20)/100/58;   //精度0.1厘米     /50_000_000*340     cunt_t*20*340/1000_000_000*100*1/2                                                          
assign data = (dis>=0 && dis < 9999)?dis[13:0] : 14'd9_999;

always @(posedge clk ) begin
    if(!rst_n)
    cunt<=0;
    else begin
        if(cunt==CUNT_MAX)
        cunt<=0;  
        else
        cunt<=cunt+1;
    end
end
always @(posedge clk ) begin
    if(!rst_n)
    flag<=0;
    else if(cunt>3_000_000&&cunt<6_000_000)
    flag<=1;
    else
    flag<=0;
end
//返回的周期数
always @(posedge clk ) begin
    if(!rst_n||cunt==CUNT_MAX)
    cunt_t<=0;
    else if(echo==1'b1)
    cunt_t<=cunt_t+1;
    else
    cunt_t<=cunt_t;
end


seg u_seg(
    /*input             */. clk  (clk  ),
    /*input             */. rst_n(rst_n),
    /*input  wire [13:0]*/. data (dis[13:0] ),
    /*output reg  [3:0] */. sel  (sel  ),
    /*output reg  [7:0] */. seg  (seg  )
    );



endmodule

数码管

`timescale 1ns / 1ps

module seg(
    input               clk  ,
    input               rst_n,
    input  wire [13:0]  data ,
    output reg  [3:0]   sel  ,///
    output reg  [7:0]   seg  
    );


parameter CNT_1S =50_000_000 ;
reg  [25:0]  ct   ;
reg  [30:0] data_t  ;
//
// always @(posedge clk ) begin
//   if(!rst_n)
//   data_t<=0;
//   else if(ct==50_000_00)
//   data_t<=data;
//   else
//   data_t<=data_t;
  
// end
//对1秒进行计数
always @(posedge clk  or  negedge rst_n) begin
  if(!rst_n)
    ct<=0;
  else if(ct==CNT_1S-1)
    ct<=0;
  else
    ct<=ct+1;
end
//产生flag信号
reg  flag;
always @(posedge clk  or  negedge rst_n) begin
   if(!rst_n)
    flag<=0;
  else if(ct==CNT_1S-2) //0.5ms
    flag<=1;
  else
    flag<=0; 
end
//进行一个从右到左的移位
//产生一个计数器
reg [3:0] ct_sel;
always @(posedge clk  or  negedge rst_n) begin
  if(!rst_n)
    ct_sel<=0;
  else if(ct_sel==4)
    ct_sel<=0;
  else if(ct%25000==1)  //可加2个00 效果更明显
    ct_sel<=ct_sel+1;
  else
    ct_sel<=ct_sel;

end

always @(posedge clk  or  negedge rst_n) begin
  if(!rst_n)
    sel<=4'b0000;
  else case (ct_sel)
      0:sel<=4'b0001;
      1:sel<=4'b0010;
      2:sel<=4'b0100;
      3:sel<=4'b1000;
     default: sel<=4'b0000;//输入值不能改 比如ct_sel<=4'b0000 会报错
  endcase
end
  //译码
reg [13:0] num;
always @(posedge clk  or  negedge rst_n) begin
  if(!rst_n)
    num<=0;
  else
    case (ct_sel)
    0:num<=data%10      ;
    1:num<=data/10%10   ;
    2:num<=data/100%10  ;
    3:num<=data/1000%10 ;
    default: num<=num ;
    endcase
end
always @(posedge clk  or  negedge rst_n) begin
  if(!rst_n)
    seg<=8'b1100_0000;
  else
   case(num)// hgfe dcba  0有效
   0:begin 
    if(ct_sel==1)
    seg<=  8'h40;//b0100_0000;
    else
    seg<=  8'hc0;//b1100_0000;
   end
   1:begin
    if(ct_sel==1)
    seg<=  8'h79;//b0111_1001;
    else
    seg<=  8'hf9;//b1111_1001;
   end
   2:begin
    if(ct_sel==1)
    seg<=  8'h24;//b0010_0100;
    else
    seg<=  8'ha4;//b1010_0100;
   end          
   3:begin
    if(ct_sel==1)
    seg<=  8'h30;//b0011_0000;
    else
    seg<=  8'hb0;//b1011_0000
   end
   4:begin
    if(ct_sel==1)
    seg<=  8'h19;//b0001_1001;
    else
    seg<=  8'h99;//b1001_1001;
   end
   5:begin
    if(ct_sel==1)
    seg<=  8'h12;//b0001_0010;
    else
    seg<=  8'h92;//b1001_0010;
   end
   6:begin
    if(ct_sel==1)
    seg<=  8'h2;//b0000_0010;
    else
    seg<=  8'h82;//b1000_0010;
   end
   7:begin
    if(ct_sel==1)
    seg<=  8'h78;//b0111_1000;
    else
    seg<=  8'hf8;//b1111_1000;
   end
   8:begin
    if(ct_sel==1)
    seg<=  8'h0;//b0000_0000;
    else
    seg<=  8'h80;//b1000_0000;
    end
   9:begin
    if(ct_sel==1)
   seg<=  8'h10;//b0001_0000; 
   else
   seg<=  8'h90;//b1001_0000;
   end
    default:
             seg<=seg;
   endcase      
    end

endmodule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/940266.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity 使用字符串更改Text指定文字颜色、大小、换行、透明

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、使用字符串改变文字属性的方法&#xff08;一&#xff09;修改颜色&#xff08;二&#xff09;修改大小&#xff08;三&#xff09;换行&#xff08;四&…

JS CSS HTML 的代码如何快速封装

我们为什么要封装代码&#xff0c;是因为封装后的代码&#xff0c;会显得非常美观&#xff0c;减少代码的复用&#xff0c;方便我们更好的去维护代码&#xff0c;不用一个一个页面的去找去改&#xff0c;直接封装好的代码里面去改就可以了 目录 1.html代码封装 2.CSS代码封装…

《Vue3实战教程》5:响应式基础

如果您有疑问&#xff0c;请观看视频教程《Vue3实战教程》 响应式基础​ API 参考 本页和后面很多页面中都分别包含了选项式 API 和组合式 API 的示例代码。现在你选择的是 组合式 API。你可以使用左侧侧边栏顶部的“API 风格偏好”开关在 API 风格之间切换。 声明响应式状态…

黑马Java面试教程_P8_并发编程

系列博客目录 文章目录 系列博客目录前言1.线程的基础知识1.1 线程和进程的区别&#xff1f;难2频3面试文稿 1.2 并行和并发有什么区别&#xff1f; 难1频1面试文稿 1.3 创建线程的四种方式 难2频4面试文稿 1.4 runnable 和 callable 有什么区别 难2频3面试文稿 1.5 线程的 run…

谷歌浏览器的扩展市场使用指南

谷歌浏览器的扩展市场为用户提供了丰富多样的功能扩展&#xff0c;可以大幅提升浏览体验。本文将为你详细介绍如何使用谷歌浏览器的扩展市场&#xff0c;包括安装、管理和一些推荐的无障碍工具、图标重置方法和便捷操作技巧。&#xff08;本文由https://chrome.py010.cn/的作者…

线程知识总结(一)

1、概述 1.1 进程与线程 进程是程序运行时&#xff0c;操作系统进行资源分配的最小单位&#xff0c;包括 CPU、内存空间、磁盘 IO 等。从另一个角度讲&#xff0c;进程是程序在设备&#xff08;计算机、手机等&#xff09;上的一次执行活动&#xff0c;或者说是正在运行中的程…

【优选算法】Prefix-Kage:前缀和的算法影(上)

文章目录 1.概念解析2.代码实现2.1【模版】前缀和&#xff08;一维&#xff09;2.1.1 原理2.1.2 代码实现 2.2【模版】前缀和&#xff08;二维&#xff09;2.2.1 原理2.2.2 代码实现 希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力&#xff01; 本篇是优选算…

CVE-2024-32709 WordPress —— Recall 插件存在 SQL 注入漏洞

漏洞描述 WordPress 是一款免费开源的内容管理系统,适用于各类网站,包括个人博客、电子商务系统、企业网站。其插件 WP-Recall 的 account 存在 SQL 注入漏洞,攻击者可以通过该漏洞获取数据库敏感信息。 WP-Recall 版本 <= 16.26.5 漏洞复现 搭建环境、安装插件、完成…

网络安全概论——虚拟专网VPN技术

一、VPN概述 1、VPN的概念 所谓虚拟专网&#xff08;Virtual Private Network VPN&#xff09;是指将物理上分布在不同地点的网络通过公用网络连接而构成逻辑上的虚拟子网&#xff0c;它采用认证、访问控制、机密性、数据完整性等安全机制在公用网络上构建专用网络。 如何理…

mobilenetv2-inceptionv3-resnet50三大模型对比实现人脸识别反欺诈系统【带UI界面】

完整项目包获取→点击文章末尾名片&#xff01; 关于数据集&#xff1a;超大规模人脸欺诈数据集。共70多G。 关于模型对比&#xff1a; inceptionv3&#xff1a; mobilenetv2&#xff1a; resnet50&#xff1a; 关于系统&#xff1a; 界面&#xff1a;

十一、e2studio VS STM32CubeIDE之宏函数展开

目录 一、概述/目的 二、复杂宏函数举例 三、编译-预处理 四、stm32cubeide和e2studio的预处理 五、source insight和vscode 一、概述/目的 复杂宏函数如何快速展开 二、复杂宏函数举例 #define R_BSP_MODULE_START(ip, channel) {FSP_CRITICAL_SECTION_DEFI…

FreeRTOS的任务调度

1.启动任务调度器 vTaskStartScheduler void vTaskStartScheduler( void ) { BaseType_t xReturn;/* Add the idle task at the lowest priority. */#if ( INCLUDE_xTaskGetIdleTaskHandle 1 ){/* Create the idle task, storing its handle in xIdleTaskHandle so it canbe …

【Java基础面试题024】Java中包装类型和基本类型的区别是什么?

回答重点 基本类型&#xff1a; Java中有8种基本数据类型&#xff08;byte、short、int、long、float、double、char、boolean&#xff09;他们是直接存储数值的变量&#xff0c;位于栈上&#xff08;局部变量在栈上、成员变量在堆上&#xff0c;静态字段/类在方法区&#xf…

SpringBoot3+Vue3开发在线考试系统

项目介绍 项目分为3种角色&#xff0c;分别为&#xff1a;超级管理员、老师、学生。超级管理员&#xff0c;负责系统的设置、角色的创建、菜单的管理、老师的管理等功能&#xff0c;也可以叫做系统管理员&#xff1b;老师角色&#xff0c;负责系统业务的管理&#xff0c;包括学…

第3节 测试套件数据驱动

创建Excel、 CSV测试数据 1. 从主菜单中选择 File > New > Test Data。将显示新的测试数据对话框。输入测试数据的名称并选择数据类型作为Excel File/ CSV File 。单击OK。 2. 浏览到要导入Katalon Studio的Excel File, 选择Excel中的sheetName&#xff0c;或者CSV文件…

跨站点请求伪造(Cross Sites Request Forgery)类漏洞攻击方式与防御措施|软件安全测试技术系列

本系列文章分享JavaScript语言常见的安全漏洞&#xff0c;漏洞的原理&#xff0c;可能导致的安全问题&#xff0c;以及如何防御与避免。本文分享的是跨站点请求伪造&#xff08;Cross Sites Request Forgery&#xff09;。 跨站点请求伪造&#xff0c;指利用用户身份操作用户账…

【图像分类实用脚本】数据可视化以及高数量类别截断

图像分类时&#xff0c;如果某个类别或者某些类别的数量远大于其他类别的话&#xff0c;模型在计算的时候&#xff0c;更倾向于拟合数量更多的类别&#xff1b;因此&#xff0c;观察类别数量以及对数据量多的类别进行截断是很有必要的。 1.准备数据 数据的格式为图像分类数据集…

飞牛os使用ddns-go配合华为云实现内网穿透

DDNS-Go 是一个开源的动态域名解析工具&#xff0c;它支持多种操作系统&#xff0c;包括 Windows、Mac 和 Linux&#xff0c;并且支持 ARM 和 x86 架构。以下是使用 DDNS-Go 的基本步骤&#xff1a; 1. 下载和安装&#xff1a; 访问 DDNS-Go 的 GitHub 仓库&#xff08;&#x…

易语言OCR证件照文字识别

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…

二八(vue2-04)、scoped、data函数、父子通信、props校验、非父子通信(EventBus、provideinject)、v-model进阶

1. 组件的三大组成部分(结构/样式/逻辑) 1.1 scoped 样式冲突 App.vue <template><!-- template 只能有一个根元素 --><div id"app"><BaseOne></BaseOne><BaseTwo></BaseTwo></div> </template><script…