Compartir tecnología

Desarrollo integrado de 51 microcontroladores: 5. Botón, operación de botón de matriz y simulación de protues

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


提示

1 introducción del botón

1.1 tipos de claves

Una llave es un botón o interruptor que se utiliza para controlar la conexión y desconexión de un dispositivo o circuito electrónico. Suelen tener dos estados: abierto y cerrado. La siguiente es una introducción a algunos botones de cambio comunes:

  1. Interruptor de botón: Este es un botón simple que conecta un circuito cuando se presiona y rompe el circuito cuando se suelta. A menudo se utilizan para controlar el interruptor de encendido/apagado de un dispositivo o activar una función específica.
  2. Interruptor de palanca: Un interruptor de palanca es un interruptor con una posición fija que se puede cambiar manualmente. Por lo general, tienen dos o más posiciones fijas (como abierto y cerrado), y al cambiar la posición del interruptor se conecta o desconecta un circuito.
  3. Interruptor deslizante: un interruptor deslizante es un interruptor que cambia de estado deslizando un botón. Suelen tener dos posiciones, y el circuito se conecta o desconecta deslizando el control deslizante de una posición a la otra.
  4. Interruptor de palanca: un interruptor de palanca es un interruptor que cambia de estado girando un botón. Suelen tener una posición media y dos posiciones extremas, conectándose o desconectándose el circuito girando el botón de una posición a otra.
  5. Interruptor de botón: un interruptor de botón es similar a un interruptor de presión, pero generalmente tiene un mecanismo de resorte que regresa automáticamente a su posición original cuando se suelta el botón. A menudo se utilizan en aplicaciones en las que es necesario mantener pulsado un botón para mantener la conexión y soltarlo para interrumpir el circuito.
  6. Interruptor electrónico: Un interruptor electrónico es un interruptor que utiliza componentes electrónicos (como transistores o relés) para controlar la conexión y desconexión de un circuito.Pueden controlar el estado de conmutación mediante señales eléctricas u otros métodos de activación.

1.2 Escenarios de aplicación de botones

Algunos escenarios de aplicación de botones mecánicos:

  1. Teclado de computadora: Los teclados mecánicos son muy utilizados en el campo de la informática. Debido a que las teclas mecánicas brindan una mejor sensación táctil y un mejor desplazamiento de las teclas, la experiencia de escritura y juego es más cómoda y precisa.
  2. Equipo de juego: las teclas mecánicas se utilizan ampliamente en consolas de juegos, controladores de juegos y teclados mecánicos de juegos. La retroalimentación táctil y el rápido tiempo de respuesta de los botones mecánicos ayudan a mejorar el rendimiento del control del juego.
  3. Equipos de control industrial: los botones mecánicos tienen una gran durabilidad y son adecuados para escenarios que requieren operaciones frecuentes en equipos de control industrial, como paneles de control mecánico, consolas de robots, etc.
  4. Equipos de comunicación: los botones mecánicos se pueden utilizar en equipos de comunicación como teléfonos móviles, teléfonos y walkie-talkies para proporcionar una mejor pulsación y confiabilidad de los botones.
  5. Equipos de audio: Las teclas mecánicas son muy utilizadas en equipos de audio, como mezcladores, paneles de control de audio, teclados musicales, etc.
  6. Equipo médico: los botones mecánicos se usan comúnmente en equipos médicos, como instrumentos médicos, paneles de control de mesas de operaciones, etc. La estabilidad y confiabilidad de los botones mecánicos son cruciales para el funcionamiento normal de los equipos médicos.
  7. Equipos automotrices y de aviación: los botones mecánicos se pueden usar en paneles de control de automóviles, paneles de instrumentos de aviones y otros escenarios que requieren alta confiabilidad y durabilidad.
    La durabilidad, la sensación y la confiabilidad de las llaves mecánicas las convierten en la opción preferida en muchas áreas. Ya sea para mejorar la eficiencia del trabajo o brindar una mejor experiencia de usuario, los botones mecánicos se utilizan ampliamente en muchos escenarios de aplicaciones.

circuito de 2 botones

El diagrama esquemático del circuito clave en la placa de desarrollo es el siguiente. J11 se utiliza para controlar si los botones 0/4/8/ están en el teclado matricial o teclas independientes. Las 16 teclas están controladas por un conjunto de puertos P3X.

Insertar descripción de la imagen aquí

Los botones reales de la placa de desarrollo se muestran en la figura.
Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

Diseño de software de 3 botones

3.1 Implementación de botones

