微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ADDA系列PCF8591的驱动程序

ADDA系列PCF8591的驱动程序

时间:11-18 来源:互联网 点击:

/*******************************************************************
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);
}

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

Start_I2c(); //启动总线
SendByte(sla+1); //发送器件地址,地址加一的原因是地址字的最后一位0为写,1为读
if(ack==0)return(0);
c=RcvByte(); //读取数据0

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

//******************************************************************/
main()
{ char i,j;

while(1)
{/********以下AD-DA处理*************/
switch(AD_CHANNEL)
{
case 0: ISendByte(PCF8591,0x41);
D[0]=IRcvByte(PCF8591)*2; //ADC0 模数转换1,乘以2的原因是把结果00~0xff换算成0~510,除以100就是实际采样值了
break;

case 1: ISendByte(PCF8591,0x42);
D[1]=IRcvByte(PCF8591)*2; //ADC1 模数转换2
break;

case 2: ISendByte(PCF8591,0x43);
D[2]=IRcvByte(PCF8591)*2; //ADC2模数转换3
break;

case 3: ISendByte(PCF8591,0x40);
D[3]=IRcvByte(PCF8591)*2; //ADC3 模数转换4
break;

case 4: DACconversion(PCF8591,0x40, D[4]/4); //DAC 数模转换
break;
}

// D[4]=400; //数字--->>模拟输出
D[4]=D[3];
if(++AD_CHANNEL>4) AD_CHANNEL=0;

/********以下将AD的值送到LED数码管显示*************/

LedOut[0]=Disp_Tab[D[1]%10000/1000];
LedOut[1]=Disp_Tab[D[1]%1000/100];
LedOut[2]=Disp_Tab[D[1]%100/10]|0x80;
LedOut[3]=Disp_Tab[D[1]%10];

LedOut[4]=Disp_Tab[D[0]%10000/1000];
LedOut[5]=Disp_Tab[D[0]%1000/100];
LedOut[6]=Disp_Tab[D[0]%100/10]|0x80;
LedOut[7]=Disp_Tab[D[0]%10];

for( i=0; i<8; i++)
{ P1 = LedOut[i];

switch(i) //使用switch 语句控制138译码器 也可以是用查表的方式 学员可以试着自己修改
{
case 0:LS138A=0; LS138B=0; LS138C=0; break;
case 1:LS138A=1; LS138B=0; LS138C=0; break;
case 2:LS138A=0; LS138B=1; LS138C=0; break;
case 3:LS138A=1; LS138B=1; LS138C=0; break;
case 4:LS138A=0; LS138B=0; LS138C=1; break;
case 5:LS138A=1; LS138B=0; LS138C=1; break;
case 6:LS138A=0; LS138B=1; LS138C=1; break;
case 7:LS138A=1; LS138B=1; LS138C=1; break;

}

for (j = 0 ; j<90 ;j++) { ;} //扫描间隔时间
}

P1 = 0;

}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top