这是读取ad程序
/******************************************************************/
sbit AD7705_DATE=P1^0;
sbit AD7705_SCLK=P1^1;
sbit AD7705_DRDY=P3^2;
/*************************************************/
//延时
/*************************************************/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=128;y>0;y--);
}
//****************************************************************************
//功能: DIN端口连续写40个周期的高电平,保证复位
//参数:
//返回:无
//备注:无
//****************************************************************************
void AD7705_Reset(void)
{
uchar i;
AD7705_SCLK =1;
AD7705_DATE =1;
for(i=0;i<40;i++)
{
AD7705_SCLK =0;
AD7705_DATE =1;
AD7705_SCLK =1;
}
delay(1000);
}
//****************************************************************************
//功能:往AD7705写1个字节数据
//参数:要写入AD7705的数据
//返回:无
//备注:无
//****************************************************************************
void AD7705_WriteByte(uchar d)
{
uchar i;
AD7705_SCLK =1;
for(i=0;i<8;i++)
{
AD7705_SCLK =0;
if(d&0x80)
AD7705_DATE=1;
else
AD7705_DATE=0;
AD7705_SCLK =1;
d<<=1;
}
AD7705_SCLK =1;
AD7705_DATE=1;
}
//****************************************************************************
//功能:从AD7705读一个字
//参数:无
//返回:读到的一字
//备注:无
//****************************************************************************
uint AD7705_Read()
{
uchar i;
uint d;
AD7705_WriteByte(0x38);
AD7705_SCLK =1;
for(i=0;i<16;i++) // 读16位数据,高位在前
{
d<<=1;
AD7705_SCLK=0;
if(AD7705_DATE)
d++;
AD7705_SCLK =1;
}
AD7705_SCLK =1;
AD7705_DATE =1;
return d;
}
//****************************************************************************
//功能:AD7705初始化
//参数:无
//返回:无
//备注:无
//****************************************************************************
void AD7705_Init()
{
AD7705_Reset(); // 复位,防止接口迷失
delay(1000);
AD7705_WriteByte(0x20);
AD7705_WriteByte(0x04);
AD7705_WriteByte(0x10);
AD7705_WriteByte(0x46);
delay(1000);
}
/*************************************************/
//主函数
/*************************************************/
void main(void)
{
IT1=1;//外部中断1
EX1=1;
EA=1;
P1=0xff;
AD7705_Init();
while(1)
{
f=k*out1;
temp1=f/10000;
temp2=f%10000/1000;
temp3=f%10000%1000/100;
temp4=f%10000%1000%100/10;
temp5=f%10000%1000%100%10;
display(temp1+146,1,3,19);//液晶显示读数
display(temp2+146,1,3,21);
display(temp3+146,1,3,23);
display(temp4+146,1,3,25);
display(temp5+146,1,3,27);
}
}
void int1() interrupt 2
{
out1=AD7705_Read();
}
|