Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

02/08/2011 #1

Avatar de bondadoso

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;         
   } 
}
}
04/08/2011 #2


Hola, puedes usar los if, por ejemplo

if(c=='1' && k=='8')
{
aca va el codigo
}
04/08/2011 #3

Avatar de bondadoso

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);
}
04/08/2011 #4


Hola, yo no uso strcmp uso como lo puse en la rspuesta anterior, talves necexites alguna libreria de C
04/08/2011 #5

Avatar de bondadoso

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);}
05/08/2011 #6


Prueba cambiando esto
if(b=='1' || s1=='2'){
por
if(b=='1' && s1=='2')
porque se debe armar una comparacion "and".
05/08/2011 #7

Avatar de bondadoso

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);}
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.