51单片机100例实例之11例
//项目名称:4只按键控制led移位
//项目再创作者:科技小宅神
//完成时间:2021/01/20

#include <reg51.h>
#include <intrins.h>//c51内部移位函数
#define uchar unsigned char
#define uint unsigned int
//1毫秒延时程序
void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i=200;i>0;i--);
}
}
//流水灯移动程序
void Move_LED()
{ //P1.4按下为低电平0,那么P0逐次右移一位(上移)
if((P1 &= 0x10)==0) P0 = _cror_(P0,1);
//P1.5按下为低电平0,那么P0逐次左移一位(下移)
else if((P1 &= 0x20)==0) P0 = _crol_(P0,1);
//P1.6按下为低电平0,那么P2逐次右移一位(上移)
else if((P1 &= 0x40)==0) P2 = _cror_(P2,1);
//P1.7按下为低电平0,那么P2逐次左移一位(下移)
else if((P1 &= 0x80)==0) P2 = _crol_(P2,1);
}
//主程序
void main()
{
uchar Recent_Key=0xff;
P0=0xfe;//1111 1110 初始值
P1=0xfe;//1111 1110 初始值
P2=0xfe;//1111 1110 初始值
while(1)
{
if(Recent_Key != P1)//如果P1不全部等于0xff,即全部是11111111,全部接通,
{
Recent_Key=P1;//令P1口全部接通为高电平
Move_LED();//执行流水灯移动程序
DelayMS(10);//延时,不要太久
}
}
}