Red de conocimiento informático - Espacio del host - Tengo una pantalla LCD cgm12864 aquí, pero no siempre se enciende. ¿Alguien puede ayudarme con algún consejo?

Tengo una pantalla LCD cgm12864 aquí, pero no siempre se enciende. ¿Alguien puede ayudarme con algún consejo?

/////////////////////////////////////////////////// //// //////////////////////////////////

// KS0180 chip 128 * Puerto paralelo 64 basado en plataforma arduino Programa de prueba de pantalla LCD autor: Wang Jin 27/9/2014

// Si el programa es demasiado grande y utiliza un chip RAM pequeño, es posible que no pueda ejecutarse Si no se puede ejecutar, elimine la parte que llama al logotipo, lo que reducirá en gran medida la RAM. Uso

// Debido a que el uno está roto, solo se puede probar con éxito en mega 2560

.

// La distribución de la dirección RAM del chip ST7920 es diferente. Preste atención para analizar la dirección RAM para escribir el programa

// p>

// Este programa no utiliza archivos de biblioteca. , y el programa de visualización no escribe subrutinas separadas. Es principalmente para la conveniencia de la modificación personal

////////////// /////////. ///////////////////////////////////////////// //// / /////////

//

int CS1 = A0; // Media pantalla izquierda, nivel alto activo

int CS2 = A1 ; // Media pantalla derecha, nivel alto activo

int RS = 12

int RW = 11

int DB [] = {3, 4; , 5, 6, 7, 8, 9, 10}; // Usa una matriz para definir los pines DB 0-7 necesarios para el bus

int Enable = 2;

p>

///////////////////////////////////////////////// //////////////////////////// //

// Tabla de datos de mapa de bits//

// Contenido: Nanjing Zhouxin Electronics, TEL025-66085988 //

// Tamaño de imagen: 128 * 64 //

/////////// / /////////////////////////////// /////////////////// // ////////////

logotipo de carácter sin firmar1[] =

{

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 00, 0x00, .0x00, 0x00, 0x00 , 0x00 , 0x00, 0x00

};

//////////////////////////// /// ///////////////////////////

// Escribir subrutina de comando

/ /// //////// //////////////////////////////////////// ////// /

void LcdCommandWrite(valor int) {

digitalWrite(RS, 0);

digitalWrite(RW, 0);

int i = 0;

for (i=3; i lt; = 1

0; i) //asignación de bus

{

digitalWrite(i, valor amp; 01); //valor amp; 0001 y asigna i

valor; gt; gt; = 1; // el valor se mueve un bit hacia la derecha

}

digitalWrite(Enable, 1);

delayMicrosegundos(1);

digitalWrite(Activar, BAJO);

retardoMicrosegundos(1);

}

///////// / ///////////////////////////////////////////////

//Escribir subrutina de datos

/////////////////// /////////////// /// ///////////////////

