1.这就是LED移位的原理
2.
#include <REGX52.H>
void Delay(unsigned int xms);
unsigned char LEDNum;//LEDNum为0000 0000
void main()
{
P2=~0x01; //上电默认LED1点亮
while(1)
{
if(P3_1==0) //如果K1按键按下,LED灯往右依次亮起
{
Delay(20);
while(P3_1==0);//消抖
Delay(20);
LEDNum++; //LEDNum自增(随着K1按键按下,LEDNum二进制变大,LED灯也会往右依次亮起,
if(LEDNum>=8) //限制LEDNum自增范围
LEDNum=0;
P2=~(0x01<<LEDNum); //LED的第LEDNum位点亮
}
if(P3_0==0) //如果K2按键按下,LED灯往左依次亮起
{
Delay(20);
while(P3_0==0);//消抖
Delay(20);
if(LEDNum==0) //LEDNum减到0后变为7
LEDNum=7;
else //LEDNum未减到0,继续自减
LEDNum--;
P2=~(0x01<<LEDNum); //LED的第LEDNum位点亮
}
}
}
//延时函数,前面赋值过来的,想延时几秒直接传入参数就行
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}