Autor Tema: Menu con Submenus, usando LCD,Teclado matricial y PIC 16f877a  (Leído 3874 veces)

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

Desconectado Severus77

  • PIC10
  • *
  • Mensajes: 3
Menu con Submenus, usando LCD,Teclado matricial y PIC 16f877a
« en: 02 de Mayo de 2016, 23:58:52 »
Hola a todos quería ver si me podían ayudar , estoy realizando en crear un menú pero no me sale , uso un teclado matricial y el * es como mi enter y los numero me sirve para seleccionar la opción, pero aun no logro que funcionen alguien tendrá uno   para guiarme. mi código es el siguiente.

# include <16F877a.h>
# fuses hs,nowdt
# use delay(clock=20M)
#include <LCD420.c>
#include <KBD.c>
#include <stdlib.h>

char a, dato;
char string[3];
int va,menu=0;
int16 i=0,b=0;
int16 num;

void entrada(){
dato=kbd_getc();
if(dato !=0){
 i++;
   b=i-1;
   string=dato;
   num=atoi(string);
lcd_gotoxy(10,1);
printf(lcd_putc,"%Lu" ,num);
           
}
}

teclado(){
dato=kbd_getc();
va=dato-48;
if(dato!=0){
return dato;
}
}

void main(){
lcd_init();
kbd_init();
 
while(true){

while(menu==0){
teclado();
  if(dato=='*'){
  menu=1;
  }
lcd_putc('\f');
lcd_gotoxy(1,1);
printf(lcd_putc,"te ");
lcd_gotoxy(1,2);
printf(lcd_putc,"te");
lcd_gotoxy(1,3);
printf(lcd_putc,"te");
delay_ms(200);
 }//bucle

while(menu==1){

  lcd_gotoxy(4,4);
  printf(lcd_putc,"hola");
 
}
 }//while
}//void
 

en este caso no pasa al otro while aunque apriete la tecla * y me di cuenta debido al delay que hay para que no parpadee  el display y si se lo quita si lo ejecuta pero no se ve bien el texto, alguien podría apoyarme

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Menu con Submenus, usando LCD,Teclado matricial y PIC 16f877a
« Respuesta #1 en: 03 de Mayo de 2016, 10:37:13 »
Hola a todos quería ver si me podían ayudar , estoy realizando en crear un menú pero no me sale , uso un teclado matricial y el * es como mi enter y los numero me sirve para seleccionar la opción, pero aun no logro que funcionen alguien tendrá uno   para guiarme. mi código es el siguiente.

# include <16F877a.h>
# fuses hs,nowdt
# use delay(clock=20M)
#include <LCD420.c>
#include <KBD.c>
#include <stdlib.h>

char a, dato;
char string[3];
int va,menu=0;
int16 i=0,b=0;
int16 num;

void entrada(){
dato=kbd_getc();
if(dato !=0){
 i++;
   b=i-1;
   string=dato;
   num=atoi(string);
lcd_gotoxy(10,1);
printf(lcd_putc,"%Lu" ,num);
           
}
}

teclado(){
dato=kbd_getc();
va=dato-48;
if(dato!=0){
return dato;
}
}

void main(){
lcd_init();
kbd_init();
 
while(true){

while(menu==0){
teclado();
  if(dato=='*'){
  menu=1;
  }
lcd_putc('\f');
lcd_gotoxy(1,1);
printf(lcd_putc,"te ");
lcd_gotoxy(1,2);
printf(lcd_putc,"te");
lcd_gotoxy(1,3);
printf(lcd_putc,"te");
delay_ms(200);
 }//bucle

while(menu==1){

  lcd_gotoxy(4,4);
  printf(lcd_putc,"hola");
 
}
 }//while
}//void
 

en este caso no pasa al otro while aunque apriete la tecla * y me di cuenta debido al delay que hay para que no parpadee  el display y si se lo quita si lo ejecuta pero no se ve bien el texto, alguien podría apoyarme

Creoq ue deberías ser más ordenado al programar:

Código: C
  1. void entrada()
  2. {
  3.         dato=kbd_getc();
  4.         if(dato) //esto es diferente de cero
  5.         {
  6.                 i++;
  7.                 b=i-1;
  8.                 string=dato;
  9.                 num=atoi(string);
  10.                 lcd_gotoxy(10,1);
  11.                 printf(lcd_putc,"%Lu" ,num);
  12.         }
  13. }
  14.  
  15. teclado() //void teclado(void) ???
  16. {
  17.         dato=kbd_getc();
  18.         va=dato-48;
  19.         if(dato) return dato;
  20. }
  21.  
  22. void main()
  23. {
  24.         lcd_init();
  25.         kbd_init();
  26.  
  27.         while(true)
  28.         {
  29.  
  30.                 while(!menu) // !menu es igual a menu == 0
  31.                 {
  32.                         teclado();
  33.                         if('*' == dato) menu=1;
  34.                 }
  35.                 lcd_putc('\f');
  36.                 lcd_gotoxy(1,1);
  37.                 printf(lcd_putc,"te ");
  38.                 lcd_gotoxy(1,2);
  39.                 printf(lcd_putc,"te");
  40.                 lcd_gotoxy(1,3);
  41.                 printf(lcd_putc,"te");
  42.                 delay_ms(200);
  43.         }//bucle
  44.  
  45.         while(menu==1)
  46.         {
  47.  
  48.                 lcd_gotoxy(4,4);
  49.                 printf(lcd_putc,"hola");
  50.         }
  51.    }//while
  52. }//main

¿Has intendado hacer lo siguiente?

Código: C
  1. while('*' !=teclado() ); // espero hasta que teclado retorne '*'

Esta parte del código nunca se va a ejecutar:

Código: C
  1. while(menu==1)
  2.         {
  3.  
  4.                 lcd_gotoxy(4,4);
  5.                 printf(lcd_putc,"hola");
  6.         }

Ya que hay un blucle infinito antes

Código: C
  1. while (true)
  2. {
  3. ....
  4. }
« Última modificación: 03 de Mayo de 2016, 10:41:53 por DominusDRR »
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Severus77

  • PIC10
  • *
  • Mensajes: 3
Re:Menu con Submenus, usando LCD,Teclado matricial y PIC 16f877a
« Respuesta #2 en: 08 de Junio de 2016, 16:33:15 »
gracias ((:-)), logre hacer uno pero siento que es mucho cogido, que otra forma me recomendarías para realizar un menu

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Menu con Submenus, usando LCD,Teclado matricial y PIC 16f877a
« Respuesta #3 en: 08 de Junio de 2016, 16:36:24 »
Estructuras en C
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32


 

anything