1、 大连理工大学本科实验报告 题目:数字钟 课程名称: 数字电路课程设计 学院(系): 电子信息与电气工程学部 专 业: 电气工程及其自动化 班 级: 学生姓名: 学 号: 完成日期: 成 绩: 2017 年 1 月 7 日 题目:
2、数字钟 1 设计要求 1、设计一个数字钟,能够显示当前时间,分别用6个数码管显示小时、分钟、秒钟的时间,秒针的计数频率为1Hz,可由系统脉冲分频得到。 2、在整点进行提示,可通过LED闪烁实现,闪烁频率及花型可自己设计。 3、能够调整小时和分钟的时间,调整的形式为通过按键进行累加。 4、具有闹钟功能,闹钟时间可以任意设定(设定的形式同样为通过按键累加),并且在设定的时间能够进行提示,提示同样可以由LED闪烁实现。 2 设计分析及系统方案设计 2.1 系统状态转换 因为数字钟成正常显示时间、闹钟、校时、秒表四个状态,所以可以选用两个开关来对其状态进行控制,当开关分别为00,0
3、1,10,11四种状态时,对应显示时间、修改时间、闹钟、秒表四种状态。 显示时间 修改时间,使用两个开关分别对位和数字更改 闹钟,使用两个开关分别对位和数字进行更改 秒钟,使用一个开关控制秒钟的开始和关闭 四个状态 00 01 10 11 2.2 时钟信号的建立 该多功能数字钟系统需要两个时钟信号,分别为1Hz的信号为数字钟提供秒信号以及200Hz的检查信号。本设计选用50MHz信号,分别将其通过模25000000计数器和模125000计数器从而得到1Hz及200Hz信号。 2.3 功能分析及其设计 2.3.1时间显示功能 当两个开关都处于低电平状态时,正常显示
4、 2.3.2 修改时间 当sw1处于低电平状态,sw0处于高电平状态,进入当前时间修改功能。通过按键key0分别选择修改时、分或秒,通过按键key1对选择修改的时间进行+1操作。 2.3.3 闹钟 当sw1出于高电平状态,sw0出于低电平状态,进入闹铃功能。通过按键key0分别选择改变时、分或秒,通过按键key2对选择改变的时间进行+1操作,当数字钟到当前时间,LEDG0发光。 2.3.4 秒表 当sw1及sw0都处于高电平状态,进入秒表功能。通过按键key0进行秒表计时的开始及暂停,通过按键key3对秒表进行清零。 3系统以及模块硬件电路设计 3.1 硬件原理图
5、 图3.1 系统示意图 图3.2 按键电路 图3.3 状态选择按键 图3.4 闹钟使用的led 3.2 管脚定义 程序代码 引 脚 功能作用 clk PIN_N2 提供50MHz的时钟信号 s1 PIN_N25 选择功能状态 s2 PIN_G26 选择功能状态 k1 PIN_G26 切换改变时间功能的时、分、秒;切换闹钟功能设置闹钟时间的时、分、秒;秒表功能的开始与暂停 k2 PIN_N23 改变时间功能的+1 k3 PIN_P23 闹钟功能设置闹钟时间的+1 k4 PIN_W26 秒表功能的清零
6、LED PIN_AE22 闹钟时间到来时指示 dclkh1[0] PIN_N9 连接HEX7, 显示时高位 dclkh1[1] PIN_P9 dclkh1[2] PIN_L7 dclkh1[3] PIN_L6 dclkh1[4] PIN_L9 dclkh1[5] PIN_L2 dclkh1[6] PIN_L3 dclkh2[0] PIN_M4 连接HEX6, 显示时低位 dclkh2[1] PIN_M5 dclkh2[2] PIN_M3 dclkh2[3] PIN_M2 dclkh2[4] PIN_P3 dclkh2[5] P
7、IN_P4 dclkh2[6] PIN_R2 dclkm1[0] PIN_R3 连接HEX5, 显示分高位 dclkm1[1] PIN_R4 dclkm1[2] PIN_R5 dclkm1[3] PIN_T9 dclkm1[4] PIN_P7 dclkm1[5] PIN_P6 dclkm1[6] PIN_T2 dclkm2[0] PIN_T3 连接HEX4, 显示分低位 dclkm2[1] PIN_R6 dclkm2[2] PIN_R7 dclkm2[3] PIN_T4 dclkm2[4] PIN_U2 dclkm2[5] P
8、IN_U1 dclkm2[6] PIN_U9 dclks1[0] PIN_W24 连接HEX3, 显示秒高位 dclks1[1] PIN_U22 dclks1[2] PIN_Y25 dclks1[3] PIN_Y26 dclks1[4] PIN_AA26 dclks1[5] PIN_AA25 dclks1[6] PIN_Y23 dclks2[0] PIN_Y24 连接HEX2, 显示秒低位 dclks2[1] PIN_AB25 dclks2[2] PIN_AB26 dclks2[3] PIN_AC26 dclks2[4] PI
9、N_AC25 dclks2[5] PIN_V22 dclks2[6] PIN_AB23 4 系统的Verilog设计 //顶层模块 module clock(clk,dclks1,dclks2,dclkm1,dclkm2,dclkh1,dclkh2,s,h,state,s1,s2,k1,k2,k3,k4,LED); input clk; //声明输入端口,连接50M晶振 input s1,s2; //声明输入端口,控制功能转换 input k1,k2,k3,k4; //声明输入端口,连接按键,对功能内部进行设置 output LED; //声明输出端口,连接LED
10、闹钟指示 output s,h;//声明输出端口,为各功能提供秒信号 output state;//声明输出端口,表示当前状态 output [6:0] dclks1,dclks2,dclkm1,dclkm2,dclkh1,dclkh2; //声明输出端口,连接数码管, reg [31:0] c,e; reg s,h; reg b; reg [1:0] state; wire [7:0] cs0,cm0,ch0,cs1,cm1,ch1,cs2,cm2,ch2,cs3,cm3,ch3;//分别连接四个状态的时分秒 reg [7:0] clks,clkm,clkh,clk
11、s1,clkm1,clkh1; wire [6:0] dclks1,dclks2,dclkm1,dclkm2,dclkh1,dclkh2; reg [1:0] k,a,d; reg LED; reg clkf; always@(negedge k1) //检测k1 begin if(state==2'b01) begin if(k==2'd2) k<=2'd0; else k<=k+1'd1; end else if(state==2'b10) begin if(a==2'd2) a<=2'd0
12、 else a<=a+1'd1; end else if(state==2'b11) begin b<=~b; end end always@(negedge k4)//检测k4 begin if(state==2'b11) begin if(d==1'b1) d<=1'b0; else d<=d+1'b1; end end always@(posedge clkf)//定义状态 begin case({s1,s2}) 2'b00:state=2
13、'd0; 2'b01:state=2'd1; 2'b10:state=2'd2; 2'b11:state=2'd3; default:state=2'd0; endcase end always@(posedge clk)//提供1Hz信号 begin if(c==32'd24999999) begin s<=~s; h<=~h; c<=1'd0; end else c<=c+1'd1; end always@(posedge clk)//提供200Hz信号 begin if(e==32'd125999) c
14、lkf<=~clkf; else e<=e+1'b1; end always@(posedge clkf)//检验时间是否到设定的闹钟 begin if(cs2==cs0&&cm2==cm0&&ch2==ch0) LED<=1'b1; else LED<=1'b0; end always@(posedge clkf) begin if(state==1'b0) begin clks<=cs0; clkm<=cm0; clkh<=ch0; end else if(state==2'd1) begin clks1<=cs1; c
15、lkm1<=cm1; clkh1<=ch1; clks<=cs0; clkm<=cm0; clkh<=ch0; end else if(state==2'd2) begin clks<=cs2; clkm<=cm2; clkh<=ch2; end else if(state==2'd3) begin clks<=cs3; clkm<=cm3; clkh<=ch3; end end de2time u0(.cs0(cs0),.cm0(cm0),.ch0(ch0),.s(s),.state(state),.clkf(clkf),.clks1(clks1),
16、clkm1(clkm1),.clkh1(clkh1)); de2timechange u1(.cs1(cs1),.cm1(cm1),.ch1(ch1),.state(state),.k2(k2),.k(k)); de2alarm u2(.cs2(cs2),.cm2(cm2),.ch2(ch2),.a(a),.k3(k3),.state(state)); de2timer u3(.cs3(cs3),.cm3(cm3),.ch3(ch3),.b(b),.h(h),.clkf(clkf),.d(d)); bdtransform u4(.clks(clks),.clkm(clkm),.clk
17、h(clkh),.dclks1(dclks1),.dclks2(dclks2),.dclkm1(dclkm1),.dclkm2(dclkm2),.dclkh1(dclkh1),.dclkh2(dclkh2),.clkf(clkf)); endmodule //正常时间显示模块 module de2time(clks1,clkm1,clkh1,s,state,cs0,cm0,ch0,clkf); input s; input clkf; input clks1,clkm1,clkh1; output cs0,cm0,ch0; input state; wire s;
18、 wire clkf; wire [7:0] clks1,clkm1,clkh1; wire [1:0] state; reg [7:0] cs0; reg [7:0] cm0; reg [7:0] ch0; always@(posedge s) begin if(state==2'd0||state==2'd2||state==2'd3) begin if(cs0==6'b111011) begin cs0<=0; cm0<=cm0+1'b1; if(cm0==6'b111011) be
19、gin cm0<=0; ch0<=ch0+1'b1; if(ch0==5'b10111) begin ch0<=0; end else ; end else ; end else begin cs0<=cs0+1'b1; end end else begin cs0<=clks1; cm0<=clkm1; ch0<=clkh1; end end
20、 endmodule //时间更改模块 module de2timechange(cs1,cm1,ch1,state,k,k2); input state; input k; input k2; output cs1,cm1,ch1; wire [1:0] k; wire k2; wire [1:0] state; reg [7:0] cs1; reg [7:0] cm1; reg [7:0] ch1; always@(negedge k2) begin if(state==2'b01) begin if(k==
21、1'd0) begin if(cs1==6'b111011) cs1<=0; else cs1<=cs1+1'b1; end else if(k==1'd1) begin if(cm1==6'b111011) cm1<=0; else cm1<=cm1+1'b1; end else if(k==2'd2) begin if(ch1==5'b10111) ch1<=0; else ch1<=ch1+1'b1; end end
22、end endmodule //闹钟功能模块 module de2alarm(cs2,cm2,ch2,state,a,k3); input a; input k3; input [1:0] state; output [7:0] cs2,cm2,ch2; wire [1:0] a; wire k3; wire [1:0] state; reg [7:0] cs2,cm2,ch2; always@(negedge k3) begin if(state==2'b10) begin if(a==1'd0) begin
23、 if(cs2==6'b111011) cs2<=0; else cs2<=cs2+1'b1; end else if(a==1'd1) begin if(cm2==6'b111011) cm2<=0; else cm2<=cm2+1'b1; end else if(a==2'd2) begin if(ch2==5'b10111) ch2<=0; else ch2<=ch2+1'b1; end end end endmod
24、ule //秒表功能模块 module de2timer(cs3,cm3,ch3,b,h,clkf,d); input b; input h; input d; input clkf; output [7:0] cs3,cm3,ch3; wire b; wire s; wire d; wire clkf; reg [7:0] cs3,cm3,ch3; always@(posedge h) begin if(d==1'b0) begin if(b==1'b1) begin if(cs3==6'b111011)
25、 begin cs3<=0; cm3<=cm3+1'b1; if(cm3==6'b111011) begin cm3<=0; ch3<=ch3+1'b1; if(ch3==5'b10111) begin ch3<=0; end else ; end else ; end else begin cs3<=cs3+1'b1; end end
26、end else cs3<=0; cm3<=0; ch3<=0; end endmodule //将2进制转换为数码管输出 module bdtransform(clks,clkm,clkh,dclks1,dclks2,dclkm1,dclkm2,dclkh1,dclkh2,clkf); input clks,clkm,clkh; input clkf; output dclks1,dclks2,dclkm1,dclkm2,dclkh1,dclkh2; wire [7:0] clks,clkm,clkh; wire clkf; r
27、eg [6:0] dclks1,dclks2,dclkm1,dclkm2,dclkh1,dclkh2; always@(clkf) begin case(clks) 6'd0:{dclks1,dclks2}=14'b00000010000001; 6'd1:{dclks1,dclks2}=14'b00000011001111; 6'd2:{dclks1,dclks2}=14'b00000010010010; 6'd3:{dclks1,dclks2}=14'b00000010000110; 6'd4:{dclks1,dclks2}=14'b00000011001100; 6
28、'd5:{dclks1,dclks2}=14'b00000010100100; 6'd6:{dclks1,dclks2}=14'b00000010100000; 6'd7:{dclks1,dclks2}=14'b00000010001111; 6'd8:{dclks1,dclks2}=14'b00000010000000; 6'd9:{dclks1,dclks2}=14'b00000010000100; 6'd10:{dclks1,dclks2}=14'b10011110000001; 6'd11:{dclks1,dclks2}=14'b10011111001111; 6'd12
29、{dclks1,dclks2}=14'b10011110010010; 6'd13:{dclks1,dclks2}=14'b10011110000110; 6'd14:{dclks1,dclks2}=14'b10011111001100; 6'd15:{dclks1,dclks2}=14'b10011110100100; 6'd16:{dclks1,dclks2}=14'b10011110100000; 6'd17:{dclks1,dclks2}=14'b10011110001111; 6'd18:{dclks1,dclks2}=14'b10011110000000; 6'd1
30、9:{dclks1,dclks2}=14'b10011110000100; 6'd20:{dclks1,dclks2}=14'b00100100000001; 6'd21:{dclks1,dclks2}=14'b00100101001111; 6'd22:{dclks1,dclks2}=14'b00100100010010; 6'd23:{dclks1,dclks2}=14'b00100100000110; 6'd24:{dclks1,dclks2}=14'b00100101001100; 6'd25:{dclks1,dclks2}=14'b00100100100100; 6'd
31、26:{dclks1,dclks2}=14'b00100100100000; 6'd27:{dclks1,dclks2}=14'b00100100001111; 6'd28:{dclks1,dclks2}=14'b00100100000000; 6'd29:{dclks1,dclks2}=14'b00100100000100; 6'd30:{dclks1,dclks2}=14'b00001100000001; 6'd31:{dclks1,dclks2}=14'b00001101001111; 6'd32:{dclks1,dclks2}=14'b00001100010010; 6'
32、d33:{dclks1,dclks2}=14'b00001100000110; 6'd34:{dclks1,dclks2}=14'b00001101001100; 6'd35:{dclks1,dclks2}=14'b00001100100100; 6'd36:{dclks1,dclks2}=14'b00001100100000; 6'd37:{dclks1,dclks2}=14'b00001100001111; 6'd38:{dclks1,dclks2}=14'b00001100000000; 6'd39:{dclks1,dclks2}=14'b00001100000100; 6
33、'd40:{dclks1,dclks2}=14'b10011000000001; 6'd41:{dclks1,dclks2}=14'b10011001001111; 6'd42:{dclks1,dclks2}=14'b10011000010010; 6'd43:{dclks1,dclks2}=14'b10011000000110; 6'd44:{dclks1,dclks2}=14'b10011001001100; 6'd45:{dclks1,dclks2}=14'b10011000100100; 6'd46:{dclks1,dclks2}=14'b10011000100000;
34、6'd47:{dclks1,dclks2}=14'b10011000001111; 6'd48:{dclks1,dclks2}=14'b10011000000000; 6'd49:{dclks1,dclks2}=14'b10011000000100; 6'd50:{dclks1,dclks2}=14'b01001000000001; 6'd51:{dclks1,dclks2}=14'b01001001001111; 6'd52:{dclks1,dclks2}=14'b01001000010010; 6'd53:{dclks1,dclks2}=14'b01001000000110;
35、 6'd54:{dclks1,dclks2}=14'b01001001001100; 6'd55:{dclks1,dclks2}=14'b01001000100100; 6'd56:{dclks1,dclks2}=14'b01001000100000; 6'd57:{dclks1,dclks2}=14'b01001000001111; 6'd58:{dclks1,dclks2}=14'b01001000000000; 6'd59:{dclks1,dclks2}=14'b01001000000100; endcase case(clkm) 6'd0:{dclkm1,dclkm
36、2}=14'b00000010000001; 6'd1:{dclkm1,dclkm2}=14'b00000011001111; 6'd2:{dclkm1,dclkm2}=14'b00000010010010; 6'd3:{dclkm1,dclkm2}=14'b00000010000110; 6'd4:{dclkm1,dclkm2}=14'b00000011001100; 6'd5:{dclkm1,dclkm2}=14'b00000010100100; 6'd6:{dclkm1,dclkm2}=14'b00000010100000; 6'd7:{dclkm1,dclkm2}=14'
37、b00000010001111; 6'd8:{dclkm1,dclkm2}=14'b00000010000000; 6'd9:{dclkm1,dclkm2}=14'b00000010000100; 6'd10:{dclkm1,dclkm2}=14'b10011110000001; 6'd11:{dclkm1,dclkm2}=14'b10011111001111; 6'd12:{dclkm1,dclkm2}=14'b10011110010010; 6'd13:{dclkm1,dclkm2}=14'b10011110000110; 6'd14:{dclkm1,dclkm2}=14'b
38、10011111001100; 6'd15:{dclkm1,dclkm2}=14'b10011110100100; 6'd16:{dclkm1,dclkm2}=14'b10011110100000; 6'd17:{dclkm1,dclkm2}=14'b10011110001111; 6'd18:{dclkm1,dclkm2}=14'b10011110000000; 6'd19:{dclkm1,dclkm2}=14'b10011110000100; 6'd20:{dclkm1,dclkm2}=14'b00100100000001; 6'd21:{dclkm1,dclkm2}=14'
39、b00100101001111; 6'd22:{dclkm1,dclkm2}=14'b00100100010010; 6'd23:{dclkm1,dclkm2}=14'b00100100000110; 6'd24:{dclkm1,dclkm2}=14'b00100101001100; 6'd25:{dclkm1,dclkm2}=14'b00100100100100; 6'd26:{dclkm1,dclkm2}=14'b00100100100000; 6'd27:{dclkm1,dclkm2}=14'b00100100001111; 6'd28:{dclkm1,dclkm2}=14
40、'b00100100000000; 6'd29:{dclkm1,dclkm2}=14'b00100100000100; 6'd30:{dclkm1,dclkm2}=14'b00001100000001; 6'd31:{dclkm1,dclkm2}=14'b00001101001111; 6'd32:{dclkm1,dclkm2}=14'b00001100010010; 6'd33:{dclkm1,dclkm2}=14'b00001100000110; 6'd34:{dclkm1,dclkm2}=14'b00001101001100; 6'd35:{dclkm1,dclkm2}=1
41、4'b00001100100100; 6'd36:{dclkm1,dclkm2}=14'b00001100100000; 6'd37:{dclkm1,dclkm2}=14'b00001100001111; 6'd38:{dclkm1,dclkm2}=14'b00001100000000; 6'd39:{dclkm1,dclkm2}=14'b00001100000100; 6'd40:{dclkm1,dclkm2}=14'b10011000000001; 6'd41:{dclkm1,dclkm2}=14'b10011001001111; 6'd42:{dclkm1,dclkm2}=
42、14'b10011000010010; 6'd43:{dclkm1,dclkm2}=14'b10011000000110; 6'd44:{dclkm1,dclkm2}=14'b10011001001100; 6'd45:{dclkm1,dclkm2}=14'b10011000100100; 6'd46:{dclkm1,dclkm2}=14'b10011000100000; 6'd47:{dclkm1,dclkm2}=14'b10011000001111; 6'd48:{dclkm1,dclkm2}=14'b10011000000000; 6'd49:{dclkm1,dclkm2}
43、14'b10011000000100; 6'd50:{dclkm1,dclkm2}=14'b01001000000001; 6'd51:{dclkm1,dclkm2}=14'b01001001001111; 6'd52:{dclkm1,dclkm2}=14'b01001000010010; 6'd53:{dclkm1,dclkm2}=14'b01001000000110; 6'd54:{dclkm1,dclkm2}=14'b01001001001100; 6'd55:{dclkm1,dclkm2}=14'b01001000100100; 6'd56:{dclkm1,dclkm2
44、}=14'b01001000100000; 6'd57:{dclkm1,dclkm2}=14'b01001000001111; 6'd58:{dclkm1,dclkm2}=14'b01001000000000; 6'd59:{dclkm1,dclkm2}=14'b01001000000100; endcase case(clkh) 6'd0:{dclkh1,dclkh2}=14'b00000010000001; 6'd1:{dclkh1,dclkh2}=14'b00000011001111; 6'd2:{dclkh1,dclkh2}=14'b00000010010010;
45、 6'd3:{dclkh1,dclkh2}=14'b00000010000110; 6'd4:{dclkh1,dclkh2}=14'b00000011001100; 6'd5:{dclkh1,dclkh2}=14'b00000010100100; 6'd6:{dclkh1,dclkh2}=14'b00000010100000; 6'd7:{dclkh1,dclkh2}=14'b00000010001111; 6'd8:{dclkh1,dclkh2}=14'b00000010000000; 6'd9:{dclkh1,dclkh2}=14'b00000010000100; 6'd10
46、{dclkh1,dclkh2}=14'b10011110000001; 6'd11:{dclkh1,dclkh2}=14'b10011111001111; 6'd12:{dclkh1,dclkh2}=14'b10011110010010; 6'd13:{dclkh1,dclkh2}=14'b10011110000110; 6'd14:{dclkh1,dclkh2}=14'b10011111001100; 6'd15:{dclkh1,dclkh2}=14'b10011110100100; 6'd16:{dclkh1,dclkh2}=14'b10011110100000; 6'd1
47、7:{dclkh1,dclkh2}=14'b10011110001111; 6'd18:{dclkh1,dclkh2}=14'b10011110000000; 6'd19:{dclkh1,dclkh2}=14'b10011110000100; 6'd20:{dclkh1,dclkh2}=14'b00100100000001; 6'd21:{dclkh1,dclkh2}=14'b00100101001111; 6'd22:{dclkh1,dclkh2}=14'b00100100010010; 6'd23:{dclkh1,dclkh2}=14'b00100100000110; end
48、case end endmodule 5 结论以及结果说明 正常显示时间秒钟模10 该多功能数字钟系统在QuartusⅡ软件上进行调试仿真,后在DE2开发板上进行验证,最终完成设计。设计出的闹钟具有正常时间显示,时间修改,闹钟及秒表功能。 但不足的是还可以加入液晶显示屏。 6 心得体会,及对本课程的建议 通过对本课程的学习,收获很多,主要是对QuartusⅡ的理解和使用,包括对于语言的运用,模块的设计,引脚的使用等 。并且希望实验课程最好设置在数电理论课程同时进行,会理解的更好。 1. 基于C8051F单片机直流电动机反馈控制系统的设计与研究
49、 2. 基于单片机的嵌入式Web服务器的研究 3. MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究 4. 基于模糊控制的电阻钎焊单片机温度控制系统的研制 5. 基于MCS-51系列单片机的通用控制模块的研究 6. 基于单片机实现的供暖系统最佳启停自校正(STR)调节器 7. 单片机控制的二级倒立摆系统的研究 8. 基于增强型51系列单片机的TCP/IP协议栈的实现 9. 基于单片机的蓄电池自动监测系统 10. 基于32位嵌入式单片机系统的图像采集与处理技术的研究 11. 基于单片机的作物营养诊断专家系统的
50、研究 12. 基于单片机的交流伺服电机运动控制系统研究与开发 13. 基于单片机的泵管内壁硬度测试仪的研制 14. 基于单片机的自动找平控制系统研究 15. 基于C8051F040单片机的嵌入式系统开发 16. 基于单片机的液压动力系统状态监测仪开发 17. 模糊Smith智能控制方法的研究及其单片机实现 18. 一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制 19. 基于双单片机冲床数控系统的研究 20. 基于CYGNAL单片机的在线间歇式浊度仪的研制 21. 基于单片机的喷油泵试验台控制器的研制 22. 基于单片机的软起动器的研究和






