Sie sind auf Seite 1von 53

Programacin en lenguaje C para microcontroladores PIC

Dia 5

LCD (funciones bus 4 bits)


Lcd_Config Lcd_Init Lcd_Out Lcd_Out_Cp Lcd_Chr Lcd_Chr_Cp Lcd_Cmd

Lcd_Config
Descripcin: Inicializa LCD usando un bus de datos
de 4 bits. El puerto de Control (ctrlport) y Datos (dataport) tiene las asignaciones de terminales especificadas.
unsigned short *ctrl_data_port, unsigned short RS, unsigned short EN, unsigned short WR, unsigned short D7, unsigned short D6, unsigned short D5, unsigned short D4

void Lcd_Config(

);

Lcd_Config 2
Ejemplo: Lcd_Config(&PORTC,0,1,2,4,5,6,7);

Lcd_Init
Descripcin: Inicializa el LCD usando un bus de 4 bits. El puerto de Control (ctrlport) y Datos (dataport) tiene la siguiente asignacin de terminales.E ctrl_data_port.3 RS ctrl_data_port.2 D7 ctrl_data_port.7 D6 ctrl_data_port.6 D5 ctrl_data_port.5 D4 ctrl_data_port.4 void Lcd_Init(unsigned short *ctrl_data_port);

Lcd_Init 2
Ejemplo: Lcd_Init(&PORTB);

Lcd_Out
Descripcin: Imprime mensaje en el LCD en la fila y columna especificada (row y col). void Lcd_Out(
unsigned short row, unsigned short col, char *text );

Ejemplo:
-Imprime Hello! en el LCD en la lnea 1, columna 3

Lcd_Out(1, 3, "Hello!");

Lcd_Out_Cp
Descripcin: Imprime mensaje en el LCD en la posicin actual del cursor. void Lcd_Out_Cp(char *text); Ejemplo:
- Imprime Here! en la posicin actual del cursor

Lcd_Out_Cp("Here!");

Lcd_Chr
Descripcin: Imprime un caracter en el LCD en la fila y columna especificada (row y col). void Lcd_Chr(
unsigned short row, unsigned short col, char character );

Ejemplo:
- Imprime la letra i en el LCD en la lnea 2,y columna 3

Lcd_Chr(2, 3, 'i');

Lcd_Chr_Cp
Descripcin: Imprime un caracter en el LCD en la posicin actual del cursor. void Lcd_Chr_Cp(char character); Ejemplo:
- Imprime la letra e en la posicin actual del cursor

Lcd_Chr_Cp('e');

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).

void Lcd_Cmd(unsigned short command); Ejemplo: - Apaga el cursor, no aparece en el LCD Lcd_Cmd(LCD_CURSOR_OFF);

8.- 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.

LCD 4 BITS (algoritmo)


1. Inicialice los puertos de datos y control. 2. Enva mensaje a desplegar. 3. Enva comando de desplazamiento hacia la derecha. 4. Repite el paso 3.

LCD 4 BITS (diagrama de flujo)


LCD 8 bits Inicializa puertos de datos y control

Enva mensaje

Enva comando de Corrimiento a la der.

LCD 4 BITS (esquemtico Config)

LCD 4 BITS (programa 1)


void main(void) { TRISD = 0; Lcd_Config(&PORTD,0,2,1,7,6,5,4); Lcd_Out(1,1,Envio de datos); Lcd_Out(2,1,Usando bus de 4 bits); while(1) { Lcd_Cmd(LCD_SHIFT_RIGHT); Delay_ms(200); } }

LCD 4 BITS (programa 2)


char mensaje[11]={B, u, s, , 4, , b, i, t, s, \0}; void main(void) { TRISD = 0; Lcd_Config(&PORTD,0,2,1,7,6,5,4); Lcd_Out(1, 6, mensaje); while(1) { Lcd_Cmd(LCD_SHIFT_RIGHT); Delay_ms(200); } }

LCD 4 BITS (esquemtico Init)

LCD 4 BITS (programa 3)


char *mensaje3 = programa 3 usando bus 4 bits; void main(void) { Lcd_Init(&PORTC); Lcd_Out(1,16,mensaje3); Lcd_Out(2,1,fila=2 columna=5); while(1) { Lcd_Cmd(LCD_SHIFT_LEFT); Delay_ms(50); } }

Conversin de tipo de datos


Tipo de dato a cadena ByteToStr ShortToStr WordToStr IntToStr LongToStr FloatToStr

