计时控制
在之前的实验中我们掌握了如何进行时钟分频、如何进行数码管显示与按键消抖的处理,那么在本节实验之中,我们将会实现一个篮球赛场上常见的24秒计时器。
====硬件说明====
在之前的实验中我们为读者详细介绍过小脚丫MXO2板卡上的按键、数码管、LED等硬件外设,在此不再赘述。本节将实现由数码管作为显示模块,按键作为控制信号的输入(包含复位信号和暂停信号),Altera MAX10作为控制核心的篮球读秒系统,实现框图如下:
====Verilog代码====
//********************************************************************
//>>>>>>>>>>>>>>>>>>>>>>>>>COPYRIGHTNOTICE<<<<<<<<<<<<<<<<<<<<<<<<<
//********************************************************************
//Filename:debounce.v
//Modulename:debounce
//Author:STEP
//Description:
//
//--------------------------------------------------------------------
//CodeRevisionHistory:
//--------------------------------------------------------------------
//Version:|Mod.Date:|ChangesMade:
//V1.0|2017/03/02|Initialver
//--------------------------------------------------------------------
//ModuleFunction:计时器
modulesegment_counter(
clk ,
rst ,
hold ,
seg_led_1 ,
seg_led_2 ,);
input clk,rst;
input hold;
outputreg [8:0] seg_led_1,seg_led_2;
reg clk_divided;
reg hold_flag;
reg back_to_zero_flag = 0;
reg [6:0]seg [9:0];
reg [23:0] cnt;
reg [3:0] cnt_ge;
reg [3:0] cnt_shi;
parameter PERIOD=6000000; //1秒
initial
begin
seg[0]=7'h3f; //0
seg[1]=7'h06; //1
seg[2]=7'h5b; //2
seg[3]=7'h4f; //3
seg[4]=7'h66; //4
seg[5]=7'h6d; //5
seg[6]=7'h7d; //6
seg[7]=7'h07; //7
seg[8]=7'h7f; //8
seg[9]=7'h6f; //9/*若需要显示A-F,解除此段注释即可
seg[10]=7'hf7; //A
seg[11]=7'h7c; //b
seg[12]=7'h39;//C
seg[13]=7'h5e;//d
seg[14]=7'h79;//E
seg[15]=7'h71;//F*/
end
always@(posedgeclk)begin //用于分出一个1Hz的频率
if(!rst==1)begin
cnt<=0;
clk_divided<=0;end
elsebegin
if(cnt 设置好复位键可消抖的按键,编译完成后下载,通过按键就可以翻转LED。你也可以定义多个按键控制多个LED,还可以比较不加按键消抖情况下实际的效果对比如何。 本实验主要介绍了计时器的实现方式,并且包含了复位与暂停功能,读者可自行修改程序内部的时钟参数来调节计时时间。下一节将介绍PWM调制技术的应用呼吸灯。====引脚分配====
信号 引脚 clk J5 rst J9 hold K14 segled1[0] E1 segled1[1] D2 segled1[2] K2 segled1[3] J2 segled1[4] G2 segled1[5] F5 segled1[6] G5 segled1[7] L1 segled1[8] E2 segled2[0] A3 segled2[1] A2 segled2[2] P2 segled2[3] P1 segled2[4] N1 segled2[5] C1 segled2[6] C2 segled2[7] R2 segled2[8] B1 ====小结====