This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
读出来显示一直是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);
}
}
你好,
从硬件的角度来说,你的MCU是5V的I/O口么?请检查你的MCU与ADC之间是否共地,+5,+12以及参考电源输出是否正常?
软件接口方面,你的SCLK大概有多快?AD_SCLK=0; 与 AD_SCLK=1; 之间应该需要加一点延迟,不然应该无法满足数据手册第6页时序的要求,比如说tw1,tw2的要求。
附件中电路更改过了,原来的电路图,是把6脚的+5也接到REF那里去了,做出来的板子怎么调,lcd12864上总是显示00.0,附件的图是改过的,电源VDD已经不再连接REF脚,当初贪图布线方便,而且,ref输出不是也是5V吗,那我想就接一起了,结果悲剧了,这个倒底是什么问题,为什么这样接不行