//你的仿真图有问题,P0要加上拉电阻
#include <REGX52.H>
#include <intrins.h>
sbit k1=P1^0;
sbit k2=P1^0;
#define uint
unsigned int#define uchar unsigned char
uchar keysign1=0,keysign2=0;
void _delay_ms(unsigned char c) //延时1ms,误差 0us
{
unsigned char a,b;
for(;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
void key(void) //按键设置程序
{
if(!k1)
{
_delay_ms (10);
while(!k1);
if( keysign1==2) keysign1=0;
}
if(!k2)
{
_delay_ms (10);
while(!k1);
if( keysign2==3) keysign1=0;
}
}
uchar ledstate(void)//LED显示程序
{
static uchar temp=0xff;
uchar temp1=0;
if(++temp==8)temp=0;
if(keysign1)
{
switch(keysign2)
{
case 0: if(++temp>7)temp=0;temp=(1<<temp);break;
case 1: if(--temp>7)temp=7;temp=(1<<temp);break;
case 2:if(++temp>7)temp=1;temp1=(1<<temp) | (1<<(temp-1));break;
}
}
else
{
temp1=0XFF;
}
return temp1;
}
void main(void)
{
while(1)
{
key();
P0=ledstate();
_delay_ms(50);//50ms
}
}