You are on page 1of 3

/*

* File: tecladoylcdfab.c
* Author: sergi
*
* Created on 11 de octubre de 2022, 05:38 PM
*/

#include <xc.h>
#include <string.h>
#include <stdio.h>

#pragma config FOSC = INTOSCIO_EC


#pragma config WDT = OFF
#pragma config LVP = OFF

#define _XTAL_FREQ 8000000


#define time 10

//LCD
#define CD 0x01
#define RH 0x02
#define EMS 0X06
#define DC 0X0F
#define DSr 0X1C
#define DS1 0X18
#define FS 0X28
#define RAW1 0X80
#define RAW2 0XC0
#define E LATE0
#define RS LATE1

char text[5] ={"DATO:"},text2[5];


unsigned char i, j;

int teclado[4][4] = {
{7, 8, 9, 15},
{4, 5, 6, 14},
{1, 2, 3, 13},
{10, 0, 11, 12}};

int n;

void LCD (unsigned char data){


E = 1;
__delay_ms(time);
LATD = data;
__delay_ms(time);
E = 0;
__delay_ms(time);
}

void SettingsLCD(unsigned char word){


RS = 0;
LCD (word >> 4);
LCD (word & 0X0F);
}

void WriteLCD(unsigned char word){


RS = 1;
LCD (word >> 4);
LCD (word & 0X0F);
}

void settings (void){


OSCCON = 0X72;
ADCON1 = 0X0F;
TRISB = 0XF0;
LATB = 0X0F;
TRISD = 0X00;
TRISE = 0X00;
LATD = 0X00;
LATE = 0X00;

//LCD

SettingsLCD(0x02);
SettingsLCD(EMS);
SettingsLCD(DC);
SettingsLCD(FS);
SettingsLCD(CD);
SettingsLCD(RAW2);

for(i = 0; i < strlen(text);i++){


WriteLCD(text[i]);

GIE = 1;
RBIE = 1;
RBIF = 0;
}

int barrido (void){


LATB = 0X01;
for(i = 0; i <= 3; i++){
if(PORTBbits.RB4){
j = 0;
break;

if(PORTBbits.RB5){
j=1;
break;

}
if(PORTBbits.RB6){
j = 2;
break;

}
if(PORTBbits.RB7){
j = 3;
break;

}
LATB = LATB <<1;
}
return teclado[i][j];
}

void __interrupt() CHAO(void){


if(RBIF){
RBIF = 0;
if((PORTB & 0XF0) != 0X00){
n = barrido();
SettingsLCD(RAW1+6);
sprintf(text2,"%d :D",n);
for(i=0; i < 5; i++){
WriteLCD(text2[i]);
}
LATB = 0X0F;
}
}
}

void main(void) {
settings();
while(1){

You might also like