加三移位法-二进制数转换为BCD码

BCD译码的实现_移位加3算法 本案例节选明德扬广州FPGA培训班。 BCD译码是指将二进制数,转换成BCD格式。如当cnt_s值为10时,也就是8’b00001010,转换成个位值为4’b0000,十位值为4’b0001。这个转换过程就是BCD译码。 此处介绍二进制转BCD码的硬件实现,采用左移加3的算法,具体描述如下:(此处以8-bit 二进制码为例)   1、左移要转换的二进 阅读详情
AI摘要

本文介绍了一种高效的二进制转BCD码的方法——加三移位法。该方法通过左移和逢9进1的操作,能够轻松地将任意长度的二进制数转换成对应的BCD码,特别适用于8位51单片机中的应用。

      二进制转换为BCD码通常使用除法运算求个位、十位、百位等权位上的数,但由于除法取模占用资源太多,且当二进制数位数过多时,使用汇编语言在8位的51单片机中难以实现,所以常用加三移位法将任意位数的二进制数转换为BCD码。

      加三移位法的举例 (例子摘自http://www.360doc.com/content/11/0223/17/5169677_95465965.shtml):

 

 加三移位法的原理:

      1.四位二进制大于15则进位(1111B->10000B),四位BCD码大于9则进位(1001->10000),若使四位二进制数大于9时就进位,即1111B->10101,刚好就是15的BCD码,即四位二进制逢9则加6,就等于其BCD码了。

       2.那么5位二进制怎么转换呢?拿11110B (30D) 来举例,11110B由1111B左移一位即乘二得到,将15的BCD码10101也左移一位,得00101010,新低四位的值1010由旧低四位的值0101乘以二得来,高四位同理,由于新低四位1010大于9,所以进位,得00110000刚好是30.

      3.由上一步看出,只要通过左移及逢9进1,则可转换任意位2进制数为BCD码。

      4.但该算法是加三移位,而不是移位加六。因为前者比后者占用资源少,但在算法上两者是等价的,前者先判断数是否大于等于5,若大于等于5则加3,再移位,即(5+3)*2 = 16(进1);后者是先移位后判断是否大于等于10,若大于等于10则加6,也是16(进1).

     5.先加3后移位算法有一点需要注意,到最后四位的时候无需判断是否大于等于5,因为后面没有移位的步骤了,不能实现步骤4中所述的等价原理。

移位加三BIN转BCD码 移位加三 阅读详情

相关推荐

二进制转为BCD码 左移加三法

二进制转BCD码

ZnS_oscar的博客 1832

二进制转BCD码原理及verilog实现

一、BCD码概念 BCD码(Binary-Coded Decimal‎),利用四个2进制位储存一个10进制的数,如下表所示。本文所讨论的问题均以8421BCD码为例,十进制的0~9分别用0000~1001来表示。 十进制数23,可表示为0010_0011,十进制数129,可表示为0001_0010_1001。 即分别对个位、十位、百位求对应的BCD码。 ​二、二进制数到BCD码的转换 先根据输入不同位数的二进制数,求对应的BCD码 假设输入1位二进制数1,则对应的BCD码为0001,对应

傻福网站 5万+

FPGA实现二进制到BCD码转换

用FPGA实现二进制数转换到8421BCD码

weixin_45451974的博客 2157

verilog实现二进制转BCD码-加3移位法

使用加三移位法实现10bit二进制数转BCD码,绘制RTL图,编写RTL代码以及tb,并仿真验证

fpga学就完事了 3775

二进制数转BCD码

在本设计中,使用逐步移位法来实现二进制数向BCD码的转换,在设计之前,先来了解一下二进制数向BCD码转换的原理——逐步移位法。1.变量定义• B:需要转换的二进制数位宽。• D:转换后的BCD 码位宽。其中BCD码的位宽计算如下:根据二进制数的位宽。求出它的无符号数能表示的最大值和最小值,如数据位宽是8位,则数据范围大小就是0~255,我们取最大值255,每一个数字对应4位BCD码,三个数字就对应3×4=12位的BCD码。• N:需要转换的二进制数位宽加上转换后的BCD码位宽。

m0_66619666的博客 2937

浅谈BCD码同二进制转换

一、BCD码 1、BCD码概述 2、BCD分类 1、有权码 2、无权码 3、BCD运算问题 二、二进制BCD码 1、原理实现 2、模块划分 3、仿真调试 4、仿真验证 三、BCD码转二进制 1、原理实现 2、模块划分 3、仿真验证

执迷不悟 1万+

webstorm 打开为二进制_二进制转BCD(大四加三算法1)

Hi,大家好!我是至芯科技的李老师。今天讲课的题目比较有意思,它是一个小问题:把二进制变成BCD码需要几步?请大家思考一下。有同学可能回答需要三步,为什么啊?因为啊,把大象放进冰箱里需要三步,第一步,把冰箱门打开,第二步,把大象放进去,第三步,把冰箱门关上。类似的,把二进制变成BCD码,也需要三步。blablablabla ......当然啦,这是开玩笑了。不过,歪打正着,答案确实是三步...

weixin_39951112的博客 320

PyTorch实战:3D U-Net医学图像分割从零搭建(附完整代码)

本文详细介绍了如何使用PyTorch从零搭建3D U-Net模型进行医学图像分割,涵盖三维卷积实现、模块化架构设计、医学图像专属优化策略及完整训练流程。通过实战代码演示,帮助开发者掌握UNet-3D在CT、MRI等三维医学图像分割中的应用,提升肝脏肿瘤分割、肺结节检测等任务的准确性。

weixin_29061997的博客 329

基础项目(4)二级制转换BCD

写在前面的话 我们的数据在运算或者存储的时候,一般都是以二进制的格式存在的。但是在很多情况下,我们需要将运算结果显示到某种显示设备上,如果直接以二进制的形式来显示的话,会非常不便于我们查看。因此,我们需要首先将二进制数转换为十进制数再进行显示。二进制到十进制的转换有很多种方法。本节,梦翼师兄和大家一起学习一种国外目前最为流行的转换方法-逐步移位法。通过这种方式,我们不但可以在没有周期差...

aoze8939的博客 788

Android 13 录音APK在后台无数据的处理

未获取到录音数据

chenchen4310的博客 1182

(MIUI)小米手机录音文件深度寻踪:从系统缓存到数据目录的实战解析

本文深入解析了MIUI系统中录音文件丢失的常见原因及解决方案,包括系统升级兼容性问题、应用缓存机制异常和存储权限变动。通过实战操作指南,详细介绍了如何从系统目录、数据库层面恢复录音文件,并提供了预防措施和自动化备份方案,帮助小米手机用户有效找回重要录音数据。

weixin_42699679的博客 518

Verilog实现2进制码与BCD码的互相转换

Verilog实现2进制码与BCD码的互相转换

孤独的单刀 1万+

InSAR_ISCE软件数据处理流程之:利用哨兵数据获取2015年尼泊尔地震同震形变场

ISCE软件数据处理流程之:利用哨兵数据获取2015年尼泊尔地震同震形变场 ISCE软件做干涉只需要将数据准备好,并配置好insarApp.xml文件即可进行。 一、数据准备 1、SAR数据获取 本利中使用的数据为欧空局提供的sentinel-1A/B数据,可从阿拉斯加数据服务器上下载,具体下载方法可参考: 哨兵数据下载方法. 2、哨兵卫星轨道文件下载 哨兵数据处理除了需要SAR影像外,还需提供轨道参数文件,可从https://qc.sentinel1.eo.esa.int/aux_poeorb/下载。下载

weixin_42128764的博客 1万+

二进制数转换为BCD码的加3移位法原理_FPGA基础知识极简教程(10)二进制到BCD转换算法...

目录写在前面正文快速认识实现方式一实现方式二写在最后写在前面FPGA基础知识极简教程(9)讲到了七段数码管的显示Verilog设计,我们都知道,要在数码管上显示的数字,使用BCD编码是具有优势的(或者是最正确的)。拿数字时钟来说,如果你的时钟是12点,难道你会让数码管显示C? 如果你愿意如此,那就给自己家里安装一个这样的时钟吧! 如果是23点呢?不用BCD编码的数字恐怕不能显示了吧。 采用BCD码...

weixin_39531582的博客 2765

Python实战:3分钟搞定A股K线数据抓取(附东方财富/腾讯API完整代码)

本文为量化交易初学者提供了一份快速获取A股K线数据的实战指南。通过对比东方财富与腾讯财经两大免费API的优劣,并附上可直接运行的完整Python代码,帮助读者在3分钟内搭建起自己的数据抓取管道,为构建量化交易系统奠定坚实的数据基础。

weixin_29062255的博客 2909

实战经验:Sensor Bringup中那些坑我都帮你踩过了(避坑指南)

本文是一份详尽的Sensor Bringup实战避坑指南,总结了从I2C通信、MCLK时钟、电源管理到图像异常等关键环节的常见问题与排查方法。文章提供了系统化的调试工作流,强调先硬件后软件的排查原则,旨在帮助硬件工程师快速定位并解决Sensor启动过程中的难题,提升开发效率。

weixin_29212429的博客 574

二进制数转换成BCD码的Verilog实现

二进制数转换成BCD编码的Verilog实现 通常在显示温度、数码管、电压等数据时,通常需要将二进制数据转成十进制进行显示。最常用的方法是将二进制码转换成BCD码(8421)。 8421码:它只选用了四位二进制码中前10组代码,即用0000~1001(0-9)分别代表它所对应的十进制数,余下的六组代码不用。 二进制转BCD 用除法或者取余对于计算机来说耗时耗力占用资源多。 其余方法有移位后加6或加3再移位,二进制转成BCD码,就是每一位用4位二进制表示即可。 4位二进制最高表示15,BCD码4位最高表示9

qq_38318540的博客 8513

openclaw本地模型对接

使用是官方推荐的一种集成方式,它可以简化配置过程。但由于您的系统环境和之前复杂的配置历史,我为您梳理了一个核心流程,并增加了关键的“事后检查”步骤,以确保能从根本上解决问题。

suny8的专栏 2460

二进制转8421BCD码——移位加三法

二进制编码的十进制数,简称BCD码(Binarycoded Decimal). 这种方法是用4位二进制码的组合代表十进制数的0,1,2,3,4,5,6 ,7,8,9 十个数符。最常用的BCD码称为8421BCD码,8.4.2.1 分别是4位二进数的位取值。移位加三法实现过程:从二进制的高位开始向BCD寄存器中移入二进制数据,依次经过BCD寄存器的个、十、百等位,直到所有的二进制数移入到BCD寄存器中。每次移位,判断个、十、百等是否大于4,若大于则对应位加3,否则不变。例如:(11110011)转BCD,对应

m0_52889836的博客 5369

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

二进制 转换成十进制 BCD码(加3移位法)

“原来的二进制数十几位,则左移时就要左移几位”"二进制数调整BCD码的方法是将二进制码左移8次,每次移位后都检查低四位LSD+3是否大于7,如是则加3,否则不加,高4位MSD作同样处理"一、为什么左移8次原寄存器是存二进制数的,新寄存器是存十进制数的,当然要左移8次,把数据全部移进去。但这里要注意两件事,第一,如果只安排一个字节作十进制寄存器,原数据要小于 6...

weixin_30713953的博客 2137

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

FPGA进制数与BCD码转换

FPGA进制数与BCD码转换 4位二进制转换成两个BCD码 二-十进制编码(BCD码)是把十进制的0~9这个十个数用二位二进制数(0000 1001)代表的代码。我们也可以用四位二进制数表示成两个BCD码。 module bit4BCD(bcd,bcd0,bcd1); input [3:0] bcd; output reg[3:0] bcd0,bcd1; always @(bcd) begin {bcd0,bcd1}=8'h0; if(bcd<10)

qq_44798568的博客 2487

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

二进制数转换为BCD码的加3移位法原理_浅谈计算机组成原理(二)

1、第二章:数据的表示和运算通过下面的思维导图来依次分享「数据的表示和运算」里面重要知识点。2、第一节:数制与编码1. 真值:需要用正、负号来分别表示正数(正号可以省略)、负数的数称为真值,真值是机器数所代表的实际值。2. 机器数:将数据的符号数字化,即用“0”表示“正”,用“1”表示“负”。3. BCD码:二进制的十进制数(Binary-coded Decimal,BCD)通常采用4位二进...

weixin_39914732的博客 1355

Verilog高效实现:二进制与BCD码转换的移位加3算法解析

本文详细解析了Verilog中二进制与BCD码互相转换的高效实现方法,重点介绍了移位加3算法(Double Dabble)的原理与Verilog代码实现。通过对比除法取模法、查找表法和移位加3法的性能差异,为FPGA设计提供了优化建议,帮助开发者提升数字电路设计效率。

c8d9e0f1的博客 1066

BCD码转换

二进制转BCD的方法是通过左移,然后每四位判断是否大于4,满足则加3。 这里我们采用一种移位加3的算法来实现这个二进制到BCD转换的功能。(当然如果数据范围比较小的情况下,比如几百个数字,我还是推荐在FPGA中使用查找表的方法来进行) 算法:步骤 如果某一权位(百位,十位,个位)大于或者等于5,那么此权位加3。 将二进制数,左移1位到BCD移位寄存器中。 如果二进制数据位都移动完毕, 计算结束 返回步骤1 图表表示: //二进制数到BCD译码器模块 module BIN2BCD(CLK, EN

pzs0221的专栏 2211
上一篇: [计算机原理]BCD码减法
下一篇: 一些有用的编程技巧
Russius
博客等级 码龄11年 18粉丝 12原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值