Cómo utilizar el microcontrolador 89C51 y 8279 para realizar la visualización del circuito de interfaz del teclado
Capítulo 6 Aplicación de la tecnología de interfaz de microcontrolador
Al diseñar varios sistemas de aplicación de microcontroladores, es necesario ampliar muchos dispositivos de interfaz externos para aprovechar al máximo la función de control inteligente del microcontrolador. Por ejemplo, expandir la interfaz del teclado y el dispositivo de visualización puede realizar la función de diálogo persona-computadora; expandir la interfaz de conversión A/D puede realizar la detección y conversión de varias señales analógicas externas; expandir la interfaz de conversión D/A puede convertir señales digitales en; señales analógicas. Esto completa la conducción del objeto de control. Este capítulo presentará principalmente circuitos comunes de interfaz de conversión de teclado, pantalla (LED, LCD), A/D y D/A.
Sección 1 Circuito de interfaz del teclado
El teclado es el dispositivo de entrada más utilizado en las computadoras y es el vínculo entre el diálogo persona-computadora. Según su forma estructural, se puede dividir en teclado sin codificación y teclado codificado.
Los teclados de codificación utilizan métodos de hardware para generar códigos de teclas. El teclado puede generar automáticamente códigos de teclado cada vez que se presiona una tecla, con una gran cantidad de teclas y una función antirrebote. Este tipo de teclado es fácil de usar, pero el hardware es complicado. El teclado utilizado por la PC es un teclado de codificación. Los teclados sin codificación solo proporcionan el estado de funcionamiento de los interruptores de tecla y sus códigos de tecla están determinados por el software. Este tipo de teclado tiene menos teclas y hardware simple. Se usa ampliamente en varios sistemas de aplicaciones de microcontroladores. Aplicación de teclados sin codificación.
1. Teclado independiente
Según el método de conexión entre el teclado y el microcontrolador, se puede dividir en teclado independiente y teclado matricial. Los teclados independientes son independientes entre sí. Cada tecla ocupa una línea de puerto de E/S. El estado de funcionamiento de las teclas en cada línea de puerto de E/S no afectará el estado de funcionamiento de otras teclas. Este tipo de programa de software clave es simple, pero ocupa muchas líneas de E/S (una línea de puerto solo puede conectar una tecla) y es adecuado para sistemas con una pequeña cantidad de aplicaciones de teclado.
La Figura 6-1 muestra el circuito de aplicación de cuatro botones independientes. El programa del teclado es el siguiente:
1. Prueba de cierre de clave, comprobar si hay cierre de clave
KCS: MOV P1, #0FFH
MOV A, P1
CPL A
ANL A, #0FH
RET
Si hay un enlace cerrado, entonces (A≠0), si no hay ningún enlace cerrado, entonces (A=0).
2. Antirrebote
Después de probar que una clave está cerrada, se debe realizar el procesamiento antirrebote. Debido a la elasticidad mecánica del botón cuando está cerrado, el botón no se encenderá de forma inmediata y estable cuando esté cerrado, y no se desconectará inmediatamente cuando se apague. Por lo tanto, aparecerá voltaje en el momento en que se cierre. el botón está cerrado y desconectado
Jitter, como se muestra en la Figura 6-2. La duración de la fluctuación del teclado es generalmente de 5 a 10 ms. El fenómeno de la fluctuación hará que la CPU procese una operación clave varias veces, lo que puede causar errores. Por lo tanto, se deben hacer esfuerzos para eliminar las consecuencias adversas de la fluctuación. Mediante el procesamiento antirrebote, se puede obtener el estado estable de cierre y apertura del botón. Hay dos métodos de eliminación de rebotes: hardware y software: el método de hardware consiste en agregar un circuito antirrebote; por ejemplo, el método de eliminación de rebotes por hardware se puede lograr mediante un flip-flop RS; el método de software consiste en ejecutar un retraso de 10 ms después de presionar el primer teclado; Después del programa, confirme si la tecla está realmente presionada para evitar fluctuaciones. Después de que la señal sea estable, escanee la tecla nuevamente. Generalmente se utilizan métodos de software.
3. Utilice el método de consulta para determinar la posición de la llave
Como se muestra en la figura, si una llave está cerrada, el pin del microcontrolador correspondiente ingresa un nivel bajo.
4. Prueba de liberación de tecla
Solo se puede realizar una operación de función de tecla una vez que el teclado está cerrado, por lo que debe esperar a que se suelte la tecla antes de realizar la operación de función de tecla; de lo contrario, el sistema repetirá la misma operación de tecla varias veces después de cerrar la llave una vez. (Para las llaves de interruptor, no es necesario esperar a que se suelte la llave).
El programa es el siguiente:
CLAVE: ACALL KCS; comprobar si hay una clave para cerrar o no
JZ RETURN si no la hay; tecla para cerrar
ACALL DELAY; tecla cerrada, retraso de 12 ms para eliminar la fluctuación
CLAVE0: JNB ACC.0, CLAVE1 no clave 0, verifique la siguiente clave
KSF0: ACALL DELAY; sí 0 tecla, ajuste el retraso y espere a que se suelte la tecla
ACALL KCS compruebe si la tecla está liberada
JNZ KSF0; la tecla no se libera
ACALL FUN0 si la tecla ha sido liberada, ejecuta la función de la tecla 0
JMP RETURN
KEY1: JNB ACC.1; , TECLA2; detectar tecla 1
KSF1: ACALL DELAY
p>
ACALL KCS
JNZ KSF1
ACALL FUN1
TECLA3: JNB ACC.3, RETORNO; detección Clave 3
KSF3: ACALL DELAY
ACALL KCS
JNZ KSF3
ACALL FUN3
RETURN: RET; retorno de subrutina
2. Teclado matricial
El teclado matricial también se llama teclado matricial de filas, consulte la Figura 6-3. En la figura, las 8 líneas de puerto del puerto P1 se utilizan como líneas de 4 filas y 4 líneas de columnas respectivamente, y 16 teclados están conectados en la intersección de las filas y columnas. En comparación con los teclados independientes, la tasa de utilización de los recursos de la línea del puerto del microcontrolador se ha duplicado. Sin embargo, si se necesitan más teclados, se requiere la expansión de la interfaz, como se muestra en la Figura 6-4. En la figura, el chip 8155 se usa para la expansión del teclado, el puerto PA se usa como puerto de salida, 8 líneas de puerto se usan como líneas de columna, el puerto de PC se usa como puerto de entrada y 4 líneas de puerto se usan como fila líneas, lo que da como resultado un teclado matricial de 32 teclas. Este tipo de teclado utiliza un método de escaneo para detectar cierres de teclas e identificar códigos de teclas, por lo que se denomina teclado con método de escaneo.
(1) Principio de funcionamiento del teclado de escaneo
Figura 6-4 Circuito de aplicación de teclado matricial de 32 teclas
1. Prueba de cierre de tecla
En la Figura 6-4, un extremo de la línea de fila del teclado se conecta a la fuente de alimentación de +5 V a través de una resistencia y el otro extremo se envía al microcontrolador a través de la PC 8155. puerto. Un extremo de cada línea de columna se conecta al microcontrolador a través del puerto 8155PA y el otro extremo se deja flotando. Primero, el puerto PA envía un nivel bajo a todas las líneas de columna y luego el puerto de PC ingresa el estado de cada línea de fila. Si el estado de la línea de la fila es alto, significa que no hay ninguna clave cerrada; si hay un nivel bajo en el estado de la línea de la fila, significa que hay una clave cerrada.
Supongamos que la dirección del puerto 8155A es 0101H y la dirección del puerto C es 0103H. La subrutina de prueba de cierre de clave KCS es la siguiente:
KCS: MOV DPTR, #0101H. dirección de puerto
MOV A,#00H; el puerto A envía 00H
MOVX @DPTR,A
INC DPTR
INC DPTR; establecer la dirección del puerto C
MOV A,@DPTR; leer el puerto C
CPL A; si no se cierra ninguna clave, todos los valores serán 0
ANL A,#0FH; Escudo A mordisco alto
RET
La función de este programa es comprobar si una llave está cerrada. Si una llave está cerrada, (A. )≠0, en caso contrario (A)=0.
2. La eliminación de fluctuaciones
todavía utiliza el método de retraso del software.
3. Identificación de la posición de la llave
Para poder determinar con precisión la posición de la llave cerrada, cada llave debe estar codificada. Según la estructura del teclado matricial, se adopta el método de reconocimiento de teclas de escaneo de líneas. Haga que una determinada línea de columna sea de nivel bajo. Si no hay una clave cerrada en esta línea de columna, el estado de cada línea de fila es de nivel alto; si hay una clave cerrada en la línea de columna, la línea de fila correspondiente pasa a un nivel bajo. Por lo tanto, el código de clave de la clave cerrada se puede calcular en función del número de línea de fila y el número de línea de columna. El escaneo comienza desde la primera columna, es decir, el puerto PA primero genera 0FEH, y luego el puerto de PC ingresa el estado de la línea de la fila para determinar qué fila tiene una clave cerrada. Si no hay ninguna clave cerrada, se genera 0FDH para detectar la clave. estado de cierre de cada fila en la siguiente columna, y así sucesivamente.
De acuerdo con la numeración de cada clave en la Figura 6-4, el código de clave de cada clave se puede calcular según la siguiente fórmula:
Código de clave = número de clave de la primera fila + número de columna
4. Prueba de liberación de teclas
(2) Programa de escaneo de teclado
EKY: ACALL KCS; compruebe si una tecla está cerrada
JNZ LK1; transferir para eliminar jitter
TECLA AJMP; regresar si no se presiona ninguna tecla
LK1: ACALL DELAY; retraso de 12 ms para eliminar jitter
ACALL KCS; la clave se cierra nuevamente No
JZ KEY ; Si la clave está cerrada, escanee la clave para calcular el código de clave
MOV R2, #0FEH ;
MOV R4, #00H; Establecer número de columna inicial
XYL: MOV DPTR,#0101H; Crear dirección de puerto A
MOV A,R2
MOVX @DPTR,A; valor inicial del escaneo de salida
INC DPTR
INC DPTR; Establecer dirección del puerto C
MOVX A,@DPTR; Leer puerto C
JB ACC.0,LINE1; La primera línea está cerrada sin clave y la segunda línea está marcada
MOV A,#00H; con una clave y se establece el primer valor clave de la primera línea
AJMP KJS; Ir al código de clave calculado
LINE1: JB ACC.1,LINE2; cerrado sin clave, vaya a la tercera línea
MOV A, #08H Si la segunda línea tiene una clave, establezca el primer valor de clave de la segunda línea
AJMP KJS; Ir al código de clave de cálculo
LINE2: JB ACC.2,LINE3 No. Tres filas están cerradas sin clave y la cuarta fila está marcada
MOV A,#10H ; La tercera fila se cierra con una clave y se establece el primer valor clave de la tercera fila
AJMP KJS; Transferir Ir al código de clave calculado
LINE3: JB ACC. 3,NEXT; No hay una clave en la cuarta línea, verifique la siguiente columna
MOV A,#18H Hay una clave en la cuarta línea Cerrar, establezca el primer valor de clave de la cuarta línea
KJS: AGREGAR A,R4; calcular el código clave
PUSH ACC;guardar el código clave
KSF: ACALL DELAY
ACALL KCS; si la llave está liberada, si aún está cerrada, espere un retraso
> JNZ KSF
POP ACC Si se libera la clave, el código de clave envía A
RET
NEXT: INC R4 El número de escaneo de la columna aumenta; por 1
p>
MOV A,R2
JNB ACC.7,KEY ; La octava columna ha sido escaneada, luego continúe con el siguiente ciclo de escaneo
RL A ; Establece la siguiente columna a escanear Valor
MOV R2,A
AJMP XYL ;Escanea la siguiente columna
Después de que este programa sea ejecutado, el código clave se guarda en el acumulador A. El programa principal puede ejecutar el programa de función correspondiente según el código clave en el acumulador A.
(3) Método de control de interrupción del escaneo del teclado
En el sistema de microcontrolador, además de procesar el teclado, la CPU también realiza procesamiento de datos, visualización de resultados y otros controles diversos. , por lo que el procesamiento del teclado no debería consumir demasiado tiempo de la CPU, pero se debe garantizar que la CPU pueda detectar el trabajo del teclado. Para mejorar la eficiencia de la CPU, se puede utilizar el método de escaneo de interrupciones. Cuando no se cierra ninguna tecla, la CPU maneja su propio trabajo. Cuando se cierra una tecla, se genera una solicitud de interrupción y la CPU ejecuta la subrutina de escaneo del teclado y realiza la función correspondiente.
La Figura 6-5 es el circuito de escaneo del teclado usando el modo de interrupción. En comparación con la Figura 6-3, este circuito utiliza una puerta AND de 4 entradas para generar interrupciones de teclado. Su terminal de entrada está conectado a cada línea de fila y su terminal de salida está conectado al terminal de entrada de interrupción externa de 8031. Cuando no hay ningún teclado cerrado, cada terminal de entrada de la puerta AND es de nivel alto, y el terminal de salida es de nivel alto cuando se cierra una tecla, es de nivel bajo, por lo que se aplica una interrupción a la CPU; Si la CPU abre una interrupción, responderá a la interrupción del teclado y ejecutará la subrutina de escaneo del teclado.
Sección 2 Circuito de interfaz de pantalla LED
1. Pantalla LED
La pantalla LED (diodo emisor de luz) es una pantalla digital que utiliza diodos emisores de luz como elemento. Campo de visualización. El dispositivo tiene las características de visualización clara, bajo costo, configuración flexible e interfaz simple y fácil con el microcontrolador. Ha sido ampliamente utilizado en sistemas de aplicaciones de microcontroladores.
1. Estructura y clasificación de la pantalla LED
El interior de la pantalla LED está compuesto por diodos emisores de luz de 7 segmentos, por lo que también se le llama pantalla LED de siete segmentos, ya que se utiliza principalmente para mostrar varios datos digitales. símbolos, también se le llama tubo digital LED. Cada pantalla también tiene un diodo emisor de luz en forma de punto (representado por el símbolo DP), que se utiliza para mostrar el punto decimal. La Figura 6-6 muestra el símbolo y el diagrama de pines de la pantalla LED. Según su estructura interna, las pantallas LED se pueden dividir en dos tipos: pantallas LED de cátodo positivo y ánodo positivo, como se muestra en la Figura 6-7.
(a)***Estructura del cátodo (b)***Estructura del ánodo
Figura 6-6 Símbolos y diagrama de pines de la pantalla LED Figura 6-7 Estructura interna de la pantalla LED Figura
(1) ***Pantalla LED del cátodo. La Figura 6-7(a) muestra la estructura interna de una pantalla LED de cátodo ***. En la figura, los cátodos de cada diodo están conectados entre sí, y cuando el terminal común está conectado a un nivel bajo, si se aplica un nivel alto al ánodo de un determinado segmento, el LED de ese segmento se encenderá y emitirá luz. , mientras que el segmento que ingresa un nivel bajo no emitirá luz.
(2) ***Display LED de ánodo. La Figura 6-7(b) muestra la estructura interna de la pantalla LED del ánodo. En la figura, los ánodos de cada diodo están conectados entre sí, y cuando el terminal común está conectado a un nivel alto, si se aplica un nivel bajo al cátodo de un determinado segmento, el LED de ese segmento se encenderá y emitirá luz. , mientras que el segmento que ingresa un nivel alto no emitirá luz.
Los tubos digitales LED suelen venir en tres tipos: rojo, verde y amarillo, siendo el rojo el más utilizado. Debido a los diferentes materiales luminiscentes de los diodos, los tubos digitales se pueden dividir en alto brillo y brillo general. Al aplicar, se decide si se agrega un circuito controlador según las especificaciones y el modo de visualización del tubo digital.
2. Código de segmento de la pantalla LED
La pantalla LED de 7 segmentos puede utilizar dos métodos: decodificación de hardware y decodificación de software. En los circuitos digitales, se han introducido métodos de visualización y decodificación de hardware, como el uso de 74LS47 para lograr la decodificación y visualización. Aquí presentamos principalmente el método de software para lograr la decodificación y visualización. Los datos binarios agregados a la pantalla correspondientes a varios caracteres de la pantalla se denominan código de segmento. En el tubo digital, el diodo emisor de luz de siete segmentos más un punto decimal suman 8 segmentos, por lo que el código del segmento es un número binario de 8 bits, es decir, un byte. Debido a los diferentes métodos de iluminación, los códigos de segmento de los tubos digitales LED positivos y negativos son diferentes. Consulte la Tabla 6-1 para obtener más detalles.
Tabla 6-1 Tabla de códigos de segmento de tubo digital LED
Fuente ***Código de segmento de ánodo***Código de segmento de cátodo Fuente***Código de segmento de ánodo***Código de segmento de cátodo
0 C0H 3FH 9 90H 6FH
1 F9H 06H A 88H 77H
2 A4H 5BH B 83H 7CH
3 B0H 4FH C C6H 39H
4 99H 66H D A1H 5EH
5 92H 6DH E 86H 79H
6 82H 7DH F 8EH 71H
7 F8H 07H apagado FFH 00H
8 80H 7FH
2. Tecnología de visualización paralela LED
1. Uso de 8155 como circuito de interfaz paralela de pantalla LED
En los sistemas de aplicaciones de microcomputadoras de un solo chip, generalmente hay pantallas LED de varios dígitos y se utilizan métodos de visualización dinámica durante la programación. La llamada pantalla dinámica se refiere al uso de un microcontrolador para controlar la pantalla para que se ilumine poco a poco, en lugar de hacerlo al mismo tiempo. Debido al efecto visual residual del ojo humano, la pantalla todavía se siente como si se iluminara al mismo tiempo, pero es necesario que la pantalla se ilumine dinámicamente lo suficientemente rápido, de lo contrario habrá una sensación de parpadeo.
Figura 6-8 Uso del chip 8155 para expandir la pantalla LED de 6 dígitos
Al implementar la visualización dinámica, además de proporcionar códigos de segmento para cada tubo digital, también es necesario para realizar el ajuste de bits en cada pantalla, es decir, control de segmento y control de posición. Cuando funciona, las líneas de control de segmento de cada tubo digital están conectadas en paralelo y controladas por un puerto de E/S de 8 bits; las líneas de control de posición (ánodo o cátodo macho) de cada tubo digital están controladas por otra E/S. En un momento determinado se selecciona solo un tubo digital y se envía el código de segmento correspondiente.
La Figura 6-8 muestra el uso de 8155 para expandir el circuito de interfaz de pantalla LED de 6 bits. Utilice el puerto 8155PC como puerto de salida de control de posición. El chip de salida de marcha atrás Darlington MC1413 de 7 canales se utiliza como controlador de control de posición y el puerto 8155PA se utiliza como puerto de salida de control de segmento para generar código de segmento de 8 bits; Para aumentar el brillo de la pantalla, se utiliza un chip controlador bidireccional 74LS245 para controlar la salida del código de segmento.
2. Establecer un búfer de visualización
El búfer de visualización se refiere a un área de almacenamiento abierta en la memoria, que se utiliza especialmente para almacenar datos que se mostrarán. El tamaño del área de almacenamiento debe ser al menos el mismo que el número. de tubos digitales LED. Suponga que la unidad de búfer de visualización es 30H ~ 35H y el contenido de la pantalla de derecha a izquierda es 1, 2, 3, 4, 5, 6. La relación correspondiente entre el búfer y el tubo digital LED se muestra en la siguiente tabla :
Tubo digital LED5 LED4 LED3 LED2 LED1 LED0
Unidad de caché 35H 34H 33H 32H 31H 30H
Datos de visualización 06H 05H 04H 03H 02H 01H
3. Diseño de subrutina de visualización
Supongamos que la dirección del puerto 8155A (es decir, el puerto de control de segmento) es 0101H y la dirección del puerto C es 0103H. El registro R0 sirve como puntero de dirección, el registro R3 almacena el valor de control de bit actual, DELAY es una subrutina de retraso y el tiempo de retraso es de aproximadamente 1 ms.
El programa es el siguiente:
DISPLAY: MOV R0,#30H; Crea la primera dirección del buffer de visualización
MOV R3,#01H Comienza a mostrar desde el primer tubo digital; la derecha
MOV A,R3; valor inicial del código de control de posición
LD0: MOV DPTR,#0103H; Establecer dirección del puerto de control
MOVX @DPTR, A; Código de control de posición de salida
MOV DPTR,#0101H; Establecer dirección de puerto de control de segmento
MOV A,@R0 Obtener datos para mostrar
DIS0; : ADD A,#0DH ;Calcular el desplazamiento de la tabla
MOVC A,@R0 ;Obtener el código de segmento correspondiente mediante el método de búsqueda de tabla
DIS1: MOVX @DPTR,A ;Salida el código de segmento
ACALL DELAY ; Retraso para permitir que la pantalla permanezca
INC R0 ; Apunta a la siguiente unidad de buffer
MOV A,R3
JB ACC.5 ,DIS1; ¿Se muestra el último dígito? Regresar después de completar
RL A; Modificar el código de control de bits para que apunte al bit alto
MOV R3; ,A; Enviar el código de control de bits a R3 para su almacenamiento
AJMP DIS0; Continuar mostrando el siguiente dígito
LD1: RET
TAB: DB 3FH, 06H, 5BH, 4FH… 00H; Tabla de códigos de segmentos
3. Tecnología de visualización LED en serie
En el diseño de sistemas informáticos de un solo chip, los métodos de visualización LED se utilizan ampliamente debido a su ventajas como facilidad de uso y bajo precio. Cuando se usa el modo de visualización paralela, el código de segmento y el código de control de bits del circuito de visualización ocuparán más líneas de puerto del microcontrolador. Aunque se pueden usar chips de interfaz como el 8155 para la expansión, la tasa de utilización de la línea de puerto aún es baja y no puede cumplir con los requisitos. Requisitos de los sistemas de control a gran escala. El uso del modo de visualización en serie solo requiere de 2 a 3 líneas de puerto, lo que ahorra una gran cantidad de líneas de E/S en el microcontrolador y el efecto de uso es muy bueno. A continuación se presenta una tecnología de visualización en serie LED basada en 74HC595A.
1. Principio de funcionamiento de 74HC595A
74HC595A contiene un registro de desplazamiento de 8 bits y un pestillo D de 8 bits internamente. La estructura interna se muestra en la Figura 6-9.
El registro de desplazamiento en serie recibe datos en serie de entrada externa. Por un lado, puede generar datos en serie y, al mismo tiempo, proporciona datos de entrada paralelos de 8 bits al pestillo y tiene un modo asíncrono. función de reinicio; pestillo de 8 bits El dispositivo puede generar datos paralelos en tres estados. El chip tiene dos señales de reloj independientes, entrada en serie y salida en paralelo. La Tabla 6-2 es la tabla de funciones lógicas de este chip.
Tabla 6-2 Tabla de funciones lógicas 74HC595A
Entrada y salida de estado de trabajo
SER SRCLK RCLK
SQH Q0-Q7 p >
Restablecer L × × L H ↓ L L U
Entrada serie H D ↑ L H ↓ L SRG SRH U
Salida de enclavamiento H × L H↓ ↑ L U N
Alta resistencia × × × × H Z
Nota: U: sin cambios; N: actualización de datos Z: alta resistencia.
Los datos de entrada se ingresan desde el terminal de entrada en serie SER al registro de desplazamiento en serie interno del chip en el flanco ascendente del reloj de desplazamiento en serie SCLK, y al mismo tiempo se emite en serie el terminal SQH; en el flanco ascendente de la señal del reloj de retención LCLK. Al llegar, el chip genera los datos de 8 bits desde el registro de desplazamiento en serie interno en paralelo. Durante el funcionamiento normal, el terminal de reinicio y el terminal de habilitación deben conectarse al nivel alto y al nivel bajo respectivamente.
2. Diseño del circuito de aplicación
La figura 6-10 muestra el circuito de aplicación de una pantalla LED de 12 bits. Si se utiliza el método de visualización paralela LED ordinario, es necesario ampliar la interfaz del microcontrolador, el circuito es complicado y el costo es alto. Este sistema utiliza tres chips 74HC595A para lograr un control de pantalla LED en serie de 12 bits. Cuando está en uso, bajo el control del reloj en serie, el código de control de bits de visualización y el código de control de segmento se pueden ingresar en serie en los tres chips bit a bit, y luego la señal de bloqueo se usa para lograr una salida paralela para completar los 12 dígitos. Actualización de la pantalla digital. Este método de visualización solo ocupa tres líneas de puerto del microcontrolador, lo que ahorra en gran medida los recursos de la línea de puerto del microcontrolador. Al utilizar la entrada de datos en serie, la velocidad de visualización es relativamente lenta. En el uso real, el efecto de visualización es estable y confiable, cumpliendo plenamente con los requisitos de diseño.