c51单片机中AD转换数值处理问题 二进制能否与十进制数字直接相乘得到十进制的数值??【51高手进】

我在编写51单片机ad转换程序的时候遇到一个问题。
用ADC0809 8位 的,也就是精度达到 1/256
输入电压是 0~5v 那么 量化单位就是 5/256 V
那么 我从ADC 0809 中采集到的数字 是二进制的 ,我现在要转换得到电压值
我将P0口猜到的转换后的二进制的数字给一个变量 a==P0
要得到电压对应的电压数字 V
我使用的是 V=a*5/256
这样做对吗??能得到对应的电压值吗??
我的疑惑是 ,AD转换器得到的数字是 二进制的,而用它跟十进制的数字相乘,能得到十进制的一个数字吗??感觉很多疑问??
另外,从ad转换器中采集到的二进制的数字量怎么处理啊??怎么进行标度变换,转换成有实际意义的工程数值??
请专家,高手指教,谢谢了 。
ADC0809的基准电压为5V,意思是输入的电压应该在0~5V之间,
因为ADC0809是八位的,所以它能把5V电压分成255份,所以一份就是
5除以255约为0.02V.
当电压为1.5V时数字量为1.5/0.02=75 变成16进制为0x4b.
那么我怎么把采集到的 16进制为0x4b 变成 1.5v 啊??
我用 0x4b*5/255 能直接得到 1.5 吗??一个是二进制的一个事十进制的能相乘吗?? 谢谢各位了??求教

实际上二进制 十进制 都是数字的值而已
我们看到的 只是 他的表达方法不同 实际上一个意思 一样的值 所以可以相乘

那么你的问题 如果你把值通过pc显示 那么 pc会自己类型转换 成你要的

如果你用液晶显示 那么恭喜你 你要自己做一个小数显示 或者转换成字符串

如果你用串口调试工具 那么看这个工具是否支持

再看你的例子 0x4b*5/255 能行 但是注意类型 类型不对小心 单片机会取整
一般 用a*1.0这种方式~~

最后 多多试验
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-08-03
我使用的是 V=a*5/256
这样做对吗??能得到对应的电压值吗??
对的呀。能得到对应的电压值,a 是0-255

AD转换器得到的数字是 二进制的,而用它跟十进制的数字相乘,能得到十进制的一个数字吗??都是二进制的,不是十进制的。V 最后想输出成10进制,则需要转换。

C51没怎么用过。

先计算V= a*5 (a==P0), V是16位,前8位是小数点前面的整数,后8位是小数点后面的。
分别进行10进制转换
由于前八位小于5不用转换。
只要对小数点的进行转换即可,具体看一下成熟的算法
第2个回答  2009-08-05
voltage = 5.00*a /256;
disdata = (uint)(voltage*1000);
disdata%10,disdata/10%10,disdata/100%10,disdata/1000
这样就把数据分离了 我这是分离成四位 你改改分离成两位就行了本回答被提问者采纳
第3个回答  2009-08-03
完全可以,单片机最后编译成汇编执行的,汇编语言用16进制表示,但执行时是二进制。汇编里没有乘法的概念,你C里的乘法汇编要用好几条语句来实现的。所以,只要你C写得没问题,可以得到预想的结果的。
第4个回答  2009-08-07
楼主可能是想得确实太多了
你不是就是想用一个数与另一个数相乘吗?
就和3*10一样的,这里当然是十进制的
那我用(0x03)*(0x0a)得到的难道就不是一个结果了吗,肯定是十进制的30,十六进制的
1E,数值上时一样的
希望你能听懂吧

...二进制能否与十进制数字直接相乘得到十进制的数值??【51高手进...
实际上二进制 十进制 都是数字的值而已 我们看到的 只是 他的表达方法不同 实际上一个意思 一样的值 所以可以相乘 那么你的问题 如果你把值通过pc显示 那么 pc会自己类型转换 成你要的 如果你用液晶显示 那么恭喜你 你要自己做一个小数显示 或者转换成字符串 如果你用串口调试工具 ...

