单片机-控制按键点亮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、实现效果

相关推荐
全栈游侠1 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_1 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技4 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计4 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
小龙报5 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
范纹杉想快点毕业5 小时前
嵌入式与单片机开发核心学习指南——从思维转变到第一性原理的深度实践
单片机·嵌入式硬件
Industio_触觉智能5 小时前
瑞芯微RK3566开发板规格书,详细参数配置,型号EVB3566-V1,基于RK3566核心板SOM3566邮票孔封装
嵌入式硬件·开发板·rk3568·rk3566·核心板·瑞芯微
czwxkn5 小时前
4STM32(stdl)TIM定时器
stm32·单片机·嵌入式硬件
Love Song残响6 小时前
NVIDIA显卡终极优化指南
stm32·单片机·嵌入式硬件
qq_672592756 小时前
电源芯片为什么发热
单片机·嵌入式硬件