[软件资料] 数制与数制的转换

[复制链接]
176|10
bestwell 发表于 2025-10-30 18:46 | 显示全部楼层 |阅读模式
单片机中数制与数制的转换是怎样实现的呢

关于数制之间的转换,其实在数字电路的书中会讲到,也很容易理解。在我们生活中,十进制经常被我们用到:数字0,1,2,3,4,5,6,7,8,9,逢十进一。那在单片机运用中,常见数制有:二进制、八进制、十进制、十六进制。

在单片机编程中经常应用到二进制和十六进制。比如现在有八个LED灯,在某一时刻,前四个灯全亮,后四个灯全灭。LED正极接电源,那么用51单片机P1八个口控制LED的亮灭(输出低电平LED亮,高电平LED灭),前四个LED分别连接P1.0~P1.3,后四个连接P1.4~P1.7。这一段的代码用二进制和十六进制分别可以这样编写:

二进制代码:

P1.0=0;P1.1=0;P1.2=0;P1.3=0;P1.4=1;P1.5=1;P1.6=1;P1.7=1;

十六进制代码:P1=0xF0;

由此可见,单片机中利用到多个串口时,编程使用十六进制比较方便,另外如果要循环移位常用十六进制。单片机中利用到单个串口时,编程使用二进制比较方便

一、进制简略介绍;

1、二进制:使用数码只有0和1两个数字,逢二进一

一般使用单片机IO输出两种状态:高电平、低电平。一般用0表示低电平,1表示高电平。编程控制就是以这个概念来编写程序逻辑。如果是3.3V系统,高电平就为3.3V,如果为5V,那高电平就为5V,低电平为0V。如果做输出口的话,就是单片机通过软件置位相关寄存器让端口置高电平或低电平,达到电平输出的目的,如果做输入口,就是单片机捕捉端口的电平然后置位相关寄存器,然后软件读取寄存器中0或1,达到输入作用。



2、八进制:使用数码有0~7共八个数字,逢八进一

3、十进制:使用数码有0~9共十个数字,逢十进一

4、十六进制:数码有0~9,A~F共十六个数,逢十六进一

十六进制在单片机中经常使用,程序中会用到,通讯会用到,程序生成的HEX文件也是十六进制的。而bin文件是二进制文件。

二、进制间的转换

1、二进制与十进制之间的转换;

二进制转十进制:把二进制数按权展开、相加即得十进制数



十进制转二进制:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。



2、二进制与八进制之间的转换;

二进制转八进制:3位二进制数按权展开相加得到1位八进制数。3位二进制转成八进制是从右到左开始转换,不足时补0。



八进制转成二进制:八进制数通过除2取余法,得到二进制数,对每个八进制为3个二进制,不足时在最左边补零。



3、二进制与十六进制之间的转换;

二进制转十六进制:与二进制转八进制方法近似,八进制是取三合一,十六进制是取四合一。4位二进制转成十六进制是从右到左开始转换,不足时补0。



十六进制转二进制:十六进制数通过除2取余法,得到二进制数,对每个十六进制为4个二进制,不足时在最左边补零。



4、十进制与八进制与十六进制之间的转换

十进制转八进制或者十六进制有两种方法第一:间接法—把十进制转成二进制,然后再由二进制转成八进制或者十六进制。直接法—把十进制转八进制或者十六进制依照

磨砂 发表于 2025-11-3 11:45 | 显示全部楼层
数制转换是计算机科学和电子技术中的基础技能,涉及二进制、八进制、十进制和十六进制之间的相互转换
晓伍 发表于 2025-11-3 13:39 | 显示全部楼层
[size=1.21em]N=∑i=0n​ai​×Ri
其中 [size=1.21em]RR 为基数(2/8/16),[size=1.21em]aiai​ 为第 [size=1.21em]ii 位的数字
八层楼 发表于 2025-11-3 15:52 | 显示全部楼层
十进制 → 非十进制:
整数部分:除基取余法(逆序排列余数)
小数部分:乘基取整法(顺序排列整数部分)
观海 发表于 2025-11-3 18:31 | 显示全部楼层
利用 [size=1.21em]23=823=8[size=1.21em]24=1624=16 的关系快速转换
guanjiaer 发表于 2025-11-3 20:45 | 显示全部楼层
有没有更加方便的可以人工计算的方法呢
heimaojingzhang 发表于 2025-11-3 23:03 | 显示全部楼层
数制是用一组固定的符号和统一的规则来表示数的方法
keaibukelian 发表于 2025-11-4 09:25 | 显示全部楼层
将R进制数的每一位数字乘以其对应的权值(即 [backcolor=rgba(175, 184, 193, 0.2)]基数^位数),然后将所有乘积相加
paotangsan 发表于 2025-11-4 11:35 | 显示全部楼层
将十进制小数不断乘以R,记录每次乘积的整数部分,直到小数部分为0或达到所需精度。然后将整数部分正序排列
renzheshengui 发表于 2025-11-4 14:06 | 显示全部楼层
将每一位八进制数用3位二进制数表示,每一位十六进制数用4位二进制数表示
wowu 发表于 2025-11-4 16:33 | 显示全部楼层
其实无论使用那种方法 都是一个熟练的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

2037

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部