51单片机STC89C52RC——2.2 独立按键控制LED亮灭Plus

目的

当独立K1按键按一下(立即松开),LED D1点亮。再按一下K1(立即松开)LED D1熄灭。

与前一节《51单片机STC89C52RC------2.1 独立按键控制LED亮灭》当独立K1按键按下时LED D1 点亮,松开D1熄灭 效果不一样。

一,STC单片机模块

二,独立按键

2.1 独立按键位置

2.2 独立按键电路图

这里要注意一个设计的bug

P3_1 引脚对应是K1

P3_0 引脚对应是K2

要实现按一下点亮、再按一下熄灭,我们就需要分析按键上的电压变化。

对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会立即断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动 。如上图。

具体在程序上我们就需要按照这个图做相应的处理。

cpp 复制代码
		if(P3_1==0)			//如果K1按键按下
		{
			Delay(15);		//延时消抖
			while(P3_1==0);	//松手检测
			Delay(15);		//延时消抖			
			P2_0=~P2_0;		//LED1取反
		}

三,创建Keil项目

详细参考:51单片机STC89C52RC------创建Keil项目-CSDN博客

四,代码

cpp 复制代码
#include <REGX52.H>

/**
 * 函    数:延时函数 毫秒
 * 参    数:ms 延时多少毫秒
 * 返 回 值:无
 */
void Delay_ms(int ms)	//@12.000MHz
{
	unsigned char data i, j;
	while(ms--)
	{ 
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}
/**
 * 函    数:主函数
 * 参    数:无
 * 返 回 值:无
 */
void main()
{
	while(1)
	{
		if(P3_1==0)			//如果K1按键按下
		{
			Delay_ms(15);		//延时消抖
			while(P3_1==0);	//松手检测 一直按着没松手
			Delay_ms(15);		//延时消抖			
			P2_0=~P2_0;		//LED1取反
		}
	}
}

五,代码编译、下载到51单片机

代码编译请参考

《51单片机STC89C52RC------代码编译-CSDN博客》

代码下载请参考

《51单片机STC89C52RC------STCAI-ISP代码下载-CSDN博客》

六,效果

相关推荐
szxinmai主板定制专家9 小时前
X86 工控机 vs RK3588 异构主控:AMR 控制器 BOM、散热、长期运维对比
运维·stm32·单片机·嵌入式硬件·fpga开发·am62x
HQB202611 小时前
屹晶微电子 EG1130|2‑24V 输入 / 最高 28V 输出 内置 MOS 异步升压 DC‑DC|SOT23‑6|摄像头 / 车充 / 电池充电电源
嵌入式硬件·硬件工程
泛凡(Linyongui)12 小时前
基于 CW32L010 的智能厨卫调温旋钮方案--低成本 EC21 编码旋钮全解析
单片机·嵌入式硬件·c#
十年磨一剑~13 小时前
Linux 内核中断处理机制与软硬件协同流程
linux·嵌入式硬件
糖糖单片机设计14 小时前
基于单片机的热水器节能控制系统
单片机·嵌入式硬件
数字新视界15 小时前
数字孪生技术赋能智能化转型与创新实践
嵌入式硬件·物联网·系统架构·机房管理·动力与环境监控系统
HQB202615 小时前
屹晶微电子 EG1195|10‑120V/10A+ 外置 MOS 异步降压控制器|ESOP‑8|电动车转换器 / 快充 / 工业电源
嵌入式硬件·硬件工程
不悔哥16 小时前
开源LineageOS:旧手机刷上开源系统
嵌入式硬件·智能手机·开源
服务器硬件项目经理17 小时前
《超节点修仙录》· 第一卷·炼气期【第04话】 超节点 vs 普通服务器——不就是多插了几张卡吗?
运维·服务器·人工智能·嵌入式硬件·深度学习·机器学习
一次调频AGCAVC17 小时前
一次调频系统控制柜的组成及一次调频装置主机功能详述
人工智能·嵌入式硬件