eda verilog 24h 制数字钟,显示时,分,秒,并可手动调整时和分(简单实用消抖)

  • 基本要求:基于DE2-115开发板在Quartus13.1平台上用verilog设计一个24h制数字钟,要求能显示时,分,秒,并可手动调整时和分。

  • 实验分析:利用两个60进制,一个24进制模块,用1Hz分频模块给秒模块自动计时,以秒模块进位信号为分模块时钟,以分模块进位信号为时模块时钟,用6个display数码管显示模块分别显示时,分,秒。

用与非门搭建一个二选一数据选择器,用一个拨动开关mode切换自动,手动状态(无消抖需加消抖模块,否则切换瞬间导致数码管跳变;虽然按键经消抖处理,但调整时间时需要长按按键保持0状态,较为不便,故选择拨动开关),手动调整时,以按键AH,AM为时钟调整时分

效果演示:

eda  verilog   数字钟 eda verilog 数字钟_哔哩哔哩_bilibili
 

原理图及代码:

 

 

fenpin1:板上50Mh时钟计数25000,000个时翻转一次为1hz。

qudou10ms:抖动就是短时间(10ms左右)内在0,1之间发生跳动,可以人为忽略,只输出稳定时间大于10ms的0,1电平。

时间用50Mhz计数表示,每来一个上升沿计一次数,连续计数250000个(大约为10ms稳定的电平才认为其有效,否则不予输出)。

count60与count24类似,先考虑低位,再考虑进位。

display:开发板数码管低电平点亮对应段选,结合数码管内部电路图译码。

  • 设计总结
  • 题目手动调整时分功能可以在代码中另设按键直接调整进位信号,设置mode开关不太必要,但在处理问题过程中我学到了不少,即用verilog控制FPGA此类器件直接操作门阵列不同于C语言,它更像是组合门电路,而C语言是单纯逻辑操作。由此便很容易想到用门电路实现数据选择器,若放在C语言中便只是if else,用标志位选择。。消抖处理时经大量查找资料发现大部分采用延时判断,代码复杂,不适用,经过优化改进, 此消抖模块简单使用,可以说这是个不小的收获。

  初次发文总结学习心得,感觉不错,一起进步成长啊!

  • 16
    点赞
  • 181
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
以下是一个基于 FPGAVerilog HDL 数字时钟设计,将以数字形式显示: ``` module clock_display( input clk, input rst, output reg [3:0] hour_ones, output reg [1:0] hour_tens, output reg [3:0] minute_ones, output reg [1:0] minute_tens, output reg [3:0] second_ones, output reg [1:0] second_tens ); reg [25:0] counter; reg [3:0] hours; reg [5:0] minutes; reg [5:0] seconds; always @ (posedge clk) begin if (rst) begin counter <= 0; hours <= 0; minutes <= 0; seconds <= 0; end else begin counter <= counter + 1; if (counter == 50000000) begin counter <= 0; seconds <= seconds + 1; if (seconds == 60) begin seconds <= 0; minutes <= minutes + 1; if (minutes == 60) begin minutes <= 0; hours <= hours + 1; if (hours == 24) begin hours <= 0; end end end end end end assign second_ones = seconds % 10; assign second_tens = seconds / 10; assign minute_ones = minutes % 10; assign minute_tens = minutes / 10; assign hour_ones = hours % 10; assign hour_tens = hours / 10; endmodule ``` 该代码使用一个时钟输入和一个复位输入,以及 6 个输出,包括两个 2 位数字来表示小,两个 2 位数字来表示钟,以及两个 2 位数字来表示。每当时钟上升沿出现,一个计数器递增,当计数器达到 50,000,000 数递增。如果当前数达到 60,则重置数,并将钟数递增。如果钟数达到 60,则重置钟数,并将小数递增。如果小数达到 24,则重置小数。 时钟数字显示是通过取模和除法操作来计算的。将数模 10 取余数得到数的个位数,将数除以 10 得到数的十位数。类似地,和小也是这样计算的。最后,将每个数字配给其对应的输出端口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值