2779|2

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

整合超声测距模块和OV7670模块 [复制链接]

10芯积分
我已经完成O7670模块了 ,现在有超声测距模块的代码,需要大神帮忙整合一下,可以通过编译。
module wireless(iclk,trig,echo,data6,data7,hummer);                  
input
iclk,                      //时钟是50ns,即20MHz
echo;                      //回响信号输出
output
trig,                      //超声波模块触发信号输入
hummer;                    //我的开发板上的蜂鸣器
output [5:0]data6;         //数码管位选
output [7:0]data7;         //数码管段选
reg trig;
reg [7:0]cnt;              //计数器,计250个50ns,12.5us,为echo提供时序
reg [13:0] cnt1;           //计数器,计8000个12.5us,100ms
//无cnt2和data5
reg [7:0]cnt3;             //计数124个时钟周期是1mm
reg [7:0] dis[9:0];        //数码管显示的数字
reg [3:0]                  //数码管需要显示的数字
data1,                     //个位,mm
data2,                     //十位,cm
data3,                     //百位,dm
data4;                     //千位,m
reg[5:0]data6;             //数码管位选寄存器
reg [7:0]data7;            //数码管段选寄存器
reg[1:0]cnt4;              //控制数码管依次闪亮的计数器
reg
echo_buf,                  //echo的上一个时钟的状态
echo_rising,               //捕捉echo的上升沿
echo_falling,              //捕捉echo的下降沿
flag1;                     //echo为高电平时flag1会是1,低电平时会是0
reg clk;                   //数码管显示所需的时钟
reg[3:0] cnt5;             //用于产生数码管显示用的时钟的分频器

assign hummer = 1'b1;      //让我的开发板上的蜂鸣器关闭,否则它会一直响

//显示存储器初始化
initial
begin
dis[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@(posedge iclk)                  
begin
if(cnt == 249)
cnt <= 1'b0;
else
cnt <= cnt +1;
end

always@(posedge iclk)
begin
if(cnt == 249)
if(cnt1 == 7999)
begin
trig <= 1'b1;
cnt1 <= 1'b0;
end
else
begin
trig <= 1'b0;
cnt1 <= cnt1 + 1'b1;
end
end

//捕捉trig上升沿与下降沿,并产生标志位
always@(posedge iclk)
begin
echo_buf <= echo;
echo_rising <= echo & (~echo_buf);
echo_falling <= (~echo) & echo_buf;
end
always@(posedge iclk)
begin
if(echo_rising == 1'b1)
begin
flag1 = 1'b1;                       //echo已经变为高电平
end
else if(echo_falling == 1'b1)
begin
flag1 = 1'b0;                       //echo已经变为低电平
end
end

//在flag1 = 1 期间计时,即对时钟进行计数。(4m的距离会是25ms,1mm是125个时钟周期)
always@(posedge iclk)
begin
if(flag1 == 1'b1)
begin
if(cnt3 == 124)                     //1mm
cnt3 <= 1'b0;
else
cnt3 <= cnt3 + 1'b1;
end
else if(echo_rising == 1'b1)
cnt3 <= 1'b0;
end

always@(posedge iclk)
begin
if(flag1 == 1'b1)
begin
if(cnt3 == 124)
if(data1 == 9)                      //1cm
data1 <= 4'd0;
else
data1 <= data1 + 1'b1;
end
else if(echo_rising == 1'b1)
data1 <= 1'b0;
end

always@(posedge iclk)
begin
if(flag1 == 1'b1)
begin
if(data1 == 9 && cnt3 == 124)
if(data2 == 9)                     //1dm
data2 <= 1'b0;
else
data2 <= data2 + 1'b1;
end
else if(echo_rising == 1'b1)
data2 <= 1'b0;
end

always@(posedge iclk)
begin
if(flag1 == 1'b1)
begin
if(data2 == 9 && data1 == 9 && cnt3 == 124)
if(data3 == 9)                    //1m
data3 <= 1'b0;
else
data3 <= data3 + 1'b1;
end
else if(echo_rising == 1'b1)
data3 <= 1'b0;
end

always@(posedge iclk)
begin
if(flag1 == 1'b1)
begin
if(data3 == 9 && data2 == 9 && data1 == 9 && cnt3 == 124)
if(data4 == 9)                     //说明书上最远是测距4m
data4 <= 1'b0;
else
data4 <= data4 + 1'b1;
end
else if(echo_rising == 1'b1)
data4 <= 1'b0;
end


//产生显示用的时钟信号
always@(posedge iclk)
begin
if(cnt5 == 5)
begin
clk = ~clk;
cnt5 = 1'b0;
end
else
cnt5 = cnt5 + 1'b1;
end

//00-11为一个周期,每个周期点亮一个数码管
always@(posedge clk)
begin
cnt4 = cnt4 + 1'b1;
end



//我的板上共有6个数码管,让其中4个数码管显示四位数字,单位是毫米。
always@(posedge clk)
begin
if(flag1 == 1'b0)
case(cnt4)
2'b00:
begin
data7 = dis[data1];
data6 = 6'b111110;
end
2'b01:
begin
data7 = dis[data2];
data6 = 6'b111101;
end
2'b10:
begin
data7 = dis[data3];
data6 = 6'b111011;
end
2'b11:
begin
data7 = dis[data4];
data6 = 6'b110111;
end
default: ;
endcase
else
begin
data7 = dis[0];
data6 = 6'b110000;
end
end

endmodule

以上是超声测距模块的代码
谢谢各位大神了!!!!

xiang mu.rar

13.67 MB, 下载次数: 47

OV7670模块已经完成

此帖出自FPGA/CPLD论坛

最新回复

楼主你这程序也太长了吧,估计搞这个的人能明白  详情 回复 发表于 2017-4-8 14:33
点赞 关注
 

回复
举报

2

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
帮我把超声测距模块分一下层写个实例化就行!!!!
此帖出自FPGA/CPLD论坛
 
 

回复

183

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
楼主你这程序也太长了吧,估计搞这个的人能明白
此帖出自FPGA/CPLD论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表