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 #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++); } /************************ ****** ******************************************* p> * 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 ****************************** ************** **********************************/ p> 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) p> * 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) p> * 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) p> >{ uchar a; if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; p> 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++; } } /****************** ************ **************************************** **** * 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,'*'); p> while(1); } Por favor, déle una buena reseña si funciona