AD驱动程序

/**********************************************************
*                   									  *
*				   AD/DA驱动程序						  *
*														  *
**********************************************************/
#include<reg52.h>
#include <ic2.h>
#include <main.h>
#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);	      //个位

	  
 }  




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值