设计与开发

单片机16进制转10进制 C语言的BCD 码转十进制(十六进制HEX)程序

小编 2024-10-12 设计与开发 23 0

C语言的BCD 码转十进制(十六进制HEX)程序

说明:本程序分别列举了单字节BCD码转换为char型数据;2字节BCD码转换为int型数据;4字节bcd码转换为long int型数据的的方法。

unsigned char ucBCDdata[10] = {0x11,0x22,0x33,0x44,0x55,0x55,0x66,0x77};

unsigned char ucHEXdata11 = 0,ucHEXdata[10] = {0};

unsigned int uiHEXdata = 0,uiHEXdata11 = 0;

unsigned long int ulHEXdata = 0;

//1、现实中十六进制数和十进制数不可以直接相加,如果是在电脑上的话是可以的,因为不管

//何种进制数在电脑上都是以二进制的形式表示的,所以在电脑编写程序时是可以相加的。

//C语言程序中,十进制和十六进制实际是互通的,

//单字节BCD码转十进制

//高半字节=BCD码字节除16的商,低半字节=BCD码字节除16的余数

ucHEXdata[0] = (ucBCDdata[0]>>4)*10 +(0xf & ucBCDdata[0]);

ucHEXdata11 = ucHEXdata[0];

//2字节BCD码转换为整数

//先将2个字节的BCD码分别转换为十进制,然后高字节*100+低字节=整数

ucHEXdata[0] = (ucBCDdata[0]>>4)*10 +(0xf & ucBCDdata[0]);

ucHEXdata[1] = (ucBCDdata[1]>>4)*10 +(0xf & ucBCDdata[1]);

uiHEXdata = ucHEXdata[1]*100 + ucHEXdata[0];

//4字节BCD码转换为整数

//先将4个字节的BCD码分别转换为十进制,按照十进制数的整合方式整合为长整形

ucHEXdata[0] = (ucBCDdata[0]>>4)*10 +(0xf & ucBCDdata[0]);

ucHEXdata[1] = (ucBCDdata[1]>>4)*10 +(0xf & ucBCDdata[1]);

ucHEXdata[2] = (ucBCDdata[2]>>4)*10 +(0xf & ucBCDdata[2]);

ucHEXdata[3] = (ucBCDdata[3]>>4)*10 +(0xf & ucBCDdata[3]);

ulHEXdata = ((unsigned long int)ucHEXdata[3]*1000000)

+((unsigned long int)ucHEXdata[2]*10000)

+((unsigned long int)ucHEXdata[1]*100) + ucHEXdata[0];

PLC编程中的进制数该如何表示?相互之间又是如何转换的?

今天给大家讲一下有关数制、码制、基本逻辑运算等数字电路基本知识。这些知识贯穿在所有的数字电子技术中,包括工业自动化控制技术,例如;PLC、单片机、单板工控机、变频器、伺服、步进等控制技术中,我们要求大家一定要学好这些基本知识及其应用。

学习这些知识不需要高深的数理知识,初中以上水平就可以理解掌握,只要努力学习就行。

数制的知识要求掌握2、10、16进制数的表示和它们相互间的转换。码制的知识要求掌握各种码制的特点及其应用。基本逻辑运算知识要求掌握基本逻辑运算的关系,表示及与电路间的联系。

一、数制

数制,就是数的计数方法,也就是数的进位法。

在数字电子技术中,数制是必须掌握的基础知识。

二、数制三要素

数制是指计算数的方法。其基本内容有二个,一个是如何表示一个数,一个是如何表示数的进位。公元400年,印度数学家最早提出了十进制计数系统,当然,这种计数系统与人的手指有关。这也是很自然的事,这种计数系统(就是数制)的特点是逢十进一,有10个不同的数码表示数(也就是0~9个阿拉伯数字),我们把这个计数系统叫做十进制。

十进制计数内容已经包含了数制的三要素:基数、位权、复位和进位。下面我们就以十进制为例来讲解数制的三要素。

下面是一个十进制表示的数:

这是一个十进制的数:6505,是一个四位数。

其中,6、5、0是它的数码,也叫数符。我们知道:十进制数有10个数码。0~9。我们把这10个数码叫做10进制数的基数。基数即表示了数制所包含数码的个数,同时也包含了数制的进位,即逢十进一。N进制必须有n个数码。