ByteToStr
Descripcion: Crea una cadena de salida de un pequeo numero sin signo (valor numrico menos a 0x100). La cadena esta ajustada a un ancho de 3 caracteres; Las posiciones a la izquierda que no se usan en la conversin se rellenan con espacios. void ByteToStr(unsigned short number, char *output); Ejemplo: unsigned short t = 24; char txt[4]; //se inicializa un arreglo con 4 espacios ByteToStr(t, txt); // txt es " 24" (un espacio en blanco)

ShortToStr
Descripcin: Crea una cadena de salida de un numero pequeo con signo (valor numrico menor a 0x100). La cadena esta ajustada a un ancho de 4 caracteres; Las posiciones a la izquierda que no se usan en la conversin se rellenan con espacios.

void ShortToStr(short number, char *output);


Ejemplo: short t = -4; char *txt; blanco) // Se inicializa un apuntador de 5 espacios

ShortToStr(t, txt); // txt es " -4" (dos espacio en

WordToStr
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 t = 437; char txt[6]; WordToStr(t, txt);

// Inicializa un arreglo con 6 espacios // txt es 437" (dos espacios vacios)

IntToStr
Descripcin: Crea una cadena de salida de un numero con signo (Valor numrico de una variable int). La cadena esta ajustada a un ancho de 6 caracteres; Las posiciones a la izquierda que no se usan en la conversin se rellenan con espacios.

void IntToStr(int number, char *output);


Ejemplo: int j = -4220; char txt[7]; IntToStr(j, txt);

// Inicializa un arreglo con 7 espacios // txt es " -4220" (un espacio en blanco)

LongToStr
Descripcin: Crea una cadena de salida de un numero largo con

signo (Valor numrico de una variable long). La cadena esta ajustada a un ancho de 11 caracteres; Las posiciones a la izquierda que no se usan en la conversin se rellenan con espacios.

void LongToStr(long number, char *output);


Ejemplo: long jj = -3700000; char *txt; LongToStr(jj, txt);

// Inicializa un apuntador con 12 espacios // txt es -3700000" (3 espacios en blanco)

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 ff = -374.2; char *txt; FloatToStr(ff, txt);

// Inicializa un apuntador con 14 espacios // txt es "-0.37420e3"

9.- Contador 0-255 (problema)


Se quiere un programa que visualice un conteo de 0 a 255 en un LCD.

Contador 0-255 (algoritmo)


1. 2. 3. 4. 5. 6. Configura el LCD Inicializa el contador Convierte a ASCII el valor del contador Enva valor en ASCII al LCD Incrementa el contador Regresa a 3

Contador 0-255 (diagrama de flujo)


teclado Inicializa puertos (LCD) Convierte contador a ASCII Inicializa contador Enva a LCD ASCII Incrementa contador

Contador 0-255 (programa)


void main(void) { unsigned short contador; char cadena[ 5 ]; TRISD = 0; Lcd_Config(&PORTD,0,2,1,7,6,5,4); contador = 0; Lcd_Out(1,1,Contador 0-255); while(1) { ByteToStr ( contador , cadena ); Lcd_Out ( 2 , 8 , cadena ); contador ++; Delay_ms(500); } }

Contador 0-255 (esquemtico)

Contador 0-255 (funcionamiento)


Contador 0 - 255 : 0 Contador 0 - 255 : 1 Contador 0 - 255 : 2

Contador 0 - 255 : 3

Contador 0 - 255 : 4

Contador 0 - 255 : 5

Contador 0 - 255 : 6

Contador 0 - 255 : 255

Ejercicio propuesto 8
1. El alumno diseara un programa en donde se muestre en un LCD los nmeros desde 00 hasta el 99. Con un intervalo de tiempo entre cambio igual a 500 milisegundos.

Ejercicio propuesto 8
Contador 00-99 cada 500 mseg 00 Contador 00-99 cada 500 mseg 01 Contador 00-99 cada 500 mseg 02

Contador 00-99 cada 500 mseg 03

Contador 00-99 cada 500 mseg 04

Contador 00-99 cada 500 mseg 05

Contador 00-99 cada 500 mseg 06

Contador 00-99 cada 500 mseg 99

Ejercicio propuesto 9
1. 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 utilizar la segunda fila, presentando hasta 3 numeros consecutivos( un numero a la izquierda, uno mas al centro y otro a la derecha ).

Ejercicio propuesto 9
Serie de numeros Serie de numeros 1 Serie de numeros 1 2

Serie de numeros 1 2

Serie de numeros 8

Serie de numeros 8 16

Serie de numeros 8 16

32

Serie de numeros 8192 16384

32768

Ejercicio propuesto 10
1. Programa que utilice un LCD, configurado para usar un bus de 4 bits. En el LCD debe aparecer un mensaje que se desplace en toda las filas del display. Considere un display de 4 lineas con 20 caracteres por lineas.

