La pantalla LCD 1602 muestra caracteres. Al escribir un programa, ¿por qué necesitamos crear una función de evaluación de señal de ocupado? ¿Qué hace esto?
Hola:
La velocidad de respuesta del LCD 1602 es más lenta que la velocidad del microcontrolador.
Para dar un ejemplo sencillo, vierta un barril de aceite en una botella a través de un embudo. La velocidad de vertido del aceite, es decir, el caudal, debe mantenerse dentro de un rango determinado. Si se vierte demasiado rápido, el aceite se desbordará por la parte superior del embudo. Vamos, esto es un desperdicio. Podemos juzgar con nuestros ojos y mantener el nivel de aceite por debajo de la superficie superior y verter el aceite al caudal nominal del embudo, que es el más eficiente.
Para el microcontrolador, 1602 es como la botella y el embudo, y los datos escritos para mostrarse en 1602 son como aceite. Si los datos se escriben en 1602 a la alta velocidad de funcionamiento del microcontrolador, es probable que se produzcan errores. Para provocar el desbordamiento mencionado anteriormente, como escribir continuamente abc, el resultado solo muestra a. Esto se debe a que el chip de visualización 1602 necesita tiempo para procesar los datos del código ASCII de entrada y mostrarlos. Pero no es fácil para nosotros controlar activamente la velocidad de escritura de datos, por lo que es necesario que 1602 use la señal de ocupado. Cada vez que el microcontrolador solo detecta que la señal de ocupado es 0, es decir, no está ocupado. enviará datos al 1602. Por ejemplo, si desea mostrar abc, haga esto: escriba a---indica ocupado---escriba b---indica ocupado---escriba c---indica ocupado. De esta manera nada puede salir mal.
Las pantallas LCD lanzadas en los últimos años tienen una velocidad de respuesta relativamente rápida, como las pantallas de los teléfonos móviles. Medí el antiguo 1602 con un osciloscopio y descubrí que el tiempo de procesamiento es de aproximadamente 40 us, mientras que las instrucciones de muchas son rápidas. microcontroladores Los ciclos están todos en el nivel ns. En otras palabras, el microcontrolador ha estado "esperando" la pantalla LCD durante bastante tiempo.
#includelt;reg52.hgt;
#define uchar unsigned char
#define uint unsigned int
void ocupado(void)
{ uchar temp=0x80; //Inicializa el bit más alto de temperatura en 1, permitiéndote ingresar el siguiente
//ciclo while
P0= 0xff; (P0 son 8 puertos de datos)
rs=0; //Establecer operación de comando
rw=1 //Establecer operación de lectura
en=; 1; //Habilitar
retardo(100); (Esta es una función de retardo establecida, no se requiere explicación)
while(temp amp; 0x80) //El juicio está ocupado, una vez la expresión es falsa, es decir, el bit más alto de temperatura es 0,
// Significa que 1602 no está ocupado, salte de while.
{temp=P0; (20);} //P0 El bit alto de se lee en temp, delay
en=0; //Cerrar la señal de habilitación
}
Esto debe llamarse para cada función ocupada de operación de lectura y escritura