前言:
眼前兄弟们对“单片机二进制bcd码转换实验报告”大体比较重视,咱们都想要了解一些“单片机二进制bcd码转换实验报告”的相关文章。那么小编同时在网上收集了一些对于“单片机二进制bcd码转换实验报告””的相关知识,希望姐妹们能喜欢,小伙伴们一起来学习一下吧!实验安排:二进制转BCD码设计验证
一, BCD码概念
bcd码表示利用4位的二进制数表示一位十进制数(0到9),bcd码有称为8421码。
二, 设计要求
将多位宽的二进制数转换为对应的bcd,假设我们利用8位的二进制数转化为对应位宽的bcd码。
三, 设计分析
假设需要转换的8位二进制数为1001_0111,转换为十进制数为:151,那么转换过来对应的bcd码位宽为:12位,转换过来的数值为:0001_0101_0001。
8位二进制表示十进制数的最大值为:255,那么我们转码形成的bcd码位宽最大为12位。
将要转换的二进制数除100,得到百位的数据,二进制数除10,得到百位的数据和十位数据,将得到数值对10进行取模,就可以将十位数提取出来;个位数可以直接对10进行取模,个数数据也可以提取出来。
利用对10取模将要转换的二进制数转化为对应的bcd码。
对十取模的表示方式为:%10;
我们如何描述对十取模转码方式:
我们需要转换的二进制数用bin[7:0],bcd码用bcd[11:0];
百位:assign bcd[11:8] = (bin/100)%10;
十位:assign bcd[7:4] = (bin/10)%10;
个位:assign bcd[11:8] = bin%10;
这种转码方式占用资源较大。
第二种转码方式:大四加三
解释:大四加三转码方式为;
首先需要将要转码的8位二进制数与12位的零组成一个新的20位数据,其中要转换的二进制数在低位,将新的20位数据通过左移来进行大四加三的判断,每一次左移一位,低位补零,通过判断高12位,将对应的高十位划分为三个部分,每一个部分为4位的,然后判断这三个部分与四的大小关系,如果大于4,那么对应的部分进行加1的动作,反之,保持不变;接着继续左移一位,重复上面的动作,注意:最后一次移位不进行大四加三的判断。
四加三方法通过移位,判断,加三进行转码的,和对十取模转码方式相比资源占用小,但是逻辑描述复杂,
01111011 10011101
首先需要有一个移位判断模块,其对应的端口信息为:输入的20位数据(高十二位位bcd码),低十二位为要转换的二进制数。其功能是先进行左移移位,接着判断高十二位每四位和四的大小关系。可以产生一个4位的输入端口和4位的输出端口模块,该模块主要进行大四加三的判断。
需要将shift_adjust在顶层模块中实例化7次,让后将第七次移位判断后的输出进行一次左移,得到信号的高十二位表示输出信号。
设计一个计时器,计时的精度为10ms,计时时长为1小时,59:59:99。通过一个独立按键控制开始计时和停止计时,继续计时。
设计架构:
ctrl_time模块设计分析:
计时使能信号time_en在没有对案件进行一次操作时为低电平,当对按键进行第一次操作时变化为高电平,进行第二次操纵时变化为低电平,第三次操作时为高电平。我们对按键进行一次操作计时使能信号取反。
ctrl_10ms模块设计分析:
其功能为产生一个10ms到达的标志信号,需要产生一个10ms计时器cnt,最大值为9,该计数器在计时使能信号有效时开始计数,当计时使能信号无效时,计数器保持不变。10ms标志信号拉高的条件为:计时使能信号为高,计数器计数到最大值。
ctrl_ms,ctrl_sec,ctrl_min这三个模块设计分析:
ms数据的变化由10ms的标志信号控制(0到99),产生1秒钟标志信号的条件为:毫秒数据等于99且10ms标志信号拉高时。
sec数据的变化由1s的标志信号控制(0到59),产生1min标志信号的条件为:秒数据等于59且1s标志信号拉高时。
min数据的变化由1min的标志信号控制(0到59);
标签: #单片机二进制bcd码转换实验报告