51单片机开发系列——第3集 独立按键控制LED灯

①在REGX52.H文件中,变量P2表示整个8个LED灯的状态。

如果用二进制表示,一共有8位,从高位到低位依次是D8-D1。

如果用单独的变量表示对应的一个LED灯,则P2_0到P2_7分别是D1-D8。

②变量P3表示独立按键,P3_0表示独立按键K2,P3_1表示独立按键K1。

低电平代表独立按键受到压力的状态,高电平表示不受压力的状态。

DISC1:独立按键控制LED灯

#include	<REGX52.H>

void main(){
	P2_0 = 0;
	while(1){
		if(P3_0 == 0 || P3_1 == 0)
		{
			P2_0=0;
		}
		else
		{
			P2_0=1;
		}
	}
}

这段程序实现的具体功能是,当独立按键受到外力(不松手);LED灯亮。当独立按键不受外力时(松手),LED灯熄灭。

DISC2:独立按键控制LED灯的状态

这部分代码主要的功能是,控制独立按键,使得其像是电灯泡开关一样。按一下灯亮,再按一下灯灭,长此以往,P2_0的初始状态表示灭。

#include <REGX52.H>

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

void main()
{
	while(1)
	{
		if(P3_1==0)//P3_1==0表示被按下
		{
			Delay(20);
			while(P3_1==0);//按下没松手
			Delay(20);
			P2_0 = ~P2_0;//状态取反
		}
		/*P2_0=0;
		Delay(500);
		P2_0=1;
		Delay(500);*/
	}
}

DISC3:独立按键控制LED灯显示二进制

#include <REGX52.H>

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

void main(){
	unsigned char LEDNum = 0;
	while(1){
		if(P3_1==0){
			Delay(200);
			while(P3_1==0);
			//P2++;//高电平代表灭,低电平代表亮,D8-D1代表从高位到低位
			LEDNum++;
			P2=~LEDNum;
		}
	}
}

DISC4:独立按键控制LED灯移位(难点1)

#include <REGX52.H>

void Delay(unsigned int xms);		//@12.000MHz

void main(){
	unsigned char LEDNum = 0;
	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);
		xms--;
	}		
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值