FPGA控制超声波模块测距并通过数码管显示_第1页
FPGA控制超声波模块测距并通过数码管显示_第2页
FPGA控制超声波模块测距并通过数码管显示_第3页
FPGA控制超声波模块测距并通过数码管显示_第4页
FPGA控制超声波模块测距并通过数码管显示_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

outputoutputtrig,hummer;output[5:0]data6;output[7:0]data7;regtrig;reg[7:0]cnt;reg[13:0]cnt1;//无cnt2和data5reg[7:0]cnt3;reg[7:0]dis[9:0];reg[3:0]data1,data2,data3,data4;reg[5:0]data6;reg[7:0]data7;reg[1:0]cnt4;//基于FPGA的超声波模块控制及数码管显示//作者:燕山大学信息科学与工程学院&&无线电爱好者协会25界徐月〃时间:2013年9月6日//HC-RO4超声波测距模块,测量角度15度//抛开代码风格,咱们只讲知识modulewireless(iclk,trig,echo,data6,data7,hummer);inputiclk, 〃时钟是50ns,即20MHzecho; 〃回响信号输出〃超声波模块触发信号输入〃我的开发板上的蜂鸣器〃数码管位选〃数码管段选〃计数器,计250个50ns,12.5us,为echo提供时序〃计数器,计8000个12.5us,100ms〃计数124个时钟周期是1mm〃数码管显示的数字〃数码管需要显示的数字〃个位,mm〃十位,cm〃百位,dm〃千位,m〃数码管位选寄存器〃数码管段选寄存器〃控制数码管依次闪亮的计数器regecho_buf, //echo的上一个时钟的状态echo_rising, 〃捕捉echo的上升沿echo_falling, 〃捕捉echo的下降沿flag1; //echo为高电平时flag1会是1,低电平时会是0regclk; 〃数码管显示所需的时钟reg[3:0]cnt5; 〃用于产生数码管显示用的时钟的分频器assignhummer=1'b1; 〃让我的开发板上的蜂鸣器关闭,否则它会一直响〃显示存储器初始化initialbegindis[0]=8'hc0;dis[1]=8'hf9;dis[2]=8'ha4;dis[3]=8'hb0;dis[4]=8'h99;dis[5]=8'h92;dis[6]=8'h82;dis[7]=8'hf8;dis[8]=8'h80;dis[9]=8'h90;end〃产生echo控制信号250*8000*50ns,echo高电平持续12.5us,即250个时钟周期always@(posedgeiclk)beginif(cnt==249)cnt<=1'b0;elsecnt<=cnt+1;endalways@(posedgeiclk)beginif(cnt==249)if(cnt1==7999)begintrig<=1'b1;cnt1<=1'b0;endelsebegintrig<=1'b0;cnt1<=cnt1+1'b1;endend//捕捉trig上升沿与下降沿,并产生标志位always@(posedgeiclk)beginecho_buf<=echo;echo_rising<=echo&(~echo_buf);echo_falling<=(~echo)&echo_buf;endalways@(posedgeiclk)beginif(echo_rising==1'b1)beginflag1=1'b1; //echo已经变为高电平endelseif(echo_falling==1'b1)beginflag1=1'b0; //echo已经变为低电平endend//在flag1=1期间计时,即对时钟进行计数。(4m的距离会是25ms,1mm是125个时钟周期)always@(posedgeiclk)beginif(flag1==1'b1)beginif(cnt3==124) //1mmcnt3<=1'b0;elsecnt3<=cnt3+1'b1;endelseif(echo_rising==1'b1)always@(posedgeiclk)beginif(flag1==1'b1)beginif(cnt3==124)if(data1==9) //1cmdata1<=4'd0;elsedata1<=data1+1'b1;endelseif(echo_rising==1'b1)data1<=1'b0;endalways@(posedgeiclk)beginif(flag1==1'b1)beginif(data1==9&&cnt3==124)if(data2==9) //1dmdata2<=1'b0;elsedata2<=data2+1'b1;endelseif(echo_rising==1'b1)data2<=1'b0;endalways@(posedgeiclk)beginif(flag1==1'b1)beginif(data2==9&&data1==9&&cnt3==124)if(data3==9) //1mdata3<=1'b0;elsedata3<=data3+1'b1;endelseif(echo_rising==1'b1)data3<=1'b0;endalways@(posedgeiclk)beginif(flag1==1'b1)beginif(data3==9&&data2==9&&data1==9&&cnt3==124)if(data4==9) 〃说明书上最远是测距4mdata4<=1'b0;elsedata4<=data4+1'b1;endelseif(echo_rising==1'b1)〃产生显示用的时钟信号always@(posedgeiclk)beginif(cnt5==5)beginclk=~clk;cnt5=1'b0;endelsecnt5=cnt5+1'b1;end//00-11为一个周期,每个周期点亮一个数码管always@(posedgeclk)begincnt4=cnt4+1'b1;end//我的板上共有6个数码管,让其中4个数码管显示四位数字,单位是毫米。always@(posedgeclk)beginif(flag1==1'b0)case(cnt4)2'b00:begindata7=dis[data1];data6=6'b111110;end2'b01:begindata7=dis[data2];data6=6'b111101;end2'b10:begindata7=dis[d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论