51单片机数码管秒表设计一个秒表,用两个数码管(任意相邻的两个)显示。

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

开发板或者模块是有 8 位数码管夲次设计需要使用1个数码管,即数码管0实现类似于秒表的功能,具体要求如下:

复位后数码管0显示数字0并持续1秒;然后显示数字1并持續2秒;然后显示数字2并持续3秒;以此类推,最后是显示数字9并持续10秒然后再次循环

上板效果图如下图所示。

我们要实现的功能概括起來就是控制8个数码管,其中数码管0亮其他数码管不亮。并让数码管0显示不同的数字

要控制8个数码管,就需要控制位选信号即FPGA要输出┅个8位的位选信号,设为seg_sel其中seg_sel[0]对应数码管0seg_sel[1]对应数码管1以此类推,seg_sel[7]对应数码管7

要显示不同的数字,就需要控制段选信号不需要用箌DP,一共有7根线即FPGA要输出一个7位的段选信号,设为seg_mentseg_ment[6]~segm_ment[0]分别对应数码管的abcdefg(注意对应顺序)。

我们还需要时钟信号和复位信号来进行工程控制

综上所述,我们这个工程需要4个信号时钟clk,复位rst_n输出的位选信号seg_sel和输出的段选信号seg_ment

seg_sel一直为8’hfe不变化。seg_ment隔一段时间后会变化而这个时间在不同时期还不相同。把时间信息补充上得到下面的波形示意图。

由波形图可知我们需要1个计数器用来计算时间,如2秒、3秒等另外,我们还需要一个计数器用来计算在第几个阶段中。所以总共需要2个计数器

本工程的工作时钟是50MHz,即周期为20ns计数器计數到2_000_000_000/20=100_000_000个,我们就能知道2秒时间到了以类类推,在第2次时数到150_000_000个,就知道了3秒时间到第9次时,数到500_000_000个就表示10秒时间到。另外由于該计数器是不停地计数,永远不停止的可以认为加1条件一直有效,可写成:assignadd_cnt0==1综上所述,结合变量法该计数器的代码如下

第二个计数器用于表示第几个,很自然可以看到每个阶段完成后,该计数器加1因此加1条件可为end_cnt0。该计数器一共要数10次所以代码为:

接下来设计seg_sel。该信号一直为8’hfe所以代码直接写成如下:

我们来思考输出信号seg_ment的变化。概括起来在第1次的时候输出值为7’h01;在第2次的时候输出值为7’h4f;以此类推,在第8次的时候输出值为7’h0f我们用信号cnt1来代替第几次,也就是:当cnt1==0的时候输出值为7’h01;在cnt1==1的时候输出值为7’h4f;以此类推,在cnt1==9的时候输出值为7’h04再进一步翻译成代码,就变成如下:

然后用组合逻辑把x的值确定下来。


我要回帖

更多关于 51单片机数码管秒表 的文章

 

随机推荐