Autor Tema: como funciona gets y string  (Leído 3510 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
como funciona gets y string
« en: 05 de Julio de 2009, 04:19:54 »
holas bueno esta vez tengo una duda, bueno en realidad e estado leyendo al respecto pero no logro entender bien y esque como funciona el gets y el string, bueno se que esta función nos permite introducir frases enteras, incluyendo espacios y Almacena lo que vamos "tecleando" en la variable buffer hasta que pulsamos ENTER o algo para salir de buffer. pero en general no se su estructura, buen esta duda surge por el motivo que intento guardar numeros pulsados en este, no se si se podra pero es lo que quiero averiguar. estoy trabajando con un teclado 4x4, y quiero almasenar las telcas pulsadas y ademas que las teclas se vean en la lcd, por ejemplo pulso varios numeros seguidos mmm 2589, y quiero que se vea talcual en la pantalla de la lcd y ademas que este valor este guardado en una variable. e probado con un array, pero no me sale bien o mejor dicho no me sale, estoy trabajando en ccs c y con el pic 16f877a, espero que me puedan ayudar. saludos

DP{me podrian dar ejemplos de lo que digo porfavor esque de verdad e intentado hacer esto hace como una semana y no logro nada}

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: como funciona gets y string
« Respuesta #1 en: 05 de Julio de 2009, 05:29:27 »
Dale un vistazo a Teoría y praxis de las comunicaciones serie TTL con los PIC's 16F/18F en CCS C por si te puede ayudar, he empezado por lo mas básico y he ido complicándolo poco a poco. La ultima fase publicada recibe strings para procesarlos posteriormente. Quizás pueda adaptarlo (la ideas) para tus necesidades.

Otros hilos que he creado sobre el tema (o que contienen una parte cuya función es similar) son:

Recibiendo del RS232 sobre un Buffer y procesandolo posteriormente.
La EEPROM interna puesta a nuestro servicio.
Traductor RS232 a Morse (Sonoro y visual)

Espero que te sirva.  :mrgreen:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: como funciona gets y string
« Respuesta #2 en: 05 de Julio de 2009, 20:26:20 »
hola redPic estan buenos tus ejemplos muy esplicativos. te comento que suky me dio un ejemplo a seguir y ahora resulta bien, pero ahora tengo dos dudas con dicho ejemplo, como ago para al presionar cada tecla se me valla visualisando en la lcd, por que en este caso tengo que presionar la tecla D para ver el resultado optenido de las teclas presionadas, y por ultimo cuando compilo me sale los siguientes warning>

line 47(1,1):assingnment inside relational expression
:line 58(0,1):imterrupts disabled during to prevent re-entrancv (@MULFF)

bueno y el codigo es este:

Código: [Seleccionar]
#include <16F877a.h>
#device adc=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT
#use delay (clock=20000000) //Fosc=20Mhz
#define use_portd_lcd TRUE //definir salida del puerto D para la lcd
#include<lcd420.c> //libreria manejo lcd
#include <keypad.c>   //Libreria de teclado 4x4
#include <stdlib.h>

unsigned char key;   //Variable global tecla
int1 kbhit_tecla=0;  // Para saber si se ha pulsado alguna tecla.
int1 Nuevatecla=1;  // Indica que es el primer ingreso, así que borra pantalla antes de imprimir.
char String[6];
int i,a=0,b=0;
float Valor;

// Interrupcion RB4 - RB7 /////////////////////////////////////////////////////

#INT_RB
void interrupt_keypad()               
{
   key=read_keypad();         //Asigna la tecla pulsada
   if(key==read_keypad()){a++;}
   
   if(key!='D'){                    // Hay que establecer una tecla o algo que te de por terminado el ingreso de datos
      String[ b ]=key;
      b=a-1;
      kbhit_tecla=1;             // Hay un nuevo caracter a imprimir.
   }else{
      Valor=atof(String);       // Se pulso tecla D, como un "enter", así que guardamos dato, y indicamos que al llegar...
      Nuevatecla=1;         // ...otro dato se borre pantalla, como una calculadora. Y reseteamos i.
      i=0;
   }                                 
   clear_interrupt(INT_RB);   //Limpia bandera RBIF
   
}
// Programa Principal /////////////////////////////////////////////////////////
void main()
{   
   lcd_init();
   enable_interrupts(INT_RB);            //interrupcion INT_RB activada
   disable_interrupts(GLOBAL);      //todas las interrupciones desactivadas
   init_keypad();
   i=0;   
   while(true)
   {
       if(kbhit_tecla=1){   // Se ha pulsado alguna tecla?
           if(NuevaTecla==1){
               lcd_putc("\f");      // Borro pantalla.-
               NuevaTecla=0;
           }
        else
           kbhit_tecla=0;
           printf(lcd_putc,"%f",valor); // Imprimimos la Tecla pulsada
           lcd_gotoxy(1,1);
       }}}

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: como funciona gets y string
« Respuesta #3 en: 06 de Julio de 2009, 00:23:05 »
Analizalo, con lo que tienes hecho es muy sencillo hacer lo que tu quieres. Solo debes determinar como se ingresa el dato, los pasos que sigue el programa y te darás cuenta. Es lógica!
No contesto mensajes privados, las consultas en el foro

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: como funciona gets y string
« Respuesta #4 en: 07 de Julio de 2009, 01:19:27 »
hola bueno la verdad que era facil como tu decias, pero me susede el siguinte problema.al digitar un numero por ejemplo 1 se ve bien y despues si lo cambio a 5 tambien se ve bien, pero si quiero paras de 2 digitos (25 por ejemplo) a un digito (8) este queda con el segundo digito del numero anterior (osea 85), y no se por que es, e intentado poner mi variable dos en 0 que es la que incrementa mi String pero nada, como puedo hacer que se borre este numero (5).

Código: [Seleccionar]
#include <16F877a.h>
#device adc=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT
#use delay (clock=20000000) //Fosc=20Mhz
#define use_portd_lcd TRUE //definir salida del puerto D para la lcd
#include<lcd420.c> //libreria manejo lcd
#include <keypad.c>   //Libreria de teclado 4x4
#include <stdlib.h>

unsigned char key;   //Variable global tecla
int1 kbhit_tecla=0;  // Para saber si se ha pulsado alguna tecla.
int1 Nuevatecla=1;  // Indica que es el primer ingreso, así que borra pantalla antes de imprimir.
char String[6];
int h=0,dos=0,tres;
float Valor,resultado;

// Interrupcion RB4 - RB7 /////////////////////////////////////////////////////

#INT_RB
void interrupt_keypad()               
{
   key=read_keypad();         //Asigna la tecla pulsada
   if(key==read_keypad()){h++;}
   if(key=='C'){h=1;tres=5;}//presiono tecla C para ingresar datos
   if(tres==5){
   if(key!='D'){                    // Hay que establecer una tecla o algo que te de por terminado el ingreso de datos
      String[ dos ]=key;
      dos=h-1;
      kbhit_tecla=1;             // Hay un nuevo caracter a imprimir.
      Valor=atof(String);
    }else{
      Valor=atof(String);       // Se pulso tecla D, como un "enter", así que guardamos dato, y indicamos que al llegar...
      Nuevatecla=1;         // ...otro dato se borre pantalla, como una calculadora. Y reseteamos i.
      h=1;
      tres=6;
      }}
   clear_interrupt(INT_RB);   //Limpia bandera RBIF
   
}
// Programa Principal /////////////////////////////////////////////////////////
void main()
{   
   lcd_init();
   enable_interrupts(INT_RB);            //interrupcion INT_RB activada
   disable_interrupts(GLOBAL);      //todas las interrupciones desactivadas
   init_keypad();
   h=1;
   while(true)
   {
       if(kbhit_tecla=1){   // Se ha pulsado alguna tecla?
           if(NuevaTecla==1){
               printf(lcd_putc,"\f");      // Borro pantalla.-
               NuevaTecla=0;
           }
        else{
           kbhit_tecla=0;
           printf(lcd_putc,"%f",resultado); // Imprimimos la Tecla pulsada
           lcd_gotoxy(1,1);}
       }}}

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: como funciona gets y string
« Respuesta #5 en: 07 de Julio de 2009, 01:43:31 »
Borra el LCD. Porque seguramente estas reescribiendo sobre el valor anterior.
No contesto mensajes privados, las consultas en el foro