hola tengo un programa que estoy realizando y me apena que no pueda mas con unas cosas tanto para nada los problemas son los siguientes:
en lo botones de arriba y abajo sumo y resto la variable pero para que retorne le pongo que regrese al caso 0 esto hace que al ingresar al numero 3 se regresa al 0 nunca puedo imprimir en el caso3
tampoco puedo hacer los demas sub menu de montefiori pastor sentado y pastor parado ayuda porfavor: aqui el programa:
#include <16f877a.h>
#device*=16
#fuses NOWDT
#fuses PUT
//#fuses INTRC
#fuses NOBROWNOUT
#fuses NOLVP
#use delay (clock=4000000)
#define LCD_ENABLE_PIN PIN_D2 ////
#define LCD_RS_PIN PIN_D0 ////
#define LCD_RW_PIN PIN_D1 ////
#define LCD_DATA4 PIN_D4 ////
#define LCD_DATA5 PIN_D5 ////
#define LCD_DATA6 PIN_D6 ////
#define LCD_DATA7 PIN_D7
#include <lcd.c>
//--------------
#define Btdow PIN_A0
#define Btup PIN_A1
#define Btok PIN_A2
#define Btatras PIN_A3
int8 flag;
#bit flag_Btdow = flag.0
#bit flag_Btup = flag.1
#bit flag_Btok = flag.2
#bit flag_Btatras = flag.3
////////////////////////////
void Show_menu();
void Ejecuta_orden();
void Gestion_nivel_1();////////MENU GENERAL
void Gestion_nivel_2();////////MENU TAMAÑO DE FIGURA CABEZON
void Gestion_nivel_3();////////MENU TAMAÑO DE FIGURA MONTEFIORI
void Gestion_nivel_4();////////MENU TAMAÑO DE FIGURA P. SENTADO
void Gestion_nivel_5();////////MENU TAMAÑO DE FIGURA P. PARADO
////////////////////////////
int8 Nivel,Opcion,Opcion_n1,Opcion_n2;
int8 Opcion_n3,Opcion_n4,Maxnivel,Valor;
#int_TIMER1
void TIMER1_isr(void)
{
/////////////////////////////////////////GESTION BOTON ABAJO////////////////////////////////////////
if(!input(Btdow)&&!flag_Btdow){
flag_Btdow=1;//espera que suelte boton
/////////////////////////////////////////////
if(Nivel==0){Opcion ++;if (opcion >3){opcion=0;}
Gestion_nivel_1();}
else if(Nivel==1){Opcion ++;if (opcion >1){opcion=0;}
Gestion_nivel_2();}
else if(Nivel==2){Opcion ++;if (opcion >2){opcion=0;}
Gestion_nivel_3();}
else if(Nivel==3){Opcion ++;if (opcion >2){opcion=0;}
Gestion_nivel_4();}
else if(Nivel==4){Opcion ++;if (opcion >2){opcion=0;}
Gestion_nivel_5();}
/////////////////////////////////////////////
}else if ( flag_Btdow && input(Btdow)){
flag_Btdow=0;//espera el proximo pulso
}
/////////////////////////////////////////GESTION BOTON ARRIBA/////////////////////////////////////////
if(!input(Btup) && !flag_Btup){
flag_Btup=1;//espera que suelte boton
/////////////////////////////////////////////
if(Nivel==0){if(opcion==0){opcion=3;}
else{Opcion --;}Gestion_nivel_1 ();}
else if(Nivel==1){if(opcion==0){opcion=1;}
else{Opcion --;}Gestion_nivel_2 ();}
//////////////////////////////////////////////
} else if ( flag_Btup && input(Btup)){
flag_Btup=0;//espera el proximo pulso
}
/////////////////////////////////////////GESTION BOTON OK////////////////////////////////////////////
if(!input(Btok) && !flag_Btok){
flag_Btok=1;//espera que suelte boton
//////////////////////////////////////////////
if (Nivel==0){Nivel ++;Gestion_nivel_2();}
//Opcion_n1=0;
//else{Ejecuta_orden();}
//////////////////////////////////////////////
}else if ( flag_Btok && input(Btok)){
flag_Btok=0;//espera el proximo pulso
}
/////////////////////////////////////////GESTION BOTON ATRAS/////////////////////////////////////////
if(!input(Btatras) && !Flag_Btatras){
Flag_Btatras=1; // espera a que suelte boton
if(nivel >0){ nivel --;} // para n niveles
Gestion_nivel_1();
}else if ( Flag_Btatras && input(Btatras) ){
Flag_Btatras =0; // espero proximo pulso
}
}
////////////////////////////////////////
void Ejecuta_orden(){
}
////////////////////////////////////////
void Gestion_nivel_1(){
lcd_send_byte(0,1);
switch (Opcion) {
case 0:printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"\cabezon ");
lcd_gotoxy(1,2);
printf(lcd_putc,"\montefiori ");
lcd_gotoxy(21,1);
printf(lcd_putc,"\P. sentado ");
lcd_gotoxy(21,2);
printf(lcd_putc,"\P. parado <---");
break;
case 1:printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"\cabezon <---");
lcd_gotoxy(1,2);
printf(lcd_putc,"\montefiori");
lcd_gotoxy(21,1);
printf(lcd_putc,"\P. sentado ");
lcd_gotoxy(21,2);
printf(lcd_putc,"\P. parado ");
break;
case 2:printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"\cabezon ");
lcd_gotoxy(1,2);
printf(lcd_putc,"\montefiori <---");
lcd_gotoxy(21,1);
printf(lcd_putc,"\P. sentado ");
lcd_gotoxy(21,2);
printf(lcd_putc,"\P. parado ");
break;
case 3:printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"\cabezon ");
lcd_gotoxy(1,2);
printf(lcd_putc,"\montefiori ");
lcd_gotoxy(21,1);
printf(lcd_putc,"\P. sentado <---");
lcd_gotoxy(21,2);
printf(lcd_putc,"\P. parado ");
break;
default:
break; }
}
//////////////////////////////////////////////////////////
void Gestion_nivel_2(){
lcd_send_byte(0,1);
switch (Opcion) {
case 0:printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"\cabezon 1 <---");
lcd_gotoxy(1,2);
printf(lcd_putc,"\cabezon 2");
break;
case 1:printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"\cabezon 1");
lcd_gotoxy(1,2);
printf(lcd_putc,"\cabezon 2 <---");
break;
default:
break; }
}
//////////////////////////////////////////////////////////
void Gestion_nivel_3(){
lcd_send_byte(0,1);
switch (Opcion) {
case 0:printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"\montefiori 1 <---");
lcd_gotoxy(1,2);
printf(lcd_putc,"\montefiori 2");
lcd_gotoxy(21,1);
printf(lcd_putc,"\montefiori 3");
break;
case 1:printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"\montefiori 1");
lcd_gotoxy(1,2);
printf(lcd_putc,"\montefiori 2 <---");
lcd_gotoxy(21,1);
printf(lcd_putc,"\montefiori 3");
break;
case 2:printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"\montefiori 1");
lcd_gotoxy(1,2);
printf(lcd_putc,"\montefiori 2");
lcd_gotoxy(21,1);
printf(lcd_putc,"\montefiori 3 <---");
break;
default:
break; }
}
//////////////////////////////////////////////////////////
void Gestion_nivel_4(){
lcd_send_byte(0,1);
switch (Opcion) {
case 0:printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"\leñador <---");
lcd_gotoxy(1,2);
printf(lcd_putc,"\sentado");
lcd_gotoxy(21,1);
printf(lcd_putc,"\lechera");
break;
case 1:printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"\leñador");
lcd_gotoxy(1,2);
printf(lcd_putc,"\sentado <---");
lcd_gotoxy(21,1);
printf(lcd_putc,"\lechera");
break;
case 2:printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"\leñador");
lcd_gotoxy(1,2);
printf(lcd_putc,"\sentado");
lcd_gotoxy(21,1);
printf(lcd_putc,"\lechera <---");;
break;
default:
break; }
}
//////////////////////////////////////////////////////////
void Gestion_nivel_5(){
lcd_send_byte(0,1);
switch (Opcion) {
case 0:printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"\pastora <---");
lcd_gotoxy(1,2);
printf(lcd_putc,"\pastor bolsa");
lcd_gotoxy(21,1);
printf(lcd_putc,"\pastor oveja");
break;
case 1:printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"\pastora");
lcd_gotoxy(1,2);
printf(lcd_putc,"\pastor bolsa <---");
lcd_gotoxy(21,1);
printf(lcd_putc,"\pastor oveja");
break;
case 2:printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"\pastora <---");
lcd_gotoxy(1,2);
printf(lcd_putc,"\pastor bolsa");
lcd_gotoxy(21,1);
printf(lcd_putc,"\pastor oveja");
break;
default:
break; }
}
//////////////////////////////////////////////////////////
void Show_menu(){
lcd_send_byte(0,1);
switch (Nivel) {
case 0: Gestion_nivel_1();
break;
case 1: Gestion_nivel_2();
break;
case 2: Gestion_nivel_3();
break;
case 3: Gestion_nivel_4();
break;
case 4: Gestion_nivel_5();
break;
default:
break; }
}
void main()
{
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1 );
delay_ms(100);;//estabilizar voltaje
lcd_init();//Inicializamos el LCD
///////////////////////////Mensaje inicial
lcd_gotoxy(1,2);//Posiciona en LCD
lcd_putc (" BIENVENIDO");//manda un mensaje al LCD
lcd_gotoxy(21,1);
lcd_putc (" TALLER V. FATIMA");
delay_ms(2000); //espera 1 segundo
lcd_putc("\f"); //limpia el lcd
// ----
lcd_gotoxy(1,2);//Posiciona en LCD
lcd_putc (" FONDEADORA");//manda un mensaje al LCD
lcd_gotoxy(21,1);
lcd_putc (" MAPERXP1");
delay_ms(3000); //espera 1 segundo
lcd_putc("\f"); //limpia el lcd
// ----
lcd_gotoxy(1,2);
printf(lcd_putc," -PRESIONE UN BOTON- ");
lcd_gotoxy(21,1);
printf(lcd_putc," PARA INGRESAR ");
flag=0;
Nivel =0;
Opcion =0;
Maxnivel =3;
Valor =0;
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
while(TRUE)
{
}
}