51单片机,TLC1549 AD转换问题

tlc1549的C语言程序问题,AD转换后控制P2口的led灯亮,例如0-5V,分别对应1-8个led灯

#include<REG52.h>
#include<intrins.h>
#define uchar unsigned char
#define unit unsigned int
#define nop _nop_()
uchar Data;
sbit cs=P1^0; //
sbit clk=P1^1; //I/O Clock
sbit dout=P1^2; //DATA OUT
unit adc(void); //A/D转换子程序
unit result;
void delay(uchar us); //delay
main()
{
for(;;)
{float u1=0;
u1=adc();
result=(500*(u1))/(1024);//10位,2的10次方
_nop_();

}

}
unit adc(void)
{
unit result=0;
uchar i;
cs=1;
nop;
cs=0;
for(i=0;i<10;i++) //读A/D数据
{clk=0;
result=(result<<1)|dout;
clk=1;
nop;
}
Data=adc;
if (Data<128)
P2=0xFC;
else if (Data>=128)
P2=0x00;

delay(2); //延时
cs=1;
return(result); //return ad data

}

void delay(uchar us) //delay time

{while(us--);

}
如何设置if语句,让不同的电压对应不同的灯,谢谢,10位的1549转换,那么2.5V是不是应该对应512,5V对应1024,可是试了试不行啊?

你的ADC第一引脚REF+接5V参考电压了吗?还要将第三脚REF-接地才行啊。我看你的程序没问题。追问

你说的都接了

追答

那你的函数每次读取的数据是多少呢?我也写过这程序,但是没用网上的方法,自己设计函数,很好使的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-30
你的程序有问题,见时序图,cs为0时,数据已经输出了。按照你给的程序,丢失了MSB。
第2个回答  2011-09-28
uchar Data;
……
Data = adc;
……
10位的1549转换,...
====
Data,应该用整型的变量才行。
2.5V对应511,5V对应1023,这就对了。本回答被提问者采纳
相似回答