Professional Documents
Culture Documents
Juan Manuel Laiseca, Mara Alejandra Pez, Carol Quiroga, Carlos Romero
Facultad de ingeniera biomdica, Universidad Manuela Beltrn
Bogot, Colombia
manuelacho94@hotmail.com
alejandra.paez_25@hotmail.com
cayuquipi@hotmail.com
cafemtb_@hotmail.com
II. CONCLUSIONES
[1] LCD Module, Xiamen Amotec, Disponible en:
A partir del programa elaborado fue posible [https://www.sparkfun.com/datasheets/LCD/ADM1602K-
NSW-FBS-3.3v.pdf]
visualizar una calculadora de operaciones bsicas
capaz de reconocer nmeros negativos, generar
nmeros decimales y adquirir nmeros de ms de un
digito, lo ms importante fue tener los conceptos
muy claros respecto al lenguaje c, las conexiones del
teclado matricial y la LCD al microcontrolador, la
manipulacin de PIC C y el simulador Proteus. Para
el cdigo elaborado se utilizaron instrucciones
bsicas que se encargaban de adquirir y guardar
nmeros y caracteres en una variable para
posteriormente escoger una operacin y adquirir el
siguiente nmero que se desea operar y finalmente
observar los resultados de las operaciones en la LCD.
Tal vez el mayor inconveniente fue lograr adquirir
nmeros de ms de un digito y reconocer si el signo
del nmero era positivo o negativo, pero esto se
solucion por medio de un ciclo do-while y un bucle
infinito al momento de adquirir el nmero para
reconocer si el nmero ingresado era positivo o
negativo, pero esto genero un cdigo demasiado
extenso. Finalmente se obtuvo satisfactoriamente el
programa deseado, es decir una calculadora que
puede realizar operaciones bsicas y cumplir
prcticamente todas las funciones de las que se
encarga una calculadora normal.
REFERENCIAS
[1] DataSheet 28/40/44-Pin Enhanced Flash Microcontrollers,
(PIC18F4550), Microchip, Disponible en:
[http://ww1.microchip.com/downloads/en/devicedoc/39582b.pd
f]
[2] Teclado matricial, Galia Microcontroladores, Disponible
en:
[http://galia.fc.uaslp.mx/~cantocar/microcontroladores/SLIDES
_8051_PDF/20_MATRI.PDF]
CDIGO EN PIC C while(TRUE)//ciclo infinito
#include <18f4550.h> //se nombra libreria {num2=0;//vaciar variables
del pic18f4550 para contar con todos sus recursos
cont1=0;//vaciar variables
#fuses NOWDT,NOPROTECT,XT //no perro
do//ciclo que adquiere el nmero ciclicamente siempr y
guardian, no preoteccion,cristal
cuando no se presiones ningn smbolo
#use delay(clock=4000000) //se utiliza un reloj
de 40 mhz {
printf(lcd_putc,"%f",num2);
char k; //variable k tipo char
delay_ms(100);
float num1,cont,cont1, x,num2,y, sig, res; //variables
tipo flotante k=0;
do{
void limpiar //funcin de reset
k=kbd_getc; //Obtener variable y guardar en k
{while(true) { //bucle infinito
}while(k==0);
k=kbd_getc; //Obtener variable y guardar
en k cont1=1;}
delay_ms(100); while((k!='*')&&(k!='X')&&(k!='/')&&(k!='=')&&(k!='-
')&&(k!='+'))
k=0;
{
do{
y=k-48;// conversion numerica
k=kbd_getc;//Obtener variable y guardar en k
num2=(num2*cont1*10)+y;
}while(k==0);
lcd_putc("\f");
cont1=1;
res=num1+(num2); printf(lcd_putc,"%f",num2);
delay_ms(100);
delay_ms(100);
lcd_gotoxy(1,1); //Se le indica a la lcd donde se va a k=0;
comenzar a escribir (columna y fila) do{
printf(lcd_putc, "\f Su resultado es");
k=kbd_getc;//Obtener variable y guardar en k
lcd_gotoxy(1,2); }while(k==0);
printf(lcd_putc,"%f+%f=%f",num1,num2,res); cont1=1;}
delay_ms(100); num2=num2*(-1);
limpiar ; } printf(lcd_putc,"%f",num2);
res=num1-(num2);
} } delay_ms(100);
else
lcd_gotoxy(1,1); //Se le indica a la lcd donde se va a
printf(lcd_putc,"error");} } } comenzar a escribir (columna y fila)
printf(lcd_putc, "\f Su resultado es");
lcd_gotoxy(1,2); printf(lcd_putc,"%f-
void resta//Operacin resta
%f=%f",num1,num2,res); delay_ms(100);
{lcd_gotoxy(1,1); //Se le indica a la lcd donde se va a
comenzar a escribir (columna y fila) limpiar ;
limpiar ; } delay_ms(100);
printf(lcd_putc,"error");} } } lcd_gotoxy(1,2);
printf(lcd_putc,"%f*%f=%f",num1,num2,res);
delay_ms(100);
void multi//Operacin multiplicacin
limpiar ;
{lcd_gotoxy(1,1); //Se le indica a la lcd donde se va a
comenzar a escribir (columna y fila) }
while(TRUE)//ciclo infinito
{num2=0;//vaciar variables
cont1=0;//vaciar variables
{ k=kbd_getc;//Obtener variable y guardar en k {
num2=(num2*cont1*10)+y; {
lcd_gotoxy(1,2);
} } printf(lcd_putc,"%f/%f=%f",num1,num2,res);
else delay_ms(100);
printf(lcd_putc,"error");} } } limpiar ;
}
void divi//Operacin divisin
while((k!='*')&&(k!='X')&&(k!='/')&&(k!='=')&&(k!='- multi; }
')&&(k!='+'))
else if(k=='*')
{y=k-48;// conversion numerica {lcd_putc("\f");
num2=(num2*cont1*10)+y;
limpiar ;}
lcd_putc("\f");
else
printf(lcd_putc,"%f",num2);
delay_ms(100); lcd_putc("\f");
k=0; divi;} } }
do{
de puerto b
lcd_gotoxy(1,1); //Se le indica a la lcd donde se va a
comenzar a escribir (columna y fila) lcd_gotoxy(1,1);
printf(lcd_putc, "\f Su resultado es"); printf(lcd_putc,"calculadora");
lcd_gotoxy(1,2); delay_ms(500);
printf(lcd_putc,"%f/%f=%f",num1,num2,res); lcd_gotoxy(1,1);
while(TRUE)//ciclo infinito
void oper()
{num1=0;//vaciar variables
{lcd_gotoxy(1,1); //Se le indica a la lcd donde se va a
comenzar a escribir (columna y fila) cont=0;//vaciar variables
printf(lcd_putc, "\fOperacion"); do//ciclo que adquiere el nmero ciclicamente siempr y
cuando no se presiones ningn smbolo
while(true)//ciclo infinito
{
{ k=kbd_getc;//Obtener variable y guardar en k
k=kbd_getc;//Obtener variable y guardar en k
if(k!=0)//se presiono una tecla
}while(k==0);
{ if(k=='+')
{ lcd_putc("\f"); while((k!='*')&&(k!='X')&&(k!='/')&&(k!='=')&&(k!='-
')&&(k!='+'))
suma; }
{
else if(k=='-')
x=k-48;// conversion numerica
{lcd_putc("\f");
num1=(num1*cont*10)+x;
resta; }
lcd_putc("\f"); { k=kbd_getc;//Obtener variable y guardar en k
printf(lcd_putc,"%f",num1); }while(k==0);
delay_ms(100);
while((k!='*')&&(k!='X')&&(k!='/')&&(k!='=')&&(k!='-
k=0; ')&&(k!='+'))
printf(lcd_putc,"%f",num1); k=0;
oper;} do{