独立按键控制LED灯的状态

本文介绍了如何使用独立按键控制LED灯的亮灭状态,并通过延时消抖技术处理按键抖动。示例代码展示了通过不同按键操作控制LED灯的移位效果。
摘要由CSDN通过智能技术生成

一、独立按键模块介绍

开发板上四个独立按键共阴极,当按键不按时对各自对应的IO口输出高电平1,按键按下时输出低电平0;结合对独立按键IO口输出信号的判断对其进行编程则可以控制LED灯的亮灭。

 

二、独立按键控制LED灯光

1、独立按键控制LED灯的亮灭

使用if{ }else{ }语句对第一个独立按键对应的IO口信号的判断,按下按键保持不动持续输出低电平,第一个LED灯亮,松手,按键回弹输出高电平,则LED灯灭。

#include <REGX52.H>

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

2、独立按键控制LED灯的状态

由于按键按下会跟洞开瞬间会伴随一连串的抖动,再按键按下时和松开时加入延时函数,等输出信号稳定之后再进行判断。

#include <REGX52.H>

void Delay(unsigned int xms)		
{
	unsigned char i, j;
	while(xms)
	{
				i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

void main()
{
	while(1)
	{
		if(P3_1==0)    //如果K1按下
		{
			Delay(20);    //延时20ms进行消抖
			while(P3_1==0)    //松手检测,按键保持按下的状态会进入死循环
				Delay(20);    //延时20ms进行消抖
			P2_0=~P2_0;    //对第一个LED灯的状态取反
		}
	}
}

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

#include <REGX52.H>

unsigned char LEDNum;

void Delay(unsigned int xms)		
{
	while(xms)
	{
			unsigned char i, j;

		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

void main()
{		P2_0=0;    //上电第一个LED灯点亮

	while(1)
	{	
		if(P3_1==0)    /按下K1
		{
			Delay(20);    //延时消抖
			while(P3_1==0);    //松手检测
			Delay(20);    //延时消抖
			
			LEDNum++;    //每次按下K1,LEDNum自增一次
			if(LEDNum>=8)    //越界清零,LEDNum超过8数据清零
				LEDNum=0;
			P2=~(0x01<<LEDNum);    //LED灯进行右移
		}
		if(P3_0==0)    //按下K2
		{
			Delay(20);
			while(P3_0==0);    //松手检测
			Delay(20);
			if(LEDNum==0)    //LEDNum为0时变为7
				LEDNum=7;
			else
				LEDNum--;    //每次按下K2,LEDNum自减一次
			P2=~(0x01<<LEDNum);    //LED灯进行左移
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值