这是在比赛提供的PCF8591芯片手册里的,描述了这个芯片的IIC地址
所以综上我们可以得到,蓝桥杯板子里芯片的地址是:(1001 000X);写地址:0x90;读地址:0x91
芯片手册上的介绍:
The second byte sent to a PCF8591 device will be stored
in its control register and is required to control the device
function.
就是说,这个控制字是要写在芯片寄存器中的去设置芯片的功能;
uint8_t AdcRead()//读取一次ADC的数值
{
uint8_t _data;
_data = IIC_RecByte();//IIC读一个字节,官方驱动会给出
IIC_SendAck(0);//PCF8591读取一次就要给个回应,这样芯片才会采集下一个的值
return _data;
}
void main(void)
{
uint8_t adc=0;
UartInit();
if(Pcf8591_Adc_Init(0x03)==1)
{
printf("adc init success\r\n");
}
while (1)
{
adc=AdcRead();
printf("%bu\r\n",adc);
}
}
在读取模拟信号的时候,我们可以看到第一次读出来的数据是128,那么我们就可以用这个标志去区分自动读取多通道时切换不同通道。
void main(void)
{
uint8_t adc=0,channel=0;
UartInit();
while(Pcf8591_Adc_Init(0x04)!=1)
{
printf("adc init eeror\r\n");
Delay100ms();
}
while (1)
{
adc=AdcRead();
if(adc==128) channel=-1;
else channel=(channel+1)%4;
printf("channel is %bu,data is %bu\r\n",channel,adc);
Delay500ms();
}
}