本帖最后由 雾盈 于 2016-8-28 13:44 编辑
六位四则运算计算器(4)数码管消零模块
雾盈 2016-8-27
雾盈FPGA笔记汇总目录
一、写在之前
我之前已经发过一篇数码管文章,链接在上面。那一个数码管程序实现的功能是可以显示三位十进制数。
这一篇和上一篇不同的是,加入了数码管消零模块,并且去除了十六进制转十进制的部分。
我的计算器设计里将数码管部分分为两个小模块来写的:1)数码管消零模块。2)数码管显示模块。
本篇文章,将用两种写法来讲数码管消零。
二、功能
此数码管程序可以消去最高位之前无意义的零,直接显示数字的十六进制数值。
三、框图
 
四、思路及代码解释
第一步:为了消去没有数字数码管位上的零,首先要确定这一位数码管上到底有米有数字。
我们下面的这一段代码就是为了实现这一目的:
六位数码管可以显示一个24位的十六进制数,所以让每个数码管上的四位相或,(或,全为零时才为零)。然后,让一个六位寄存器去存放这六个相或的结果,下一步用。
第二步,确定最高位所在位,输出数码管显示开关,关掉最高位之前的数码管显示,即达到消零目的。
第三步,同样实现上一步的功能,只是写法不同了。
相或,取反。
举个例子:001234 消去前面两个零。
由第一步的程序可以得到:
Bcd_r[5]=0, Bcd_r[4]=0,
Bcd_r[3]= Bcd_r[2] = Bcd_r[1] = Bcd_r[0]=1 ,
这样相或后{ }内结果为{0,0,1,1,1,1},再取反是使开关为1 时有效,即bcd_off=6’b110000 ;
达到目的。
下一篇讲数码管显示。
源代码如下:
|