Está en la página 1de 18

Para la semana siguiente

1.- Traer la primera entrega de evidencias del TC – Trabajo del curso


Solo impreso y engrampado, sin folder.

2.- Los programas a trabajar son los siguientes, lo traen en USB lo


del MPLABX y proteus, para presentar en clase y grabar al módulo
de entrenamiento.
2.1 primer programa de LCD
Lcd sin librería
/*
* File: lcd1_sinLIB.c
* Author: grupo0
* Uso del LCD sin libreria
* Created on 28 de febrero de 2023, 06:08 PM
*/

#include <xc.h>
#include "bitconfig87xa.h" #define
_XTAL_FREQ 4000000
//Definición de comandos básicos #define
lines_5x7 0x28 //2lin-4bit-5x7
#define DonCoff 0x0C //display on cursor off
#define CursorIncr 0x06 //incrementa cursor
#define limpiar 0x01 //limpiar pantalla

//Definiciones de Pines para el conexionado del LCD #define


E_PIN PORTBbits.RB3
#define TRIS_E TRISBbits.TRISB3
#define RS_PIN PORTBbits.RB2
#define TRIS_RS TRISBbits.TRISB2
#define DATA_PORT PORTB #define
TRIS_DATA_PORT TRISB

const char wob[14] = "ELECTROTECNIA";


//Definiciones de Funciones ---------------------------
void lcd_Init(); // initialise the LCD - put into 4 bit mode void
lcd_cmd(unsigned char cmd); // configurar comando void
lcd_Data(unsigned char car); // escribir un caracter
void lcd_Putrs(char row, char column, const char *s); //para cadena de caracteres void
lcd_Puts(char row, char column, char *s); //para cadena de caracteres
void lcd_cursor_xy(char row, char column); // escoger la fila del LCD

unsigned char cmd, car, datlcd, comandLCD; char


row, column;
void main(void) { delay_ms(5);
PORTB = 0; DATA_PORT &= 0x0F;
lcd_Init(); DATA_PORT |= (cmd << 4)&0xF0;
while (1) { RS_PIN = 0;
lcd_cmd(limpiar); E_PIN = 1;
delay_ms(300); delay_ms(5);
lcd_Data('H'); E_PIN = 0;
delay_ms(300); delay_ms(5);
lcd_Data('o'); return;
delay_ms(300); }
lcd_Data('l'); /*********************************/
delay_ms(300); /* Escribir un dato en el lcd */
lcd_Data('a');
delay_ms(300); /
//-- Definir el caracter 0: Monigote ******************************
lcd_cmd(0x40); ***/ void lcd_Data(unsigned char
lcd_Data(0x0E); car) {
lcd_Data(0x0E); DATA_PORT &= 0x0F;
lcd_Data(0x04); DATA_PORT |= (car & 0xF0);
lcd_Data(0x1F); RS_PIN = 1;
lcd_Data(0x04); E_PIN = 1;
lcd_Data(0x0A); delay_ms(5);
lcd_Data(0x11); E_PIN = 0;
lcd_Data(0x00); delay_ms(5);
//-- Definir caracter 1: Llave DATA_PORT &= 0x0F;
lcd_Data(0x0E); DATA_PORT |= ((car << 4)&0xF0); RS_PIN
lcd_Data(0x11); = 1;
lcd_Data(0x0E); E_PIN = 1;
lcd_Data(0x04); delay_ms(5);
lcd_Data(0x04); E_PIN = 0;
lcd_Data(0x0C); delay_ms(5);
lcd_Data(0x04); return;
lcd_Data(0x00); }
//-- Escribir los caracteres definidos
lcd_cmd(0x85); /* Inicialización del LCD */
lcd_Data(0); void lcd_Init() {
delay_ms(500); //-- Configurar el lcd
lcd_Data(1); char x = 0;
delay_ms(500); char init_value;
lcd_cursor_xy(2, 5);
lcd_Data('P'); init_value = 0x30;
lcd_Data('E'); TRIS_DATA_PORT = 0x03;
lcd_Data('R');
lcd_Data('U'); delay_ms(15);
delay_ms(1000); DATA_PORT = init_value;
lcd_cmd(limpiar); RS_PIN = 0;
delay_ms(200); E_PIN = 1;
lcd_Putrs(1, 4, "SENATI"); delay_ms(5);
delay_ms(100); E_PIN = 0;
lcd_Puts(2, 1, wob); delay_ms(5);
delay_ms(1000);
} DATA_PORT = init_value;
RS_PIN = 0;
E_PIN = 1;
return; delay_ms(5);
} E_PIN = 0;
/ RS_PIN = 0;
******************************* E_PIN = 1;
***/ delay_ms(5); E_PIN = 0;
/* Enviar un comando al LCD */

