普中科技STC单片机开发板中PCF8591怎么选择利用光敏电阻和热敏电阻进行试验

这个板子中间的AIN、1、2是已经固定了的,但是我应该怎么改程序来选择不同的AD输入呢
#include<reg52.h>
#include <I2C.H>
#define PCF8591 0x90 //PCF8591 地址

//else IO
sbit LS138A=P2^2;
sbit LS138B=P2^3;
sbit LS138C=P2^4;
//此表为 LED 的字模, 共阴数码管 0-9 -
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char AD_CHANNEL;
unsigned long xdata LedOut[8];
unsigned int D[32];

/*******************************************************************
DAC 变换, 转化函数
*******************************************************************/
bit DACconversion(unsigned char sla,unsigned char c, unsigned char Val)
{
Start_I2c(); //启动总线
SendByte(sla); //发送器件地址
if(ack==0)return(0);
SendByte(c); //发送控制字节
if(ack==0)return(0);
SendByte(Val); //发送DAC的数值
if(ack==0)return(0);
Stop_I2c(); //结束总线
return(1);
}
/*******************************************************************
ADC发送字节[命令]数据函数
*******************************************************************/
bit ISendByte(unsigned char sla,unsigned char c)
{
Start_I2c(); //启动总线
SendByte(sla); //发送器件地址
if(ack==0)return(0);
SendByte(0x40); //发送数据
if(ack==0)return(0);
Stop_I2c(); //结束总线
return(1);
}
/*******************************************************************
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);
}
//******************************************************************/
main()
{ char i,j;
while(1)
{/********以下AD-DA处理*************/
switch(AD_CHANNEL)
{
case 0: ISendByte(PCF8591,0x41);
D[0]=IRcvByte(PCF8591)*2; //ADC0 模数转换1 放大2倍显示
break;

case 1: ISendByte(PCF8591,0x42);
D[0]=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[0]; // 把模拟输入 采样的信号 通过数模转换输出
if(++AD_CHANNEL>4) AD_CHANNEL=1;

第1个回答  2013-11-24
4个输入,可以通过软件配置寄存器来选择输入端。

先熟悉芯片资料,再根据原理图就弄明白了。追问

就是程序中的选通脚不知道怎么写

追答

芯片资料看透了吗,看明白了就会了。

追问

已经解决,谢谢你的回答

第2个回答  2017-01-10
PCF8591 是一个单电源低功耗的 8 位 CMOS 数据采集器件,具有 4 路模拟输入,1 路模拟输出和一个串行 I2C 总线接口用来与单片机通信。与前面讲过的 24C02 类似,3 个地址引脚 A0、A1、A2 用于编程硬件地址,允许最多 8 个器件连接到 I2C 总线而不需要额外的片选电路。器件的地址、控制以及数据都是通过 I2C 总线来传输,我们先看一下 PCF8591 的原理图
第3个回答  2013-11-25
先熟悉芯片资料