Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Se trata de un display LCD grfico de 96 pixeles de ancho por 65 pixeles de alto. La Figura 8-2 muestra la apariencia fsica de la pantalla y la manera de identificar los pines. La Figura 8-3 muestra el nombre y nmero de los pines del display visto de frente.
137
8 - Display Grfico
138
8 - Display Grfico La Figura 8-4 muestra la conexin que usaremos con el PIC32. Como se puede observar en esta figura, solamente se necesitan 3 pines del PIC para controlar el display LCD, ya que la comunicacin se realiza de manera serial usando los pines CLK y DATA. El tercer pin RESET se usa para la configuracin del display.
139
8 - Display Grfico
La funcin writeLCD1100 que se muestra a continuacin realiza la transmisin de un dato o comando respetando los tiempos mostrados en la Figura 8-5.
140
8 - Display Grfico
Programa 8-1. Funcin writeLCD1100
//////////////////////////////////////////////////////////////////// // Funcion: writeLCD1100 // // Escribe un dato de bajo nivel // Entrada: // cd: bit de control, indica si es un comando o un dato // c: byte de dato a enviar // // Salida: Nada //////////////////////////////////////////////////////////////////// void writeLCD1100(int8_t dc,uint8_t c) { int8_t i; //Envia D/C pin_clk = 0; //clk en 0 pin_data = dc; //coloca bit DC en DATA pin_clk = 1; //clk en 1 delayusLCD1100(); //retardo //clk en 0 pin_clk = 0; // enviar byte de control/dato for(i=0;i<8;i++) { //coloca bit en DATA if(c & 0x80) pin_data = 1; else pin_data = 0; pin_clk = 1; //sube clk delayusLCD1100(); //retardo pin_clk = 0; //clk en 0 //cambia el bit c <<= 1; } } //writeLCD1100
141
8 - Display Grfico
El display LCD posee una memoria RAM interna llamada DDRAM la cual almacena los pixeles que se desean mostrar. Existe una correspondencia directa entre la DDRAM y el display como se muestra en la Figura 8-6. En donde cada bit de la memoria DDRAM se corresponde con un pixel en el display.
La memoria DDRAM est dividida en 96 columnas (de la 0 a la 95) y 9 pginas (de la 0 a la 8) donde cada pgina equivale a los 8 bits (8 pixeles) del byte enviado. La Figura 8-7 muestra el arreglo de columnas y pginas de la DDRAM.
142
8 - Display Grfico
Por ejemplo, suponga que la cuadrcula que se muestra en la la Figura 8-8 es el display grfico, donde cada cuadrito es un pixel; se desean activar los 3 pixeles que se muestran. Primero debemos identificar en que columna y en que pgina se encuentran, en este caso la columna 4 y la pgina 0. Luego debemos identificar que dato debo enviar para activar esos 3 pixeles. De la columna 4, pgina 0 vemos que los bits con valor de 2,4 y 8 deben ser 1 por lo tanto, el dato a enviar es 2+4+8 = 14
143
8 - Display Grfico
Para seleccionar la columna se usa el comando Column Addres Set mostrado en la
Tabla 8-1.
Tabla 8-1. Comando Column Address Set [22]
Por ejemplo para seleccionar la columna 4 usaramos la funcin anterior de la siguiente manera:
writeLCD1100(0,0x10); writeLCD1100(0,0x4); //comando Column Address Set //columna 4
El comando PageAddres Set se usa para seleccionar la pgina. Se muestra en la Tabla 8-2.
Tabla 8-2. Comando Page Address Set [22]
Finalmente para escribir el 14 en la DDRAM se usa el comando Display Data Write mostrado en la Tabla 8-3.
144
8 - Display Grfico Cada vez que se escribe un dato en la DDRAM, el nmero de columna aumenta automticamente y al llegar a la ltima aumenta la pgina. Por lo tanto podemos escribir datos de manera consecutiva. Por ejemplo si queremos borrar todo el contenido de la pantalla (y por lo tanto de la DDRAM) podemos hacerlo de la siguiente manera:
// Columna 0 writeLCD1100(0,0x10); writeLCD1100(0,0); // Fila 0 writeLCD1100(0,0xB0); //cicla borrando todo el contenido de la DDRAM for(pag=0; pag<9; pag++) for(col=0; col<65; col++) writeLCD1100(1,0);
145
8 - Display Grfico
Librera LCD_1100
Se desarroll una librera llamada lcd_1100.h la cual posee un conjunto de funciones tiles que nos servirn para utilizar el display LCD. La Tabla 8-4 muestra una lista con las funciones contenidas en esta librera y una breve descripcin.
Tabla 8-4. Funciones de libreria LCD_1100
Descripcin Inicializa el LCD grfico. Escribe un dato o comando en el display. Escribe un caracter en el buffer de la pantalla en las coordenadas x,y.
putsLCD1100
Pinta el contenido del buffer en display. Limpia el contenido del buffer del display. Dibuja un pixel en las coordenadas x,y. Dibuja una linea usando el algoritmo de Bresenham.
writeRawBufferLCD1100 Escribe un dato de 8 bits en la pagina y columna especificada del buffer del LCD. paintPictureLCD1100 recorreUpLCD1100 Dibuja una imagen en el buffer del LCD. Recorre LCD hacia arriba la cantidad de pixeles especificada. getAnchoFuenteLCD1100 Regresa el ancho en pixeles de la fuente seleccionada. getAltoFuenteLCD1100 getSizeFuenteLCD1100 Regresa el alto en pixeles de la fuente seleccionada. Regresa el tamao de la fuente que puede ser: TAM_CHICA, TAM_MEDIANA o TAM_GRANDE setSizeFuenteLCD1100 Ajusta el tamao de la fuente que puede ser: TAM_CHICA, TAM_MEDIANA o TAM_GRANDE powerSaveOnLCD1100 powerSaveOffLCD1100 Coloca el display en modo de bajo consumo. Coloca el display en modo normal.
146
8 - Display Grfico
// Inicializa el display LCD grfico openLCD1100(); //Ajusta el tamao de la letra setSizeFuenteLCD1100(TAM_MEDIANA); //Limpia el buffer del LCD clearBufferLCD1100(); //Escribe en el buffer del LCD putsLCD1100(1,0," DISPLAY LCD ");
//Ajusta fuente chica setSizeFuenteLCD1100(TAM_CHICA); putsLCD1100(1,20,"PROBANDO FUENTE CHICA"); //Ajusta fuente mediana setSizeFuenteLCD1100(TAM_MEDIANA);
147
8 - Display Grfico
putsLCD1100(1,30,"FUENTE MEDIANA"); //Ajusta fuente grande setSizeFuenteLCD1100(TAM_GRANDE); putsLCD1100(1,45,"GRANDE"); //Refresca el LCD paintLCD1100(); retardoms(2000); //Dibuja lneas lineLCD1100(0,0,95,64); paintLCD1100(); retardoms(500); lineLCD1100(0,64,95,0); paintLCD1100(); //Recorre display hacia arriba for(i=0; i<64; i++) { recorreUpLCD1100(1); paintLCD1100(); retardoms(50); } //Limpia el buffer del LCD clearBufferLCD1100(); //Escribe texto setSizeFuenteLCD1100(TAM_GRANDE); putsLCD1100(20,20,"DISPLAY"); putsLCD1100(10,40,"NOKIA 1100"); paintLCD1100(); while(1) { } return 0; }
148
8 - Display Grfico
//Ajusta la semilla para la generacin de numeros aleatorios srand(5); //Inicializa el display grfico openLCD1100(); // Inicializa el display LCD grfico setSizeFuenteLCD1100(TAM_CHICA); //Ajusta el tamao de la letra clearBufferLCD1100(); //Limpia el buffer del LCD while(1) { //selecciona un caracter aleatoriamente car = aleatorio(33,120); //selecciona una columna aleatoriamente col = aleatorio(0,24); //Borra 10 renglones de la columna seleccionada for(i=0; i<10; i++) putcLCD1100(col*4,(renglones[col]+i)*(getAltoFuenteLCD1100()+1), ' '); //Dibuja el caracter aleatorio en la columna aleatoria //en el renglon que se qued esa columna putcLCD1100(col*4,renglones[col]*(getAltoFuenteLCD1100()+1), car); paintLCD1100(); //Incrementa el renglon de la columna escogida aleatoriamente renglones[col]++; //Reinicia el renglon en caso de llegar al final if(renglones[col] > 10) //9 renglones con letra chica renglones[col] = 0; retardoms(20); } return 0; }
149
8 - Display Grfico
// Genera un nmero aleatorio en el rango [inicio , fin] char aleatorio(char inicio, char fin) { int salida8, salida32; float salidaf; salida32 = rand(); salidaf = (float)salida32/RAND_MAX; salida8 = (char)(salidaf*(fin-inicio) + inicio); }
paintPictureLCD1100, la cual puede ser usada para dibujar una imagen de 96x65 pixeles. Dicha imagen es un arreglo tipo unsigned char de 864 valores (96 columnas x 9 pginas), donde cada valor es una columna del display. Para generar este arreglo de valores a partir de una imagen podemos usar un programa como el LCD.EXE que se muestra en la Figura 8-10. Este programa permite abrir una imagen en formato BMP (comando Abrir BMP) y generar los valores de cada columna del display (Guardar H).
150
8 - Display Grfico
// Inicializa el display LCD grfico openLCD1100(); // Limpia el buffer del LCD clearBufferLCD1100(); //Dibuja la imagen en buffer paintPictureLCD1100(imagen1); //Dibuja el buffer en display LCD paintLCD1100(); while(1) { } return 0; }
151
8 - Display Grfico
Requisitos a calificar: 1.- Osciloscopio funcionando (grafica la seal en el display): 8 puntos. 2.- Cursores en Y para medir diferencias de voltaje: 2 puntos.
152