programacion pic en lenguaje c parte 2

Post on 05-Mar-2015

150 Views

Category:

Documents

22 Downloads

Preview:

Click to see full reader

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

top related