51单片机独立按键

目录

1.按键介绍

当P0.0接在开关一端,同时还接一个上拉电阻拉高电平,开关另一端接地,当如果开关是理想状态下,刚开始是高电平,然后按下开关,变成低电平,松开按钮,变成高电平,这个是理想状态下,但是实际中的开关,当按下开关瞬间有一个抖动,并不是马上就是低电平,而是一个不稳定状态的电平,可能刚开始低电平,然后变成高电平,又变成低电平,可能会执行多次低电平。

解决办法,一般按键抖动时间是5到10毫秒,所以需要延时一个5到10秒后再判断按键是否按下。

2.代码

c 复制代码
#include <reg51.h>

typedef unsigned int u16;
typedef unsigned char u8;

#define SMG_A_DP_POST P0 
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;

sbit KEY1 = P3^0;
sbit KEY2 = P3^1;
sbit KEY3 = P3^2;
sbit KEY4 = P3^3;

#define KEY1_PRESS   1
#define KEY2_PRESS   2
#define KEY3_PRESS   3
#define KEY4_PRESS   4
#define KEY0_UNPRESS 0

void delay_50ms(u16 us) {
	while(us--);
}

u8 key_scan(u8 mode) {
	static u8 key = 1;	 //单次按下

	if (mode) key = 1;	 //连续按下
	if (key == 1 && (KEY1 == 0 || KEY2 == 0 || KEY3 == 0 || KEY4 == 0)) {
		delay_50ms(1000);
		key = 0;

		if (KEY1 == 0) 
			return KEY1_PRESS;
		else if (KEY2 == 0)
			return KEY2_PRESS;
		else if (KEY3 == 0)
			return KEY3_PRESS;
		else if (KEY4 == 0)
			return KEY4_PRESS;
	}
	else if (KEY1 == 1 && KEY2 == 1 && KEY3 == 1 && KEY4 == 1) {
		key = 1;
	}
	return KEY0_UNPRESS;	
}

void main() {
	u8 key = 0;
	while(1) {
		key = key_scan(0);
		if (key == KEY1_PRESS) 
			LED1 =! LED1;
		else if (key == KEY2_PRESS) 
			LED2 =! LED2;
		else if (key == KEY3_PRESS) 
			LED3 =! LED3;
		else if (key == KEY4_PRESS) 
			LED4 =! LED4;	   	
	}		   
}

3. 原理图

实现功能,当按键按下点亮LED,当按键按下熄灭LED。

相关推荐
恒锐丰小瑞7 小时前
率能SS8841T 40V/2.5A/双通道H桥驱动芯片,PWM控制接口与低导通电阻(350mΩ),用于POS打印机/安防相机/机器人
单片机·嵌入式硬件·机器人
zcmodeltech8 小时前
钢铁冶金沙盘模型控制系统设计与实现:高炉-连铸-热轧多工序联动方案
分布式·stm32·单片机·嵌入式硬件·交互
徽京人9 小时前
VS Code 接入Esp 32步骤
vscode·单片机·嵌入式硬件
QH1392923188010 小时前
Keysight N5183B N5183B 微波模拟信号发生器
网络·单片机·嵌入式硬件·集成测试·信息与通信
笨笨饿10 小时前
#110_SCH3000 平台图传系统配置指南:从 DVP 摄像头到 UVC/WiFi 双通道传输
c语言·stm32·单片机·嵌入式硬件·物联网·vim
笨笨饿12 小时前
#109_BK7258 蓝牙 A2DP 音频数据通路深度解析
python·stm32·单片机·mcu·物联网·编辑器·音视频
千秋岁rr12 小时前
5.0 TIM
单片机·嵌入式硬件
qq_4017004113 小时前
ADC基准电压与参考电压详细解读:以STM32和28335为例
stm32·单片机·嵌入式硬件
zcmodeltech15 小时前
水利水电沙盘模型控制系统设计与实现:多场景多工况联动方案
网络·stm32·嵌入式硬件·制造·多分类
2601_9667990415 小时前
CH398 技术解析:USB 3.0转千兆以太网单芯片方案与内置电源设计要点
单片机·嵌入式硬件