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

文章目录


1、独立按键

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

Figure1. 独立按键


2、键盘的类型

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

3、原理图示意


Figure2. 独立按键原理图


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

4、新建工程


Figure3. 新建工程


5、工程编码


Figure4. 工程编码


c 复制代码
#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数据运算


c 复制代码
#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. 工程编码(防抖操作)


c 复制代码
#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并显示二进制


c 复制代码
#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移位


c 复制代码
#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);
		}
	}
}
相关推荐
糖糖单片机设计11 小时前
基于 STM32 的公交车定位与报站系统
stm32·单片机·嵌入式硬件
祖力5511 小时前
快速学会51单片机基础
单片机·嵌入式硬件·51单片机
H_oRIZoN_12 小时前
Linux入门DAY41(51 单片机 串口与通信协议)
linux·运维·单片机
jianqiang.xue12 小时前
ESP-IDF保姆级入门41|产品级故障排查与稳定性优化全解:死机复位排查/内存泄漏定位/性能瓶颈分析/长期稳定性测试,掌握量产运维问题定位方法论
单片机·mcu·物联网·esp32
单片机仿真设计13 小时前
【proteus仿真】基于 STM32 的林区环境监控系统设计
stm32·单片机·proteus
Doraemomo14 小时前
IMX6ULL裸机开发——GPIO的使用
单片机·嵌入式硬件
笨笨饿15 小时前
#138_解决Codex要五次回复的问题
linux·stm32·单片机·嵌入式硬件·mcu·物联网·嵌入式实时数据库
susplus15 小时前
【51单片机通信协议】串口
51单片机·串口·嵌入式·通信协议
晊晌_h15 小时前
嵌入式从0到精通——51单片机(二)
嵌入式硬件·51单片机
云泽80815 小时前
STM32 USART 详解(七):超时设置、非阻塞发送与 ReadLine 实现
stm32·单片机·嵌入式硬件