switch case de char en ccs

hola a todos hize el sig codigo, tengo un teclado y una lcd y salidas digitales, pero no puedo hacer que se active una salida al teclear dos numeros solo funciona con uno solo, el problema esta en que el switch case solo reconoce del 0-9 y a-z pero yo necesito por ejemplo '15' y ahi esta el error, alguien que me pueda ayudar.

Código:
#include "18F2525.h" 
#FUSES XT, NOWDT, NOPROTECT, NOPUT 
#use delay(clock = 12000000) 


#include "flex_lcd.c" 
#include "kbd4.c" 
#include "stdio.h"
#include <string.h>

void main() { 
   char k,c;
   char b[2];
//#define toint(c) ((int)((c)-'0')) 
   lcd_init(); 
   kbd_init(); 

   while (TRUE) { 
      c=kbd_getc();
      delay_ms(50);
      k=kbd_getc();
      b=strcat (c,k);//junto dos char en una.
      //k=q;
      if(b!=0)
      switch (b)
      {
         case '3' : 
         lcd_putc(b);
         output_high(PIN_A0);output_low(PIN_A1);
          output_low(PIN_A2);
          output_low(PIN_A3);
          output_low(PIN_A4);
          output_low(PIN_A5);break;
         case '4' : 
         lcd_putc(b);
         output_high(PIN_A1);output_low(PIN_A0);
          output_low(PIN_A2);
          output_low(PIN_A3);
          output_low(PIN_A4);
          output_low(PIN_A5);break;
         case '9' : 
         lcd_putc(b);
         output_high(PIN_A2);output_low(PIN_A1);
          output_low(PIN_A0);
          output_low(PIN_A3);
          output_low(PIN_A4);
          output_low(PIN_A5);break;
         case '5' : 
         lcd_putc(b);
         output_high(PIN_A3);output_low(PIN_A1);
          output_low(PIN_A2);
          output_low(PIN_A0);
          output_low(PIN_A4);
          output_low(PIN_A5);break;
         case '15' : //aqui marca error
         lcd_putc(b);
         output_high(PIN_A4);output_low(PIN_A1);
          output_low(PIN_A2);
          output_low(PIN_A3);
          output_low(PIN_A0);
          output_low(PIN_A5);break;
         case '18' : //aqui marca error
         lcd_putc(b);
         output_high(PIN_A5);output_low(PIN_A1);
          output_low(PIN_A2);
          output_low(PIN_A3);
          output_low(PIN_A4);
          output_low(PIN_A0);break;
         case '*' : 
          lcd_putc('\f');
          output_low(PIN_A0);
          output_low(PIN_A1);
          output_low(PIN_A2);
          output_low(PIN_A3);
          output_low(PIN_A4);
          output_low(PIN_A5);break;         
   } 
}
}
 
Última edición por un moderador:
ricber gracias
de hecho ya estoy usando if, ahora no esta funcionando el comando strcmp(s1,s2) que se supone compara dos cadenas de caracteres.


char k,c,b;
char s1[2],s4[2];
char s2[1];
char s3[2]="13";
char s0[2];
lcd_init();
kbd_init();

while (TRUE) {
c=kbd_getc();
s1='1';
s2='2';
strcat(s1,s2);

if (strcmp(s1,s3)){ ejecuta estos comandos osea dice que si se cumple la condicion,pero no deberia.
output_high(PIN_A1);
printf(lcd_putc,s3);
output_low(PIN_A0);
output_low(PIN_A2);
output_low(PIN_A3);
output_low(PIN_A4);
output_low(PIN_A5);
}
 
la idea es que al teclear 12 se vea 12 en lcd y se prenda a1 pero ne quiere,
while (TRUE) {
b=kbd_getc();
if(b!=0){
if(b=='1' || s1=='2'){
delay_ms(500);
s1=kbd_getc();
while (s1==0){}
if(s1=='2'){
lcd_gotoxy(1,1);
printf(lcd_putc,b,s1);
output_high(PIN_A1);
output_low(PIN_A0);
output_low(PIN_A2);
output_low(PIN_A3);
output_low(PIN_A4);
output_low(PIN_A5);}}
else
{
//printf(lcd_putc,"\f");
//printf(lcd_putc,s1);
output_high(PIN_A0);
output_low(PIN_A1);
output_low(PIN_A2);
output_low(PIN_A3);
output_low(PIN_A4);
output_low(PIN_A5);}
 
ya lo cambie y le agrege dos while que no hacen nada hasta que se precionen las teclas, pero no entra al if ni al else. algo tengo mal.

while (TRUE) {
b=kbd_getc();
while (b==0){}
delay_ms(500);
s1=kbd_getc();
while (s1==0){}
if(b=='1' && s1=='2'){

lcd_gotoxy(1,1);
printf(lcd_putc,b,s1);
output_high(PIN_A1);
output_low(PIN_A0);
output_low(PIN_A2);
output_low(PIN_A3);
output_low(PIN_A4);
output_low(PIN_A5);}
else
{
//printf(lcd_putc,"\f");
//printf(lcd_putc,s1);
output_high(PIN_A0);
output_low(PIN_A1);
output_low(PIN_A2);
output_low(PIN_A3);
output_low(PIN_A4);
output_low(PIN_A5);}
 
Atrás
Arriba