Ejercicio propuesto 10

Teclado matricial (esquemtico)

Teclado matricial (funciones)


Keypad_Init Keypad_Read Keypad_Released

Keypad_Init
Descripcin: Inicializa el puerto para trabajar con el teclado. Las terminales del teclado deben estar conectadas de la siguiente forma:

port.F0 port.F1 port.F2 port.F3 port.F4 port.F5 port.F6 port.F7

columna 1 columna 2 columna 3 columna 4 fila 1 fila 2 fila 3 fila 4

Keypad_Init 2
Ejemplo: Keypad_Init(&PORTB);

Keypad_Read
Descripcin: Verifica si alguna tecla fue presionada. La funcin
1 2 9 C * 0 # D 1 2 11 12 13 14 15 16

regresa 1 a 16, dependiendo la tecla presionada, o 0 si no existe tecla presionada.

unsigned short Keypad_Read(void); Ejemplo: kp = Keypad_Read();

Keypad_Released
Descripcin: La llamada a la funcin Keypad_Released es
una funcin blocking call: La funcin espera hasta que cualquier tecla sea presionada y liberada. Cuando se libera, la funcin regresa de 1 a 16, dependiendo de la tecla presionada.

unsigned short Keypad_Released(void); Ejemplo: Keypad_Released();

10.- Teclado matricial (problema)


Se desea un programa con el cual se muestre en un LCD (bus 8 bits en puerto B y puerto C como control) la tecla presionada en un teclado matricial (puerto D).

Teclado matricial (algoritmo)


1. 2. 3. 4. 5. Configuracin de puertos (teclado y lcd). Lectura de teclado Conversin a ASCII Envo al LCD Regresar a 2

Teclado matricial (diagramas de flujo)


teclado Inicializa puertos (LCD y teclado) Lee teclado

Convierte a ASCII

Enva a LCD

Teclado matricial (esquemtico)

unsigned short kp, cnt; char txt[5]= ;

Teclado matricial (programa)

void main() { cnt = 0; Keypad_Init(&PORTD); Lcd8_Config(&PORTC, &PORTB, 0, 2, 1, 7, 6, 5, 4, 3, 2, 1, 0); // Inicializa LCD en puerto B y puerto C Lcd8_Cmd(LCD_CLEAR); // Limpia display Lcd8_Cmd(LCD_CURSOR_OFF); // Cursor apagado Lcd8_Out(1, 1, "Key :"); Lcd8_Out(2, 1, "Times:"); do { kp = 0; // Espera a que se presione una tecla pressed do kp = Keypad_Read(); while (!kp); // Prepara valor para salida switch (kp) { case 13: kp = *; //42; break; // '*' case 14: kp = 48; break; // '0' case 15: kp = 35; break; // '#' default: kp += 48; } cnt++; Lcd8_Chr(1, 10, kp); if (cnt == 255) { cnt = 0; Lcd8_Out(2, 10, " "); } // Imprime en LCD WordToStr(cnt, txt); Lcd8_Out(2, 10, txt); } while (1); }

unsigned short kp, cnt; char txt[5]= ; void main() { cnt = 0; Keypad_Init(&PORTD); Lcd_Init( &PORTB); // Inicializa LCD en puerto B y puerto C Lcd_Cmd(LCD_CURSOR_OFF); // Cursor apagado Lcd_Out(1, 1, "Key :"); do { kp = 0; // Espera a que se presione una tecla pressed do kp = Keypad_Read(); while (!kp); //

// Prepara valor para salida switch (kp) { case 1: case 2: case 3: kp=kp+48; break; case 5: case 6: case 7: kp=kp+47; break; case 9: case 10: case 11: kp=kp+46; break; case 13: kp = *; break; case 14: kp = 48; break; case 15: kp = 35; break; } Lcd_Chr(1, 10, kp); } while (1); }

//42; // '*' // '0' // '#'

Ejercicio propuesto 11
1. El alumno realizara un programa que tome 3 dgitos desde un teclado matricial, los guarde en un arreglo, los convierta a un numero que se guarde en una variable tipo entera. Con este numero el alumno deber proporcionar el producto por 2 y divisin entre 2 resultantes. Visualizando los resultados en un LCD.

Ejercicio propuesto 10
Cual es el numero de 3 cifras: Cual es el numero de 3 cifras: 025

Cual es el numero de 3 cifras: 025 El producto por 2 es: 050

Cual es el numero de 3 cifras: 025 El producto por 2 es: 050 La divisin entre 2 es: 012

Das könnte Ihnen auch gefallen