求教大神,用ADC0809和89C51单片机实现对两路模拟信号并在LCD1602交替显示?

不知道怎么回事,我们把板子焊出来后,在while(1)循环时,只显示一个数据。也就是先采集到哪个。那么LCD上面交替显示的两个量都是一样的。相当于只采集到了一个数据。通道貌似没有选中一样。但是如果只显示一个数据的话就完全正常。一在循环里面加采集两路的,就出现这样的问题。希望大神能够帮忙解决!!

仿真图:

程序:
#include <reg51.h>#include<lcd1602_IO.h>#include<intrins.h>
sbit a=P2^0;sbit ST=P3^2;sbit OE=P3^0;sbit EOC=P3^1;unsigned char N;void T0_int();
void T0_int(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256; EA=1; TR0=1; ET0=1;
}
void T0_timer() interrupt 1 using 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;N++;}
unsigned char getdata; void main(){ unsigned char T; unsigned char Z; T0_int(); LCD_INT(); while(1) { ST=0; OE=0; ST=1; CPU_DELAYTIME(1000); a=0; //===选择通道0 CPU_DELAYTIME(3); ST=0; while(EOC==0); CPU_DELAYTIME(50000); OE=1; CPU_DELAYTIME(50000); getdata=P1; CPU_DELAYTIME(50000); OE=0; CPU_DELAYTIME(50000); CLR_SCREEN(); T=getdata; LCD_PRINTF(1,4,"Temp=%d"); LCD_PRINTF(2,8,"C%d"); LCD_PRINT(2,2,4,T); CPU_DELAYTIME(5000); //============对光敏电阻量进行检测(通道7) ST=0; OE=0; ST=1; CPU_DELAYTIME(1000); a=1; CPU_DELAYTIME(3); ST=0; while(EOC==0); CPU_DELAYTIME(50000); OE=1; CPU_DELAYTIME(50000); getdata=P1; CPU_DELAYTIME(50000); OE=0; CPU_DELAYTIME(50000); CLR_SCREEN(); Z=getdata; LCD_PRINTF(1,4,"Iv=%d"); LCD_PRINTF(2,8,"cd%d"); LCD_PRINT(2,2,4,Z); CPU_DELAYTIME(5000); }}
改成两个通道检烂野腊测改成
while(1)
{
unchar num=10;
while(--num>0)
{0通道采样 }
num=10;
while(--num>饥滑0)
{7通道脊物采样 }
}
要是有仿真环境和程序直接调试,找问题会快一些,给你发了私信
建议你换一个通道试试,我曾经也出现过同样的问题,感觉有几个通道有问题,后来换了一个通道就好了。