读出来显示一直是0.00
#include<reg52.h>
#include<intrins.h>
#include<51_12864.h>
#define uchar unsigned char
#define uint unsigned int
sbit AD_CS=P1^3;
sbit AD_SCLK=P1^1;
sbit AD_SDO=P1^2;
uchar table[]="0123456789jk";
uchar str[3];
//************初始化tlc4545****************************************
void init_tlc4545()
{
AD_CS=0;
AD_SCLK=1;
AD_SCLK=0;
AD_SCLK=1;
AD_SCLK=0;
AD_SCLK=1;
AD_SCLK=0;
AD_CS=1;//拉高复位初始化结束
_nop_();
_nop_();
}
//***********读取AD转化结果*********************************************************
unsigned int read_tlc4545()
{
uint i,temp,j;
AD_SCLK=1;
AD_CS=1;
_nop_();
AD_CS=0;
for(i=0;i<16;i++) //16个时钟周期
{
AD_SCLK=0;
if(AD_SDO)
{
temp=(temp<<1)|0x0001;
}
else
temp=temp<<1;
AD_SCLK=1;
}
AD_SCLK=0; //8个时钟周期
AD_SCLK=1;
AD_SCLK=0;
AD_SCLK=1;
AD_SCLK=0;
AD_SCLK=1;
AD_SCLK=0;
AD_SCLK=1;
AD_SCLK=0;
AD_SCLK=1;
AD_SCLK=0;
AD_SCLK=1;
AD_SCLK=0;
AD_SCLK=1;
AD_SCLK=0;
AD_SCLK=1;
//总共24个时钟周期
AD_CS=1;
Delay_ms(10); //延时保证转换时间足够
return temp;
}
void main()
{
unsigned int temp;
unsigned int value;
lcdinit(); //12864初始化
init_tlc4545();// tlc4545初始化
disply_string(0x80,"电压采集测试");//液晶显示默认字符
while(1)
{
value=read_tlc4545(); //读取AD转换值
temp=(value*5/65535)*100; //AD值处理
str[0]=temp/100+0x30;
str[1]=(temp/10)%10+0x30;
str[2]=temp%10+0x30;
disply_string(0x90,str);
}
}