二进制 转换成十进制 BCD码(加3移位法)
“原来的二进制数十几位,则左移时就要左移几位”
"二进制数调整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移位法)的更多相关文章
- 用Linux/Unix命令把十六进制转换成十进制(转)
那天写个脚本,需要把十六进制的数字转成十进制的打出来,发现不知道要怎么弄,搜一下,原来还是很简单的,比用C语言什么的容易多了,就一些现成的命令就解决了. 先列两种简单的方法: 1) echo 自己就能 ...
- C语言十六进制转换成十进制:要从右到左用二进制的每个数去乘以16的相应次方
#include <stdio.h> /* 十六进制转换成十进制:要从右到左用二进制的每个数去乘以16的相应次方: 在16进制中:a(A)=10 b(B)=11 c(C)=12 d(D)= ...
- 输入二进制数转换成十进制数(在cin>>和cin.get()上掉的坑)
题目:输入一个二进制数转换成十进制. 题目分析:书上说,在一般情况下,c++的键盘输入可以识别是十进制数.八进制数和十六进制数,因此输入的二进制数据要作为字符处理.(其实我觉得数字也没问题吧). 正确 ...
- JS框架_(Qrcode.js)将你的内容转换成二维码格式
百度云盘 传送门 密码:304e 输入网址点击按钮生成二维码,默认为我的博客首页 二维码格式演示 <!DOCTYPE html> <html lang="en"& ...
- Java中将0x开头的十六进制字符串转换成十进制整数
1.Integer.toString(int i) 由于input(输入数据)是以0x开头的字符串,并不是整型.因而在用 String s = Integer.toString(input); 时用会 ...
- qrcode.js插件将你的内容转换成二维码格式
---qrcode.js插件将你的内容转换成二维码格式--- 我之前一直想知道二维码是怎么生成,所以就了解了一下, 最后还是不知道它的原理, 但是,我知道怎么生成. 现在就让我带你制作一个你喜爱的二维 ...
- URL转换成二维码
转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6685804.html 二维码已经成为我们日常生活中的一个不可获取的产物,火车票上,景区门票,超市付款等等都 ...
- curl命令转换成php源码
curl命令转换成php源码 获取状态: curl -X GET -H "Content-Type:application/json" -H "Authorization ...
- Gson字符串编码,字符串转换成图片保存,二进制转换成图片保存
import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.File; import ...
随机推荐
- input type="tel" 输入框显示密文
为了在移动端实现密码输入框且调起的键盘为数字键盘,可以用-webkit-text-security:disc;text-security:disc;属性来实现. 语法: text-security: ...
- Nginx配置中的log_format用法梳理(设置详细的日志格式)
nginx服务器日志相关指令主要有两条:一条是log_format,用来设置日志格式:另外一条是access_log,用来指定日志文件的存放路径.格式和缓存大小,可以参加ngx_http_log_mo ...
- sharing-jdbc实现读写分离及分库分表
需求: 分库:按业务线business_id将不同业务线的订单存储在不同的数据库上: 分表:按user_id字段将不同用户的订单存储在不同的表上,为方便直接用非分片字段order_id查询,可使用基因 ...
- STL 小白学习(2) string
#include <iostream> using namespace std; #include <string> //初始化操作 void test01() { //初始化 ...
- SharePoint Framework Extensions GA Release
博客地址:http://blog.csdn.net/FoxDave SharePoint Framework Extensions GA版本已经发布了,介于最近个人工作的变动调整,还没时间好好了解一下 ...
- go web framework gin 路由表的设计
在上一篇go web framework gin 启动流程分析这一篇文章中,我分析了go gin启动的过程,在这一篇文章中我将继续上面的分析,讨论gin 中路由表是如何设计的? 首先查看engine. ...
- ui自动化:python+appium----环境搭建
前言: appium可以说是app最火的一个自动化框架,它的主要优势是支持android和ios,另外脚本支持java和python.以下为python+appium的安装教程... 环境准备... ...
- Shell 变量替换及测试
声明:$ 后面跟linux可执行命令 一.变量替换 语法 说明 ${变量名#匹配规则} 从变量的开头进行规则匹配,将符合最 ...
- Mondrian辅助组件----Schema WorkBench(架构平台简介)
Schema WorkBech 是Pentaho套件的另一个组件,是mondrian中schema文件生成工具.通过Schema WorkBench我们可以快速生成一个schema文件,不再需要手写. ...
- Python 进程池的同步方法和异步方法
import time from multiprocessing import Process,Pool def f1(n): time.sleep(0.5) # print(n) return n* ...