单片机-控制按键点亮LED灯

1、按键电路图

定义四个按键引脚

1、按键按下 为 输入为低电平

2、按键不按下 IO有上拉电阻,为高电平

// 定义 按键的 管教

sbit KEY1 = P3^1;

sbit KEY2 = P3^0;

sbit KEY3 = P3^2;

sbit KEY4 = P3^3;

2、LED灯电路图

LED 输出高电平为亮

// 定义LED灯 管教

sbit LED1 = P2^0;

sbit LED2 = P2^1;

sbit LED3 = P2^2;

sbit LED4 = P2^3;

3、编程思想设计

1、定义按键管教

2、定义LED灯管教

3、定义按键的键值

4、定义一个函数 来判断按键是否被按下

5、先判断 按键是否被按下--> 在判断没有按下按键怎么样-->否则返回 没有按下

static u8 key =1; // 定义一个不被改变的u8 类型的 变量 key 赋值为1
if(mode)key=1; // 连续扫描按键,这里给 是单词扫描为0 ,多次扫描为1

if(key=1 && (KEY1==0 || KEY2==0 || KEY3==0 || KEY4==0)) // key1 ==0 为按下, 为什么用 || 或运算符 只有有一个为真,就是那个按键按下了

复制代码
#include "reg52.h"

// 重新命名类型
typedef unsigned char u8;
typedef unsigned int u16;

// 定义 按键的 管教
sbit KEY1 = P3^1;
sbit KEY2 = P3^0;
sbit KEY3 = P3^2;
sbit KEY4 = P3^3;

// 定义LED灯 管教
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;


// 使用宏定义独立按键按下的键值
#define KEY1_PRESS 1
#define KEY2_PRESS 2
#define KEY3_PRESS 3
#define KEY4_PRESS 4
#define KEY_UNPRESS 0
// 延时函数
void delay_times(u16 times)
{
	while(times--);
}

// 按键函数
u8 key_scan(u8 mode)
{
	static u8 key =1;  // 定义一个不被改变的u8 类型的 变量 key 赋值为1 
	if(mode)key=1;	   // 连续扫描按键,这里给 是单词扫描为0 ,多次扫描为1
	if(key=1 && (KEY1==0 || KEY2==0 || KEY3==0 || KEY4==0))  // key1 ==0 为按下, 为什么用 || 或运算符 只有有一个为真,就是那个按键按下了
	{
	 	delay_times(1000);  // 消抖  1000us = 10 ms
		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 KEY_UNPRESS; 
}

// 主函数
void main()
{
	u8 key=0;
	while(1)
	{
		key=key_scan(1);	  // key_scan 有返回值需要被接收   
		if(key==KEY1_PRESS)
			LED1=~LED1;		  // LED1灯 取反 发光
		else if(key==KEY2_PRESS)
			LED2=~LED2;
		else if(key==KEY3_PRESS)
			LED3=~LED3;
		else if(key==KEY4_PRESS)
			LED4=~LED4;	
	}
}

4、实现效果

相关推荐
上海合宙LuatOS20 分钟前
全栈工程师实战手册:LuatOS日志系统开发指南!
java·开发语言·单片机·嵌入式硬件·物联网·php·硬件工程
公子无缘27 分钟前
【嵌入式】记一次解决VScode+PlatformIO安装卡死的经历
vscode·stm32·单片机·mcu·platformio
昊昊昊昊昊明40 分钟前
十天学会嵌入式技术之51单片机—day-9
单片机·嵌入式硬件·51单片机
欢乐熊嵌入式编程1 小时前
智能手表蓝牙 GATT 通讯协议文档
嵌入式硬件·目标跟踪·规格说明书·智能手表
whaosoft-1432 小时前
51c嵌入式~电路~合集27
嵌入式硬件
Camellia03112 小时前
嵌入式学习--江协51单片机day5
嵌入式硬件·学习·51单片机
7yewh2 小时前
FPGA前瞻篇-计数器设计与实现实例
arm开发·驱动开发·嵌入式硬件·fpga开发·硬件架构·硬件工程·精益工程
小石(努力版)5 小时前
嵌入式STM32学习——外部中断EXTI与NVIC的基础练习⭐
stm32·单片机·学习
檀越剑指大厂6 小时前
T-BOX硬件方案深度解析:STM32与SD NAND Flash存储的完美搭配
stm32·单片机·嵌入式硬件
7yewh7 小时前
MCU程序加密保护(一)闪存读写保护法 加密与解密
单片机·嵌入式硬件