Documente Academic
Documente Profesional
Documente Cultură
Programacin en lenguaje C
para
Microcontroladores PIC
LCD HD44780
Ing. Germn Jess Pereira Muoz
1
28/09/2014
2
28/09/2014
CONJUNTO DE INSTRUCCIONES
3
28/09/2014
PATRONES
DE LOS
CARACTERES
4
28/09/2014
CODIGO ALFANUMERICO: A Z y a z
5
28/09/2014
Ventana Visible
6
28/09/2014
7
28/09/2014
PATRONES DE
CARACTERES
ROM A02
8
28/09/2014
Lcd_Init
Descripcin: Inicializa LCD utilizando los pines de
conexin ya definidos por el usuario, usando un bus de datos
de 4 bits.
El puerto de Control y Datos deben ser definidas con
anterioridad por el usuario.
RB0 33 19 RD0
RB0/AN12/INT0/FLT0/SDI/SDA RD0/SPP0
RB1 34 20 RD1
RB1/AN10/INT1/SCK/SCL RD1/SPP1
VDD
VSS
VEE
RB2 RD2
RW
35 21
RS
D0
D1
D2
D3
D4
D5
D6
D7
RB2/AN8/INT2/VMO RD2/SPP2
E
RB3 36 22 RD3
RB3/AN9/CCP2/VPO RD3/SPP3
RB4 37 27 RD4
RB4/AN11/KBI0/CSSPP RD4/SPP4
10
11
12
13
14
1
2
3
4
5
6
7
8
9
RB5 38 28 RD5
RB5/KBI1/PGM RD5/SPP5/P1B
RB6 39 29 RD6
RB1
RB2
RB3
RB4
RB5
RB6
RB7
RB6/KBI2/PGC RD6/SPP6/P1C
RB7 40 30 RD7
RB7/KBI3/PGD RD7/SPP7/P1D
8 RE0
RE0/AN5/CK1SPP
9 RE1
RE1/AN6/CK2SPP
10 RE2
RE2/AN7/OESPP
18 1 RE3
VUSB RE3/MCLR/VPP
PIC18F4550 C1
OSC1
RE3 27n
R1
10k
C2
RA6
27n
9
28/09/2014
Lcd_Out
Descripcin: Imprime mensaje en el LCD en la fila y
columna especificada (row y col).
Ejemplo:
-Imprime Hola! en el LCD en la lnea 1, columna 3
Lcd_Out(1, 3, "Hola!");
Lcd_Out_Cp
Descripcin: Imprime mensaje en el LCD en la
posicin actual del cursor.
Ejemplo:
- Imprime Here! en la posicin actual del cursor
Lcd_Out_Cp("Here!");
10
28/09/2014
Lcd_Chr
Descripcin: Imprime un caracter en el LCD en
la fila y columna especificada (row y col).
Ejemplo:
- Imprime la letra i en el LCD en la lnea 2,y columna 3
Lcd_Out(2, 3, 'i');
Lcd_Chr_Cp
Descripcin: Imprime un caracter en el LCD en
la posicin actual del cursor.
Ejemplo:
- Imprime la letra e en la posicin actual del cursor
Lcd_Chr_Cp('e');
11
28/09/2014
Lcd_Cmd
Descripcin: Enva un comando al LCD.
Se puede pasar a la funcin una de las constantes
predefinidas. Los comandos son los mismos para ambos
modos de manejo del LCD (bus 8 o 4 bits).
Ejemplo:
- Apaga el cursor, no aparece en el LCD
Lcd_Cmd(LCD_CURSOR_OFF);
Comandos predefinidos
Comando Funcin
LCD_FIRST_ROW Mueve el cursor a la 1a. fila.
LCD_SECOND_ROW Mueve el cursor a la 2a. fila.
LCD_THIRD_ROW Mueve el cursor a la 3a. fila.
LCD_FOURTH_ROW Mueve el cursor a la 4a. fila.
LCD_CLEAR Limpia el display.
LCD_RETURN_HOME Regresa el cursor a la posicin 1,1. Los datos de la RAM no son
afectados.
LCD_CURSOR_OFF Apaga el cursor.
LCD_UNDERLINE_ON Coloca el caracter subrayado.
LCD_BLINK_CURSOR_ON Parpadeo del cursor.
LCD_MOVE_CURSOR_LEFT Mueve el cursor hacia la izquierda sin cambiar la RAM
LCD_MOVE_CURSOR_RIGHT Mueve el cursor hacia la derecha sin cambiar el contenido de la RAM
LCD_TURN_ON Enciende el display
LCD_TURN_OFF Apaga el display
LCD_SHIFT_LEFT Mueve el display hacia la izquierda sin cambiar el contenido de la RAM
12
28/09/2014
LCD 4 BITS
Disear el programa que inicialice un LCD, usando un
bus de datos de 4 bits, y a continuacin mande un
mensaje cualquiera de bienvenida. El mensaje debe
desplazarse hacia la derecha en forma continua.
13
28/09/2014
RB0 33 19 RD0
RB0/AN12/INT0/FLT0/SDI/SDA RD0/SPP0
RB1 34 20 RD1
RB1/AN10/INT1/SCK/SCL RD1/SPP1
VDD
VSS
VEE
RB2 RD2
RW
35 21
RS
D0
D1
D2
D3
D4
D5
D6
D7
RB2/AN8/INT2/VMO RD2/SPP2
E
RB3 36 22 RD3
RB3/AN9/CCP2/VPO RD3/SPP3
RB4 37 27 RD4
RB4/AN11/KBI0/CSSPP RD4/SPP4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
RB5 38 28 RD5
RB5/KBI1/PGM RD5/SPP5/P1B
RB6 39 29 RD6
RB1
RB2
RB3
RB4
RB5
RB6
RB7
RB6/KBI2/PGC RD6/SPP6/P1C
RB7 40 30 RD7
RB7/KBI3/PGD RD7/SPP7/P1D
8 RE0
RE0/AN5/CK1SPP
9 RE1
RE1/AN6/CK2SPP
10 RE2
RE2/AN7/OESPP
18 1 RE3
VUSB RE3/MCLR/VPP
PIC18F4550 C1
OSC1
RE3 27n
R1
10k
C2
RA6
27n
LCD 4 BITS
( )
programa 1
14
28/09/2014
LCD 4 BITS
( )
programa 1
15
28/09/2014
ByteToStr
Descripcion: Crea una cadena de salida de un pequeo numero
sin signo (valor numrico menos a 0x100 == 256 ).
Ejemplo:
16
28/09/2014
ShortToStr
Descripcin: Crea una cadena de salida de un numero pequeo
con signo (valor numrico menor a 0x100).
short t = -4;
WordToStr
Descripcin: Crea una cadena de salida de un numero sin
signo (Valor numrico de una variable unsigned).
unsigned t = 437;
17
28/09/2014
IntToStr
Descripcin: Crea una cadena de salida de un numero con signo
(Valor numrico de una variable int).
Ejemplo:
int j = -4220;
LongToStr
Descripcin: Crea una cadena de salida de un numero largo con
signo (Valor numrico de una variable long).
long jj = -3700000;
18
28/09/2014
LongWordToStr
Descripcin: Crea una cadena de salida de un numero largo con
signo (Valor numrico de una variable long).
FloatToStr
Descripcin: Crea una cadena de salida de un numero de
punto flotante.
La cadena contiene un formato normalizado de un numero
(mantisa entre 0 y 1) con signo en la primera posicin.
La mantisa esta ajustada a un formato de 6 dgitos, 0.ddddd;
Hay siempre 5 dgitos a continuacin del punto decimal.
void FloatToStr(float number, char *output);
Ejemplo:
float ff1 = -374.2;
float ff2 = 123.456789;
float ff3 = 0.000001234;
char txt[15];
FloatToStr(ff1, txt); // txt is "-374.2"
FloatToStr(ff2, txt); // txt is "123.4567"
FloatToStr(ff3, txt); // txt is "1.234e-6"
28/09/2014 Ing. Germn Jess Pereira Muoz 38
19
28/09/2014
WordToStrWithzeros
Descripcin: Crea una cadena de salida de un numero sin
signo (Valor numrico de una variable unsigned).
La cadena esta ajustada a un ancho de 5 caracteres;
Las posiciones a la izquierda que no se usan en la
conversin se rellenan con espacios.
void WordToStr(unsigned number, char *output);
Ejemplo:
unsigned shortt = 437;
chartxt[6];
...WordToStrWithZeros(t, txt); // txt is "0437"(un cero
incluido)
IntToStrWithZeros
Descripcin: Crea una cadena de salida de un numero sin
signo (Valor numrico de una variable unsigned).
La cadena esta ajustada a un ancho de 7 caracteres;
Las posiciones a la izquierda que no se usan en la
conversin se rellenan con espacios.
Ejemplo:
short t = -3276;
chartxt[7];
...IntToStrWithZeros(t, txt); // txt is "-03276"(un cero
incluido)
20
28/09/2014
LongWordToStrWithZeros
Descripcin: Crea una cadena de salida de un numero sin
signo (Valor numrico de una variable unsigned).
La cadena esta ajustada a un ancho de 77 caracteres;
Las posiciones a la izquierda que no se usan en la
conversin se rellenan con espacios.
Ejemplo:
unsigned t =12345678;
char txt[11];
...LongWordToStrWithZeros(t,txt);
// txt is "0012345678"(dos ceros)
LongIntToStrWithZeros
Descripcin: Crea una cadena de salida de un numero sin
signo (Valor numrico de una variable unsigned).
La cadena esta ajustada a un ancho de 12 caracteres;
Las posiciones a la izquierda que no se usan en la
conversin se rellenan con espacios.
Ejemplo:
int j = -12345678;
char txt[12];
...LongIntToStrWithZeros(j, txt); // txt es "-
0012345678"(ceros incluidos)
21
28/09/2014
RB0 33 19 RD0
RB0/AN12/INT0/FLT0/SDI/SDA RD0/SPP0
RB1 34 20 RD1
RB1/AN10/INT1/SCK/SCL RD1/SPP1
VDD
VSS
VEE
RB2 RD2
RW
35 21
RS
D0
D1
D2
D3
D4
D5
D6
D7
RB2/AN8/INT2/VMO RD2/SPP2
E
RB3 36 22 RD3
RB3/AN9/CCP2/VPO RD3/SPP3
RB4 37 27 RD4
RB4/AN11/KBI0/CSSPP RD4/SPP4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
RB5 38 28 RD5
RB5/KBI1/PGM RD5/SPP5/P1B
RB6 39 29 RD6
RB1
RB2
RB3
RB4
RB5
RB6
RB7
RB6/KBI2/PGC RD6/SPP6/P1C
RB7 40 30 RD7
RB7/KBI3/PGD RD7/SPP7/P1D
8 RE0
RE0/AN5/CK1SPP
9 RE1
RE1/AN6/CK2SPP
10 RE2
RE2/AN7/OESPP
18 1 RE3
VUSB RE3/MCLR/VPP
PIC18F4550 C1
OSC1
RE3 27n
R1
10k
C2
RA6
27n
22
28/09/2014
23
28/09/2014
24
28/09/2014
Ejercicio propuesto
Programa que utilice un LCD, configurado para usar
un bus de 4 bits.
En el LCD deben aparecer en forma secuencial, los
nmeros de la secuencia 1 2 4 8 16 32 64
128 256 512 1024 2048 4096 8192 16384 -
32768.
Los numero deben ser generados por operaciones
aritmticas.
El desplegado debe hacerse de la forma mostrada en
las siguientes figuras.
Se utiliza la segunda fila, presentando hasta 3
nmeros consecutivos, un numero a la izquierda,
uno mas al centro y otro a la derecha.
Ejercicio propuesto
Serie de numeros Serie de numeros Serie de numeros
1 1 2
25
28/09/2014
Ejercicio propuesto
Programa que utilice un LCD, configurado para usar
un bus de 4 bits.
En el LCD deben aparecer en forma secuencial, los
nmeros de la secuencia 1 2 3 5 7 11 13 17
19 - 23 29 31 37 hasta 25 primos.
Los numero deben ser generados por operaciones
aritmticas.
El desplegado debe hacerse de la forma mostrada en
las siguientes figuras.
Se utiliza la segunda fila, presentando hasta 3
nmeros consecutivos, un numero a la izquierda,
uno mas al centro y otro a la derecha.
Ejercicio propuesto
El alumno diseara un programa en donde se
muestre en un LCD:
Un contador de 000 a 999
Un contador de 9999 a 0000
Un contador de 0.00 a 1.00 incrementando de
0.001
El porcentaje de 0% a 100%
26