名称:基于FPGA的新冠病毒阳性清零计时器Verilog代码Quartus 实验箱(文末获取)
软件:Quartus
语言:Verilog
代码功能:
新冠病毒阳性清零计时器
要求
(1)按下按键S1,则红灯亮,并且七段数码管显示14,然后每秒倒计时减1直至清零。
(2)若倒计时中途再次按下按键S1,则数码管立刻再次显示14,并每秒倒计时减1直至清零。清零后红灯熄灭,绿灯闪烁(频率为4hz)
(3)外部输入脉冲信号频率为50mhz;
(4)扩展不限,例如点阵显示“十四天无新增”,等自由发挥。
本代码已在实验箱验证,实验箱如下,其他开发板可以修改管脚适配:
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
源代码
扫描文章末尾的公众号二维码