calculadora (keypad4x4, display16x2) ROLE PARA O FINAL DO POST

unsigned short Num1,Num2,Result, kp, cnt, oldstate = 0;
char txt[6];

// Keypad conexões
char keypadPort at PORTD;
// Fim da conexões do keypad

// LCD conexões
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// fim das conexões do LCD

void main() {
cnt = 0; // Reseta o contador
Keypad_Init(); // Inicializa o keypad
ANSEL = 0; // Configura AN pinos digitais I/O
ANSELH = 0;
Lcd_Init(); // Ininicializa o LCD
Lcd_Cmd(_LCD_CLEAR); // limpa o display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1, 1, "1");
Lcd_Out(1, 1, "Key :"); // mensagens no LCD
Lcd_Out(2, 1, "Times:");

do {
kp = 0; // Reseta o valor da variavel

//Aguarde que a tecla seja pressionada e liberada

do

// kp = Keypad_Key_Press(); // Armazene o código da chave na variável kp
kp = Keypad_Key_Click(); // Armazene o código da chave na variável kp

while (!kp);

// tranforma o valor da chave em ANSII

switch (kp) {
case 1: kp = 49; break; // 1
case 2: kp = 50; break; // 2
case 3: kp = 51; break; // 3
case 4: kp = 47; break; // /
case 5: kp = 52; break; // 4
case 6: kp = 53; break; // 5
case 7: kp = 54; break; // 6
case 8: kp = 42; break; // *
case 9: kp = 55; break; // 7
case 10: kp = 56; break; // 8
case 11: kp = 57; break; // 9
case 12: kp = 45; break; // -
case 13: kp = 0; break; // zera o display
case 14: kp = 48; break; // 0
case 15: kp = 61; break; // =
case 16: kp = 43; break; // +
//Acima são os comandos para o keypad, com caractere de números e sinais de operações matemáticas
}

if (kp != oldstate) { //quando a chave for diferente o contador vai voltar à 1
cnt = 1;
oldstate = kp;
}
else { // senão, vai somar mais um
cnt++;
}

Lcd_Chr(1, 10, kp); // Print do valor do código ASCII

if (cnt == 255) { // se a contagem chegar à 255 zera o contador
cnt = 0;
Lcd_Out(2, 10, " ");
}

WordToStr(cnt, txt); // Transforma o valor do contador em string
Lcd_Out(2, 10, txt); //Exibir valor do contador no LCD
} while (1);

}

BOA NOITE , ESTOU TENDO UMA GRANDE DIFICULDADE EM TRANSFORMAR ISSO NUMA CALCULADORA, A PROGRAMAÇÃO  ACIMA É A DE UM CONTADOR. O FUNCIONAMENTO É O SEGUINTE, NO DISPLAY O CARACTERE PRESSIONADO APARECERÁ NA PRIMEIRA LINHA DO DISPLAY E NA SEGUNDA LINHA A QUANTIDADE QUE O CARACTERE FOI PRESSIONADO, ESSE CONTADOR VOLTARÁ A 1 QUANDO UM CARACTERE DIFERENTE FOR PRESSIONADO E ZERARÁ QUANDO A CONTAGEM CHEGAR A 255. E ENTAO, A MINHA  DUVIDA É: É POSSIVEL FAZER UMA CALCULADORA POR ´´CASE``?

Exibições: 287

As respostas para este tópico estão encerradas.

Respostas a este tópico

Olá,

Tudo é possível, inclusive seguir as regras do fórum é possível, veja este link e depois continuamos.

http://labdegaragem.com/forum/topics/sugest-o-de-como-postar 

Abs.

CK

OK, editarei o post

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço