Botón de control de microcomputadora de un solo chip para encender la luz LED

1. Diagrama del circuito del botón

Definir cuatro pines de botón 

1. Cuando se presiona el botón, la entrada es de nivel bajo.

2. Si no se presiona el botón, el IO tiene una resistencia pull-up, que es de alto nivel

// Definir la disciplina de la clave
sbit KEY1 = P3^1;
sbit KEY2 = P3^0;
sbit KEY3 = P3^2;
sbit KEY4 = P3^3;

2. Diagrama del circuito de la lámpara LED

El nivel alto de salida del LED es brillante

// Definir el control de luz LED
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;

3. Diseño de pensamiento de programación

1. Definir la gestión de botones.

2. Definición de gestión de la luz LED.

3. Defina el valor clave del botón.

4. Defina una función para determinar si se presiona el botón.

5. Primero juzgue si el botón está presionado -> ¿qué tal si juzga que el botón no está presionado? - De lo contrario, regresa sin presionar

static u8 key =1;  // define una clave variable de tipo u8 que no se cambiará y le asigna un valor de 1 
if(mode)key=1;        // escaneo continuo de claves, aquí la palabra escaneo es 0, y múltiples escaneos son 1

if(key=1 && (KEY1==0 || KEY2==0 || KEY3==0 || KEY4==0))  // key1 ==0 está presionada, ¿por qué usar || u operador solamente si uno es cierto, ese botón está presionado

#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. Date cuenta del efecto

Supongo que te gusta

Origin blog.csdn.net/m0_68021259/article/details/132637917
Recomendado
Clasificación