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);
		}
	}
}
相关推荐
li星野2 分钟前
打工人日报#20251008
单片机·嵌入式硬件
Stanford_11062 小时前
关于嵌入式硬件需要了解的基础知识
开发语言·c++·嵌入式硬件·微信小程序·微信公众平台·twitter·微信开放平台
点灯小铭2 小时前
基于单片机的Boost升压斩波电源电路
单片机·嵌入式硬件·毕业设计·课程设计
清风6666663 小时前
基于单片机的蓝牙可调PWM波形发生器设计
单片机·嵌入式硬件·mongodb·毕业设计·课程设计
小莞尔3 小时前
【51单片机】【protues仿真】基于51单片机汽车智能灯光控制系统
c语言·单片机·嵌入式硬件·汽车·51单片机
电子科技圈4 小时前
芯科科技第三代无线SoC现已全面供货
嵌入式硬件·mcu·物联网·网络安全·智能家居·智能硬件·iot
zm5 小时前
数据结构整理
单片机·嵌入式硬件
爱吃汽的小橘5 小时前
异步串口通信和逻辑分析仪
运维·服务器·网络·单片机·嵌入式硬件·fpga开发
m0_555762905 小时前
伺服滑差补偿方案
单片机
猫头虎6 小时前
HAMi 2.7.0 发布:全面拓展异构芯片支持,优化GPU资源调度与智能管理
嵌入式硬件·算法·prompt·aigc·embedding·gpu算力·ai-native