void LedScan()
{
/*数码管操作*/
static unsigned char i=0;
static bit ledflag=0;
static unsigned char j=0;
P2=(P2&0X1F)|0X80;
P0=0XFF;
P2&=0X1F;
P2|=0X90;
P0=0XFF;
P2&=0X1F;
P2&=0X1F;
P0=0X80>>i;
P2|=0XC0;
P2&=0X1F;
P0=LedBuff[i];
P2|=0Xe0;
P2&=0X1F;
/*LED操作*/
if(led1000>=1000)
{
led1000=0;
if(ledflag==0)
{
P0=~(0X01<<j); //LED亮
P2|=0X90;
P2&=0X1F;
ledflag=1;
j++; // j 自加的位置很关键,若置于与led1000同一位置内,小灯一次点亮的顺序是LED1->LED3->LED5->LED7
} // 这是因为小灯在熄灭的同时j也会自加一次,从一个LED到下一个LED实际j自加了两次
else if(ledflag==1)
{
P0=0xff; //LED 灭
P2|=0X90;
P2&=0X1F;
ledflag=0;
}
if(j==8) j=0;}
i++;
if(i==8) i=0;
}
讲LedScan()置于中断函数即可 来源:CSDN
作者:漩涡鸣熊
链接:https://blog.csdn.net/lujunyu1/article/details/79622763