51单片机采集的AD值的转换程序问题?
0~2.5V,对应于AD_data = 0~11111...1111(24位二进制);那么1V就是:6710886(十进制)。用24位值AD_data除以6710886,得到的整数部分就是0~5,即为电压的整数部分。再把刚才除得的余数,再除以10,取整数将得到0~9,即为电压的第一位小数;余数,再除以10,取整数将得到0~9,即为电压...

...读到的数据是十六进制的吗?另外十六进制和十进制能直接做加减法乘除...
首先回答问题:读入的数是二进制的,但是参加计算不用考虑转换。电脑中的数,严格地讲,都是二进制的!对于一个常数, 在不同的数进制之间转换时,需要按一定的方法进行。但是,不管你是什么进制的数,放在变量里,就是一样的!不需要考虑转换问题。a=254,你可以想成是16进制:0xfe,也可想成二进...

单片机AD转换问题。
例如数字式的万用表,它测量电压时,先有一个AD转换电路,把电压值转换成一个数值,然后把这个值送个单片机(当然万用表里的用的处理芯片不是单片机),单片机经过计算处理后,再把这电压值显示到显示到屏幕上。不过现在有一些比较强的单片机,其内部已经集成了AD转换器,不需要你再外接AD转换芯片。3...

怎样把51单片机读回来的AD值转换成电压值?
通常是0-5V,对应于0-11111...1111(24位二进制)那么1V就是:3355443(十进制)。用读回来的值AD_data除以3355443,得到的整数部分就是0~5,即为电压的整数部分。把AD_data除以3355443的余数,再除以0.1V所对应的数值(请自己算一下),取整数将得到0~9,即为电压的第一位小数。……取多少位...

你好你以前提出过一个ad转换中二进制与十进制相乘的问题,你最后是怎么...
我想这位同学说的是5V基准的8位AD吧,这只是一个比例关系,Dout \/ 0xff = Vin \/ 5。既然采到的数据是0x4b = 75,那么75 \/ 255 = Vin \/ 5,就可以算了Vin = 1.5V了。

单片机C51课程设计 16进制转为10进制
3、判断是否有定时器中断触发的标志,有的话就执行将数转换成BCD码(就是转换成10进制数)的过程,并显示出来。如此就完成了。至于定时器中断怎样搞,和汇编相比,更简单了,直接初始化定时器的特殊定时器,再在程序里定义中断服务程序就好了。我估计你的输入数字还没能整理,那样的话在上面的第2步里...

悬赏80! 写个C51单片机程序,能将int变量转为bit变量
比如我们平时说的数值65535,二进制就是1111 1111 1111 1111,即0xFFFF,在单片机中用两个字节存储,高字节内容是1111 1111或0xFF,低字节是1111 1111或0xFF,所以你要“十进制”转“二进制”只是多此一举。在编译器中我们用十进制方式来表示一个数字,比如你的程序中的定义的数字32769,你要知道这...

我想向你请教一下关于C51中十六进制计算的问题
而十进制数则是从0开始,到9结束 0,1,2,3,4,5,6,7,8,9 所以在单片机中,十六进制数用 char 字符形式存储,为便于区分,则用 0x作为开头 如 0x56 0xbf 0xff 等等 二进制中,则只有0和1,十六进制中的一个字符可以代表二进制的四个位 例如二进制数 1111 可以用十六进制 F 表达,二...

为什么24位的AD要转换芯片?
24位的AD要转换芯片是因为24位二进制数字位数太长,所以改用6位16进制数字来替代。2进制和16进制数字之间的转换很简单,每一位16进制数字对应四位2进制数字,这样比较简明一些。AD转换就是模数转换,可以把模拟信号转换成数字信号。AD芯片的8位,12位,16位,24位代表的是AD转换的二进制位数。比如8位...

相似回答