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

来源:百度知道 编辑:UC知道 时间:2024/06/20 21:47:20
我在编写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这种方式~~

最后 多多试验

我使用的是 V=a*5/256
这样做对吗??能得到对应的电压值吗??
对的呀。能得到对应的电压值,a 是0-255

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

C51没怎么用过。

先计算V= a*5 (a==P0), V是16位,前8位是小数点前面的整数,后8位是小数点后面的。
分别进行10进制转换
由于前八位小于5不用转换。
只要对小数点的进行转换即可,具体看一下成熟的算法

voltage = 5.00*a /256;
disdata = (uint)(voltage*1000);
disdata%10,disdata/10%10,disdata/100%10,disdata/1000
这样就把数据分离了 我这是分离成四位 你改改分离成两位就行了

完全可以,单片机最后编译成汇编执行的,汇编语言用16进制表示,但执行时是二进制。汇编里没有乘法的概念,你C里的乘法汇编要用好几条语句来实现的。所以,只要你C写得没问题,可以得到预想的结果的。

楼主可能是想得确实太多了
你不是就是想用一个数与另一个数相乘吗?
就和3*10一样的,这里当然是十进制的
那我用(0x03)*(0x0a)得到的难道就不是一个结果了吗,肯定是十进制