可编程逻辑器件开发应用数字电子钟Word格式文档下载.docx
- 文档编号:21377104
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:16
- 大小:24.13KB
可编程逻辑器件开发应用数字电子钟Word格式文档下载.docx
《可编程逻辑器件开发应用数字电子钟Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《可编程逻辑器件开发应用数字电子钟Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
d12000000)
begin
count_n=24'
h0;
sec_narmal=~sec_narmal;
end
end
begin
count_50Hz=count_50Hz+1;
if(count_50Hz==18'
d240000)
count_50Hz=18'
clk_50Hz=~clk_50Hz;
endmodule
校时模块:
keysel:
校时状态/正常计时状态选择键输入
key_s:
校秒信号选择键输入
key_m:
校分信号选择键输入
key_h:
校时信号选择输入
sec_narmal:
进入校时状态,通过按三个键分别对时、分、秒进行校对。
按键每按一次、加1.
modulemodify(clk_50Hz,keysel,key_s,key_m,key_h,min2);
inputclk_50Hz;
inputkeysel;
inputkey_s,key_m,key_h;
output[23:
0]min2;
regkey1,key2,key3;
0]min_2;
always@(negedgeclk_50Hz)
if(!
keysel)
begin
key1=key_s;
key2=key_m;
key3=key_h;
end
always@(negedgekey1)
min_2[3:
0]=min_2[3:
0]+1;
/秒的校时/
if(min_2[3:
0]==4'
ha)
min_2[3:
0]=4'
/秒的个位0-9/
min_2[7:
4]=min2[7:
4]+1;
/秒的十位0-6/
if(min_2[7:
4]==4'
h6)min_2[7:
4]=4'
always@(negedgekey2)
min_2[11:
8]=min_2[11:
8]+1;
if(min_2[11:
8]==4'
min_2[11:
8]=4'
/分的个位0-9/
min_2[15:
12]=min_2[15:
12]+1;
;
/分的十位0-6/
if(min_2[15:
12]==4'
h6)min_2[15:
12]=4'
always@(negedgekey3)
min_2[19:
16]=min_2[19:
16]+1;
if(min_2[19:
16]==4'
min_2[19:
16]=4'
min_2[23:
20]=min_2[23:
20]+1;
if(min_2[23:
16]==8'
h24)min_2[23:
16]=8'
assignmin2=min_2;
计时处理模块:
sec:
计时信号输入
keyclr:
计时清零键
keyen:
计时开始键
min:
计时结果输出
当按下keyen键时、开始正常走时、
modulecounttime(sec,keysel,keyclr,keyen,min1,min_1);
inputsec;
inputkeyclr,keyen,keysel;
input[23:
0]min1;
0]min_1;
0]min,min_1;
always
keysel)min_1=min1;
elsemin_1=min;
always@(posedgesec)
if(!
keysel)min=min1;
else
keyclr)min=24'
else
keyen)
min=min+1;
if(min[3:
min[3:
min[7:
4]=min[7:
if(min[7:
h6)
begin
min[7:
min[11:
8]=min[11:
if(min[11:
begin
min[11:
min[15:
12]=min[15:
if(min[15:
begin
min[15:
min[19:
16]=min[19:
if(min[19:
begin
min[19:
min[23:
20]=min[23:
end
if(min[23:
h24)min[23:
16]=0;
end
end
end
endmodule
报时模块:
基本时钟信号输入
buzzout:
声响输出
modulemusic(clk,min,buzzout);
inputclk;
0]min;
outputbuzzout;
reg[3:
0]high,med,low;
regbuzzout_reg;
reg[24:
0]count1,count2;
reg[20:
0]count_end;
reg[7:
0]counter;
regclk_4Hz;
always@(posedgeclk)
begin
if(count1<
22'
d3000000)
count1=count1+1;
count1=0;
clk_4Hz=~clk_4Hz;
count2=count2+1;
if((min[15:
0]>
=16'
h5945)&
&
(min[15:
0]<
h5959))
if((count2==count_end)&
(min[23:
h11))
buzzout_reg=!
buzzout_reg;
count2=25'
elseif(min[23:
16]!
=8'
h11)
(count2[10]&
count2[18]&
count2[23]);
end
always@(posedgeclk_4Hz)
case({high,med,low})
9'
b000000001:
count_end=16'
hbb9a;
9'
b000000010:
ha72f;
b000000011:
h94f2;
b000000100:
h8e78;
b000000101:
h7d63;
b000000110:
h6fb5;
b000000111:
h637f;
b000001000:
h5dfb;
b000010000:
h53bb;
b000011000:
h4a95;
b000100000:
h4651;
b000101000:
h3eb1;
b000110000:
h37da;
b000111000:
h31bf;
b001000000:
h2ef2;
b010000000:
h29d4;
b011000000:
h2543;
b100000000:
h232f;
b101000000:
h1f58;
b110000000:
h1bed;
b111000000:
h18df;
default:
hffff;
endcase
if(counter==47)
counter=0;
counter=counter+1;
case(counter)
0:
{high,med,low}=9'
b000000011;
1:
2:
3:
4:
b000000101;
5:
6:
7:
b000000110;
8:
b000001000;
9:
10:
11:
b000010000;
12:
13:
14:
15:
16:
b000101000;
17:
18:
19:
b001000000;
20:
b000110000;
21:
22:
b000011000;
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
b000000111;
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
endcase
assignbuzzout=buzzout_reg;
显示模块:
sled_reg:
数码管段码输出
sl_reg:
数码管位码输出
seg_reg:
单个数码管输出
moduledisplay(keysel,clk_24MHz,sec,min,sled_reg,sl_reg,seg_reg);
inputsec,keysel;
0]min;
output[7:
0]sled_reg,seg_reg;
output[3:
0]sl_reg;
reg[15:
0]count;
0]ledbuf;
count=count+1;
always@(count[11:
10])
case(count[11:
2'
h0:
ledbuf=min[3:
0];
h1:
ledbuf=min[7:
4];
h2:
ledbuf=min[11:
8];
h3:
ledbuf=min[15:
12];
endcase
sl_reg=4'
b0111;
b1011;
b1101;
b1110;
always@(ledbuf)
case(ledbuf)
4'
sled_reg=8'
hc0;
hf9;
ha4;
hb0;
h4:
h99;
h5:
h92;
h6:
h82;
h7:
hf8;
h8:
h80;
h9:
h90;
ha:
h88;
hb:
h83;
hc:
hc6;
hd:
ha1;
he:
h86;
hf:
h8e;
if((count[11:
10]==2'
b10)&
sec)sled_reg=sled_reg&
8'
h7f;
always@(min[23:
16])
case(min[23:
8'
seg_reg=8'
h3f;
h06;
h5b;
h4f;
h66;
h6d;
h7d;
h07;
h6f;
h10:
h77;
h11:
h7c;
h12:
hbf;
h13:
h14:
hdb;
h15:
hcf;
h16:
he6;
h17:
hed;
h18:
hfd;
h19:
h87;
h20:
hff;
h21:
hef;
h22:
hf7;
h23:
hfc;
顶层模块:
moduletime_count(clk_24MHz,keysel,key_s,key_m,key_h,keyclr,keyen,sled_reg,sl_reg,seg_reg,buzzout);
wiresec,clk_50Hz;
wire[23:
0]min,min2;
divclkQ1(clk_24MHz,sec,clk_50Hz);
modifyQ2(clk_50Hz,keysel,key_s,key_m,key_h,min2);
counttimeQ3(sec,keysel,keyclr,keyen,min2,min);
displayQ4(keysel,clk_24MHz,sec,min,sled_reg,sl_reg,seg_reg);
musicQ5(sec,clk_24MHz,min,buzzout);
3、程序测试
(一)调试方法
(1)、双击QuartusⅡ软件快捷图标进入QuartusⅡ集成开发环境,新建工程项目文件clock.qpf,并在该项目下分别新建Verilog源文件clock.v、divclk.v、modify.v、countetime.v、music.v和display.v这6个文件,输入上面的程序代码并保存。
(2)、为该工程项目选择一个目标器件,并对相应的引脚进行锁定,在些所选择的器件应该是Altera公司的EPM1270T144C5N芯片,引脚锁定方法如表所示:
引脚号
引脚名
118
Seld0
124
Seg0
117
Seld1
123
Seg1
114
Seld2
121
Seg2
113
Seld3
120
Seg3
112
Seld4
119
Seg4
111
Seld5
125
Seg5
110
Seld6
127
Seg6
109
Seld7
122
Seg7
108
Sl0
61
Keyclr
107
Sl1
71
Keyen
106
Sl2
18
Clk
105
Sl3
(3)、对该工程文件进行编译处理,若在编译过程中发现错误,则需找出并更正错误,直至成功为止。
将CCITCPLD/FPGAJTAG下载电缆的两端分别接到PC机和CCITCPLD/FPGA实验仪上,在打开电源,执行下载命令把程序下载到CCIT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 可编程 逻辑 器件 开发 应用 数字 电子钟