当前位置: 首页 > article >正文

STM32F4_十进制和BCD码的转换

目录

前言

1. BCD码

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


前言

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

1. BCD码

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

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

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

当两个十进制数相加

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

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

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之后的数,该数就是修正的次数
}

                                    


http://www.kler.cn/a/17417.html

相关文章:

  • 如何向函数模块 FM 中传递 Range 参数
  • `node-gyp` 无法找到版本为 `10.0.19041.0` 的 Windows SDK
  • python 2小时学会八股文-数据结构
  • Oracle 单机及 RAC 环境 db_files 参数修改
  • 力扣662:二叉树的最大宽度
  • 深入探索React合成事件(SyntheticEvent):跨浏览器的事件处理利器
  • 【地铁上的设计模式】--结构型模式:装饰器模式
  • IJKPLAYER源码分析-重要字段
  • LeetCode 1003. Check If Word Is Valid After Substitutions【栈,字符串】中等
  • 【GAMES101】03 Transformation
  • 回忆我的爷爷
  • 什么是图数据库Neo4j
  • 力扣---LeetCode141/142. 环形链表 (I)和(II) (代码详解+流程图+数学逻辑拓展)
  • 自动驾驶技术:前景、优势与挑战
  • kubernetes安装
  • Docker 架构
  • Vue生命周期
  • 第二十四回:如何屏蔽事件
  • SpringMVC(后)SSM整合
  • [创新工具和方法论]-01- DOE课程基础知识
  • K8s 安全是云安全的未来
  • AI仿写软件-仿写文章生成器
  • 计算机组成原理4.2.3提高存储器访问速度的措施
  • 送了老弟一台 Linux 服务器,它又懵了!
  • Ae:橡皮擦工具
  • Redis缓存穿透和雪崩