/
*******************************
***/ void lcd_cmd(unsigned char
cmd) {
DATA_PORT &= 0x0F;
DATA_PORT |= cmd & 0xF0;
_PIN = 0;
delay_ E_PIN = 1;
us(200 delay_ms(5);
);
DAT
A_PO
RT =
init_v
alue;
RS_PI
N = 0;
E_PIN = 1;

d
e
l
a
y
_
m
s
(
5
)
;

E
_
P
I
N

0
;

d
e
l
a
y
_
u
s
(
2
0
0
);
D
A
T
A
_
P
O
R
T
=
0
x
2
0
;
R
S
E_PIN = 0; void lcd_Puts(char row, char column, char * s) { unsigned
delay_us(40); char direccion;
if (row != 1)
lcd_cmd(lines_5x7); direccion = 0x40;
lcd_cmd(DonCoff); else
lcd_cmd(CursorIncr); direccion = 0; direccion
lcd_cmd(limpiar); return; += column - 1;
} lcd_cmd(0x80 | direccion);
while (*s)
void lcd_cursor_xy(char row, char column) { unsigned lcd_Data(*s++);
char direccion; }
if (row != 1)
direccion = 0x40;
else
direccion = 0x00;
direccion += column - 1;
lcd_cmd(0x80 | direccion);

void lcd_Putrs(char row, char column, const char * s) {


char direccion;
if (row != 1)
direccion = 0x40;
else
direccion = 0; direccion
+= column - 1;
lcd_cmd(0x80 | direccion);
while (*s)
lcd_Data(*s++);
}

2.2.- Segundo programa de LCD


/*
* File: lcd1.c
* Author: grupo0
* LCD con libreria
* Created on 28 de febrero de 2023, 07:55 PM
*/

#include <xc.h>
#include "bits_configuración.h"
#include "lcd_lib_rivXC8.h"
#define _XTAL_FREQ 4000000

void main(void) {
lcd_Init();
while (1) {
lcd_Clear();
lcd_Putrs(1, 1, "H");
delay_ms(500);
lcd_Putrs(1, 2, "O");
delay_ms(500);
lcd_Putrs(1, 3, "L");
delay_ms(500);
lcd_Putrs(1, 4, "A");
delay_ms(500);
lcd_Clear();
delay_ms(500);
}
return;
}
Pregunta Respuesta

a. Del programa anterior el número total de 7 funciones


funciones es:
b. En el programa anterior el comando que también El comando es Rs que en un tiempo se habilita con 1(datos)
configura para que el LCD trabaje con 4 bits es: luego pasa a nivel o (comando) la cual tiene
de entrada el RB2 del microcontrolador.
c. En el programa anterior el comando Es el carácter E que se habilita con 1 lógico y se
para visualizar los caracteres diseñados deshabilita con 0 lógico alimentado por la salida RB3 del
microcontrolador.
es:
d. En el programa anterior para visualizar en el LCD Para visualizar la palabra ELECTROTECNIA la función es
la palabra “ELECTRONICA” es con la función: R/W con 1 lógico.

e. En el programa anterior la función lcd cmd que


configura el LCD en una matriz de 5x7 es
llamado dentro de la función:
f. En el programa anterior al ejecutarla paso a paso
y en la primera pasada la expresión dentro de la
función lcd_cmd la expresión DATA_PORT |=
cmd
& 0xF0 da como resultado:
2. 2.a. - Si ya funciona en el módulo, modificar el programa para agregar el monigote, un Pac-Man, el
mensaje PERÜ y ELECTRÖNICA similar al programa del LCD1.
TFTART

2.2.b.- En el programa LCD1 hacer que la palabra HOLA corra a la derecha

3.- Tercer programa de LCD


/*
* File: lcd_mensaje.c
* Author: gropo0
* Mostrar mensajes en el LCD
* Created on 3 de marzo de 2023, 07:11 PM
*/

#include <xc.h>
#include "lcd_lib_rivXC8.h"
#define _XTAL_FREQ 4000000
#include "bits_configuración.h"

const char *Mensajes[]={"Bienvenidos a:","MPLABX","Compilador:","XC8"}; void

main(void)
{
lcd_Init();
while(1)
{
lcd_Clear();
lcd_Putrs(1,1,Mensajes[0]);
delay_ms(1000);
lcd_Putrs(2,5,Mensajes[1]);
delay_ms(1000);

lcd_Clear();
lcd_Putrs(1,3,Mensajes[2]);
delay_ms(1000);
lcd_Putrs(2,7,Mensajes[3]);
delay_ms(1000);
}
return;
}

4.- Cuarto programa TECLADO sin


librería
/*
* File: teclado1xc8.c
* Author: grupo0
* Funcionamiento básico del teclado
* Created on 3 de marzo de 2023, 05:18 PM
*/

#include <xc.h>
#define _XTAL_FREQ 4000000
#include "bits_configuración.h"
#include "keyriv_v1.h"

char valor;

void main() {
TRISA = 0B11111111;
TRISC = 0B11110000; //PUERTO C salida de la tecla presionada
PORTC = 0;
key_init();
while (1) {
valor = 0;
while (valor == 0) {
valor = getkey(0);
}
//Funcion que te deja ver el canal analogo que hallamos elegido switch
(valor) {
case '0': PORTC = 0;
break;
case '1': PORTC = 1;
break;
case '2': PORTC = 2;
break;
case '3': PORTC = 3;
break;
case '4': PORTC = 4;
break;
case '5': PORTC = 5;
break;
case '6': PORTC = 6;
break;
case '7': PORTC = 7;
break;
case '8': PORTC = 8;
break;
case '9': PORTC = 9;
break;
case 'A': PORTC = 10;
break;
case 'B': PORTC = 11;
break;
case 'C': PORTC = 12;
break;
case 'D': PORTC = 13;
break;
case '*': PORTC = 14;
break;
case '#': PORTC = 15;
break;
default: break;
}
}
return;
}
5.- Cuarto programa LCD y TECLADO con librerías
/*
* File: lcdyteclado.c
* Author: grupo0
* Uso de librerias en LCD y teclado
* Created on 3 de marzo de 2023, 04:25 PM
*/

#include <xc.h>
#include "bits_configuración.h"
#include "keyriv_v1.h" #include
"lcd_lib_rivXC8.h"
#define _XTAL_FREQ 4000000
unsigned char valor, x;

void main() {
lcd_Init();
key_init();

lcd_Clear(); lcd_Putrs(1,
1, "HOLA");
delay_ms(500); lcd_Putrs(2,
4, "TECLADO");
delay_ms(500);

lcd_Clear();
lcd_Putrs(1, 1, "PULSA UNA TECLA");
delay_ms(50);
while (1) {
valor = 0;
while (valor == 0) {
valor = getkey(0);
}
x = valor;
lcd_PutchDir(2, 8, x);
delay_ms(500);
}
return;

También podría gustarte