La Red de Conocimientos Pedagógicos - Currículum vitae - La pantalla LCD LCD1602 tiene caracteres confusos, ¡ayúdenme! ¡urgente! ! ! Gracias

La pantalla LCD LCD1602 tiene caracteres confusos, ¡ayúdenme! ¡urgente! ! ! Gracias

Si eliminas los programas de algunos periféricos conectados a la pantalla LCD de datos

#include

#include< / p>

#define uchar unsigned char

#define uint unsigned int

//Estos materiales de referencia de tres pines

sbit LCD1602_EN=P2 ^7; //1602 pin de habilitación

sbit LCD1602_RW=P2^6; //1602 pin de lectura y escritura

sbit LCD1602_RS=P2^5; //1602 pin de selección de datos/comando

sbit LCD1602_RW=P2^6; p>

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

* Nombre: LCD1602_delay()

* Función : Retraso, el tiempo de retraso es de aproximadamente 5US.

* Entrada: Ninguna

* Salida: Ninguna

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

void LCD1602_delay()

{

_nop_();

_nop_();

_nop_ ();

_nop_();

_nop_();

}

void LCD1602_Delay(uint i)

{

uint x,j;

for(j=0;j

for(x= 0;x< =148;x++);

}

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

* Nombre: bit Ocupado(void)

* Función: Esta es una función de estado de lectura, que lee si la función está en un estado ocupado

* Entrada: el valor del comando de entrada

* Salida: Ninguna

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

bit ocupado(nulo)

{

bit ocupado_flag = 0;

LCD1602_RS = 0;

LCD1602_RW = 1;

LCD1602_EN = 1;

LCD1602_delay();

ocupado_flag = (bit)(P0 & 0x80);

LCD1602_EN = 0;

devolver bandera_ocupada;

}

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

* Nombre: LCD1602_wcmd(uchar del)

* Función: función de comando 1602

* Entrada: valor de comando de entrada

* Salida: Ninguna

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

void LCD1602_wcmd(uchar del )

{

while(Ocupado());

LCD1602_RS = 0;

LCD1602_RW = 0;

LCD1602_EN = 0;

LCD1602_delay();

P0 = del;

LCD1602_delay();

LCD1602_EN = 1;

LCD1602_delay();

LCD1602_EN = 0;

}

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

* Nombre: LCD1602_wdata(uchar del)

* Función: 1602 función de escritura de datos

* Entrada: Los datos que deben escribirse en 1602

* Salida: Ninguna

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

void LCD1602_wdata(uchar del)

{

while( Ocupado()) ;

LCD1602_RS = 1;

LCD1602_RW = 0;

LCD1602_EN = 0;

LCD1602_delay();

P0 = del;

LCD1602_delay();

LCD1602_EN = 1;

LCD1602_delay();

LCD1602_ES = 0;

}

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

* Nombre: L1602_init()

* Función: inicialización 1602, consulte la información 1602

* Entrada: Ninguna

* Salida: Ninguna

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

void LCD1602_init(void)

{

LCD1602_wcmd(0x38);// Configurar pantalla 16X2

LCD1602_wcmd(0x08);//Pantalla apagada

LCD1602_wcmd(0x0c);//En pantalla

LCD1602_wcmd (0x0e);//Activar Mostrar el cursor de visualización

LCD1602_wcmd(0x0f);//Activar el cursor de visualización y el cursor parpadea

LCD1602_wcmd(0x06);//Aumentar el escribe el puntero en uno

LCD1602_wcmd (0x04); //El puntero de escritura disminuye en uno

// LCD1602_wcmd(0x07);//Escribe toda la pantalla a la izquierda

// LCD1602_wcmd(0x05);//Escribir Ingresa a toda la pantalla y muévete hacia la derecha

LCD1602_wcmd(0x01);//Borrar la pantalla

//LCD1602_wcmd (0x80X10);

}

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

* Nombre: LCD1602_char(uchar hang,uchar lie,char sign)

* Función: cambia el valor de un determinado bit en el cristal líquido. Si desea que la primera línea y el quinto carácter muestren "b", llame. la función de la siguiente manera

L1602_char(1,5,'b')

* Entrada: Filas, columnas, 1602 datos requeridos

* Salida: Ninguna

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

void LCD1602_char(uchar colgar,uchar mentir,char firmar)

>{

uchar a;

if(hang == 1) a = 0x80;

if(hang == 2) a = 0xc0;

a = a + mentira - 1;

LCD1602_wcmd(a);

LCD1602_wdata(signo);

}

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

* Nombre: LCD1602_string(uchar colgar,uchar mentir,uchar *p)

* Función: cambia el valor de un determinado bit en el cristal líquido. Si desea que la primera línea y el quinto carácter comiencen a mostrar "ab cd ef", llame a la función de la siguiente manera

L1602_string(1, 5,"ab cd ef;")

* Entrada: filas, columnas, se deben ingresar 1602 datos

* Salida: Ninguna

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

void LCD1602_string(uchar colgar,uchar mentir,uchar *p)

{

uchar a ,b=0;

if(hang == 1) a = 0x80;

if(hang == 2) a = 0xc0 ;

a = a + mentira - 1;

while(1)

{

LCD1602_wcmd(a++); >

if((*p = = '\0')||(b==16)) descanso;

b++;

LCD1602_wdata(*p);

p++;

p>

}

}

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

* Nombre: Main()

* Función: Función principal

* Entrada: Ninguna

* Salida: Ninguno

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

void Main()

{

LCD1602_Delay(30);

LCD1602_init();

LCD1602_string(1,1," Bienvenido a ");

LCD1602_string (2,1," El mundo MCU ");

LCD1602_char(1,1,'*');

LCD1602_char(1,16,'*');

while(1);

}

Por favor, déle una buena reseña si funciona