51单片机A/D转换器程序问题

//连续读5次,输入通道后多读几次,取最后一次值,以便读出稳定值 for(i=0;i<5;i++) num=ReadADC(0);// x10表示把实际值扩大10,如4.5 变成 45 方便做下一步处理 x5 表示基准电压5V num=num*5*10/256; TempData[0]=DuanMa[num/10]|0x80; TempData[1]=DuanMa[num%10];这个程序的num=num*5*10/256; 怎么回事啊 看不懂 求大神指点迷津

先说下简单的常识:对于8位ADC,单极性输入0-5V时,数字量为0-255,能够分辨的最小电压为20mV,分辨率为2的8次方即256位;接下来看下STC片内8位ADC的转换公式:DATA=256*Vin/Vcc;这个公式可以理解为:转换结果/分辨率=输入电压/基准电压 ;即:DATA/256=Vin/5;变化这个公式后就会得到:Vin=DATA*5/256;当语句num=ReadADC(0);运行后,num=DATA它是二进制数据;待到语句num=num*5*10/256;运行结束后就变成了num=Vin了这时已经转换成十进制数据了,而那个放大10备你是知道的了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-11
num=num*5*10/256;

如果是num*5/256就是真实电压值,如果是num=num*5*10/256;就是将电压扩大十倍,因为如果你没有将变量定义成浮点的话,那么算出的结果就只有个位,小数点后面的都给忽略了追问

他为啥转化为电压值啊? 直接用num不可以吗 我把num=num*5*10/256;去掉,数码管就显示不正常。为啥单通道时候
num=ReadADC(0);
TempData[6]=DuanMa[(num%100)/10];
TempData[7]=DuanMa[(num%100)%10];
没有啊???

追答

那不转换怎么显示在数码管上

第2个回答  2013-08-11
这说明你是8位AD,基准5V的话,每个码字代表5/256V,另外的10是你要求的乘系数

51单片机程序问题 stc12c5a60s2 的a\/d转换问题..
1.转换的引脚由ADC_CONTG的低3位CHS2、CHS1和CHS0控制,三位二进制能表示0~7八个数,与P1口一一对应。ADC的结构决定了它一次只能转换一个口,但是STC的转换速度达到10万次\/秒,依次转换P1.0和P1.1与同时转换差别不大。设置P1.0时,ch=0x00.设置P1.1时,ch=0x01.2.是按照一个字节读的...

51单片机接TLC2543进行A\/D转换输出数据末两位一直跳动
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一...

51单片机与AD转换程序
if(a>220&a<=240){P3=0x83;} if(a>240&a<=255){P3=0xc6;} } }

A\/D转换器的程序设计主要分哪三步
ul=XBYTE[0xffff]; \/*产生读脉冲,启动A\/D转换*\/ while (BUSY= =0); \/*等待转换完成*\/ RC=1;BYTE=0; \/*进入读模式,选择低字节*\/ ul=XBYTE[0xffff]; \/*读转换结果低8位*\/ BYTE=1; \/*选择高字节*\/ uh=XBYTE[0xffff]&0x0f;\/*读转换结果高4位*\/ u=uh*256+ul; \/*得到12...

急求:单片机MS-51,用汇编语言编写程序的问题. 高手的高分,谢谢,_百度知...
实际上,不是255对应900,而是256对应900。那么:900 \/ 256 = 3.515 把0.015忽略,由此产生的误差,小于百分之一。那么,全部使用整数的运算,有:(0~255) * 35 = (0~8925)显示的时候,只是显示前3位,即可。--- 用8位的AD转换器,精度就是这样了,和算法无关。为了提高精度,应该采用分...

请问51单片机ad采集电压0-300v降压转变成0-5v范围内,降压部分原理图和程...
把300V电压,接到两个的电阻分电路上,电阻串联有分压作用。一端接地的电阻上分压为0~5V,假如电阻取10K,那么大电阻就应该是590K。电压分压比为300\/5=60倍,所以,用AD采集0~5V电压,得到数字量,换算成电压为Ⅴd,再计算出被测电压Vx=60Vd。所以,写程序很简单,主要是A\/D转换程序并转换为...

单片机高速数据采集,A\/D转换和存储一般怎么实现?
关于高速存储——如果单片机没有做别的事情,那就用查询方式了,等待ADC转换完成,然后读取数据并写入RAM,这些操作只要几条指令就能完成的,所以能做到很快的速度。像你现在用要求的5Ksps的采样,对12MHz的51来说都能胜任,200us间隔内也能执行100条左右的指令吧,所以实现高速的存储是没问题的。

有关51单片机AD转换接口中,采样、保持电路的作用是什么?省略该电路的...
能反映原模拟信号特征)的采样信号;保持该采样值不变,可以保证AD转换的精度,消除转换误差。2 省略该电路的前提条件是: 该模拟信号变化的速度要很慢,而AD转换器速度要高速的 才可以 ,即满足香浓定理, AD转化器的工作频率要远远大于模拟信号的最高频率。呵呵 满意就选满意回答哦 ...

...现在用AT89C51单片机做电路,想用ADC0832做A\/D转换,我看见资料上说...
只要单片机能正常工作就可以。你用AT89C51单片机做电路,是仿真吗?仿真可以。如果是做实物,就别用这个单片机了,因编程太麻烦了,需要专业的编程器。用AT89S51还可以,AT89C51早就淘汰了,没有人用了。最后,还是推荐你用STC单片机,因内部就有A\/D转换器,不必外加,很方便的。

51单片机在什么情况下会产生串口中断
所说的串口中断“其他中断是在I/O口低的时候产生的”是指外部中断,它是在单片机的外部I/O口电平改变的时候产生的。而串口中断是一种内部中断,所谓内部中断,是单片机执行内部程序,由内部定时器或其他中断源触发的,通常要生成串行中断或其他中断,首先必须有中断和总中断。例如:串行中断EA=1;/...

相似回答