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);
		}
	}
}
相关推荐
zhangrelay1 小时前
Arduino-MEGA-ESP单片机理论课笔记02-硬件-2026
笔记·单片机·嵌入式硬件
艾芯微科技1 小时前
钰泰 ETA5055V330DD1E|SOT-223 3.3V LDO,低压差、大电流线性稳压选型分享
网络·单片机·嵌入式硬件·集成测试·51单片机
新晨单片机设计2 小时前
S023A-基于STM32单片机智能插座【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus·单片机智能插座
威嵌神州3 小时前
恩智浦 T1022 性能怎么样?QorIQ 架构中端工业嵌入式优势解析
嵌入式硬件
weixin_690654743 小时前
龙迅#LT9611EX 现MIPI转HDMI1.4功能主推型号,分辨率高达4K30HZ,IC内置I2C无需外部12C控制。
嵌入式硬件·音视频·信号处理
EatFans3 小时前
全栈自造 Status Deck(四):硬件终于到了,从点亮屏幕到跑通第一个 Demo
单片机·物联网
qq_401700413 小时前
STM32 GPIO 精讲|推挽 / 开漏 / 上拉浮空,工程选型避坑
stm32·单片机·嵌入式硬件
创界工坊工作室4 小时前
19-基于单片机的宠物喂养控制系统设计
stm32·单片机·嵌入式硬件·proteus·宠物
深圳市恒锐丰科技杨生4 小时前
EG3116D 600V 单路半桥栅极驱动芯片|屹晶 EGmicro
嵌入式硬件·硬件工程
兴通物联科技6 小时前
自助终端涉外证件核验选型:XT2010MRZ 嵌入式护照识别模块技术解析
单片机·嵌入式硬件·计算机视觉·硬件架构