03 51单片机之独立按键控制LED状态

发布于:2025-07-16 ⋅ 阅读:(21) ⋅ 点赞:(0)


1、独立按键

键盘是电子系统中人机对话的重要组成部分,是人向机器发出指令、输入信息的必须设备。键盘在单片机应用系统中是使用最广泛的一种数据输入设备。键盘是由多个按键组成的。按键的工作原理:按键通常是一种常开型开关,常态下按键的两个触点处于断开状态,按下按键时它们才闭合
在这里插入图片描述

Figure1. 独立按键

2、键盘的类型

通常键盘有编码键盘和非编码键盘两种。编码键盘通过硬件电路产生被按按键的键值码,这种键盘使用方便,所需程序简单,但硬件电路复杂,如计算机的键盘,单片机则通常不采用编码键盘。而软件编程来识别的称为非编码键盘,非编码键盘硬件电路简单。在单片机组成的各种系统中,最常用的是非编码键盘。

3、原理图示意

在这里插入图片描述

Figure2. 独立按键原理图

注意:按键一端与IO口连接,另外一端接地。通过控制IO口输出高电平即可检测按键是否按下,当按下时IO口会被拉低,松开后IO口回到高电平

4、新建工程

在这里插入图片描述

Figure3. 新建工程

5、工程编码

在这里插入图片描述

Figure4. 工程编码

#include <REGX52.H>

void main()
{
	while(1)
	{
		/* Press on the Button. */
		if(0 == P3_1)
		{
			/* Light up LED. */
			P2_0 = 0;
		}
		else
		{
			/* Light off LED. */
			P2_0 = 1;
		}
	}
}

6、C51数据运算

在这里插入图片描述

Figure5. C51数据运算

#include <REGX52.H>

void main()
{
	while(1)
	{
		/* Press on the Button. */
		if((0 == P3_1)&&(0 == P3_0))
		{
			/* Light up LED. */
			P2_0 = 0;
		}
		else
		{
			/* Light off LED. */
			P2_0 = 1;
		}
	}
}

7、按键抖动

对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。
在这里插入图片描述

Figure6. 按键抖动

8、工程编码(防抖操作)

在这里插入图片描述

Figure7. 工程编码(防抖操作)

#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()
{
	while(1)
	{
		/* Press on the Button. */
		if(0 == P3_1)
		{
			/* Delay time is 20ms. */
			DelayMs(20);
			while(0 == P3_1);
			/* Delay time is 20ms. */
			DelayMs(20);
			P2_0 = ~P2_0;
		}
	}
}

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

在这里插入图片描述

Figure8. 独立按键控制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 = 0; // 8 bit
	
	while(1)
	{
		/* Press on the Button. */
		if(0 == P3_1)
		{
			/* Delay time is 20ms. */
			DelayMs(20);
			while(0 == P3_1);
			/* Delay time is 20ms. */
			DelayMs(20);
			/* After Power on. P2 pin is high level status. P2 = 1111 1111 */
			LedNum++;
			P2 = ~LedNum;
		}
	}
}

9、独立按键控制LED移位

在这里插入图片描述

Figure9. 独立按键控制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 = 0; // 8 bit
	P2 = ~0x01; // init Led status after power on.
	while(1)
	{
		/* Press on the Button. */
		if(0 == P3_1)
		{
			/* Delay time is 20ms. */
			DelayMs(20);
			while(0 == P3_1);
			/* Delay time is 20ms. */
			DelayMs(20);
			/* After Power on. P2 pin is high level status. P2 = 1111 1111 */
			LEDNum++;
			if(LEDNum >= 8)
				LEDNum = 0;
			P2 = ~(0x1 << LEDNum);
		}
		
		if(0 == P3_0)
		{
			/* Delay time is 20ms. */
			DelayMs(20);
			while(0 == P3_0);
			/* Delay time is 20ms. */
			DelayMs(20);
			/* After Power on. P2 pin is high level status. P2 = 1111 1111 */
			if(LEDNum <= 0)
				LEDNum = 8;
			else
				LEDNum--;
			P2 = ~(0x1 << LEDNum);
		}
	}
}


网站公告

今日签到

点亮在社区的每一天
去签到