7段数码管动态扫描c语言,【 FPGA 】控制数码管动态扫描显示的小实验

该博客介绍了一个使用FPGA进行7段数码管动态扫描显示的实验,通过Verilog实现每秒递增计数器,并详细解释了计数模块和数码管控制模块的设计,包括时钟分频、位选和段选控制。实验在Xilinx Spartan 6 FPGA平台上完成,展示了如何将25MHz时钟分频并驱动4个数码管以16进制方式动态显示递增数值。
摘要由CSDN通过智能技术生成

实验的功能很简单,就是让4个数码管每隔1s递增显示,使用动态扫描的方式来实现。

从这个功能的描述可以看出,我们首先要写一个计数器模块,来让计数值每隔1s增加1,暂时实现的是16进制的东西,从0到f,之后10到1f等等。

我们的实验平台的系统时钟是25MHz,不是25MHz的实验平台,可以通过PLL来分频或倍频得到25MHz的时钟。

其次,写一个模块来控制数码管的位选和段选。

实验平台的数码管是共阴极的,也就是片选端低电平有效。

还需要注意的一个问题是:

片选控制信号的刷新速度必须足够快才能避免闪烁感,但也不能太快,以免影响数码管的开关切换,最佳的工作频率为1000Hz左右。如果FPGA的时钟为50MHz,那么至少跑5*10^4个周期,也即50000个周期刷新一次才行,我们知道2^16=65536,2^15=32768。

当然,这里的时钟是25Mhz,所以我们需要计数大概25000个周期才能刷新一次。

上面的最佳工作频率是1000hz的说法是否权威呢?我不知道,但是实验证明能用。

先给出计数模块的Verilog描述:

/

//工程硬件平台: Xilinx Spartan 6 FPGA

/

module counter(

input clk,//时钟信号,25MHz

input rst_n,//复位信号,低电平有效

output reg[15:0] display_num//数码管显示数据,[15:12]--数码管千位,[11:8]--数码管百位,[7:4]--数码管十位,[3:0]--数码管个位

);

//-------------------------------------------------

//1s定时产生逻辑

reg[24:0] timer_cnt;//1s计数器,0-24999999

//1s定时计数

always @(posedge clk or negedge rst_n)

if(!rst_n) timer_cnt <= 25'd0;

else if(timer_cnt < 25'd24_999_999) timer_cnt <= timer_cnt+1'b1;

else timer_cnt <= 25'd0;

wire timer_1s_flag = (timer_cnt == 25'

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值