#include <REGX51.H>
#include "LCD1602.H"
#include <intrins.h>
#include <intrins.h>
void Delay1ms(G) //@12.000MHz
{
unsigned char i, j;
while(G)
{i = 12;
j = 169;
do
{
while (--j);
} while (--i);
G--;
}
}
void Delay1us(A) //@12.000MHz
{
while(A)
{
_nop_();
_nop_();
_nop_();
_nop_();
A--;
}
}
int S=0;
int D=0;
int F=0;
int G=0;
int H=0;
int J=0;
int K=0;
int L=0;
int Z=0;
int X=0;
int C=0;
int V=0;
int N=0;
int M=0;
void main()
{
Delay1ms(1000);
P1_0=0;
Delay1ms(20);
P1_0=1;
Delay1us(30);
if(P1_0==0)
{
while(P1_0==0);
while(P1_0==1);
while(P1_0==0);
Delay1us(32);
if(P1_0==1)
S=1;
}
else
{
while(1)
{
LCD_Init();
LCD_ShowString(1,3," error");
}
}
while(P1_0==0)
{
}
Delay1us(30);
if(P1_0==1)
D=1;
while(P1_0==0)
{
}
Delay1us(30);
if(P1_0==1)
F=1;
while(P1_0==0)
{
}
Delay1us(30);
if(P1_0==1)
G=1;
if(S==0,D==0,F==0,G==0)
H=0 ;//湿度的第一位数字十位
if(S==0,D==0,F==0,G==1)
H=1;
if(S==0,D==0,F==1,G==0)
H=2;
if(S==0,D==0,F==1,G==1)
H=3;
if(S==0,D==1,F==0,G==0)
H=4;
if(S==0,D==1,F==0,G==1)
H=5;
if(S==0,D==1,F==1,G==0)
H=6;
if(S==0,D==1,F==1,G==1)
H=7;
if(S==1,D==0,F==0,G==0)
H=8;
if(S==1,D==0,F==0,G==1)
H=9;
// while(P1_1==0)
// {
//
// }
// Delay1us(80);
// if(P1_1==1)
// J=1;
// while(P1_1==0)
// {
//
// }
// Delay1us(80);
// if(P1_1==1)
// K=1;
// while(P1_1==0)
// {
//
// }
// Delay1us(80);
// if(P1_1==1)
// L=1;
// if(S=0,D=0,F=0,G=0)
// Z=0 ;//湿度的第一位数字十位
LCD_Init();
LCD_ShowNum(1,5,H,1);
Delay1ms(1);
}

我只写了读取湿度十位的代码正常的应该读出来2但是我读出来是8或者9 应该的代码有问题 我用开发板带的代码就没事
if(P1_0==0)
{
while(P1_0==0);
while(P1_0==1);
while(P1_0==0);
Delay1us(32);
if(P1_0==1)
S=1;
}
你在这里的最后一个while跳出条件为P1_0!=0,但是S=1的条件是P1_0==1,即S一直为1
后面的值由s控制,s为1时,值有两个,一个是8,一个是9,其余未匹配
有帮助请点一下右上角的采纳,谢谢