|
最近看到网上很多PCF8591程序,如下
- /* 读取当前的 ADC 转换值,chn-ADC 通道号 0~3 */
- unsigned char GetADCValue(unsigned char chn){
- unsigned char val;
- I2CStart();
- if (!I2CWrite(0x48<<1)){ //寻址 PCF8591,如未应答,则停止操作并返回 0
- I2CStop();
- return 0;
- }
- I2CWrite(0x40|chn); //写入控制字节,选择转换通道
- I2CStart();
- I2CWrite((0x48<<1)|0x01); //寻址 PCF8591,指定后续为读操作
- I2CReadACK(); //先空读一个字节,提供采样转换时间
- val = I2CReadNAK(); //读取刚刚转换完的值
- I2CStop();
- return val;
- }
其中第五行寻址为什么要写成0X48<<1 , 为什么不能直接写成0X90??反正这芯片的寻址是如图
还有转换的电压是怎么计算的,为什么要乘25? 本人刚学,希望大神来指导一下。- void ValueToString(unsigned char *str, unsigned char val)
- {
- val = (val*25) / 255;
- str[0 = (val/10) + '0'; //整数位字符
- str[1 = '.'; //小数点
- str[2 = (val%10) + '0'; //小数位字符
- str[3 = 'V'; //电压单位
- str[4 = '\0'; //结束符
- }
|
|