Cómo utilizar el interruptor de codificación giratorio
Tiene tres funciones: giro a la izquierda, giro a la derecha y pulsación. Los pines 4 y 5 son los interruptores que se empujan hacia abajo en el medio. Los pines 1, 2 y 3 suelen ser los pines intermedios 2. Después de que los pines 1 y 3 levante la resistencia, cuando la perilla. se gira hacia la izquierda o hacia la derecha, en 1, el pin 3 tiene salida de señal de pulso.
Esta es información estándar:
Al programar un microcontrolador, es difícil distinguir entre giros hacia la izquierda y hacia la derecha. Utilice un osciloscopio para observar las dos salidas de este interruptor cuando gira hacia la izquierda. y derecha.
La señal del pin tiene una diferencia de fase, como se muestra en la siguiente figura:
Se puede observar que si la salida 1 es de nivel alto, la salida 2 tendrá un nivel alto. un nivel alto, y luego el interruptor girará en el sentido de las agujas del reloj cuando la salida
esté en un nivel alto y la salida 2 parezca baja, debe girar en el sentido contrario a las agujas del reloj.
Entonces, en el microcontrolador al programar. , solo necesita juzgar si la salida 1 es de nivel alto y el estado de la salida 2 en ese momento puede determinar si está girando hacia la izquierda
o hacia la derecha.
Existe otro tipo de 3 pines, que se usa de la misma manera que el anterior excepto que no tiene interruptor de botón.
Referencia:
#include "reg51.h"
#define uint unsigned int
sbit CodingsWitch_A=P1_1;
sbit CodingsWitch_B=P1_2;
uint CodingsWitchPolling()//
{
static Uchar Aold, Bold //Se definen dos variables Usado; para guardar la última vez que se llamó a este método para codificar el nivel de los dos pines del switch
static Uchar st //Se define una variable para guardar si hubo dos; anterior Los pines están todos en alto voltaje
estado plano
uint tmp = 0;
if(CodingsWitch_Aamp;amp;CodingsWitch_B)
st = 1; //
if(st) //Si st es 1, realice los siguientes pasos
{
if(CodingsWitch_A==0amp ; amp ;CodingsWitch_B==0) //Si los dos pines del interruptor de codificación actual
están ambos en el nivel inferior, realice los siguientes pasos
{
if( Bold) //Alto significa que el interruptor de codificación está girando en la dirección de aumentar
{
st = 0;
tmp;
}
if(Aold) //Alto significa que el interruptor de codificación está girando en la dirección decreciente
{
st = 0 ;
p>tmp-- //Supongamos el valor de retorno
}
}
}
Aold = CodingsWitch_A; / /
Bold = CodingsWitch_B; //Almacenamiento
return tmp;