Primero, implementamos botones independientes. Use una tapa de puente para cortocircuitar J11 y 2.3, de modo que los botones 0/4/8/C se puedan usar de forma independiente.
1. Ingeniería de software, creamos dos archivos nuevos, c51_key.c y c51_key.h, aplicamos include.h en c51_key.c, incluimos c51_key.h en include.h y agregamos los dos archivos al proyecto como se muestra en la imagen.

Insertar descripción de la imagen aquí

Como queremos mostrar el valor del botón, utilizamos el tubo digital frontal para mostrar los datos.
La función de visualización se muestra a continuación.

/********************************************************
函数名称:sys_keynum_ledon
函数功能:显示按键数值
入口参数:按键数值
出口参数:
修    改:
内    容:
********************************************************/
void sys_keynum_ledon(unsigned char num)
{
	//根据原理图,将P0口全部输出高电平,P2选择0号数码管
	P0=EL[num];//取显示数据,段码
	P2=0;  	//取位码
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

En c51_key.c, implemente la detección de claves

bit key1=0;   //定义按键位置
bit key2=0;
bit key3=0;
bit key4=0;


/********************************************************
函数名称:sys_key_single
函数功能:按键检测
入口参数:
出口参数:按键数值
修    改:
内    容:
********************************************************/
static unsigned char key1_history = 0;//缓存上一次按键的结果
unsigned char sys_key_single(void)
{
	key1=P30;   //定义按键位置
	key2=P31;
	key3=P32;
	key4=P33;

	if(!key1)  //按下相应的按键,数码管显示相应的码值
	{
		key1_history = 1;
		return 1;
	}
	else if(!key2)
	{
		key1_history = 2;
		return 2;
	}
	else if(!key3)
	{
		key1_history = 3;
		return 3;
	}
	else if(!key4)
	{
		key1_history = 4;
		return 4;
	}
	else
	{
		return key1_history;
	}
	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

Citado en el programa principal principal:

#include "includes.h"



/*------------------------------------------------
                    延时子程序
------------------------------------------------*/
void delay(unsigned int cnt) 
{
 while(--cnt);
}

/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{
	//8个指示灯的操作
	sys_led();
	sys_led_test();
	sys_led_test1();
	
	sys_ledtube_on1();
	sys_ledtube_on2();
	
	//主循环中添加其他需要一直工作的程序
	while (1)
	{
		sys_keynum_ledon(sys_key_single());
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

3.2 Método de filtrado de botones

/********************************************************
函数名称:sys_key_single
函数功能:按键检测,带有消抖策略
入口参数:
出口参数:按键数值
修    改:
内    容:
********************************************************/
static unsigned char key1_history = 0;//缓存上一次按键的结果
unsigned char sys_key_single(void)
{
	key1=P30;   //定义按键位置
	key2=P31;
	key3=P32;
	key4=P33;

	if(!key1)  //按下相应的按键,数码管显示相应的码值
	{
		delay(1000);
		if(!key1)
		{
			key1_history = 1;
			return 1;
		}
		else
		{
			return key1_history;
		}
	}
	else if(!key2)
	{
		delay(1000);
		if(!key2)
		{
			key1_history = 2;
			return 2;
		}
		else
		{
			return key1_history;
		}
	}
	else if(!key3)
	{
		delay(1000);
		if(!key3)
		{
			key1_history = 3;
			return 3;
		}
		else
		{
			return key1_history;
		}
	}
	else if(!key4)
	{
		delay(1000);
		if(!key4)
		{
			key1_history = 4;
			return 4;
		}
		else
		{
			return key1_history;
		}
	}
	else
	{
		return key1_history;
	}
	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74

3.3 Diseño del software del botón Matrix

// Muestra el valor del código de segmento 01234567, que se puede ver correspondiente al diagrama esquemático y muestra el estado de configuración del nivel de punto alto del pin correspondiente a diferentes gráficos.

unsigned char const EL[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
		                  	 0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F
  • 1
  • 2
unsigned char sys_key_board(void)
{
	unsigned char key = 0x00;
	unsigned char num = 0x00;
	key=keyscan();  //调用键盘扫描
	if(key == 0xFF)
	{
		num = key1_history;
	}
	else
	{
		switch(key)
		{
			case 0xee:num = 0x0;break;//0按下相应的键显示相对应的码值
			case 0xde:num = 0x1;break;//1 按下相应的键显示相对应的码值 
			case 0xbe:num = 0x2;break;//2
			case 0x7e:num = 0x3;break;//3
			case 0xed:num = 0x4;break;//4
			case 0xdd:num = 0x5;break;//5
			case 0xbd:num = 0x6;break;//6
			case 0x7d:num = 0x7;break;//7
			case 0xeb:num = 0x8;break;//8
			case 0xdb:num = 0x9;break;//9
			case 0xbb:num = 0xA;break;//a
			case 0x7b:num = 0xB;break;//b
			case 0xe7:num = 0xC;break;//c
			case 0xd7:num = 0xD;break;//d
			case 0xb7:num = 0xE;break;//e
			case 0x77:num = 0xF;break;//f
			default:num = key1_history; break;
		}
		
		key1_history = num;
	}
	return num;
}


/*------------------------------------------------
              键盘扫描程序
------------------------------------------------*/
unsigned char keyscan(void)  //键盘扫描函数,使用行列反转扫描法
{
	unsigned char cord_h,cord_l;//行列值中间变量
	P3=0x0f;            //行线输出全为0
	cord_h=P3&0x0f;     //读入列线值
	if(cord_h!=0x0f)    //先检测有无按键按下
	{
		delay(100);        //去抖
		if(cord_h!=0x0f)
		{
			cord_h=P3&0x0f;  //读入列线值
			P3=cord_h|0xf0;  //输出当前列线值
			cord_l=P3&0xf0;  //读入行线值
			return(cord_h+cord_l);//键盘最后组合码值
		}
	}
	return(0xff);     //返回该值
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

3.4 Simulación de Protues de botón

Botón independiente para mostrar el resultado, interruptor DIP, conecta un extremo del botón a tierra

Insertar descripción de la imagen aquí

Simulación de teclas del teclado matricial:Insertar descripción de la imagen aquí

4 Resumen de operaciones clave

En aplicaciones de microcontroladores, el diseño de confiabilidad de la detección de claves es crucial para garantizar una entrada correcta y un funcionamiento estable del sistema. A continuación se muestran algunos principios de diseño para mejorar la confiabilidad de la detección de claves:

  1. Elimine la fluctuación de las teclas: la fluctuación de las teclas se refiere a la breve señal inestable que se genera cuando se presiona o suelta un botón. Para eliminar la fluctuación, se pueden utilizar métodos de eliminación de fluctuación de hardware o software. En el lado del hardware, se pueden usar condensadores externos o redes RC para filtrar la fluctuación. En términos de software, se pueden utilizar retrasos de software o máquinas de estado para estabilizar señales clave.
  2. Utilice resistencias pull-up/pull-down externas: al utilizar una resistencia pull-up o pull-down externa conectada al pin de la llave, puede asegurarse de que la tecla permanezca estable cuando no se presiona. Hacer esto evita señales flotantes cuando no se presionan las teclas.
  3. Algoritmos de retardo y antirrebote: la implementación de algoritmos de retardo y antirrebote adecuados en el software puede mejorar la confiabilidad de la detección de pulsaciones de teclas. El retraso puede garantizar un estado de clave estable y evitar activaciones falsas. El algoritmo antirrebote puede filtrar la fluctuación al presionar una tecla para garantizar que solo se detecten operaciones válidas al presionar una tecla.
  4. Detección y confirmación múltiples: para mejorar la confiabilidad, se pueden utilizar múltiples mecanismos de detección y confirmación de claves. Por ejemplo, se puede usar un temporizador o interrupción de software para detectar periódicamente el estado de la clave, y se pueden usar múltiples confirmaciones para garantizar la activación efectiva de la clave.
  5. Búfers de entrada y máquinas de estado: use búferes de entrada para almacenar la entrada de pulsaciones de teclas y luego use una máquina de estado para procesar la entrada. La máquina de estado puede rastrear el estado de las claves y manejar eventos clave para garantizar la corrección y estabilidad de las operaciones clave.
  6. Aislamiento de interferencias de la fuente de alimentación y el cable de tierra: Para evitar la influencia de la interferencia de la fuente de alimentación y el retorno del cable de tierra en la señal clave, se pueden tomar medidas de aislamiento adecuadas. Por ejemplo, utilice planos de alimentación y de tierra separados, o utilice filtros para reducir la interferencia.
  7. Mecanismos de tolerancia a fallas para hardware y software: Diseñe mecanismos de tolerancia a fallas para proteger la confiabilidad de las entradas clave cuando ocurren errores o condiciones anormales. Por ejemplo, se pueden utilizar detección de redundancia, detección de suma de comprobación, manejo de errores y mecanismos de recuperación, etc.
    En general, un diseño confiable de detección de claves debe considerar de manera integral varios factores en el hardware y el software, y realizar la optimización y los ajustes adecuados de acuerdo con escenarios de aplicación específicos. Mediante un diseño e implementación adecuados, se puede garantizar la estabilidad, precisión y confiabilidad de las claves.