#include <reg52.h> 
#include <math.h> 
#define uint unsigned int 
#define uchar unsigned char 
#define AD_CLK_WIDTH 1  
 
uchar temp0, temp1,temp2,temp3,temp4,temp5; 
uint i; 
 
uchar code table1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//0 1 2 3 4 5 6 7 8 9 - 
uchar code table2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xbf};//0. 1. 2. 3. 4. 5. 6. 7. 8. 9. - 
 
uint out; 
 
sbit AD7705_DIN=P2^6; 
sbit AD7705_DOUT=P2^5; 
sbit AD7705_SCLK=P2^2; 
sbit AD7705_DRDY=P2^4; 
sbit no1=P3^7;//数码管十位选择 
sbit no2=P3^6; //数码管个位选择 
sbit no3=P3^3; //数码管小数位选择 
sbit rest=P2^3; 
 
 
 
void delay(uint z) 
        { 
        int i,j;                                // 声明变量  
        for (i=1;i<x;i++)                // 执行x次,延迟X*1ms 
                for (j=1;j<120;j++);// 执行120次,延迟1ms 
        } 
 
 
void AD7705_Reset(void) 
{ 
uchar i; 
AD7705_SCLK =1; 
for(i=0;i<40;i++) 
  { 
    AD7705_SCLK =0; 
         
    AD7705_DIN =1;    // DIN端口连续写40个周期的高电平,保证复位 
                 
    AD7705_SCLK =1; 
  }  
  delay(1);             // 复位之后等待1MS           
} 
 
//**************************************************************************** 
//功能:往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_DIN =1; 
                else        
                        AD7705_DIN =0; 
                                                                                       
                AD7705_SCLK =1;  
                d<<= 1; 
                }  
        AD7705_SCLK =1;  
        AD7705_DIN =1; 
        } 
 
//**************************************************************************** 
//功能:从AD7705读一个字节的数据 
//参数:无 
//返回:读到的一字节数据 
//备注:无 
//**************************************************************************** 
uchar AD7705_ReadByte() 
        { 
        uchar i; 
                                        uint d=0; 
         
        while(AD7705_DRDY);// 写数据的时候不需要判断忙,只有读数据的时候才需? 
        AD7705_WriteByte(0x38); 
        AD7705_SCLK =1; 
        for(i=0;i<16;i++) // 读数据,高位在前 
                { 
                d<<= 1; 
                AD7705_SCLK =0;  
                if(AD7705_DOUT)  
                        d++; 
                AD7705_SCLK =1;  
                }  
       AD7705_SCLK =1;  
        AD7705_DIN =1; 
        AD7705_DRDY=1; 
        return d;  
        } 
 
 
 
void AD7705_Init() 
        { 
                                        uchar i;  
    for(i=10;i>0;i--)   
    {AD7705_WriteByte(0xff);} 
        AD7705_Reset();  // 复位,防止接口迷失   
        AD7705_WriteByte(0x20);    // 写ch0 clock register    
        AD7705_WriteByte(0x10);    // 2MHz时钟,无分频 50Hz数据更新速率   
        AD7705_WriteByte(0x10);//设置寄存器 
        AD7705_WriteByte(0x46);//自校正 单极性 增益1 缓冲开 
 
        delay(50); 
        }  
 
 
 
 
float AD7705_ReadVol() 
        { 
        uchar adc_h=0, adc_l=0; 
        uint  ADValue=0; 
         
 
            
        adc_h=AD7705_ReadByte(); 
        adc_l=AD7705_ReadByte(); 
        ADValue |=  adc_h; 
        ADValue<<= 8; 
        ADValue |=  adc_l; 
         
        return ADValue; 
        }  
 
 
void main() 
{ 
        TMOD = 0x21;// 定时器1 工作于方式2,8 位自动重载模式, 用于产生波特率。 
                                                        // 定时器 0 工作于方式 1,产生 1s 的 AD 间隔时间 
        TH0=15536/256;//T0 定时 50ms 
        TL0=15536%256; 
        TH1 = 0xe1;// 波特率 1000 
        TL1 = 0xe1; 
        SCON = 0x50;// 设定串行口工作方式 1 
        PCON = 0x00;// 波特率不倍增 
        TI=0;//清除发送中断标志 
        EA = 1; // 开总中断 
        ET0 = 1;//开 T0 中断 
        ET1=0; 
        TR1 = 1;// 启动 T1 
        TR0 = 1;//启动 T0 
         
        rest=1; 
         delay(10); 
        rest=0; 
         delay(10); 
        rest=1; 
         delay(10); 
         
AD7705_Init(); 
         
 
while(1) 
        { 
         out=AD7705_ReadVol(); 
                                         
         temp1=out/10000; 
         temp2=out%10000/1000; 
         temp3=out%10000%1000/100; 
         temp4=out%10000%1000%100/10; 
         temp5=out%10000%1000%100%10; 
 
 
 
 
        P1=table1[temp3]; 
        no3=0;no2=1;no1=1;        
        delay(1); 
                                P1=0xff; 
 
        P1=table1[temp2]; 
       no3=1;no2=0;no1=1; 
        delay(1); 
                                        P1=0xff; 
         
        P1=table1[temp1]; 
        no3=1;no2=1;no1=0; 
        delay(1); 
                                P1=0xff; 
                                 
 
       
} 
}
 |