51单片机-3-独立按键

  1. 独立按键控制LED亮灭
    轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开
    在这里插入图片描述
    内部结构:
    内部在这里插入图片内部描述
    独立按键原理图:
    独立按键原理图
    单片机相关引脚:
    在这里插入图片描述
    通过按键K1来控制LED闪烁,按下亮,松开灭。
#include <REGX52.H>

void main()
{
	while(1)
	{
		if(P3_1==0)
		{
			P2_0=0;
		}
		else
		{
			P2_0=1;
		}
	}
	
}
  1. 独立按键控制LED状态
    按键抖动:
    对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。
    在这里插入图片描述
    因此,在设计程序时,需要在按键按下和松开时,分别给予一个20ms左右的延时程序,来进行消除按键抖动。
#include <REGX52.H>

//软件延时程序,单位ms
void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;

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

}

void main()
{
	while(1)
	{
		if(P3_1==0)
		{
			Delay(20);//消除按键按下的抖动
			while(P3_1==0);//判断按键是否松开,如果没有,则一直等待按键按下
			Delay(20);//消除按键松开的抖动
			
			P2_0=~P2_0;
		}
	}
}
  1. 独立按键控制LED显示二进制
#include <REGX52.H>

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


void main()
{
	while(1)
	{
		if(P3_1==0)
		{
			Delay(20);
			while(P3_1==0);
			Delay(20);
			
			//按键控制LED显示二进制,法1:
			P2--;//P2一开始各端口都是高电平,即P2=1111 1111	
		}
	}
	
}

//按键控制LED显示二进制,法2:
void main()
{
	unsigned char LEDNum=0;
	while(1)
	{
		if(P3_1==0)
		{
			Delay(20);
			while(P3_1==0);
			Delay(20);
			
			LEDNum++;
			P2=~LEDNum;			
		}
	}
}
  1. 独立按键控制LED移位
#include <REGX52.H>

void Delay(unsigned int xms);

unsigned char LEDNum1;

void main()
{
	P2=0xFE;//默认LED1上电显示
	while(1)
	{
		//K1按下,led从小往大点亮
		if(P3_1==0)
		{	
			Delay(20);
			while(P3_1==0);
			Delay(20);
			
			LEDNum1++;
			
			if(LEDNum1>=8)//设置显示上限,计数超过7,即右移超过led8,则重新置0
			{
				LEDNum1=0;
			}
			P2=~(1<<LEDNum1);	
		}
		
		
		//K2按下,led从小往大点亮
		if(P3_0==0)
		{
			Delay(20);
			while(P3_0==0);
			Delay(20);
	
			if(LEDNum1==0)//设置显示下限,计数等于0,即左移超过led1,则重新置7,即最高位得led8
		  {
				LEDNum1=7;
			}
			else
				LEDNum1--;
			P2=~(1<<LEDNum1);
		}	
	}
}


void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;
	
	while(xms)
	{
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值