STM32F4_十进制和BCD码的转换

这篇具有很好参考价值的文章主要介绍了STM32F4_十进制和BCD码的转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

1. BCD码

2. BCD码和十进制转换的算法


前言

        最近在学习STM32单片机(不仅仅是32)的RTC实时时钟系统的过程中,需要配置时钟的时间、日期;这些都需要实现BCD码和十进制之间进行转换。这里和大家一起学习BCD码和十进制之间转换的代码;

STM32F4_十进制和BCD码的转换

1. BCD码

        BCD码是指用二进制数来表示十进制的数;也就是说4位二进制数来表示一位十进制数,因此二进制可以表示的最大十进制数为9(1001)。

        因为二进制数能表示的最大十进制数才是9,所以当数字大于9时,也就是数字为两位数时,我们需要用8位BCD码来表示;4位的BCD码只能表示9以下的数字;遵循逢九进一的原则;

        我们都知道:二进制是逢二进一,十进制是逢十进一,十六进制是逢十六进一,它们之间每次都差6,所以一个十进制想要转换成BCD码,必须先要算清楚进了几次位;

当两个十进制数相加

STM32F4_十进制和BCD码的转换

但是如果相加最终的值位于10-15之间,也就是十六进制数的A-F之间,则需要加6进行修正;如果相加的值位于20-25之间,则需要修正2次,也就是加上2*6=12;就是这个道理;(每出现一次十六进制溢出9,就修正一次,溢出多少次,修正多少次)

STM32F4_十进制和BCD码的转换

多次修正的情况:比方说十进制下的66,66/10=6次,也就是说修正了6次,这里修正次数的意思是,出现一次十六进制下溢出9,就修正一次,(溢出第一次来到10-15,溢出第二次来到20-25,依次类推,总共溢出了6次,就是这个道理),所以需要加上6*6=36,所以最终的BCD码为66+36=102;

BCD码转十进制是一个道理

STM32F4_十进制和BCD码的转换

2. BCD码和十进制转换的算法

十进制转换成BCD码,代码如下

//dec:十进制数   bcd:BCD码
int dec_bcd(int dec)
{
	return(dec+(dec/10)*6);
}

BCD码转换成十进制,代码如下

//dec:十进制数   bcd:BCD码
int bcd_dec(int bcd)
{
	return(bcd-(bcd>>4)*6);
	//该返回的意思是说:比如BCD码为10011,右移四位,空位补0会得到0001,
	//该值表示修正的次数,之所以这样,是因为四位的二进制表示不来大于9的十进制
	//所以才会引入8位BCD码,如果将8位BCD的高4位移回到低四位的位置,就会得到减去1111之后的数,该数就是修正的次数
}

                                    文章来源地址https://www.toymoban.com/news/detail-435144.html

到了这里,关于STM32F4_十进制和BCD码的转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python中二进制十进制转换

            hello大家好,今天我想和大家分享一下在Python中进制转换加减法的方法。         比如现在我们需要求100 + 10,然后需要将结果110以二进制的形式返回,又或者我们现在有一个小需求,就是要计算二进制1010和二进制1011的和是多少,然后依旧以二进制的形式返回

    2024年02月16日
    浏览(63)
  • 十六进制转换到十进制(java)

    一、前言  首先我们要知道十六进制的转换以及十以上的进制的转换与十以下的进制转换是不一样的,它们在一位上会用超过9的数字,这个我们在利用以前的方法就行不通了,我接下来就向大家分享一种方法。(注:在Java中10---15分别用A B C D E F表示,不分大小写) 二、正文

    2024年02月11日
    浏览(58)
  • 【Python 千题 —— 基础篇】进制转换:十进制转二进制

    题目描述 计算机底层原理中常使用二进制来表示相关机器码,学会将十进制数转换成二进制数是一个非常重要的技能。现在编写一个程序,输入一个十进制数,将其转换成二进制数。 输入描述 输入一个十进制数。 输出描述 程序将输入的十进制数转换为二进制数,并输出其

    2024年02月07日
    浏览(81)
  • MATLAB十六进制与十进制互相转换

    包含单个数字进行转换和数组进行转换(可用于串口数据解析) 1.十六进制转十进制

    2024年01月16日
    浏览(54)
  • C++十进制与二进制之间的转换

    一般采用\\\"除2取余,逆序排列\\\"法: 也就是将一个十进制数不断除2,将每次得到的余数倒序从后向前排列。 拿求救信号6举个例子: 6/2=3……0  末位就是0 3/2=1……1   前一位就是1 1/2=0……1  再前一位就是1 再画个图辅助理解,这回试试100: 所以100的二进制表达就是1100100 那用

    2024年02月08日
    浏览(50)
  • 进制转换—包含整数和小数部分转换(二进制、八进制、十进制、十六进制)手写版,超详细

    目录 1.进制转换必备知识:         1.1 二进制逢2进1         8进制逢8进1           10进制逢10进1        16进制逢16进1         1.2为了区分二、八、十、十六进制,我们通常在数字后面加字母进行区分 2. 二进制与八进制、十六进制相互转换         2.1 二进制转

    2023年04月23日
    浏览(99)
  • 【进制转换】— 包含整数和小数部分转换(二进制、八进制、十进制、十六进制)手写版,超详细

    目录 1.进制转换必备知识:         1.1 二进制逢2进1         8进制逢8进1           10进制逢10进1        16进制逢16进1         1.2为了区分二、八、十、十六进制,我们通常在数字后面加字母进行区分 2. 二进制与八进制、十六进制相互转换         2.1 二进制转

    2024年02月05日
    浏览(306)
  • 二进制与十进制数互相转换的方法及原理

    有人问我一道十进制数转化为二进制数的题:13.625转化为二进制应该如何表示。让我回忆起十多年前学编程时就搞不懂二进制,不找“不必求甚解”的借口,我搜索了一些平台,但很失望,这么多年过去了,能找到的资源依然和以前一样,只讲怎样操作,不提为什么这样操作

    2024年02月04日
    浏览(73)
  • Java中十六进制与十进制之间互相转换

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: 提示:以下是本篇文章正文内容,下面案例可供参考 话不多说,直接上代码 如将十进制数字 108 转换为十六进制 代码示例如下: 运行结果: 这样将一个十

    2024年02月12日
    浏览(55)
  • 简单使用Linux printf 将十进制转换为十六进制

    在开发和排查问题过程中,有时我们需要做一些进制的转换,以下是一些快速的小技巧: 下面的是 十进制转换为十六进制: 还可以把 十六进制转为十进制: 其实中引号中%x为要转换的格式,n为换行“new line” 还可以十进制转换为八进制 另外使用bc命令进行转换也可的大

    2024年04月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包