标题:
哪位高手帮我解释一下num=tp*1.0/255*500; 500是怎么来的来的
[打印本页]
作者:
401021606
时间:
2024-4-25 17:29
标题:
哪位高手帮我解释一下num=tp*1.0/255*500; 500是怎么来的来的
#include "STC8G.H"
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
sbit led=P5^4; //用P5^4口采集5V信号
uchar data dis_buf[4]; //显示缓存
uchar code ledduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x7f};
uchar i;
uint num;
void delay_ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=1150;y>0;y--);
}
void datapros() //数据处理函数
{
float tp;
tp=num;
num=tp*1.0/255*500;
dis_buf[3]=ledduan[num/1000];
dis_buf[2]=ledduan[num%1000/100] & 0x7f;
dis_buf[1]=ledduan[num%100/10];
dis_buf[0]=ledduan[num%10];
if((dis_buf[2]>=1)&&(dis_buf[2]<=2)) //设置显示范围内执行的功能
led=0;
else
led=1;
P1=0xff;
P3&=0x07; //P3=P3&0X07(0000 0111)
P1=dis_buf[i];
P3|=0x10<<i; //P3=P3|0X10左移i位
i++;
i%=4; //i=i%4
}
void main()
{
P1M0=0X00;
P1M1=0X00;
P2M0=0X00;
P2M1=0X00;
P3M0=0X00;
P3M1=0X00;
P4M0=0X00;
P4M1=0X00;
P5M0=0X00;
P5M1=0X10;
P_SW2|=0x80;
ADCTIM=0x3f;
P_SW2&=0x7f;
ADCCFG=0x0f;
ADC_CONTR=0x84;
while(1)
{
ADC_CONTR |= 0x40;
_nop_();
_nop_();
while(!(ADC_CONTR&0x20));
ADC_CONTR&=~0x20;
num=ADC_RES;
datapros();
delay_ms(1);
}
}
复制代码
作者:
Hephaestus
时间:
2024-4-25 18:04
500表示5V。
作者:
heyanrog
时间:
2024-4-25 18:12
500是你设的最大数据?
作者:
donglw
时间:
2024-4-25 18:45
ADC转换采样电路需要调理电路和电压基准电路,以使外部电压信号满足单片机电压范围,外部电压最大为0.01V,为了测量精度的需要,外部调理电路使其提高到4.5V,另外单片机基准采用的电压有关,位数也有关。
作者:
401021606
时间:
2024-4-25 19:21
那个500是哪里来的
作者:
13205495918
时间:
2024-4-25 20:08
我寻思这个不是表示5V吗?放大100倍方便处理数据
作者:
wulin
时间:
2024-4-25 20:39
500是5V参考电压,可以是5、50、500、5000。结果都一样。取决于你想得到的分辨率。
作者:
401021606
时间:
2024-4-26 22:03
谢谢各位大佬解答!确实是*5V*100倍,这样好处理数据!
作者:
cy009
时间:
2024-4-26 22:41
写成 num=tp*1.0*5/255*100,你就理解了
作者:
rayin
时间:
2024-4-27 08:06
ADC 的参考电压为5V, 12bit的分辨率, 那么0-4095之间的电压每一格读数就是(1/4095)x5V, 就是这么理解的.
1/255分辨率就8bit的.
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1