数字时钟课程设计报告Word文档格式.docx
《数字时钟课程设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《数字时钟课程设计报告Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
10
电阻(R11)
50Ω
1
电阻(R12-R25)
1K
14
电阻(R26-R33)
200Ω
8
独石电容(C1-C7)
104
6
电解电容(C7)
10uF/50V
按键(S1-S7)
弹式
4
三极管(Q1-Q8)
S9013
9
晶振
X0-105BHC
芯片
EPM7064AEL144
三、数字时钟的Verilog实现:
管脚的分配:
程序:
moduleclock(clk,key,k3,k4,dig,seg)//模块名clock
inputclk,k3,k4,;
//输入时钟
input[1:
0]key;
//输入按键
output[7:
0]dig;
//数码管选择输出引脚
0]seg;
//数码管段输出引脚
reg[7:
0]seg_r;
//定义数码管输出寄存器
0]dig_r;
//定义数码管选择输出寄存器
reg[3:
0]disp_dat;
//定义显示数据寄存器
reg[24:
0]count;
//定义计数寄存器
reg[23:
0]hour;
//定义现在时刻寄存器
regsec,keyen;
//定义标志位
reg[1:
0]dout1,dout2,dout3;
//寄存器
wire[1:
0]key_done;
//按键消抖输出
assigndig=dig_r;
//输出数码管选择
assignseg=seg_r;
//输出数码管译码结果
//秒信号产生部分
always@(posedgeclk)//定义clock上升沿触发
begin
count=count+1'
b1;
if(count==25'
d24000000)//0.5S到了吗?
begin
count=25'
d0;
//计数器清零
sec=~sec;
//置位秒标志
end
end
//按键消抖处理部分
assignkey_done=(dout1|dout2|dout3);
//按键消抖输出
always@(posedgecount[17])
dout1<
=key;
dout2<
=dout1;
dout3<
=dout2;
always@(negedgekey_done[0])
keyen=~keyen;
//将琴键开关转换为乒乓开关
//数码管动态扫描显示部分
always@(posedgeclk)//count[17:
15]大约1ms改变一次
case(count[17:
15])//选择扫描显示数据
3'
d0:
disp_dat=hour[3:
0];
//秒个位
d1:
disp_dat=hour[7:
4];
//秒十位
d2:
disp_dat=4'
ha;
//显示"
-"
d3:
disp_dat=hour[11:
8];
//分个位
d4:
disp_dat=hour[15:
12];
//分十位
d5:
d6:
disp_dat=hour[19:
16];
//时个位
d7:
disp_dat=hour[23:
20];
//时十位
endcase
15])//选择数码管显示位
dig_r=8'
b11111110;
//选择第一个数码管显示
b11111101;
//选择第二个数码管显示
b11111011;
//选择第三个数码管显示
b11110111;
//选择第四个数码管显示
b11101111;
//选择第五个数码管显示
b11011111;
//选择第六个数码管显示
b10111111;
//选择第七个数码管显示
b01111111;
//选择第八个数码管显示
endcase
always@(posedgeclk)
case(disp_dat)
4'
h0:
seg_r=8'
hc0;
//显示0
h1:
hf9;
//显示1
h2:
ha4;
//显示2
h3:
hb0;
//显示3
h4:
h99;
//显示4
h5:
h92;
//显示5
h6:
h82;
//显示6
h7:
hf8;
//显示7
h8:
h80;
//显示8
h9:
h90;
//显示9
ha:
hbf;
//显示-
default:
hff;
//不显示
if((count[17:
15]==3'
d2)&
sec)
seg_r=8'
//计时处理部分
always@(negedgesecornegedgekey_done[1])//计时处理
if(!
key_done[1])//是清零键吗?
hour=24'
h0;
//是,则清零
elseif(keyen)//是暂停吗
k3)
if(hour[23:
16]==8'
d35)
hour[19:
16]=0;
hour[23:
20]=0;
else
if(hour[19:
16]==9)
16]<
=0;
20]<
=hour[23:
20]+1;
else
=hour[19:
16]+1;
elseif(!
k4)
if(hour[11:
8]==9)
hour[11:
8]<
if(hour[15:
12]==5)
hour[15:
12]<
=hour[15:
12]+1;
8]=hour[11:
8]+1;
hour[3:
0]=hour[3:
0]+1'
//秒加1
if(hour[3:
0]==4'
ha)
begin
hour[3:
0]=4'
hour[7:
4]=hour[7:
4]+1'
//秒的十位加一
if(hour[7:
4]==4'
h6)
begin
hour[7:
4]=4'
hour[11:
8]=hour[11:
8]+1'
//分个位加一
if(hour[11:
8]==4'
begin
hour[11:
8]=4'
hour[15:
12]=hour[15:
12]+1'
//分十位加一
if(hour[15:
12]==4'
begin
hour[15:
12]=4'
hour[19:
16]=hour[19:
16]+1'
//时个位加一
if(hour[19:
16]==4'
begin
hour[19:
16]=4'
hour[23:
20]=hour[23:
20]+1'
//时十位加一
end
if(hour[23:
16]==8'
h24)
16]=8'
end
end
end
end
endmodule
三、课程设计总结
在完成了本次课程设计后感想与收获颇多,我了解的数字时钟的基本原理,并添加了一些简单的校时功能,在原有的程序基础上进行了一些修改,使程功能更加完善。
从本次课程设计中获得了很多,增强了动手实验能力,对quartus2这个工具软件也有了更深的了解。
总之,在本次设计中积累了经验,学习了新的知识。
成绩指导教师签名
指导教师评