Você está na página 1de 5

/*

* Proyecto: Calculadora

* MCU: PIC16F877A

* Reloj: HS 8MHz

* Descripción: Simple calculadora

* Compilador: MikroC PRO PIC

* Autor: Tiago H. Melo

*/

char keypadPort at PORTD;

sbit LCD_RS at RB0_bit; sbit LCD_RS_Direction at TRISB0_bit;

sbit LCD_EN at RB1_bit; sbit LCD_EN_Direction at TRISB1_bit;

sbit LCD_D4 at RB2_bit; sbit LCD_D4_Direction at TRISB2_bit;

sbit LCD_D5 at RB3_bit; sbit LCD_D5_Direction at TRISB3_bit;

sbit LCD_D6 at RB4_bit; sbit LCD_D6_Direction at TRISB4_bit;

sbit LCD_D7 at RB5_bit; sbit LCD_D7_Direction at TRISB5_bit;

char [] clave = { '7', '8', '9', '/', '4', '5', '6', '*', '1', '2' '3', '-', '0', '=', '+'}; ''

char numero [9];

float lvalue, rvalue;

char op, flags, resultado [16];

#define CALCULO_OK flags.F0

#define NEGATIVO flags.F1

#define lcd_clear () lcd_cmd (_LCD_CLEAR);

#define BorrarNumero para (i = 0; i <8; i ++) * (número + i) = 0;

// esta función explora el teclado y devuelve el valor de la tecla presionada

char keyRead (char keys [])


{

char key;

key = keypad_key_press ();

if (key! = 0) return keys [key-1];

return 0;

void main ()

Char k pos, p i;

keypad_init ();

Lcd_Init ();

Lcd_Cmd (_LCD_CLEAR);

Lcd_Cmd (_LCD_CURSOR_OFF);

mientras que (1)

k = keyRead (teclas); // lectura del teclado

si (CALCULO_OK)

pos = 0; // resuma posición

CALCULO_OK = 0; // reseta calculo

lcd_clear (); // limpieza de pantalla

lcd_cmd (_LCD_RETURN_HOME);

(i = 0; i <8; i ++) {// limpia las variables

* (número + i) = 0;

* (resultado + i) = 0;

* (resultado + i + 8) = 0;
}

// si la tecla presiona es un número

((k> = '0' && k <= '9') || k == '.')

* (numero + pos ++) = k;

if (pos> = 8) pos = 0;

lcd_Out_CP ((+ número (post-1)));

(en el caso de que se produzca un error en el sistema).

op = k;

pos = 0;

lcd_chr_CP (p);

lvalue = atof (numero);

LimparNumero;

else if (k == '=')

rvalue = atof (numero);

NEGATIVO = 0;

lcd_chr_CP ( '=');

interruptor (op)

case '+':

lvalue + = rvalue;
romper;

"case" - ':

(lvalue> = rvalue)

lvalue - = rvalue;

otro

lvalue = rvalue - lvalue;

NEGATIVO = 1;

romper;

case '/':

(rvalue! = 0) lvalue / = rvalue;

else lvalue = 0;

romper;

casero '*':

lvalue * = rvalue;

romper;

// convierte el número a cadena

floattostr (lvalue, (resultado + NEGATIVO);

si (NEGATIVO) * (resultado) = '-';

lcd_out (2, 1, resultado);

CALCULO_OK = 1;

}
delay_ms (200);

Você também pode gostar

  • Examen de Industrial Safety 2020 I
    Examen de Industrial Safety 2020 I
    Documento2 páginas
    Examen de Industrial Safety 2020 I
    CANAL DE ING. ELECTRONICA UNJFSC
    Ainda não há avaliações
  • Carta Pode1
    Carta Pode1
    Documento1 página
    Carta Pode1
    CANAL DE ING. ELECTRONICA UNJFSC
    Ainda não há avaliações
  • Violacion Sexual
    Violacion Sexual
    Documento15 páginas
    Violacion Sexual
    CANAL DE ING. ELECTRONICA UNJFSC
    Ainda não há avaliações
  • Caratula para Todo
    Caratula para Todo
    Documento5 páginas
    Caratula para Todo
    CANAL DE ING. ELECTRONICA UNJFSC
    Ainda não há avaliações
  • Inversor DC Ac
    Inversor DC Ac
    Documento8 páginas
    Inversor DC Ac
    CANAL DE ING. ELECTRONICA UNJFSC
    Ainda não há avaliações
  • Calculo de Un Transformador
    Calculo de Un Transformador
    Documento4 páginas
    Calculo de Un Transformador
    CANAL DE ING. ELECTRONICA UNJFSC
    Ainda não há avaliações
  • Trabajo 2 Pds
    Trabajo 2 Pds
    Documento26 páginas
    Trabajo 2 Pds
    CANAL DE ING. ELECTRONICA UNJFSC
    Ainda não há avaliações
  • Practica #02 Bromatologia
    Practica #02 Bromatologia
    Documento4 páginas
    Practica #02 Bromatologia
    CANAL DE ING. ELECTRONICA UNJFSC
    Ainda não há avaliações
  • Guias Bioqal 2017-Grupo A Imprimir
    Guias Bioqal 2017-Grupo A Imprimir
    Documento33 páginas
    Guias Bioqal 2017-Grupo A Imprimir
    CANAL DE ING. ELECTRONICA UNJFSC
    Ainda não há avaliações