超声波测距
- 格式:docx
- 大小:18.32 KB
- 文档页数:6
超声波测距设计
基本要求:给定超声波发射接收模块,通过DE2产生频率为40KHZ的超声波脉
冲信号(脉宽为250-500us)送至超声波发射模块。
将超声波接收模块数出的回波脉冲信号送至DE2,经处理后在3位数码管上面显示距离(单位为cm)。
超声波测距代码:
module csb(sin,sout,HEX2,HEX1,HEX0,clk,rst);
input sin,clk,rst;
output sout;
output [6:0]HEX2,HEX1,HEX0;
reg[6:0]HEX2,HEX1,HEX0;
reg [9:0]q;
reg [26:0]n;
reg [13:0]p;
reg [26:0]l;
reg[19:0]m;
reg sout;
reg[33:0]sw;
reg[19:0]m1;
reg[11:0]sw1;
parameter seg0 = 7'b1000000,
seg1 = 7'b1111001,
seg2 = 7'b0100100,
seg3 = 7'b0110000,
seg4 = 7'b0011001,
seg5 = 7'b0010010,
seg6 = 7'b0000010,
seg7 = 7'b1111000,
seg8 = 7'b0000000,
seg9 = 7'b0010000,
sega = 7'b0001000,
segb = 7'b0000011,
segc = 7'b1000110,
segd = 7'b0100001,
sege = 7'b0000110,
segf = 7'b0001110; parameter a=12'd3400;
always @(posedge clk or posedge rst) if(rst)
begin
q<=0;
sout<=0;
l<=25000000;
end
else
begin
if(l==25000000)
begin
p<=0;
m<=0;
l<=0;
sout<=0;
q<=0;
m1<=0;
end
else
begin
l<=l+1;
if(m1==0)
begin
if(sin==1)
begin
m<=m+1;
if(p==12499)
begin
p<=12499;
sout<=0;
q<=0;
end
else
begin
p<=p+1;
if(q==624)
begin
sout<=~sout;
q<=0;
end
else
q<=q+1;
end
end
else
begin
if(m>=150000)
m1<=m;
end
end
end
end
always @(posedge clk)
if(n==25000000)
begin
sw[33:0]=m1[19:0]*a ;
sw1[11:8]=sw[33:0]/1000000000;
sw[33:0]=sw[33:0]%1000000000;
sw1[7:4]=sw[33:0]/100000000;
sw[33:0]=sw[33:0]%100000000;
sw1[3:0]=sw[33:0]/10000000;
n<=0;
end
else
n<=n+1;
always @(sw1)
case(sw1[3:0])
4'h0: HEX0[6:0] = seg0;
4'h1: HEX0[6:0] = seg1;
4'h2: HEX0[6:0] = seg2;
4'h3: HEX0[6:0] = seg3;
4'h4: HEX0[6:0] = seg4;
4'h5: HEX0[6:0] = seg5;
4'h6: HEX0[6:0] = seg6;
4'h7: HEX0[6:0] = seg7;
4'h8: HEX0[6:0] = seg8;
4'h9: HEX0[6:0] = seg9;
4'ha: HEX0[6:0] = sega;
4'hb: HEX0[6:0] = segb;
4'hc: HEX0[6:0] = segc;
4'he: HEX0[6:0] = sege; 4'hf: HEX0[6:0] = segf; default:HEX0[6:0] = seg0; endcase
always @(sw1)
case(sw1[7:4])
4'h0: HEX1[6:0] = seg0; 4'h1: HEX1[6:0] = seg1; 4'h2: HEX1[6:0] = seg2; 4'h3: HEX1[6:0] = seg3; 4'h4: HEX1[6:0] = seg4; 4'h5: HEX1[6:0] = seg5; 4'h6: HEX1[6:0] = seg6; 4'h7: HEX1[6:0] = seg7; 4'h8: HEX1[6:0] = seg8; 4'h9: HEX1[6:0] = seg9; 4'ha: HEX1[6:0] = sega; 4'hb: HEX1[6:0] = segb; 4'hc: HEX1[6:0] = segc; 4'hd: HEX1[6:0] = segd; 4'he: HEX1[6:0] = sege; 4'hf: HEX1[6:0] = segf; default:HEX1[6:0] = seg0; endcase
always @(sw1)
case(sw1[11:8])
4'h0: HEX2[6:0] = seg0;
4'h2: HEX2[6:0] = seg2;
4'h3: HEX2[6:0] = seg3;
4'h4: HEX2[6:0] = seg4;
4'h5: HEX2[6:0] = seg5;
4'h6: HEX2[6:0] = seg6;
4'h7: HEX2[6:0] = seg7;
4'h8: HEX2[6:0] = seg8;
4'h9: HEX2[6:0] = seg9;
4'ha: HEX2[6:0] = sega;
4'hb: HEX2[6:0] = segb;
4'hc: HEX2[6:0] = segc;
4'hd: HEX2[6:0] = segd;
4'he: HEX2[6:0] = sege;
4'hf: HEX2[6:0] = segf;
default:HEX1[6:0] = seg0; endcase
endmodule。