Escriba un pequeño programa en lenguaje C para mostrar "ABCD1234" en la pantalla LCD Utilice el microcontrolador AT 89c51.
#include
#include
p>
sbit RS=P2^5; //Registra el bit de selección, define el bit RS como el pin P2.5
sbit RW=P2^6; escriba el bit de selección, defina el bit RS como el pin P2.5. El bit RW se define como el pin P2.6
sbit EN=P2^7 //Habilite el bit de señal, defina el bit EN como; el pin P2.7
sbit BF= P0^7; //bit de indicador de ocupado, define el bit BF como pin P0.7
cadena de código de caracteres sin firmar[ ]={"ABCD1234 "}; //Matriz de cadenas, almacenada para mostrar la cadena
/****************************** *********** ****************
Función de función: retardo 1 ms
(3j+2 )*i=(3×33+2)× 10=1010 (microsegundos), que se puede considerar como 1 milisegundo
****************** ************ **********************/
retraso nulo1ms()
{
carácter sin firmar i,j
for(i=0;i<10;i++)
for(j=0;j <33;j++)
}
/********************* *************** *******************
Función de función: retraso de varios milisegundos
Parámetro de entrada: n
********************************* ******************** **/
retraso nulo (carácter n sin firmar)
{
carácter sin firmar i;
for(i=0;i delay1ms(); } /****************** ******************************* ******* Función: Determinar la ocupación del módulo LCD. Estado Valor de retorno: resultado. resultado=1, ocupado; resultado=0, no ocupado ******************************* ***** **********************/ carácter sin firmar BusyTest(void) { resultado del bit; RS=0; //Según las regulaciones, cuando RS es de nivel bajo y RW es de nivel alto, se puede leer el estado RW =1; EN=1; //EN=1, se permite lectura y escritura _nop_() //Sin operación _nop_(); ; _nop_( ); _nop_(); //Cuatro ciclos de máquina sin operación para dar el tiempo de reacción del hardware resultado=BF; /Asignar el nivel de indicador de ocupado al resultado EN=0; devolver resultado; } /***** ************* ************************************* Función: Establece el modo Escribe el comando o dirección de visualización en el módulo LCD Parámetro de entrada: dictar ********** ************** ****************************/ nulo WriteInstruction (dictado de carácter sin firmar) { while(BusyTest()==1); //Espera si está ocupado RS=0; según las regulaciones, cuando RS y R/W son bajos al mismo tiempo, se pueden escribir instrucciones RW=0 EN=0 //EN se establece en nivel bajo; (De acuerdo con la Tabla 8-6, al escribir instrucciones, EN es un pulso alto, // Es para hacer que EN haga una transición positiva de 0 a 1, por lo que primero se debe configurar "0" _nop_(); _nop_(); / /Sin operación durante dos ciclos de la máquina para dar el tiempo de reacción del hardware P0=dictar; al puerto P0, es decir escribir instrucciones o direcciones _nop_(); _nop_(); _nop_(); _nop_(); //No hay operación durante cuatro ciclos de la máquina para dar tiempo de reacción al hardware EN=1; //EN está configurado en nivel alto _nop_(); _nop_(); _nop_(); _nop_(); //Cuatro ciclos de máquina sin operación para dar tiempo de respuesta al hardware p> EN=0; //Cuando EN salta del nivel alto al nivel bajo, el módulo de cristal líquido comienza a ejecutar Comando } /****** ******************************* ********************** **** Función: Especificar la dirección real mostrada por el carácter Parámetro de entrada: x *********** *********************************** *****/ void Wri teAddress(unsigned char x) { WriteInstruction(x|0x80); //El método para determinar la posición de visualización es "80H+código de dirección x" } /*************************************** *** ************ Función de función: escribir datos (código de caracteres ASCII estándar) en el módulo LCD Parámetro de entrada: y ( es una constante de carácter) *************************************** **** *********/ void WriteData(unsigned char y) { while(BusyTest()== 1); RS=1; //Cuando RS es de nivel alto y RW es de nivel bajo, se pueden escribir datos RW=0; EN =0; //EN se establece en nivel bajo (de acuerdo con la Tabla 8-6, al escribir instrucciones, EN es un pulso alto, //Esto es para hacer que EN haga una transición positiva de 0 a 1, por lo que primero se debe configurar "0" " P0=y; //Envía los datos al puerto P0, es decir, escribe los datos en el módulo LCD _nop_ (); _nop_(); _nop_(); _nop_(); //Cuatro ciclos de máquina sin operación para dar la reacción del hardware time EN=1; //Establecer EN nivel alto _nop_(); _nop_(); _nop_() ; _nop_(); //Sin operación Cuatro ciclos de máquina, dando tiempo de respuesta al hardware EN=0; //Cuando EN salta del nivel alto al nivel bajo, la pantalla LCD el módulo comienza a ejecutar el comando } p> /***************************** ******************* ********* Función: Inicializar el modo de visualización LCD * *************** ************************************* / void LcdInitiate(void) p> { delay(15); //Retraso de 15 ms, se debe dar a la pantalla LCD un tiempo de respuesta más largo al escribir instrucciones. por primera vez WriteInstruction(0x38); / /Configuración del modo de visualización: pantalla de 16 × 2, matriz de puntos de 5 × 7, interfaz de datos de 8 bits retraso (5); //Retraso 5ms WriteInstruction(0x38); retardo(5); WriteInstruction(0x38); retardo(5 ); WriteInstruction(0x0f); //Configuración del modo de visualización: visualización activada, cursor activado, cursor parpadeante retardo(5); WriteInstruction(0x06) ); //Configuración del modo de visualización: el cursor se mueve hacia la derecha, los caracteres no se mueven delay(5); WriteInstruction(0x06); ); WriteInstruction(0x01); //Comando borrar pantalla para borrar el contenido de la pantalla anterior de lay(5); } void main(void) //función principal { unsigned char i; p> p> LcdInitiate(); //Llamar a la función de inicialización de LCD delay(10); while(1) { p> WriteInstruction(0x01); //Borrar visualización: borrar instrucción de pantalla WriteAddress(0x00); //Establece la posición de visualización en la primera palabra de la línea 1. La pantalla de caracteres LCD tipo 1602 puede apuntar automáticamente a la siguiente dirección después de que se muestra la primera dirección. //Así que simplemente configure la dirección de visualización del primer carácter de la cadena. i = 0; while(string[i] != '\0') { //Mostrar caracteres WriteData(cadena[i]); i++; retraso(150); } for(i=0; i<4;i++) retraso(250 } }