PCB
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
报告
题 目: 数字电子钟的设计
学 院: 电子信息与电气工程学院
专 业: 电子信息工程
班 级: 1 4级电 信()班
姓 名: XXXXXX
2016 年 7月 2日
设计要求:
具有时,分,秒计数显示功能,以24小时循环计时;设置启动、停止开关
具有启动和停止计时操作的功能;显示格式为××-××-××,用8位数码管显示。
其他要求:
(1)具有清零,调节小时、分钟功能;
(2)具有整点报时功能,整点报时的同时LED灯花样显示。
(3)具有闹钟功能,可任意设置时间点。
实际意义:
数字电子钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。
数字电子钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。目前,数字钟的功能越来越强,并且有多种专门的大规模集成电路可供选择。
从有利于学习的角度考虑,这里主要介绍以中小规模集成电路设计数字钟的方法。
经过了数字电路设计这门课程的系统学习,特别经过了关于组合逻辑电路与时序逻辑电路部分的学习,我们已经具备了设计小规模集成电路的能力,借由本次设计的机会,充分将所学的知识运用到实际中去。
减法
加法
设计方案
关于薪酬设计方案通用技术作品设计方案停车场设计方案多媒体教室设计方案农贸市场设计方案
:
CLK
CLK
CLK
显示
计数
调时
分频
设计过程:
(1)建立工程文件,打开Quartus II 9.1(图1),单击
,打开图2,选择Design Files/Verilog HDL FILe,打开如图3所示的编程界面。
图1
在其中编写程序,程序如下:
分频模块:
module fenpin (clk,rst_n,en_1s,en_1ms); //产生1s,1ms的分频
input clk;
input rst_n;
output en_1s;
output en_1ms;
reg[31:0] jishu_1s;
reg[15:0] jishu_1ms;
parameter cnt_1s =49999999;
parameter cnt_1ms =49999;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
jishu_1s<=32'b0;
else if(jishu_1s
检测
工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训
法,当寄存器 key1 由 1 变为 0 时,key1_an 的值变为高,维持一个时钟周期
wire key1_an;
assign key1_an = reg1_key & ( ~reg0_key);
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
reg2_key <= 1'b1;
reg3_key <= 1'b1;
end
else
begin
reg2_key <= key2;
reg3_key <= reg2_key;
end
end
//脉冲边沿检测法,当寄存器 key2 由 1 变为 0 时,key2_an 的值变为高,维持一个时钟周期
wire key2_an;
assign key2_an = reg3_key & ( ~reg2_key);
reg[19:0] cnt_key1; //计数寄存器
always @ (posedge clk or negedge rst_n)
begin
if (!rst_n)
cnt_key1 <= 20'd0; //异步复位
else if(key1_an)
cnt_key1 <=20'd0; //led1_an=1,按键确认按下,cnt_key1从0开始计数
else
cnt_key1 <= cnt_key1 + 1'b1;
end
reg[19:0] cnt_key2; //计数寄存器
always @ (posedge clk or negedge rst_n)
begin
if (!rst_n)
cnt_key2 <= 20'd0;
else if(key2_an)
cnt_key2 <=20'd0;
else
cnt_key2 <= cnt_key2 + 1'b1;
end
//以下为消抖程序
reg reg_low;
reg reg1_low;
always @(posedge clk or negedge rst_n)
begin
if (!rst_n)
begin
reg_low <= 1'b1;
end
else if(cnt_key1 == 20'hfffff) //时钟50mhz的话大约计时是20ms
begin
reg_low <= key1; //led_an=1,按键确认按下,cnt_key从0开始计数,这时候还有消抖动,计数20ms后抖动滤除了此时再锁存一下key1的值