c
`timescale 1ns / 1ps
module top(
input wire clk ,
input wire rst_n ,
input wire rx ,
input wire echo ,
input wire [1:0] D0 ,
output reg [3:0] dj ,
output wire trig ,
output wire [3:0] sel ,
output reg t17 ,
output reg u18 ,
output wire [7:0] seg
);
wire valid ;
wire [13:0] dis ;
wire [7:0] data ;
reg [13:0] dis_t ;
reg [1:0] state ;
reg [15:0] cunt ;
parameter ZERO = 2'b00;
parameter ONE = 2'b11;
//产生一个计数器
always @(posedge clk ) begin
if(!rst_n)
cunt<=0;
else if(cunt===100)
cunt<=0;
else
cunt<=cunt+1;
end
//t17 u18赋值
always @(posedge clk ) begin
if(!rst_n)begin
t17<=0;
end
else case(state)
ZERO:begin
if(cunt<35)
t17<=1;
else
t17<=0;
end
ONE:t17<=1;
default:;
endcase
end
always @(posedge clk ) begin
if(!rst_n)
u18<=0;
else case(state)
ZERO:begin
if(cunt<35)
u18<=1;
else
u18<=0;
end
ONE: u18<=1;
default:;
endcase
end
//状态的转移
always @(posedge clk ) begin
if(!rst_n)
state<=ONE;
else if(state==ONE&&data==8'h06)
state<=ZERO;
else if(state==ZERO&&data==8'h07)
state<=ONE;
else
state<=state;
end
// dis_t的缓存
always @(posedge clk ) begin
if(!rst_n)
dis_t<=0;
else if(dis>0)
dis_t<=dis;
else
dis_t<=dis_t;
end
//红外寻迹 正常模式 的描述 (状态的描述)
always @(posedge clk ) begin
if(state==ZERO)begin
if(dis_t<55)
dj<=4'b0000;
else case (D0)
2'b00: dj<=4'b0101;
2'b01: dj<=4'b1001;
2'b10: dj<=4'b0110;
default:dj<=4'b0000 ;
endcase
end
else if(state==ONE)begin
if(dis_t<55)
dj<=4'b0000;
else case (data)
8'h01:dj<=4'b0101;
8'h02:dj<=4'b1010;
8'h03:dj<=4'b1001;
8'h04:dj<=4'b0110;
8'h05:dj<=4'b0000;
default: dj<=4'b0000;
endcase
end
else
dj<=4'b0000;
end
rx#(
. CLK_DIV ( 50_000_000 ),
. BIT ( 9600 )
)u_rx(
. clk (clk ),
. rst_n(rst_n),
. rx (rx ),
. data (data ),//o
. valid(valid)
);
HC_SR04 u_hc(
/*input wire */ . clk (clk ),
/*input wire */ . rst_n(rst_n ),
/*input wire */ . echo (echo ),
/*output wire */ . trig (trig ),
/*output wire [3:0] */ . sel (sel ),
/*output wire [7:0] */ . seg (seg ),
. data (dis )// 精度0.1cm 小于40执行避障停止
);
endmodule
其中细节1 蓝牙连接tx相当于是 蓝牙接受到了数据通过tx发送给fpga的(fpga只写了rx)
其中细节2
其中细节3
红外线寻迹模块需要低速 这时候如果速度过快需要调整pwm
ENA 与ENB为两马达的使能,需要调速的时候把这两个使能的跳帽去掉,然后在第一个入口接入一个pwm信号即可