51单片机独立按键控制LED灯位移

#include <REGX52.H>
void Delay(unsigned int xms);//如果子函数放在了主函数后边,一定要在主函数前面声明一下

unsigned char LEDNum;//全局变量,上电默认为0

void main()
{
	//unsigned char LEDNum=0;局部变量一定要赋初值
	P2=~0x01;
	while(1)
	{
			if(P3_1==0)//左移
			{
					Delay(20);
					while(P3_1==0);
					Delay(20);
					
					LEDNum++;
					if(LEDNum>=8)
						LEDNum=0;
					P2=~(0x01<<LEDNum);
			}
			
			if(P3_0==0)//右移
			{
					Delay(20);
					while(P3_0==0);
					Delay(20);
					
					if(LEDNum==0)
						LEDNum=7;
					else
						LEDNum--;
					P2=~(0x01<<LEDNum);
			}
	}
}

void Delay(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
  while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
  }
}

       如果子函数体放在主函数体的后边,则一定要在主函数前边进行声明;因此我们在主函数中调用其它文件中的函数时,必须在最前边进行包含头文件操作,因为头文件是对一些函数的声明。也就是说我们单片机在执行主函数之前,准备工作要做好,所有的头文件都是准备工作,主函数只负责拿过来用。

全局变量上电默认为0,所以可以不进行赋初值;

局部变量则不可以,一定要赋初值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值