#include <htc.h>
#include "Def16f87xa.h"
#include <stdlib.h>
#define _XTAL_FREQ 10000000
#define PIC_CLK 10000000
#include "delayhd.h"
#include "NewLCD.c"
unsigned char presionada;
unsigned char tecla;
int numerocapturado;
void DelayAntiRebote(void)
{
unsigned char retardo;
for (retardo= 40; retardo > 0; retardo--)
{
DelayUs(250);
}
}
void delay_2s(void)
{
int retardo;
for (retardo=8000;retardo>0;retardo--)
{
DelayUs(250);
}
}
void interrupt isr(void)
{
DelayAntiRebote();
PORTB= 1;
tecla= PORTB;
if ((tecla & 0xF0) != 0)
{
switch (tecla)
{
case 0b10000001: {
tecla= 49;
break;
}
case 0b01000001: {
tecla= 52;
break;
}
case 0b00100001: {
tecla= 55;
break;
}
}
presionada= 1;
}
else
{
PORTB= 2;
tecla= PORTB;
if ((tecla & 0xF0) != 0)
{
switch (tecla)
{
case 0b10000010: {
tecla= 50;
break;
}
case 0b01000010: {
tecla= 53;
break;
}
case 0b00100010: {
tecla= 56;
break;
}
case 0b00010010: {
tecla= 48;
break;
}
}
presionada= 1;
}
else
{
PORTB= 4;
tecla= PORTB;
if ((tecla & 0xF0) != 0)
{
switch (tecla)
{
case 0b10000100: {
tecla= 51;
break;
}
case 0b01000100: {
tecla= 54;
break;
}
case 0b00100100: {
tecla= 57;
break;
}
}
presionada= 1;
}
}
}
PORTB= 15;
RBIF= 0;
return;
}
int captura(void)
{
unsigned char digitos= 3;
int numero;
do
{
if (presionada == 1)
{
WriteCharLcd(tecla);
numero= (numero * 10) + (tecla - 48);
presionada= 0;
digitos--;
}
}
while(digitos != 0);
return numero;
}
void main(void)
{
const char *presentacion= "Calculadora";
const char *mensaje= "Ingresar";
const char *mensaje1= "Numeros";
unsigned char numeroentexto[3];
TRISB= 0b11110000;
PORTB= 15;
setup_comparator(NC_NC_NC_NC);
setup_adc(ADC_OFF);
setup_adc_ports(NO_ANALOG);
InitLcd(07);
WriteStrLcd(presentacion);
delay_2s();
ClearLcd();
WriteStrLcd(mensaje);
GotoxyLcd(1,2);
WriteStrLcd(mensaje1);
delay_2s();
ClearLcd();
enable_interrupt(INT_RB);
enable_interrupt(GLOBAL);
while (1) // este seria el ciclo infinito para ingresar los numeros
{
if (presionada == 1)
{
numerocapturado= captura();
itoa(numeroentexto
,numerocapturado
,10); GotoxyLcd(1,2);
WriteStrLcd(numeroentexto);
}
}