程序就是下面的图片, 如果一个路采样的话没有问题,但是两个一起的话,就只有一个好使,我用串口打印出来AD采样的数值,我转动其中一个,数值不变,在转动另外一个滑动变阻器,两个数值一起变,而且是数值相同,求大神指点。
ç¨åºå°±æ¯ä¸é¢çå¾çï¼ å¦æä¸ä¸ªè·¯éæ ·çè¯æ²¡æé®é¢ï¼ä½æ¯ä¸¤ä¸ªä¸èµ·çè¯ï¼å°±åªæä¸ä¸ªå¥½ä½¿ï¼æç¨ä¸²å£æå°åºæ¥ADéæ ·çæ°å¼ï¼æ转å¨å ¶ä¸ä¸ä¸ªï¼æ°å¼ä¸åï¼å¨è½¬å¨å¦å¤ä¸ä¸ªæ»å¨åé»å¨ï¼ä¸¤ä¸ªæ°å¼ä¸èµ·åï¼èä¸æ¯æ°å¼ç¸å
ç»ä½ ä¸ä¸ªå´é´é¹°èå¸çåçæºå¼åæ¿ç¨åºåèä¸ä¸ã
/*-----------------------------------------------
å称ï¼IICåè®® PCF8591 AD/DA转æ¢
å 容ï¼ä½¿ç¨4è·¯ADä¸ç4è·¯æ£æµå¤é¨æ¨¡æéè¾å ¥ 使ç¨æ¶²æ¶æ¾ç¤º
------------------------------------------------*/
#include <reg52.h>
#include "i2c.h"
#include "delay.h"
#include "1602.h"
#include <stdio.h>
#define AddWr 0x90 //åæ°æ®å°å
#define AddRd 0x91 //读æ°æ®å°å
extern bit ack;
unsigned char ReadADC(unsigned char Chl);
bit WriteDAC(unsigned char dat);
/*------------------------------------------------
主ç¨åº
------------------------------------------------*/
main()
{
unsigned char num=0,i;
unsigned char temp[7];//å®ä¹æ¾ç¤ºåºå临æ¶åå¨æ°ç»
float Voltage; //å®ä¹æµ®ç¹åé
LCD_Init(); //åå§å液æ¶
DelayMs(20); //延æ¶æå©äºç¨³å®
LCD_Clear(); //æ¸ å±
while (1) //主循ç¯
{
for(i=0;i<5;i++) //è¿ç»è¯»5次ï¼åæåä¸æ¬¡ï¼ä»¥ä¾¿è¯»å稳å®å¼
num=ReadADC(0); //读å第1è·¯çµåå¼ï¼èå´æ¯0-255
Voltage=(float)num*5/256; //æ ¹æ®åèçµæºVREFç®åºæ¶é´çµåï¼floatæ¯å¼ºå¶è½¬æ¢ç¬¦å·ï¼ç¨äºå°ç»æ转æ¢ææµ®ç¹å
sprintf(temp,"V0 %3.2f ",Voltage);//æ ¼å¼è¾åºçµåå¼ï¼%3.2f 表示浮ç¹è¾åºï¼å ±3ä½æ°ï¼å°æ°ç¹å2ä½
LCD_Write_String(0,0,temp);
for(i=0;i<5;i++)
num=ReadADC(1);
Voltage=(float)num*5/256;
sprintf(temp,"V1 %3.2f ",Voltage);
LCD_Write_String(8,0,temp);
for(i=0;i<5;i++)
num=ReadADC(2);
Voltage=(float)num*5/256;
sprintf(temp,"V2 %3.2f ",Voltage);
LCD_Write_String(0,1,temp);
for(i=0;i<5;i++)
num=ReadADC(3);
Voltage=(float)num*5/256;
sprintf(temp,"V3 %3.2f ",Voltage);
LCD_Write_String(8,1,temp);
//主循ç¯ä¸æ·»å å ¶ä»éè¦ä¸ç´å·¥ä½çç¨åº
DelayMs(200);
}
}
/*------------------------------------------------
读AD转å¼ç¨åº
è¾å ¥åæ° Chl 表示éè¦è½¬æ¢çééï¼èå´ä»0-3
è¿åå¼èå´0-255
æä½ååæ¥ï¼
ï¼1ï¼ãåéå°ååèï¼éæ©è¯¥å¨ä»¶ã
ï¼2ï¼ãåéæ§å¶åèï¼éæ©ç¸åºééã
ï¼3ï¼ãéæ°åéå°ååèï¼éæ©è¯¥å¨ä»¶ç读åã
ï¼4ï¼ãæ¥æ¶ç®æ ééçæ°æ®ã
------------------------------------------------*/
unsigned char ReadADC(unsigned char Chl)
{
unsigned char Val;
Start_I2c(); //å¯å¨æ»çº¿
SendByte(AddWr); //åéå¨ä»¶å°å
if(ack==0)return(0);
SendByte(0x40|Chl); //åéå¨ä»¶åå°å
if(ack==0)return(0);
Start_I2c();
SendByte(AddWr+1); //1001 0001 æ¯è¯»å½ä»¤
if(ack==0)return(0);
Val=RcvByte();
NoAck_I2c(); //åééåºä½
Stop_I2c(); //ç»ææ»çº¿
return(Val);
}