/**********************************************************
* *
* 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); //个位
}
AD驱动程序
最新推荐文章于 2023-03-28 20:47:48 发布