实验二:功能可调综合计时器设计
作者:互联网
一、实验目的
(1)掌握QuartusII等实验工具的输入、综合、仿真、下载的使用方法
(2)掌握DE2开发版的器件功能特性和使用方法
(3)掌握Verilog HDL时序逻辑系统设计的主要方法和技术
(4)掌握并应用EDA设计的方法和流程
二、预习要求
(1)了解QuartusII等管教分配、下载的方法和流程
(2)了解开发板输入、输出显示资源的工作特性
(3)了解开发板设计、开发和测试的方法和流程
三、实验要求
设计一个可调的综合计时器。具体功能:
(1)显示小时、分、秒,提供置零功能。显示在七段管或LCD屏幕上,可以考虑24/12小时模式切换功能。
(2)能够对秒、分、小时进行分别修改,可以两位数整体修改或每位独立修改
(3)整点报时功能,整点可以显示一定形式的LED来表示。
(4)闹钟功能,设定特定时间,到时间以特定LED显示来显示闹钟。注意闹钟持续时间,也可以参考懒人闹钟模式。
四、实验代码
module test02 (KEY0,KEY1,KEY2,KEY3,sw,sw1,a,b,clk50,HEX6,HEX5,HEX4,HEX3,HEX2,HEX1,HEX0,LED0,LED1);//可调时钟
input KEY0;//复位键
input KEY1;//调小时
input KEY2;//调分
input KEY3;//调秒
input sw;//控制模式(闹钟/时钟)
input sw1;//控制模式(12/24)
input [7:0]a,b;//输入以调节闹钟的值
input clk50;//50MHZ
output[6:0] HEX6,HEX5,HEX4,HEX3,HEX2,HEX1,HEX0;//wire型七段管,分别显示AM/PM 时 分 秒
output reg LED0;//整点报时,整点时亮
output reg LED1;//闹钟时间到
reg[48:0] hex=48'b1000000100000010000001000000100000010000001000000;//00 00 00
integer i=0;
integer j=0;
integer k=0;
integer s=10;//闹钟延时10s关闭
integer t=30;//naozhong
wire clk1; //1s
reg[5:0] time0=0;//59
reg[5:0] time1=0;//59
reg[4:0] time2=0;//23
reg[5:0] alarm0=0;//59
reg[5:0] alarm1=0;//59
reg[4:0] alarm2=0;//23
reg [3:0]a0=0;
reg [3:0]a1=0;
reg [3:0]a2=0;
reg [3:0]a3=0;
reg [3:0]a4=0;
reg [3:0]a5=0;
reg [3:0]ap=0;
divclk1 A1(1,clk50,clk1);//调用1hz模块,1s
assign {HEX6,HEX5,HEX4,HEX3,HEX2,HEX1,HEX0}=hex;//显示
always@(posedge clk1)
begin
LED0=0;//不是整点,LED0不亮
if(s<10)
begin
// if(!KEY3)
// begin
// t=0;
// s=0;
// end
if(t>=10)
begin
s=s+1;
LED1=1;
end
else //t<10
begin
t=t+1;
LED1=0;
end
end
else LED1=0; //让闹钟延时10s关闭
if(!KEY1) //按键控制小时增加
begin
if(k<23)
begin
time2=time2+1;
k=k+1;
end
else
begin
time2=0;
k=0;
end
end
else if(!KEY2) //按键控制分钟增加
begin
if(j<59)
begin
time1=time1+1;
j=j+1;
end
else
begin
time1=0;
j=0;
end
end
/* else if(!KEY3) //秒清0
begin
time0=0;
i=0;
end
*/
else if(i<59) //平常计时时钟
begin//-----秒------
time0=time0+1;
i=i+1;
end
else
begin
time0=0;
i=0;
if(j<59)//----分------
begin
time1=time1+1;
j=j+1;
end
else
begin
time1=0;
j=0;
if(k<23)//----时------
begin
time2=time2+1;
k=k+1;
end
else
begin
time2=0;
k=0;
end
LED0=1;//整点时LED0亮
end
end
if(time0==alarm0&&time1==alarm1&&time2==alarm2)//闹钟时间到
begin
LED1=1;//LED1亮
s=0;
end
if(sw)
begin
//七段管上显示
if(!KEY0)//复位
begin
time0=0;
time1=0;
time2=0;
a0=4'b0000;
a1=4'b0000;
a2=4'b0000;
a3=4'b0000;
a4=4'b0000;
a5=4'b0000;
end
else begin
a0=time0%4'b1010;//显示-----秒--------
a1=time0/4'b1010;
a2=time1%4'b1010;//-------分-------
a3=time1/4'b1010;
a4=time2%4'b1010;//--------时---------
a5=time2/4'b1010;
ap=4'b0000;
end
if(sw1)//24-12
begin
if(time2>=5'b01100)
begin
a4=(time2-12)%10;
a5=(time2-12)/10;
ap=4'b1011;
end
else
ap=4'b1010;
end
hex[6:0]=get0(a0);
hex[13:7]=get0(a1);
hex[20:14]=get0(a2);
hex[27:21]=get0(a3);
hex[34:28]=get0(a4);
hex[41:35]=get0(a5);
hex[48:42]=get0(ap);
end
else//sw=0;设置闹钟
begin
if(a[7:4]<=2&&a[3:0]<=9&&b[7:4]<=5&&b[3:0]<=9)//
begin
if(a[7:4]==2&&a[3:0]>=4)//如果大于=24了
begin
alarm2=0;
alarm1=0;
alarm0=0;
end
else
begin
alarm2=a[7:4]*4'b1010+a[3:0];//设置小时
alarm1=b[7:4]*4'b1010+b[3:0];//设置分钟
alarm0=0;//使秒一直是00;
end
end
else //---不在24小时范围内----
begin
alarm2=0;
alarm1=0;
alarm0=0;
end
a0=alarm0%4'b1010;//显示-----秒--------
a1=alarm0/4'b1010;
a2=alarm1%4'b1010;//-------分-------
a3=alarm1/4'b1010;
a4=alarm2%4'b1010;//--------时---------
a5=alarm2/4'b1010;
hex[6:0]=get0(a0);
hex[13:7]=get0(a1);
hex[20:14]=get0(a2);
hex[27:21]=get0(a3);
hex[34:28]=get0(a4);
hex[41:35]=get0(a5);
end
end
function [6:0]get0;//七段管对应的7位
input[3:0] a0;
reg[6:0] b;
begin
case(a0)
4'b0000:b=7'b1000000;
4'b0001:b=7'b1111001;
4'b0010:b=7'b0100100;
4'b0011:b=7'b0110000;
4'b0100:b=7'b0011001;
4'b0101:b=7'b0010010;
4'b0110:b=7'b0000010;
4'b0111:b=7'b1111000;
4'b1000:b=7'b0000000;
4'b1001:b=7'b0010000;
4'b1010:b=7'b0001000;
4'b1011:b=7'b0001100;
default:b=7'b0111111;
endcase
get0=b;
end
endfunction
endmodule
五、测试
1)sw17置一 时钟模式,可以进行修改时间、整点闪灯等功能
① 时钟模式 显示当前时间 可调整为12/24小时值
② 通过按键可以改变时钟的时/分/秒
③KEY0可以将时间置零
(2)sw17置零,闹钟模式
①通过按键设置闹钟时间
②当时钟模式内的时间与闹钟设置时间相同时,LED灯亮
③懒人闹钟功能,当LED灯亮起时按下按键,等候十秒钟后再次提醒
六、反思与缺陷
数位的控制算法有缺陷,应当使每一位都不能超过9方可
标签:end,hex,可调,实验,闹钟,get0,计时器,reg,b1010 来源: https://blog.csdn.net/winter0409/article/details/111026108