Red de conocimiento informático - Computadora portátil - Escriba un pequeño programa en lenguaje C para mostrar "ABCD1234" en la pantalla LCD Utilice el microcontrolador AT 89c51.

Escriba un pequeño programa en lenguaje C para mostrar "ABCD1234" en la pantalla LCD Utilice el microcontrolador AT 89c51.

#include //Archivo de encabezado que contiene los registros del microcontrolador

#include //Archivo de encabezado que contiene la definición de la función _nop_()

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

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

}

/***************************** ******************* *********

Función: Inicializar el modo de visualización LCD

* *************** ************************************* /

void LcdInitiate(void)

{

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>

LcdInitiate(); //Llamar a la función de inicialización de LCD

delay(10);

while(1)

{

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

}

}