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];
单片机C语言开发离不开它--秒懂二进制和十六进制
单片机C语言开发离不开它--秒懂二进制和十六进制
作为单片机爱好者,入门学习单片机编程一定要学会进制的基本概念,常见的有(二进制、八进制、十进制、十六进制),今天于晓超带大家入门一下单片机C语言编程的二进制和十六进制(技术文章阅读量惨淡,希望大家能够点赞收藏加转发,感谢)。
进制顾名思义,进位计数制是人们定义的进位技术方法,这句话可能比较难理解,以十进制为例,逢十进一,(1、2、3....10--1、2、3....10)由此大家应该也可以理解二进制和十六进制了,二进制就是逢二进一,十六进制逢十六进一,记住这是进位运算的方法。
二进制的应用
二进制在单片机开发过程中必不可少,可以把他理解为高低电平
如图,在单片机时序图中常常这样表示。0和1代表着信息,那么很多的0和1组成的就是一串信息,0和1的不同排列所承载的信息也不同,但是在实际应用过程中二进制承载的信息过多时不易使用和记忆,因此在单片机C语言开发中常常将一串二进制用十六进制来替代。
十六进制的应用
十六进制满十六进一,那么大于10的用什么来表示尼?在十六进制中大于10的数用ABCD等,英文大写来代替,0X01、0XAA这都是16进制,对十六进制和二进制进行相互转换是单片机C语言开发中必备的技能。
进制转换
二进制和十六进制的转换,在开发过程中可以借助计算机自带的计算器进行转换,但是自己熟练掌握相互转换会在开发过程中,节约很多时间而且有利于自身的理解,如何进行相互转换如图所示!
相关问答
51 单片机 16 进制转 ascii码方法?这程序的功能就是把一字节十六进制数的低4位转换为一个ASCII码。例如0x0E转换为'E'、0x08转换为'8'。我估计你就是对内码不太熟悉吧。你翻一下ASCII码...
我想利用 单片机 通过串口发送几个16 进制 数FF 10 11 01 DD求高手指点,不胜感激?单片机通过串口发送几个16进制数FF101101DD,程序如下:voidSend(unsignedcharTx_Data)//向串口发字符{SBUF=Tx_Data;while(...
单片机 中断如何设置 十六进制 ?在单片机中,设置中断需要编写中断服务程序,并设置相应的中断向量地址。首先,通过编程将中断控制寄存器设置为使能状态,然后配置中断优先级和触发条件。接着...
单片机 汇编一个将2位16 进制 数转换为ASCII子程序?51单片机接收到的都是ASCII码,你可以当16进制,也可以当2进制来使用。再单片机内部运算的时候不用转换;但是某些场合,比如你把得到的数据发送到上位机去,想在...
C语言 单片机 编程,如何将串口接收到的 十六进制 字符转存到数组中?接收数组也可以定义成不定长度的,没有想要寻找你要的字符串可以用strstr函数,如果想清零可以用memset函数全部赋值为0接收数组也可以定义成不定长度的,没有...
单片机 中ac是什么意思?算时低半字节相加是否产生进位。例如,25H+72H=97H,AC=0,因为5H+2H=7H,不产生低半字...例如,25H+72H=97H,AC=0,因为5H+2H=7H,不产生低半字节进位;25H...
单片机 运行后在串口调试助手上看到重复的一组16 进制 数 - 1...首先看你的发送的是什么:unsignedchardat,字符型的变量,也就是说你发送过去的变量是char型的,再看你要显示什么:“串口助手上看到一组16进制数”好...
单片机 0到9怎么表示?在单片机程序中,数字通常有二进制,十进制和十六进制三种表示法,以数字9为例:二进制写成00001001B,B就是二进制的意思,注意,这个字母不能缺少!十进制写...在...
单片机 数字后面的H表示什么?H表示十六进制。1.在数电领域中,单片机常常使用十六进制来表示数值,H就是十六进制的标志。例如,数字0x10H表示十六进制的10,相当于十进制的16。2.十六进制...
单片机 里边的0x40是什么意思?若用 十六进制 转换,并不是想要的效果,好像是0?这个0x40本身就是十六进制的,以0x开头的就表示这个数字是十六进制的,等同于以H结尾的,比如0x40=40H,它们是一样的,知道了么?这个0x40本身就是十六进制的,以0x...