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);
		}
	}
}
相关推荐
soulermax3 小时前
数字ic后端设计从入门到精通11(含fusion compiler, tcl教学)全定制设计入门
嵌入式硬件·fpga开发·硬件架构
会编程的小孩3 小时前
stm32驱动双步进电机
stm32·单片机·嵌入式硬件
weixin_1122334 小时前
基于STM32单片机车牌识别系统摄像头图像处理设计的论文
图像处理·stm32·单片机
国科安芯4 小时前
抗辐照与国产替代:ASM1042在卫星光纤放大器(EDFA)中的应用探索
网络·单片机·嵌入式硬件·安全·硬件架构
TESmart碲视5 小时前
一台显示器上如何快速切换两台电脑主机?
单片机·计算机外设·电脑·显示器·智能硬件
DIY机器人工房6 小时前
关于字符编辑器vi、vim版本的安装过程及其常用命令:
linux·stm32·单片机·嵌入式硬件·编辑器·vim·diy机器人工房
风之子npu7 小时前
后仿之debug记录
单片机·嵌入式硬件
芯巧电子8 小时前
PSpice软件快速入门系列--11.如何进行PSpice AA电应力(Smoke)分析
单片机·嵌入式硬件
景彡先生9 小时前
STM32 RTOS 开发基础:从任务管理到同步机制的全面解析
stm32·单片机·嵌入式硬件