我们把这四位数的位分别以b0位,b1位,b2位,b3位表示数码所在的位。(也即我们日常所说的个位,十位,百位,千位)。

注意:我们规定最右位(个位)为b0位,然后依次往左为b1,b2。。。。。。位。我们会发现b2位的5和b0位的5虽然都是数码5,但他们表示的数值是不一样的。b2位的5表示500,b0位的5只表示5,为什么呢?这是因为不同的位的位值是不一样的,位值又叫位权。

位权是数制的三要素之一,它表示数码所在位的值。位权一般是基数的正整数幂,从0开始,按位递增。b0位位权为

,b1位位权为

。。。以次类推。N进制的位权为

当数中某一位(例如b0位)到达最大数码值后,必须产生复位和进位的运转。当b0数到9(最大数码)后则b0位会变为0.并向b1位进1。复位和进位是数制必须的运算处理。

我们把基数,位权,进位和复位称之为数制三要素。

一般地说,数制的数值由各位数码乘以位权然后相加得到。即

我们把数制中数的位权最大的有效值(最左边的位)叫做最高有效位MSD(Most Siginfical Digit)。而把最右边的有效位叫做最低有效位LSD(Least Siginfical Digit)。在二进制中,常常把LSD位叫做低位。而把MSD位叫高位。

上面虽然是以十进制来介绍数制的知识的,但是数制的三要素对所有的进制都是适用的。

一个N进制的n位数,则:基数为N,有n个不同的数码,逢N进一,其位权由LSD位到MSD位分别为

当某位计数到最大数码时,该位复位为最小数码,并向上一位进1,而其数值为:

数值=

往期优秀文章回顾:

一个电气新手,我想问PLC电气编程用什么电脑最好?

相关问答

怎么将 单片机 接收到的十六 进制 数转为十 进制 ?

你说的数字带小数点的,叫浮点数。小数点的数据用十六进制表示用4个字节。如果小数部分都是0,则可以用整数表示。例如:用长整型表示。longdat;//用于...你说...

51 单片机16进制 改成十进制原理?

将51单片机的16进制数转换为十进制数的原理是根据权重进行计算。每个16进制位的权重从右到左依次为16^0、16^1、16^2、16^3,以此类推。首先,将16进制数的每个...

51 单片机 怎么生成 16进制 文件?

如果是ASCII码表内的符号值,那么ASCII值本身就可以认为是16进制的(因为进制只是给人看的,单片机只有2进制,没有ASCII和Hex之分),但如果是Hex值,经过AS...

单片机 中,如何将 16进制转 换为ASC码?

每个数字+0x30,每个字母+0x37就成了。举例如下:f的16进制是1111,加0x37即1111+00110111=01000110=0x46;a的16进制是1010,加0x37即1010+...

16进制转 bcd码?

63÷10=6……3即商是6,余数是如果将商乘以16再加上余数,就是:6×16+3=99,其16进制数就是63H,即是十进制数63(16进制为3FH)的BCD码为63H。如果在单片机中,...6.....

单片机 51tmod= 10 h什么意思?

TMOD是51单片机内的定时器寄存器名称,TimerMode即为定时模式的意思51单片机的定时模式有四种,所以用TMOD=?来选择哪一种,10h表示的是16进制数,也可表示...

单片机 乘法指令:假定(A)=50H(B)=0A0H.执行指令MULAB后,累加...

[最佳回答]50H*0A0H=320H你可以把十六进制都换成十进制来计算!即80*10=800换成十六进制就是320H执行指令之后,A=20H,B=03H,(结果高八位放在寄存器B,低八...

单片机 汇编一个将2位 16进制 数转换为ASCII子程序?

51单片机接收到的都是ASCII码,你可以当16进制,也可以当2进制来使用。再单片机内部运算的时候不用转换;但是某些场合,比如你把得到的数据发送到上位机去,想在...

0x3f的十 进制 数是多少?

3f(十六进制)=63(十进制),即0x3f的十进制数是63。单片机中0x3f代表16进制数3F,即00111111B或63D(B代表二进制,D代表十进制),在单片机中常用于配置IO口的...

C语言 单片机 编程,如何将串口接收到的十六 进制 字符转存到数组中?

接收数组也可以定义成不定长度的,没有想要寻找你要的字符串可以用strstr函数,如果想清零可以用memset函数全部赋值为0接收数组也可以定义成不定长度的,没有...

猜你喜欢