Pulsación de tecla / liberación de la tecla

1

Estoy diseñando un teclado en VHDL y para propósitos de protección, deshabilito presionar una o más teclas mientras se presiona una tecla. Por ejemplo, mientras presiono "7", se ignorará una presión de "2", "3", "5", "4", "1", "0", etc. y no se escuchará ningún tono. Cada pulsación de tecla válida genera un tono. Mi teclado consta de 3 columnas y 4 filas, 12 teclas. Tengo 3 estados en mi FSM y escaneo cada columna para una pulsación de tecla válida (estados: scan_column1, scan_column2, scan_column3). Cambio de estado a estado bajo la condición cuando no se presiona ninguna tecla . De esta manera, si estoy escaneando la columna 3, todas las pulsaciones de teclas en la columna 2 y la columna 1 se ignoran y no se ven. Ahora tengo un problema final, digamos que estoy presionando "7", se escucha el tono de 7, sigo manteniendo el dedo en "7" y luego presiono "3", 3 por supuesto se ignora, pero ' Sigo sosteniendo "3" y luego suelto "7", luego 3 se convierte en una presión válida y se escucha el tono de "3". Pero 3 no es una nueva tecla presionada, se presionó mientras se presionó 7, por lo que quiero evitar la generación de tonos en este caso. ¿Alguna sugerencia? Debido a que este es un proyecto en curso, no puedo cargar mi código :(

Más detalles sobre mi teclado

    
pregunta Anarkie

1 respuesta

0

Defina un vector de bits que mantendrá el estado actual de todos los botones. Cuando detecta un borde causado por una presión, actualiza el bit apropiado (establecido en 1) en el vector. Cuando detecta el otro borde causado por un lanzamiento, actualiza el bit nuevamente (por ejemplo, de nuevo a 0). Cuando detecte una nueva tecla, presione todo lo que necesita hacer es verificar que el vector es

keypad_state = (others => '0')

para averiguar si este es el único botón que se está presionando actualmente. Si el vector no es todo 0, puede decidir no hacer nada y cuando se libera el '3' simplemente actualiza su estado en el vector y esto no hace nada ya que su código probablemente no reacciona a las liberaciones clave. De esta manera, simplemente agrega una instrucción if y elimina el problema. Si hubiera publicado algún código, podría editarlo para reflejar este mecanismo.

    
respondido por el user34920

Lea otras preguntas en las etiquetas