“原来的二进制数十几位,则左移时就要左移几位”

"二进制数调整BCD码的方法是将二进制码左移8次,每次移位后都检查低四位LSD+3是否大于7,如是则加3,否则不加,高4位MSD作同样处理"

一、为什么左移8次

原寄存器是存二进制数的,新寄存器是存十进制数的,当然要左移8次,把数据全部移进去。

但这里要注意两件事,第一,如果只安排一个字节作十进制寄存器,原数据要小于 64H(即100)。第二,由于新寄存器是十进制的,要随时调整。

二、检查 半字节+3 是否大于 7,是,则 +3

在 51 系列里有十进制调节指令(半字节大于 9,则加 6,应该不难理解),PIC 里没有,只好采取变通的方法。

检查 半字节+3 是否大于 7,也就是检查半字节是否大于 4。因为,如果大于 4(比如 5、6),下一步左移就要溢出了,所以加 3,等于左移后的加 6,起到十进制调节的作用。

那为什么要绕个圈子去检测 半字节+3 是否大于 7 呢?这样程序编起来会简练一些。

一个例子

假如有一个八位二进制数255,我把他转255的十进制数

0        1111 1111    原数

1        0000 0001    ;左移一次

2        0000 0011   ; 左移二次

3        0000 0111    ;左移三次,检查低四位+3>7?

3.1     0000 1010    ;大于7,加3进行调整

4        0001 0101    ;左移四次, 检查低四位+3>7?

4.1     0001 1000   ;大于7,加3进行调整

5        0011 0001    ;左移五次

6        0110 0011    ;左移六次,检查高四位+3>7?

6.1      1001 0011   ;大于7,加3进行调整

7           1 0010 0111     ;左移七次,检查低四位+3>7?

7.1       1 0010 1010      ;大于7,加3进行调整

8           10 0101 0101    ;左移八次(得到BCD码255)

附上Verilog代码:

//17位二进制数转BCD码(基本思想是逢十进1)

module BIN_BCD_4 (CLK, A, BW, BQ, BB, BS, BG);

input CLK;

input  [16:0]A;           //二进制输入数据

output [3:0]BW, BQ, BB, BS, BG;//BCD数据输出寄存器

reg    [3:0]BW, BQ, BB, BS, BG;

integer I;

reg  [19:0]TEMP;

reg  [16:0]C;

always @ (posedge CLK)

begin

C=A;

TEMP=0;

for (I=1; I<17; I=I+1)

begin

{TEMP, C}={TEMP[18:0], C, 1'b0};//左移一位

if (TEMP[3:0]>4'b0100)

begin

TEMP[3:0]=TEMP[3:0]+3; // >4则加3

end

if (TEMP[7:4]>4'b0100)

begin

TEMP[7:4]=TEMP[7:4]+3;

end

if (TEMP[11:8]>4'b0100)

begin

TEMP[11:8]=TEMP[11:8]+3;

end

if (TEMP[15:12]>4'b0100)

begin

TEMP[15:12]=TEMP[15:12]+3;

end

if (TEMP[19:16]>4'b0100)

begin

TEMP[19:16]=TEMP[19:16]+3;

end

{BW, BQ, BB,  BS, BG}={TEMP[18:0], A[0]};

end

end

endmodule

二进制 转换成十进制 BCD码(加3移位法)的更多相关文章

  1. 用Linux/Unix命令把十六进制转换成十进制(转)

    那天写个脚本,需要把十六进制的数字转成十进制的打出来,发现不知道要怎么弄,搜一下,原来还是很简单的,比用C语言什么的容易多了,就一些现成的命令就解决了. 先列两种简单的方法: 1) echo 自己就能 ...

  2. C语言十六进制转换成十进制:要从右到左用二进制的每个数去乘以16的相应次方

    #include <stdio.h> /* 十六进制转换成十进制:要从右到左用二进制的每个数去乘以16的相应次方: 在16进制中:a(A)=10 b(B)=11 c(C)=12 d(D)= ...

  3. 输入二进制数转换成十进制数(在cin>>和cin.get()上掉的坑)

    题目:输入一个二进制数转换成十进制. 题目分析:书上说,在一般情况下,c++的键盘输入可以识别是十进制数.八进制数和十六进制数,因此输入的二进制数据要作为字符处理.(其实我觉得数字也没问题吧). 正确 ...

  4. JS框架_(Qrcode.js)将你的内容转换成二维码格式

    百度云盘 传送门 密码:304e 输入网址点击按钮生成二维码,默认为我的博客首页 二维码格式演示 <!DOCTYPE html> <html lang="en"& ...

  5. Java中将0x开头的十六进制字符串转换成十进制整数

    1.Integer.toString(int i) 由于input(输入数据)是以0x开头的字符串,并不是整型.因而在用 String s = Integer.toString(input); 时用会 ...

  6. qrcode.js插件将你的内容转换成二维码格式

    ---qrcode.js插件将你的内容转换成二维码格式--- 我之前一直想知道二维码是怎么生成,所以就了解了一下, 最后还是不知道它的原理, 但是,我知道怎么生成. 现在就让我带你制作一个你喜爱的二维 ...

  7. URL转换成二维码

    转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6685804.html 二维码已经成为我们日常生活中的一个不可获取的产物,火车票上,景区门票,超市付款等等都 ...

  8. curl命令转换成php源码

    curl命令转换成php源码 获取状态: curl -X GET -H "Content-Type:application/json" -H "Authorization ...

  9. Gson字符串编码,字符串转换成图片保存,二进制转换成图片保存

    import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.File; import ...

随机推荐

  1. HBuild 连接苹果手机

    PC.苹果手机.数据线 1.在电脑端安装iTunes,安装完成之后提示重启. 2.用数据线连接苹果手机 PC 3.打开HBuild      菜单栏   -->  运行   -->  真机 ...

  2. js的event事件对象汇总

    JavaScript事件对象是浏览器默认传入的,但是对于浏览器的兼容问题,我们需要对事件对象进行兼容.但是jQuery已经帮我们解决了所有兼容性的问题,并且给我们添加了很多有用的方法.已经是比较历史的 ...

  3. append、appendTo、prepend、prependTo、before、insertBefore、after、insertAfter、replaceAll方法被调用后,原本在页面上显示的元素会消失

    详细描述: $ele.append..appendTo..prepend..prependTo..before..insertBefore..after..insertAfter..replaceAl ...

  4. learning makefile = and :=

  5. Python开发【项目】:学员管理系统(mysql)

    需求: 用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下 讲师视图: 管理班级,可创建班级,根据学员qq号把学员加入班级 可创建指定班级的上课纪录,注意一节上课纪录对应多条学员 ...

  6. Python基础03_pycharm

    pycharm的安装还是很简单的,一路next. 看起来Jet Brains 家的产品长相都差不多啊. 主要是create new project时,路径和解释器的选择,我电脑上有2.7和3.6 所以 ...

  7. Python基础02_基本数据类型_以及while

    基本数据类型: 字符串: 字符串可以相加, 表示连接; 可以将字符串乘以某个数,表示将此字符串复制多少次. 数: 数的加减乘除取余等. 需要注意的是两个乘号**和两个除号/ / python2中的除法 ...

  8. nginx——Nginx 防爬虫优化

    if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediap ...

  9. C#磁性窗体设计

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  10. 当你在web项目下新建一个class时package位置如果发生红色波浪错误,提示为”The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class files“

    问题是这样的如下图: 问题的原因: 1.配置tomcat7.0的时候自己设置了jre的版本1.8,而没有用myeclipse10自带的jre1.6,导致了出现了差错!