精华内容
下载资源
问答
  • FPGA 二进制转bcd码

    千次阅读 2018-10-28 19:15:47
    //这是一个使用Verilog HDL编写的带使能端的8-bit二进制转BCD码程序,具有占用资源少、移植性好、扩展方便的特点。 module bcd(rst_n,binary,bcd); //rst_n为使能端,binary为待转换的二进制数,bcd为转换后的BCD码...
    //这是一个使用Verilog HDL编写的带使能端的8-bit二进制转BCD码程序,具有占用资源少、移植性好、扩展方便的特点。   
    module bcd(rst_n,binary,bcd);   //rst_n为使能端,binary为待转换的二进制数,bcd为转换后的BCD码      
    parameter B_SIZE=12;				//B_SIZE为二进制数所占的位数,可根据需要进行扩展 
    
    input       rst_n;                 	//rst_n高电平有效,低电平时
    input  		[B_SIZE-1:0] binary;
    output reg  [B_SIZE+3:0] bcd;
    
       
    reg  [B_SIZE-1:0] bin;   
    //reg  [B_SIZE+3:0] bcd;    //bcd的长度应根据实际情况进行修改   
    reg  [B_SIZE+3:0] result;   //result的长度=bcd的长度 
     
    
      
    always@(binary or rst_n)
       begin      
          bin= binary;     
    	  result = 0;         
       if(rst_n == 0) 
    	  bcd <= 0;      
    else    
    	begin         
    repeat(B_SIZE-1)//使用repeat语句进行循环计算      
       begin            
    	result[0] = bin[B_SIZE-1];                     
       if(result[3:0] > 4)            
        result[3:0]=result[3:0]+ 4'd3;      
       if(result[7:4] > 4)            
        result[7:4]=result[7:4]+4'd3;  
       if(result[11:8] > 4)   	   
    	result[11:8] = result[11:8]+4'd3; //扩展时应参照此三条if语句续写   
       if(result[15:12] > 4)   	   
    	result[15:12]= result[15:12]+ 4'd3;  
    	result=result<<1;
    	bin=bin<<1; end         
    	result[0]= bin[B_SIZE-1]; 
    	bcd<=result;   
       end  
       end   
    endmodule

     

    展开全文
  • 二进制码转换为bcd码 输入的是data_gen产生的数据,输出的是要显示的个十百千万十万,共六个数码管的数据。bcd_8421主要是将data_gen产生的二进制数据转化为bcd码,这样便于显示,其转换如下所示。 最后移位的...

    一、动态显示驱动模块
    将二进制码转换为bcd码
    在这里插入图片描述

    输入的是data_gen产生的数据,输出的是要显示的个十百千万十万,共六个数码管的数据。bcd_8421主要是将data_gen产生的二进制数据转化为bcd码,这样便于显示,其转换如下所示。
    在这里插入图片描述

    最后移位的次数和原二进制的数据的位数有关,例如图中的输入的二进制码为8位,则最后的移位次数也为8。

    二、实现
    波形图
    在这里插入图片描述在这里插入图片描述

    程序

    module  bcd_8421
    (
        input   wire            sys_clk     ,   //系统时钟,频率50MHz
        input   wire            sys_rst_n   ,   //复位信号,低电平有效
        input   wire    [19:0]  data        ,   //输入需要转换的数据
    
        output  reg     [3:0]   unit        ,   //个位BCD码
        output  reg     [3:0]   ten         ,   //十位BCD码
        output  reg     [3:0]   hun         ,   //百位BCD码
        output  reg     [3:0]   tho         ,   //千位BCD码
        output  reg     [3:0]   t_tho       ,   //万位BCD码
        output  reg     [3:0]   h_hun           //十万位BCD码
    );
    
    
    //reg   define
    reg     [4:0]   cnt_shift   ;   //移位判断计数器
    reg     [43:0]  data_shift  ;   //移位判断数据寄存器
    reg             shift_flag  ;   //移位判断标志信号
    
    //********************************************************************//
    //***************************** Main Code ****************************//
    //********************************************************************//
    
    //cnt_shift:从0到21循环计数
    always@(posedge sys_clk or negedge sys_rst_n)
        if(sys_rst_n == 1'b0)
            cnt_shift   <=  5'd0;
        else    if((cnt_shift == 5'd21) && (shift_flag == 1'b1))
            cnt_shift   <=  5'd0;
        else    if(shift_flag == 1'b1)
            cnt_shift   <=  cnt_shift + 1'b1;
        else
            cnt_shift   <=  cnt_shift;
           
    //data_shift:计数器为0时赋初值,计数器为1~20时进行移位判断操作
    always@(posedge sys_clk or negedge sys_rst_n)
        if(sys_rst_n == 1'b0)
            data_shift  <=  44'b0;
        else    if(cnt_shift == 5'd0)
            data_shift  <=  {24'b0,data};
        else    if((cnt_shift <= 20) && (shift_flag == 1'b0))
            begin
                data_shift[23:20]   <=  (data_shift[23:20] > 4) ? (data_shift[23:20] + 2'd3) : (data_shift[23:20]);
                data_shift[27:24]   <=  (data_shift[27:24] > 4) ? (data_shift[27:24] + 2'd3) : (data_shift[27:24]);
                data_shift[31:28]   <=  (data_shift[31:28] > 4) ? (data_shift[31:28] + 2'd3) : (data_shift[31:28]);
                data_shift[35:32]   <=  (data_shift[35:32] > 4) ? (data_shift[35:32] + 2'd3) : (data_shift[35:32]);
                data_shift[39:36]   <=  (data_shift[39:36] > 4) ? (data_shift[39:36] + 2'd3) : (data_shift[39:36]);
                data_shift[43:40]   <=  (data_shift[43:40] > 4) ? (data_shift[43:40] + 2'd3) : (data_shift[43:40]);
            end
        else    if((cnt_shift <= 20) && (shift_flag == 1'b1))
            data_shift  <=  data_shift << 1;
        else
            data_shift  <=  data_shift;
    
    //shift_flag:移位判断标志信号,用于控制移位判断的先后顺序
    always@(posedge sys_clk or negedge sys_rst_n)
        if(sys_rst_n == 1'b0)
            shift_flag  <=  1'b0;
        else
            shift_flag  <=  ~shift_flag;
    
    //当计数器等于20时,移位判断操作完成,对各个位数的BCD码进行赋值
    always@(posedge sys_clk or negedge sys_rst_n)
        if(sys_rst_n == 1'b0)
            begin
                unit    <=  4'b0;
                ten     <=  4'b0;
                hun     <=  4'b0;
                tho     <=  4'b0;
                t_tho   <=  4'b0;
                h_hun   <=  4'b0;
            end
        else    if(cnt_shift == 5'd21)
            begin
                unit    <=  data_shift[23:20];
                ten     <=  data_shift[27:24];
                hun     <=  data_shift[31:28];
                tho     <=  data_shift[35:32];
                t_tho   <=  data_shift[39:36];
                h_hun   <=  data_shift[43:40];
            end
    
    endmodule
    
    

    测试程序

    `timescale 1ns/1ns
    module tb_bcd_8421();
    
    reg            sys_clk       ; 
    reg            sys_rst_n     ; 
    reg      [19:0]  data        ; 
                                 
    wire     [3:0]   unit        ; 
    wire     [3:0]   ten         ; 
    wire     [3:0]   hun         ; 
    wire     [3:0]   tho         ; 
    wire     [3:0]   t_tho       ; 
    wire     [3:0]   h_hun       ;
    
    
    initial
        begin
            sys_clk = 1'b1;
            sys_rst_n <= 1'b0;
            data   <= 20'd0;
            #30
            sys_rst_n <= 1'b1;
            data <= 20'd123456;
            #3000
            data <= 20'd654321;
            #3000
            data <= 20'd987654;
            #3000
            data <= 20'd999999;
        end
        
    always #10 sys_clk = ~sys_clk;
    
    bcd_8421  bcd_8421_inst
    (
       .sys_clk    (sys_clk   ) ,   
       .sys_rst_n  (sys_rst_n ) ,   
       .data       (data      ) ,   
                    
       .unit       (unit      ) ,   
       .ten        (ten       ) ,   
       .hun        (hun       ) ,   
       .tho        (tho       ) ,   
       .t_tho      (t_tho     ) ,   
       .h_hun      (h_hun     )     
    );
    
    endmodule
    
    
    
    展开全文
  • 二进制转 BCD码 VHDL

    2010-06-03 22:37:46
    一个较为适合初学者(CPLD\FPGA)的VHDL语言程序
  • 为方便读者学习,本文小编给读者提供了用verilog将二进制码转换为十进制BCD码程序设计方法,供读者参考。
  • 二进制BCD码转换一、实验目的1.掌握简单的数值转换算法2.基本了解数值的各种表达方法二、实验说明单片机中的数值有各种表达方式,这是单片机的基础。掌握各种数制之间的转换是一种基本功。我们将给定的一字节二进制...

    二进制BCD码转换

    一、实验目的

    1.掌握简单的数值转换算法

    2.基本了解数值的各种表达方法

    二、实验说明

    单片机中的数值有各种表达方式,这是单片机的基础。掌握各种数制之间的转换是一种基本功。我们将给定的一字节二进制数,转换成二十进制(BCD)码。将累加器A的值拆为三个BCD码,并存入RESULT开始的三个单元,例程A赋值#123。

    三、实验内容及步骤

    1.安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头(USB线)。

    2.启动PC机,打开KEIL软件,软件设置为模拟调试状态。在所建的Project文件中添加TH2.ASM源程序进行编译,编译无误后,全速运行程序,打开数据窗口(DATA) (在MEMORY#3中输入D:30H 回车),点击暂停按钮,观察地址30H、31H、32H的数据变化,30H更新为01,31H更新为02,32H更新为03。用键盘输入改变地址30H、31H、32H的值,点击复位按钮后,可再次运行程序,观察其实验效果。修改源程序中给累加器A的赋值,重复实验,观察实验效果。

    3.打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。

    四、流程图及源程序(见光盘中的程序文件夹)

    1.源程序

    RESULT EQU 30H

    ORG 0000H

    LJMP START

    BINTOBCD:

    MOV B,#100

    DIV AB

    MOV RESULT,A ;除以100得百位数

    MOV A,B

    MOV B,#10

    DIV AB

    MOV RESULT+1,A ;余数除以10得十位数

    MOV RESULT+2,B ;余数为个位数

    RET

    START:

    MOV SP,#40H

    MOV A,#123

    CALL BINTOBCD

    LJMP $

    END

    展开全文
  • 、实验内容 1、完成单片机开发相关必备软件的安装 2、学习单片机开发板套件的实验原理图 3、编写、下载及实现第一个单片机程序(点亮一个LED灯) 三、实验原理 单片机开发板原理图;单片机并行输入输出接口 四、...
  • verilog实现二十位二进制转BCD码

    千次阅读 2019-07-21 14:13:06
    代码来源:... 程序 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 2019/07/19 14...
  • ​ 利用PROTEUS平台,建立8086 的十六进制转BCD例子。 、实验目的 1、熟悉实验系统的编程和使用。 2、掌握简单的数值转换算法。 3、基本了解数值各种表达方法。 三、实验说明 计算机中的数值有各种表达方式...
  • 编写子程序Bin2BCD、BCD2Bin实现二进制数到压缩BCD码的相互转换。待转换的二进制数存放在w寄存器内,子程序调用完成后得到的BCD码仍存放在w寄存器内返回。例如: ...二进制压缩BCD码的方法是将二进
  • 在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序程序可见:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/6154551f93ba561440341732.html中的...
  • 16位二进制BCD码--51单片机

    千次阅读 2016-01-25 11:33:19
    要求:编写一段程序,把计数器中T0中计的数(TH0和TL0)成8421BCD码。并且高8位给P1口,低8位给P0口,要是BCD码超过16位,则给P2.0高电平。我是做单片机课设的,这段程序实在编不明白了,向各位大侠请教了!...
  • 实验中心电子信息楼2013年11月4日学院机电年级、专业、班姓名学号实验课程名称微机原理实验成绩实验项目名称二进制到ASCII转换指导教师一、实验目的二、实验原理(实验相关基础知识、理论)三、实验过程原始记录...
  • 80x86 汇编语言编程:BCD 码转二进制

    千次阅读 2016-01-25 12:06:16
    前几天,用 51 汇编语言,写了一个把 BCD 转换成二进制数的程序。下面则是一个用 86x86 汇编语言写的。题目:汇编语言 BCD 码转二进制将一个 BCD 转换成二进制数。条件:五位 BCD 由高到低放在: BH 00 BL ...
  • 写在前面的话 在前面小节的学习中,我们已经...在数学中,我们都知道随便一个十进制数如5468 ,那么它的计算过程可以转换为:5468= 5*1000+4*100+6*10+8,因此BCD码转二进制数的算法就是: abcd = a*1000 + b*...
  • 将R0中的8位二进制数转换成3位BCD码,结果存入外部RAM的1002H~1000H(从高位到低位)单元中。例如:开始时,R0 中的数据是:81H 即 (129)10;程序执行后,外部 RAM: 地址 内容 1002H 01H 1001H 02H 1000H ...
  • data segment array dw 54321 dbcd db 5 dup(?) data ends code segment assume cs:code,ds:data; start: mov ax,data mov ds,ax mov dx,array mov bx,10000;除数 mo...
  • data segment array dw 54321 dbcd db 5 dup(?)data endscode segmentassume cs:code,ds:data; start: mov ax,data mov ds,ax mov dx,array mov bx,10000;除数 ...
  • BCD码是用每四位代替一位十进制数(0 到 9 的某一位数) 例如:0x25 就代表25 十六进制的每位转换成二进制代表四个位。 下面是bcdchar short int long c语言程序 //*******************************************...
  • 一字节压缩BCD码是两位0~9的数字,4位二进制数对应一位BCD码。所以关键是要将两个4位二进制数分离开来。“分离”可以用移位指令和逻辑运算指令来实现,然后用加30H的加法,便可以得到相应的ASCII码。程序清单:DATA...
  • 设数据区中D1, D2, D3字节单元分别有一个八进制数,其中D1是高位,D3是低位。...本题,类似于BCD码转换到二进制数;把各个八进制数逐位乘以8,再相加即可。;下列程序将 (163)8,转换成为了(1110011)2
  • 格雷码(循环碼)是任意两个相邻数的代码只有一位二进制数不同的BCD码,它与奇偶校验码同属可靠性编码。 格雷碼(Gray code)是由貝爾實驗室的Frank Gray在1940年提出,用於在PCM(脈衝編碼調變)方法傳送訊號時防止...
  • 移位大4加3转换法。 可以理解为到10,进位法...3.20位二进制序列(999999)24位BCD码程序 module toBCD( input wire rst, input wire [19:0] idata, output wire [23:0] six_bcd ); reg [43:0] workdata; in.
  • 1.1 总体设计1.1.1 概述BCD码(Binary-Coded Decimal‎),用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十...
  • 制转换程序实验

    千次阅读 2012-11-20 08:57:56
    常用码制转换有:BCD码转二进制、二进制转BCD码、ASCⅡ码转BCD码、BCD码转ASCⅡ码、二进制转ASCⅡ码、ASCⅡ码转二进制码。 一、实习题目 ASCⅡ码转二进制码程序实验 二、实习目的  掌握码制转换的基本原理及...
  • 二进制数转换成 BCD ,是很常见的,做而论道以前也发表过这样的程序。但是,过去都是用寄存器,如果要求用片内RAM单元,就少见了。当然,也可以把片内RAM单元的数据,先传送到寄存器,再利用以前写的程序进行...
  • BCD码是由四位二进制来表示一位十进制数(0~9)。以四位二进制来表示一位十进制数码,可提升二进制与-十进制间转换效率。 BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制...
  • 汇编语言程序设计之代码转换

    千次阅读 2018-12-02 23:24:44
    3.BCD码转换为二进制显示 4.二进制数转换为十六进制数显示 5.二进制数转换为十进制数显示 (1)使用比较法 (2)使用除数取余法 1.十六进制ACSII码转换为二进制显示 .586 DATA SEGMENT USE16 MESG DB ‘Pleas....
  • BCD码(Binary-Coded Decimal‎),用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制...

空空如也

空空如也

1 2 3
收藏数 59
精华内容 23
关键字:

二进制转bcd码程序