基于FPGA的新冠病毒阳性清零计时器Verilog代码Quartus 实验箱

名称:基于FPGA的新冠病毒阳性清零计时器Verilog代码Quartus  实验箱(文末获取)

软件:Quartus

语言:Verilog

代码功能:

新冠病毒阳性清零计时器

要求

(1)按下按键S1,则红灯亮,并且七段数码管显示14,然后每秒倒计时减1直至清零。

(2)若倒计时中途再次按下按键S1,则数码管立刻再次显示14,并每秒倒计时减1直至清零。清零后红灯熄灭,绿灯闪烁(频率为4hz)

(3)外部输入脉冲信号频率为50mhz;

(4)扩展不限,例如点阵显示“十四天无新增”,等自由发挥。

本代码已在实验箱验证,实验箱如下,其他开发板可以修改管脚适配:

QQ图片20240515200601.png

1. 工程文件

2. 程序文件

3. 程序编译

4. 管脚分配

5. RTL图

6. Testbench

7. 仿真图

整体仿真图

分频模块

控制模块

显示模块

部分代码展示:

//控制模块
module control(
input clk_1KHz,//时钟1KHz
input clk_4Hz,//4Hz(绿灯闪烁频率)
input clk_1Hz, //1Hz
input s1,//按键
output reg led_red,//红灯
output reg led_green,//绿灯
output [7:0] led_water,//流水灯
output [3:0] data_one,//个位
output [3:0] data_ten//十位
);
reg s1_bu0;
reg s1_bu1;
always@(posedge clk_1KHz)
begin
s1_bu0<=s1;
s1_bu1<=s1_bu0;
end
wire s1_p;//按键上升沿
assign s1_p=s1_bu0 & !s1_bu1;//按键上升沿
reg [3:0] cnt_one=4'd0;//个位
reg [3:0] cnt_ten=4'd0;//十位
reg [2:0] state=3'd0;
parameter s_idle=3'd0;
parameter s_start=3'd1;
parameter s_downcnt=3'd2;
parameter s_end=3'd3;
always@(posedge clk_1KHz)
begin
case(state)
s_idle:
if(s1_p)//S1按键
state<=s_start;//开始
else
state<=s_idle;
s_start:
state<=s_downcnt;//倒计时
s_downcnt:
if(s1_p)//S1按键
state<=s_start;//开始
else if(cnt_ten==4'd0 && cnt_one==4'd0)//计数清零
state<=s_end;//结束
s_end:
if(s1_p)//S1按键
state<=s_start;//开始
default:state<=s_idle;
endcase
end
//红灯
always@(posedge clk_1KHz)
begin
if(state==s_downcnt)//倒计时状态
led_red<=1;//红灯亮
else
led_red<=0;//红灯灭
end
//绿灯
always@(posedge clk_1KHz)
begin
if(state==s_end)//倒计时结束
led_green<=clk_4Hz;//绿灯闪烁
else
led_green<=0;//绿灯灭
end
//倒计时
always@(posedge clk_1KHz)
begin
if(state==s_start)//倒计时开始--14
begin
cnt_ten<=4'd1;
cnt_one<=4'd4;
end
else if(state==s_downcnt)begin//倒计时
if(clk_1Hz)//秒脉冲
if(cnt_ten==4'd0 && cnt_one==4'd0)
begin
cnt_ten<=4'd0;
cnt_one<=4'd0;
end
else if(cnt_one==4'd0)
begin
cnt_ten<=cnt_ten-4'd1;//十位倒计时
cnt_one<=4'd9;
end
else
cnt_one<=cnt_one-4'd1;//个位倒计时
end
end
assign data_one=cnt_one;//个位
assign data_ten=cnt_ten;//十位
//倒计时结束流水灯显示led_water
reg [7:0] shift_led=8'b0000_0001;
always@(posedge clk_4Hz)
begin
if(state==s_idle)//开始
shift_led<=8'b0000_0001;
else if(state==s_end)//倒计时结束
shift_led<={shift_led[6:0],shift_led[7]};//循环移位
end
assign led_water=shift_led;
endmodule
源代码

 扫描文章末尾的公众号二维码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值