AD驱动程序

/**********************************************************
*                   									  *
*				   AD/DA驱动程序						  *
*														  *
**********************************************************/
#include
#include 
#include 
#define  PCF8591 0x90    //PCF8591 地址

unsigned char AD_CHANNEL;
unsigned char  D[10];
unsigned long xdata  LedOut[8];



/*******************************************************************
函数: ISendByte()
功能:ADC发送字节[命令]数据函数               
*******************************************************************/
bit ISendByte(unsigned char sla,unsigned char c)
{
   Start_I2c();              //启动总线
   SendByte(sla);            //发送器件地址
   if(ack==0)return(0);
   SendByte(c);              //发送数据
   if(ack==0)return(0);
   Stop_I2c();               //结束总线
   return(1);
}



/*******************************************************************
函数:char IRcvByte()
功能:ADC读字节数据函数               
*******************************************************************/
unsigned char IRcvByte(unsigned char sla)
{  unsigned char c;

   Start_I2c();          //启动总线
   SendByte(sla+1);      //发送器件地址
   if(ack==0)return(0);
   c=RcvByte();          //读取数据0

   Ack_I2c(1);           //发送非就答位
   Stop_I2c();           //结束总线
   return(c);
}



/*******************************************************************
函数:ad()
功能:实现AD转换,将收到的数值保存在全局变量中               
*******************************************************************/
void ad()
{ 

   for(AD_CHANNEL=0;AD_CHANNEL<=3;AD_CHANNEL++)
   {
      ISendByte(PCF8591,0x41);
             D[0]=IRcvByte(PCF8591)*2;   //ADC0 模数转换1  放大2倍显示
	  ISendByte(PCF8591,0x42);
             D[1]=IRcvByte(PCF8591)*2;   //ADC1  模数转换
	  ISendByte(PCF8591,0x43);
             D[2]=IRcvByte(PCF8591)*40;   //ADC2	模数转换3, *40 标准化
	  ISendByte(PCF8591,0x40);
             D[3]=IRcvByte(PCF8591)*4;    //ADC3   模数转换4
  }

                                           //%表示求余 /表示求商
    // state[2]=D[2]/10;
	 guang[0]=(char)(D[2]%10000/1000+0X30);//千位
     guang[1]=(char)(D[2]%1000/100+0X30);  //百位
	 guang[2]=(char)(D[2]%100/10+0X30);    //十位
     guang[3]=(char)(D[2]%10+0X30);        //个位

    // state[3]=D[3]/10;
	 co2[0]=(char)(D[3]%10000/1000+0X30); //千位
     co2[1]=(char)(D[3]%1000/100+0X30);   //百位
	 co2[2]=(char)(D[3]%100/10+0X30);     //十位
     co2[3]=(char)(D[3]%10+0X30);	      //个位

	  
 }  




你可能感兴趣的:(嵌入式)