51单片机历程3——独立按键控制LED灯

一、独立按键按键控制LED灯点亮和熄灭,首先先看独立按键原理图

在原理图中可以看到独立按键与单片机的连接情况,分别连接单片机P30,P31,P32,P33口,这里注意K1连接的是单片机的P31口,K2连接的是单片机的P30口

#include <REGX52.H>

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

void main()
{
	P2_0 = 0;
	while (1)
	{
		if (P3_1 == 0)
		{
			Delayms(20);
			while (P3_1 == 0);
			Delayms(20);
			
			P2_0 = ~P2_0;
		}
	}
}

使用延时函数,延时20毫秒,进行对于独立按键的软件消抖。

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

#include <REGX52.H>

void Delayms(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=0x01;
	while(1)
	{
		if(P3_1==0)
		{
			Delayms(20);
			while(P3_1==0);
			Delayms(20);
			
			P2=~LEDNum++;
		}
	}
}

按键同上处理方式,此处由于LED灯是低电平触发的,所以有一个按位取反的操作

三、独立按键控制LED灯移位

#include <REGX52.H>

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

unsigned char LEDNum = 0;

void main()
{
	P2 = ~0x01;
	while (1)
	{
		if (P3_1==0)
		{
			Delayms(20);
			while (P3_1 == 0);
			Delayms(20);
			
			LEDNum++;
			if(LEDNum >= 8)
			{
				LEDNum = 0;
			}
			P2 = ~(0x01<<LEDNum);
		}
		if (P3_0 == 0)
		{
			Delayms(20);
			while (P3_0 == 0);
			Delayms(20);
			
			if (LEDNum == 0)
			{
				LEDNum = 7;
			}
			else
			{
				LEDNum--;
			}
			P2 = ~(0x01<<LEDNum);
		}
	}
}

独立按键依旧按照以上处理,在处理移位操作时,注意反方向移位时,有一个位数的差别。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值