Autor Tema: Mikro C Pro convertir int a char y viceversa  (Leído 2178 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado yamilongiano

  • PIC10
  • *
  • Mensajes: 37
Mikro C Pro convertir int a char y viceversa
« en: 17 de Abril de 2015, 14:54:23 »
Hola ojala me pueda explicar claramente.

he buscado como convertir un numero assci en decimal y no lo he encontrado. trato de usar el comando "IntToStr (kp,txt) lo convierte en texto sun problemas y los mando al lcd
pero cuando quiero sumar  o trbajar ese txt no se puede. hay algun comando para convertir el ascii en decimal. de forma directa.

tengo algo como esto a ver si alguien puede ayudarme por favor..

Código: [Seleccionar]
unsigned short kp, cnt, cnt2, A, B, T,  oldstate = 0;
char txt[6];
char txt2[6];
char num1[6];
char num2[6];
char total[6];

// Keypad module connections
char  keypadPort at PORTD;
// End Keypad module connections

// LCD module connections
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;
// End LCD module connections

void main() {
  cnt = 0;                                 // Reset counter
  Keypad_Init();                           // Initialize Keypad
  Lcd_Init();                              // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);                     // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);                // Cursor off
  Lcd_Out(1, 1, "Sumando: ");                 // Write message text on LCD

  do {
    kp = 0;                                // Reset key code variable

    // Wait for key to be pressed and released
    do
      // kp = Keypad_Key_Press();          // Store key code in kp variable
      kp = Keypad_Key_Click();             // Store key code in kp variable
    while (!kp);
   // Prepare value for output, transform key to it's ASCII value
    switch (kp) {
      //case 10: kp = 42; break;  // '*'   // Uncomment this block for keypad4x3
      //case 11: kp = 48; break;  // '0'
      //case 12: kp = 35; break;  // '#'
      //default: kp += 48;

      case  1: kp = 49; break; // 1        // Uncomment this block for keypad4x4
      case  2: kp = 50; break; // 2
      case  3: kp = 51; break; // 3
      case  4: kp = 43; break; // A
      case  5: kp = 52; break; // 4
      case  6: kp = 53; break; // 5
      case  7: kp = 54; break; // 6
      case  8: kp = 66; break; // B
      case  9: kp = 55; break; // 7
      case 10: kp = 56; break; // 8
      case 11: kp = 57; break; // 9
      case 12: kp = 67; break; // C
      case 13: kp = 42; break; // *
      case 14: kp = 48; break; // 0
      case 15: kp = 35; break; // #
      case 16: kp = 61; break; // D

    }
    cnt++;
    Lcd_Chr_cp(kp);                    // Print key ASCII value on LCD

    if (cnt==0){
                A=kp;
                IntToStr(kp,num1);    //se almacena en num1 como txt
                A=num1;
                 //??????????????;      //no encuentro como convertirlo a decimal tambien
                }                              //para poder sumarlo

     if (cnt==1){
                 IntToStr(kp,num2); //se transforma y almacena en num1 como texto
                 B=num2;
                
                 //??????????????;  //no encuentro como convertirlo a decimal tambien
                }                          //para poder sumarlo


     if (cnt==3){
                  T=A+B;             //total=num1+num2
                  IntToStr(T,total); //estoy claro que no puedo sumar aqui
                  Lcd_Chr_cp(T);
                      }                   //algun comando como el inttostr, pero para
                                         //convertir a decimal. y poder trabajarla aritmeticamente.

  } while (1);
}
« Última modificación: 17 de Abril de 2015, 14:59:04 por yamilongiano »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Mikro C Pro convertir int a char y viceversa
« Respuesta #1 en: 17 de Abril de 2015, 22:02:58 »
Una letra es un byte, podrias simplemente restarle 0x30 (48) y asi tenerlo en valor "decimal", Pero esto solo a los numeros de 0 a 9
Si es una letra entonces tenes que restarle otro valor.

EDIT:

Ahora veo que kp devuelve el numero del boton.. es decir 4 un A

Y si no en ves de utilizar un switch case como el que tenes aca:

Código: C
  1. switch (kp) {
  2.       //case 10: kp = 42; break;  // '*'   // Uncomment this block for keypad4x3
  3.       //case 11: kp = 48; break;  // '0'
  4.       //case 12: kp = 35; break;  // '#'
  5.       //default: kp += 48;
  6.  
  7.       case  1: kp = 49; break; // 1        // Uncomment this block for keypad4x4
  8.       case  2: kp = 50; break; // 2
  9.       case  3: kp = 51; break; // 3
  10.       case  4: kp = 43; break; // A
  11.       case  5: kp = 52; break; // 4
  12.       case  6: kp = 53; break; // 5
  13.       case  7: kp = 54; break; // 6
  14.       case  8: kp = 66; break; // B
  15.       case  9: kp = 55; break; // 7
  16.       case 10: kp = 56; break; // 8
  17.       case 11: kp = 57; break; // 9
  18.       case 12: kp = 67; break; // C
  19.       case 13: kp = 42; break; // *
  20.       case 14: kp = 48; break; // 0
  21.       case 15: kp = 35; break; // #
  22.       case 16: kp = 61; break; // D
  23.  
  24.     }

Podrias simplemente dejar el valor que devuelve kp y luego usarlo asi:

Código: C
  1. kp_to_ASCII[16] = {'0','1','2','3','A','4','5','6','B','7','8','9','C','*','0','#','D'};
  2. kp_to_int[17] = {255,1,2,3,255,4,5,6,255,7,8,9,255,0,255,255};

Haciendo kp_to_ASCII[kp] tendrias tu letra y kp_to_int[kp] tu numero, cualquier otra cosa que se presione y que no sea un numero da 255,para saber si se presiono mal la tecla.

Código: C
  1. kp = Keypad_Key_Click();
  2. Imprimir_char_lcd(kp_to_ASCII[kp]);
  3. if (kp_to_int[kp]!=255)
  4. {
  5.     Suma_total = 5 + kp_to_int[kp];
  6. }
  7. else
  8. {
  9.     Imprimir_lcd("No es un numero valido");
  10. }

Espero que se entienda lo que quise poner.
« Última modificación: 17 de Abril de 2015, 23:55:52 por KILLERJC »

Desconectado yamilongiano

  • PIC10
  • *
  • Mensajes: 37
Re: Mikro C Pro convertir int a char y viceversa
« Respuesta #2 en: 18 de Abril de 2015, 18:35:21 »
gracias igual me sirvio =)

Desconectado Pablolbap

  • PIC10
  • *
  • Mensajes: 37
Re: Mikro C Pro convertir int a char y viceversa
« Respuesta #3 en: 19 de Abril de 2015, 23:06:31 »
Y si haces la suma antes de la conversión, qué sucede?
Saludos.


 

anything