#include<reg52.h>
#include<intrins.h>
void scan ();
void delay(int x);
void display(int x);
int num=0;//存放按键次数
sbit p3_4=P3^4;
sbit p2_0=P2^0;
sbit p2_1=P2^1;
int code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
main()
{
P1=0xfe;
while(1)
{
scan();
display(num);
}
}
void scan()
{
if(p3_4==0)
{
delay(10);
if(p3_4==0)
{
P1=_crol_(P1,1);
num++;
while(!p3_4);
}
}
}
void delay(int x)
{
int i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void display(int x)//请看这个函数
{
int ge,shi;
ge=x%10;
shi=x/10;
p2_0=0; //开启位选
P0=table[ge];//按一次后为什么是十位加一,而且进位到个位了呢,个位和十位反了,是程序不对还是原理图我看的不对求指教
p2_0=1;
p2_1=0;
P0=table[shi];
p2_1=1;
}

------解决思路----------------------
程序似乎没错,那就是数码管的pin脚搞反了吧
------解决思路----------------------
你的图显示,P2_0控制最左边的数码管,P2_1控制第二个,我们看到的两位数,不是左边是十位,右边是个位吗。就是高位在左,低位在右,你的明显就是把弄反了,程序里面弄反了。
------解决思路----------------------
两位弄反了 修改一下就好
------解决思路----------------------
这个不需要提问吧,自己调试下就好了。