下面是我写的代码,为什么数码管一直显示1?哪里写错了吗?

#include
#define uchar unsigned char
#define uint unsigned int

sbit DQ=P1^0;
sbit duanxuan=P2^6;
sbit weixuan=P2^7;

void shuma0()
{
weixuan=1;
P0=0xff; //把位选全部打开,使8个数码管都能亮
weixuan=0;
P0=0x00;
duanxuan=1;
P0=0xc0;
duanxuan=0;
while(1);
}

void shuma1()
{
weixuan=1;
P0=0xff; //把位选全部打开,使8个数码管都能亮
weixuan=0;
P0=0x00;++
duanxuan=1;
P0=0xf9;
duanxuan=0;
while(1);
}
void delay(uchar i)
{
while(i--);
}

void main()
{
P2=0x00;
delay(20);
while(1)
{
if(DQ==1)
{
delay(10);
shuma1();
}
if(DQ==0)
{
delay(10);
shuma0();
}
}
}

DQ一直不变啊,所以 main() 里面的 while 循环一直执行 shuma1()

不是加了一个if判断语句了吗?怎么一直不变,该怎么改才好?

因为单片机的端口的初始化为高电平,由sbit DQ=P1^0;可知上面的程序中DQ=1,因此会一直运行shuma1();这就是为什么会一直显示“1”的原因了。

系统卡在shuma1函数中的while(1)中了。看你要写成什么样子,一般没有这样的写法的。