单片机中如何将十六进制转换成十进制(看说明)
因为ad采集到的是16位的,如果要转换成电压值,就必须乘以一个系数,所以要把ad采集值转换为十进制吧,我看到别人是a=(unsignedlong)AD*系数,这样可以吗?...
因为ad采集到的是16位的,如果要转换成电压值,就必须乘以一个系数,所以要把ad采集值转换为十进制吧,我看到别人是a=(unsigned long)AD*系数,这样可以吗?或者还有其他办法吗?
展开
4个回答
推荐于2017-10-10 · 知道合伙人教育行家
关注
展开全部
转换原则:
16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。字母不区分大小写。
十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……
所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。
转换举例:
假设有一个十六进数 2AF5, 那么如何换算成10进制呢?
用竖式计算:
2AF5换算成10进制:
第0位: 5 * 16的0次方 = 5
第1位: F * 16的1次方 = 240
第2位: A * 16的2次方 = 2560
第3位: 2 * 16的3次方 = 8192
直接计算就是:
5 * 16的0 + F * 16的1次方 + A * 16的2次方 + 2 * 16的3次方 = 10997。
16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。字母不区分大小写。
十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……
所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。
转换举例:
假设有一个十六进数 2AF5, 那么如何换算成10进制呢?
用竖式计算:
2AF5换算成10进制:
第0位: 5 * 16的0次方 = 5
第1位: F * 16的1次方 = 240
第2位: A * 16的2次方 = 2560
第3位: 2 * 16的3次方 = 8192
直接计算就是:
5 * 16的0 + F * 16的1次方 + A * 16的2次方 + 2 * 16的3次方 = 10997。
展开全部
你自己处理的数据还要在意它是什么进制的吗?
按我的理解,系数不是用来转换电压值的进制的,而是用来进行电平值比较的吧。
比如8位AD 5v采样, 读寄存器后值是0xff ,那么是多少V 电压呢? 5V对吧,
那读数为0x80 呢? 0xff的一半 ? 可以理解为2.5V
这个过程应该不是你所理解的 “把ad采集值转换为十进制” 的过程
如果你是指这个过程的话,那么 那个系数就是转换的工具了。系数可以理解为5V电压的 0x00000001 是多少V ?
按我的理解,系数不是用来转换电压值的进制的,而是用来进行电平值比较的吧。
比如8位AD 5v采样, 读寄存器后值是0xff ,那么是多少V 电压呢? 5V对吧,
那读数为0x80 呢? 0xff的一半 ? 可以理解为2.5V
这个过程应该不是你所理解的 “把ad采集值转换为十进制” 的过程
如果你是指这个过程的话,那么 那个系数就是转换的工具了。系数可以理解为5V电压的 0x00000001 是多少V ?
追问
ad采集到的是16进制数吧,但是如果要换算成电压,也就是v=AD*3300/1024,这样的话ad值应该也是10进制的才行吧,那么怎么换算呢?
------------------------------------------------------------------------------------
我觉得你的意思好像只要把1024换算成16进制就好了?
追答
对于你程序的读数后继判断来说是什么进制无所谓,关键只是读回的采样值数据如何去进行判断吧,要知道某个16位数据读到后到底采样的模拟值是多少?这个换算过程我觉得不该叫做10进制转换。
程序里的计算你不用关心进制问题啊,你只需要告诉计算机你的数是16进制的就可以了,计算中它会自己去转换的。
例如: 你读到的是16位的值 0xabcdefff (十进制2882400255),这两个写法对你来说不通,但对计算机来说是没有区别的,v=AD*3300/1024这样的算式你不用关心AD是什么进制,无论它是什么进制,他都表示的同一个数。
如果你要把结果显示给人看的话才要考虑bcd转换。 就类似于printf()里面的格式符 %d %x %o的区别
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
AD采样数据是16进制(hex),计算系数也要是16进制,这样好算出电压值16进制,如果结果需要十进制(bcd),在将hex结果转为bcd即可,转法很简单
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
void to_base_n(unsigned long n, unsigned int base) //将一个数n 按base进制打印
{
int r;
r = n % base;
if (n >= base)
to_base_n(n / base, base);
putchar('0' + r);
}
{
int r;
r = n % base;
if (n >= base)
to_base_n(n / base, base);
putchar('0' + r);
}
追问
没有简单点的吗?他的这个a=(unsigned long)AD*系数
能不能unsigned long强行转换?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询