void LcdDataWrite(int value) {

// Definir todos los pines

int i = 0;

digitalWrite(RS, 1);

digitalWrite(RW, 0

//digitalWrite(DI); , ALTO) ;

//digitalWrite(RW, BAJO);

for (i=DB[0]; i lt;= DB[7]; i) {

digitalWrite(i, valor amp; 01);

valor gt; gt;

}

digitalWrite(Habilitar, ALTO;

retrasoMicrosegundos(1);

digitalWrite(Activar, BAJO

retrasoMicrosegundos(1); // retrasoMicrosegundos

}

/////////////////////////////////////////// ////// //////<

// Declaración de pin de salida

////////////////// ////// /////////////////////////////

configuración nula (nulo) {

int i = 0;

for (i=Habilitar; i lt; = 12; i ) {

pinMode(i, SALIDA); p> }

pinMode(A0, SALIDA);

pinMode(A1, SALIDA);

}

//// /////// /////// ////////////////////////////

/ / bucle programa principal

/////////////////////////////////////// //////////// /

bucle vacío (vacío) {

///// //////////// ///////////// //////////////////////

/////////////////////////////////////////////

// Inicialización, debido a que el chip KS0108 no tiene un comando de inicialización, se debe asignar a toda la pantalla un valor de 0x00; de lo contrario, habrá ruido.

De lo contrario, habrá ruido

// Siempre hay ruido al llamar al mapa de bits sin verificar el comando de inicialización del chip KS0108, y no se puede resolver con el reinicio REST, así que uso este método

/// //////////////////////////////////////////// /////////// //// ////////////////////////////////////

digitalWrite(CS1, 1)

digitalWrite(CS2, 1);

LcdCommandWrite(0x3e);

int i = 0;

int yg, x, y;

int temp

int

para (yg=0;yglt;8;yg)

{

x=yg 0xb8; //0xb8 es la dirección de la primera página

y= 0x40; //0x40 es la dirección de la primera columna. Preste atención a la RAM en la tabla de distribución de direcciones

LcdCommandWrite(x); //Escriba la coordenada del eje y

LcdCommandWrite; (y) //Escribe la coordenada del eje x

tmp= yg*64;

for(i=0; ilt; 64; i)

{

LcdDataWrite(0x00);

tmp

}

}

LcdCommandWrite(0x3f) ; //Mostrar gráficos

delay(1);

///////////////////////// //////////////////////// ///////////

// Mostrar logotipo de ZXET

///////////////////// /////////////////////// // ////////////////

digitalWrite(CS1, 1); //Muestra primero la mitad izquierda de la pantalla

digitalWrite(CS2). , 0);

for(yg=0;yglt;8;yg)

{

x=yg 0xb8

y=0x40;

LcdCommandWrite(x); //Escribe la coordenada del eje y

LcdCommandWrite(y) // Escribe la coordenada del eje x

tmp=2*yg*64;

for(i=0; ilt; 64; i )

{

LcdDataWrite(logo[tmp])

tmp;

}

}

}

LcdCommandWrite(0x3f); el programa de visualización se puede conectar directamente a la mitad derecha de la pantalla sin demora

///// /// //////////////////p >

digitalWrite(CS1, 0); //Mostrar la mitad derecha de la pantalla

digitalWrite(CS2, 1 );

for(yg=0;yglt;8 ;yg)

{

x=yg 0xb8;

y=0x40;

LcdCommandWrite(x); //escribe las coordenadas del eje y

LcdCommandWrite(y); //escribe las coordenadas del eje x

tmp=(2*yg 1)*64

for(i=0; ilt.64; i )

{

LcdDataWrite(logo[tmp]);

tmp

}

}

LcdCommandWrite; (0x3f);

retraso(3000);

/////////////////////////// ///////////////////////////////////////

/ Mostrar texto, todavía usando bits Llamada de datos de imagen, KS0108 solo puede usar este método si no hay fuente

/////////////////// ////// ////// ////////////////////////////////////

digitalWrite( CS1, 1);

digitalWrite(CS2, 0);

for(yg=0;yglt;8;yg)

{

x=yg 0xb8;

y=0x40;

LcdCommandWrite(x); //escribe las coordenadas del eje y

LcdCommandWrite(y); //Escribe las coordenadas del eje x

tmp=2*yg*64

for(i=0; ilt; 64; i )

{

LcdDataWrite( logotipo1[tmp]);

tmp

}

}

LcdCommandWrite(0x3f)

//// ////////////////////////////////////

escritura digital(CS1, 0 );

escritura digital(CS2, 1

for(yg=0;yglt;8;yg)

<); p> {

x=yg 0xb8 ;

y=0x40;

LcdCommandWrite(x); //escribe las coordenadas del eje y

LcdCommandWrite( y); //escribe las coordenadas del eje x

tmp=(2*yg 1)*64

for(i= 0; ilt; 64; i )

{

LcdDataWrite(logo1[tmp]);

tmp

}