STM32F4_十进制和BCD码的转换

news2024/11/14 15:37:18

目录

前言

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.coloradmin.cn/o/494606.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++函数必备简单知识

目录 1、函数的定义与声明 (1)定义 (2)声明 2、指针传参 3、引用 4、函数的引用传参 5、函数重载 overlord (1)参数数量不同 (2)参数类型不同 6、避免overlord歧义 7、内…

Opencv+Python图像像素处理

目录 二值图像的像素访问、修改 单个像素访问、修改 多个像素修改 彩色图像(三维数组) 像素访问、修改 BGR模式 像素访问、修改 二值图像的像素访问、修改 单个像素访问、修改 import numpy as np import cv2 as cv # 使用Numpy库中的函数zeros()可…

springboot登录验证

案例-登录认证 已经实现了部门管理、员工管理的基本功能,但是大家会发现,但没有登录,就直接访问到了Tlias智能学习辅助系统的后台。 这是不安全的,今天的主题就是登录认证。 最终要实现的效果就是用户必须登录之后,才…

Spark学习笔记【shuffle】

本文基本上是大数据处理框架Apache Spark设计与实现的Shuffle部分的学习。以及Spark基础知识Bambrow Shuffle解决啥问题 上游和下游,不同stage,不同的task之间是如何传递数据的。ShuffleManager管理ShuffleWrite和ShuffleRead 分为两个阶段&#xff1…

基于JavaWeb实现的寻码网文章资讯管理系统

一、技术结构 前端:html ajax 后端:SpringBootMybatis-plus 环境:JDK1.8 | Mysql | Maven | Redis 二、功能简介 数据库与代码截图 后端管理-登录页 后端管理-首页 后端管理-文章管理-发布文章 后端管理-文章管理-文章列表 后端管理-文…

Vue快速入门,常用指令,生命周期

Vue常用指令 案例&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"…

MySQL一次大量内存消耗的跟踪

GreatSQL社区原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本&#xff0c;使用上与MySQL一致。文章来源&#xff1a;GreatSQL社区原创 线上使用MySQL8.0.25的数据库&#xff0c;通过监控发现数据库在查询一个视图(80张表的u…

【网络进阶】WebSocket协议

文章目录 1. Web实时技术的应用2. WebSocket协议介绍2.1 WebSocket的工作原理2.2 优点2.3. 使用场景2.4 实现细节 3. WebSocket服务器实现3.1 客户端代码&#xff08;HTML & JavaScript&#xff09;3.2 服务器端代码&#xff08;C&#xff09;3.3 测试结果 1. Web实时技术的…

Qt 智能指针介绍: QSharedPointer、QWeakPointer 、QScopedPointer 、QPointer(附实例)

文章目录 1. 概述2. Qt 中有几种智能指针&#xff1f;2.1 QSharedPointer 实例2.2 QSharedPointer 与 QWeakPointer 实例2.3 QScopedPointer 实例2.4 QPointer 实例 1. 概述 在使用动态内存分配的情况下&#xff0c;需要确保对象的所有权正确地被管理和转移。使用智能指针可以…

【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答(一)

【前提简介】 本文档主要总结HarmonyOS开发过程中可能遇到的一些问题解答&#xff0c;主要围绕HarmonyOS展开&#xff0c;包括但不限于不同API版本HarmonyOS开发、UI组件、DevEco Studio、Gitee示例代码等&#xff0c;并将持续更新哦。 【官方FAQ】 【FAQ】HarmonyOS应用及服…

(十二)地理数据库创建——基本组成项及数据加载

地理数据库创建——基本组成项及数据加载 目录 地理数据库创建——基本组成项及数据加载 1.建立数据库中的基本组成项1.1建立要素数据集1.2建立要素类1.2.1建立简单要素类1.2.2建立关系表 1.3建立关系表 2.向地理数据库加载数据2.1导入数据2.1.1导入Shapefile2.1.2导入dBASE 表…

数据结构:顺序表的增、删,查、改实现

1.概念 顺序表是用一段 物理地址连续 的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组存 储。在数组上完成数据的增删查改。 2.分类 顺序表一般可以分为&#xff1a; 2.1 静态顺序表&#xff1a;使用定长数组存储元素 这样会造成空间给多了浪费&#x…

ThreadLocal初探

一、ThreadLocal介绍 一、官方介绍 从Java官方文档中的描述&#xff1a;ThreadLocal类用来提供线程内部的局部变量&#xff0c;这种变量在多线程环境下访问&#xff08;通过get和set方法访问&#xff09;时&#xff0c;能够保证各个线程的变量相对独立于其他线程内的变量。Thr…

apple pencil必须要买吗?性价比平替电容笔排行榜

要知道&#xff0c;真正的苹果原装Pencil&#xff0c;价格实在是太贵了&#xff0c;普通的消费者根本买不起。所以&#xff0c;有没有可能出现一种平替的、功能一模一样的、与苹果Pencil一样的电容笔呢&#xff1f;这倒也是。国产的平替笔和苹果Pencil的笔相比&#xff0c;并没…

Wireless-Sensor-Network-master_WSN_无线传感网络(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 近年来&#xff0c;随着对等网络、云计算和网格计算等分布式环境的发展&#xff0c;无线传感器网络&#xff08;WSN&#xff0…

10分钟吃透,python操作mysql数据库的增、删、改、查

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

聊聊汽车OTA测试技术方案

汽车OTA已成为时下热门话题&#xff0c;由于OTA的升级可能会带来一定的风险&#xff0c;针对OTA的测试就尤为重要。本文我们主要通过介绍OTA的发展背景、汽车OTA测试的必要性以及汽车OTA测试内容&#xff0c;为大家分享一套成熟的OTA测试方案。 什么是OTA OTA&#xff08;Over-…

以最大速度将数据迁移至AWS S3存储

数据上云&#xff0c;已经成为企业数据管理发展的必然趋势。 对于企业而言&#xff0c;数据上云“常态化”的趋势&#xff0c;无疑是一个巨大的技术红利。而数据规模爆发式增长的今天&#xff0c;移动和访问云端数据却成为困扰企业的一大难题。不过幸运的是&#xff0c;在对象…

ES6:promise简单学习

一、理解promise Promise将异步执行的程序变成同步执行&#xff0c;所谓的在开发中解决回调嵌套的问题 Promise 是异步编程的一种解决方案 从语法上讲&#xff0c;promise是一个对象 从它可以获取异步操作的消息 从本意上讲&#xff0c;它是承诺&#xff0c;承诺它过一段时间会…

Java入门超详细(内含Java基础 Java高级)

Java基础入门 - 内含Java基础&#xff0c;Java高级 Java 基本介绍Java 学习须知Java 学习文档Java 基础Java 基础语法Java 对象与类Java 基本数据类型Java 变量类型Java 修饰符Java 运算符Java 循环结构Java 条件语句Java switch caseJava 数组Java 日期与时间Java 正则表达式J…