programacion pic en lenguaje c parte 2
TRANSCRIPT
1 Vss Tierra
2 Vdd Alimentación +5V
3 Vo Ajuste de Voltaje de Contraste
Selección Datos/Control
Rs = 0 à Control
Rs = 1 à Datos
Lectura/Escritura
R/W = 0 à Escritura
R/W = 1 à Lectura
Habilitación
E= 0 deshabilita
E= 1 habilita
7 D0
8 D1
9 D2
10 D3
11 D4
12 D5
13 D6
14 D7
BUS DE PALABRA DE DATOS
6 E
4 RS
5 R/W
LCD - Display de Cristal Liquido
DATOS DISPLAYDDRAM
CGRAM(Caracteres Generados)
USUARIO
CGROM(Caracteres Generados )
FABRICANTE
CIRCUITO DE
CONTROL
RS
RW
E
8
D7-D0
Diagrama de bloques del Sistema interno del LCD
DDRAM: En esta memoria se almacenan los caracteres que se visualizan en
la pantalla, el tamaño y distribución de esta memoria depende del tamaño del
display.
1 2 3 4 5 6 7 8 9 10 11 . . . . 76 77 78 79 80
0 1 2 3 4 5 6 7 8 9 A 4B 4C 4D 4E 4F
Display de 1 Línea ( 1 x 80) :
Area Visible Area no visible
DDRAM Datos del display
1 2 3 4 5 6 7 8 9 10 11 . . . . 36 37 38 39 40
0 1 2 3 4 5 6 7 8 9 A 23 24 25 26 27
40 41 42 43 44 45 46 47 48 49 4A 63 64 65 66 67
Display de 2 Líneas ( 2 x 40) :
Area Visible Area no visible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
0 1 2 3 4 5 6 7 8 9 A B C D E F
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
Display de 2 Líneas ( 4 x 16) :
Direcciones de la memoria DDRAM
Tabla 1.
CARACTERESGENERADOS
POR EL FABRICANTE
Códigos ASCII
El compilador C incluye un fichero (driver ) que permite trabajar con un LCD . El archivo es LCD.c y debe llamarse de la siguiente forma :
#include <lcd.c>
Este archivo dispone de varias funciones ya definidas:
lcd_init();
Es la primera función que debe ser llamada. Y contiene la siguiente secuencia de inicialización:
Bus a 4 bits, dos líneas caracteres 5x8Lcd encendido, Cursor Apagado y sin parpadeoIncrementar cursor, sin desplazamiento .
Lcd_gotoxy(byte x, byte x);
Indica la posición de acceso al LCD. Por ejemplo, (1,1) indica la primera posición de la primer línea y (1,2) indica la primer posición de la segunda línea.
Lcd_getc(byte x. byte x);
Lee el carácter de la posición (x,y).
Lcd_putc(char s);
S es una variable de tipo char . Esta función escribe la variable en la posición correspondiente.
lcd_send_byte( RS, n )
RS: es 0 si lo enviado es para configurar el LCDRS: es 1 si lo enviado es para mostrar un carácter N: es un byte de 8 bits que representa la palabra de configuración o el código ASCII del carácter.
Librería: #include <lcd.c>
Códigos de Configuración del LCD
Antes de escribir cualquier carácter en el LCD se debe realizar una secuencia de inicialización de Display con una serie
de palabras de control, este procedimiento se puede hacer de dos formas:
forma 1: (enviando cada comando de forma individual):
lcd_send_byte(0,0x02);
lcd_send_byte(0,0x38);
lcd_send_byte(0,0x06);
lcd_send_byte(0,0x0C);
lcd_send_byte(0,0x01);
Donde cada código se tiene una configuración de terminada según como aparece en la diapositiva anterior y
como se explica a continuación:
Palabra de control Código Ejemplo Significado
Display & Cursor Home: 0x02 hubica el cursor en la posición 1 del la primera
linea
Función Set: 0x48 bus de datos a 4 bits, caracteres de 5x7 A dos
líneas
Entry Mode Set 0x06 Incrementar cursor, no desplazar visualización
Display ON/OFF 0x0C Display en ON, cursor en off, no parpadeo
Clear Display 0x01 Borra display y se ubica la linea 1 carácter 1
Comandos de inicializacióndel LCD
Forma 2:Estas 5 instrucciones se pueden remplazarPor la función: Lcd_init();
#include <16F877.h>#fuses XT,NOWDT,NOPROTECT,NOLVP#use delay(clock=4000000)#define use_portd_lcd_TRUE //configura LCD para trabajar usando PORTD #include <lcd.c>
void main() {
lcd_send_byte(0, 0x02 ); //secuencia de lcd_send_byte(0, 0x28 ); //inicialización del lcd_send_byte(0, 0x06 ); //LCDlcd_send_byte(0, 0x0C );lcd_send_byte(0, 0x01 );
lcd_send_byte(1, 'A' ); //Envía el carácter Alcd_send_byte(1, 'E‘); //Envía el carácter Alcd_send_byte(1, 'I' ); //Envía el carácter Alcd_send_byte(1, 'O' ); //Envía el carácter A lcd_send_byte(1, 'U' ); //Envía el carácter Awhile(1) { //CICLO INFINITO}
}
Visualización de caracteres usando display de cristal Liquido
El siguiente programa envía los caracteres AEIOU usando las funciones lcd_send_byte() :
#include <16F877.h>#fuses XT,NOWDT,NOPROTECT,NOLVP#use delay(clock=4000000)#define use_portd_lcd_TRUE //configura LCD para trabajar usando PORTD #include <lcd.c>
void main() {
lcd_init( ); //secuencia de inicialización
lcd_putc(“AEIOU”); //Envía el carácter Awhile(1)
{ //CICLO INFINITO}
}
Visualización de caracteres usando display de cristal Liquido
El siguiente programa envía los caracteres AEIOU usando las funciones lcd_init() y lcd_putc() :
CONTROL DEL LCD USANDO PRINTF
El compilador C ofrece una función mas versátil para trabajar el LCD denominada printf()
Printf(string)Printf(cstring, values…)Printf(fname, cstring, values …)
Donde:
String : es una cadena o arreglo de caracteresvalues: es una lista de variables separadas por comas fname : es una función.
Ejemplo 1:
Int z;z= 0x89; Printf(lcd_putc,“Temperatura: %2x\n\r”,z);
%2x = 2 caracteres tipo entero hexadecimal \n = el cursor va a la posicion (1,2) primera posicion de la segunda linea\r = deja un espacio
Ejemplo 2:
Int z;z= 0x89; Printf(lcd_putc,“Temperatura: %2u\n\r”,z);
%2u = 2 caracteres tipo entero decimal \n = el cursor va a la posición (1,2) primera posición de la segunda línea \r = deja un espacio
Ejemplo 3:
float z;z= 0x89; Printf(lcd_putc,“Temp: %.3f\n\r”,z);
%.3f = muestre el valor de tipo float con 3 decimales \n = el cursor va a la posición (1,2) primera posición de la segunda línea \r = deja un espacio
Formato %nt
%n es opcional y especifica el numero de caracteres a mostrar:
1-9: para especificar cuantos caracteres se deben mostrar01-09: para especificar la cantidad de ceros a la izquierda1.1 – 9.9: para como flotante
Int z;z= 0x9; Printf(lcd_putc,“Temperatura: %03u\n\r”,z);%03u = muestre el valor de tipo entero con 3 dígitos \n = el cursor va a la posición (1,2) primera posición de la segunda línea \r = deja un espacio
Formato %nt
t indica:
c Carácters Cadena o carácteru Entero sin signo d Entero Con signoLu Entero Largo sin signoLd Entero Largo con signox Entero Hexadecimal(minuscula)X Entero Hexadecimal (Mayúscula)Lx Entero Largo Hexadecimal(minuscula)LX Entero Largo Hexadecimal (Mayúscula)f Flotante con truncadog Flotante con redondeoe Flotante con formato exponencial