51單片機100例實例之11例
//項目名稱:4只按鍵控制led移位
//項目再創(chuàng)作者:科技小宅神
//完成時間:2021/01/20

#include <reg51.h>
#include <intrins.h>//c51內(nèi)部移位函數(shù)
#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();//執(zhí)行流水燈移動程序
? ?DelayMS(10);//延時,不要太久
? }
?}
}