Hola, así quedo el código funcionando por si a alguien le sirve, había un conflicto con la función de subir y bajar.
#include <16f877A.H> //PIC 16F877A
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //Crystal osc <= 4mhz
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay(clock=20000000) // Oscilador de 20MHz
#include <lcd.c> // Driver para LCD
#DEFINE USE_PORTB_KBD //Teclado conectado al puerto B
#include <KBD4x4.c> // Driver para teclado
//#DEFINE KEYHIT_DELAY 200 //Tiempo(ms) de espera del teclado
#BYTE PORTB =0X06
#BYTE PORTC =0X07
char key=0;
int valor_key,a0=0,b0=0,b1=0, b2=0,Nivelmenu=0;
short Conteo;
void Inicial(){// NivelMenu==0
NivelMenu=0;
lcd_gotoxy(1,1);
Printf(lcd_putc,"\fScroll Menu NM:%i",NivelMenu);
}
void Rutinas(){ //NivelMenu=2
NivelMenu=2;
if (valor_key==20){//Letra D aceptar
valor_key =0;
lcd_gotoxy(1,1);
printf(lcd_putc,"\fRutina 1 NM:%i",NivelMenu);
delay_ms(1000);
NivelMenu=6;
Inicial();
}else{lcd_gotoxy(7,1);
printf(lcd_putc,"\fRUTINAS NM:%i",NivelMenu);
lcd_gotoxy(1,2);
printf(lcd_putc,"*Rutina 1");
}
}
void Menu(){ //NivelMenu==1
NivelMenu=1;
if (valor_key==20){//Letra D aceptar
NivelMenu=2;
valor_key =0;
Rutinas();
}else{
lcd_gotoxy(7,1);
printf(lcd_putc,"\fMENU NM:%i",NivelMenu);
lcd_gotoxy(1,2);
printf(lcd_putc,"*Rutinas");
}
}
void Conteos(){ //NivelMenu==4
NivelMenu=4;
if (valor_key==20){//Letra D aceptar
NivelMenu=0;
valor_key =0;
Conteo=1;
lcd_gotoxy(7,1);
printf(lcd_putc,"\f %i NM:%i", Conteo,NivelMenu);
delay_ms(1000);
Inicial();
}else{
lcd_gotoxy(7,1);
printf(lcd_putc,"\fCONTEO NM:%i",NivelMenu);
lcd_gotoxy(1,2);
printf(lcd_putc,"*Ascendente");
}
}
void Configuracion(){ //NivelMenu==3
NivelMenu=3;
if (valor_key==20){//Letra D aceptar
valor_key =0;
Conteos();
}else{
lcd_gotoxy(7,1);
printf(lcd_putc,"\fCONFIGURA NM:%i",NivelMenu);
lcd_gotoxy(1,2);
printf(lcd_putc,"*Conteo");
}
}
void Volumen() {
lcd_gotoxy(7,1);
printf(lcd_putc,"\fVolumen NM:%i",NivelMenu);
lcd_gotoxy(1,2);
printf(lcd_putc,"%i",b1);
delay_ms(1000);
NivelMenu=0;
Inicial();
}
void main(){
port_b_pullups (1);
lcd_init();
kbd_init();
NivelMenu=0;
while (true){
key = kbd_getc();
if (key!=0){
valor_key = key-48; // convertir de ascii a entero
if ( NivelMenu==0 ) { //MENU INICIAL
if (valor_key == 20) { //Letra D Menu
valor_key =0;
Menu();
}else{
inicial();}
}else if ( NivelMenu==1 ) {
if (valor_key==19){//Letra C abajo
if (a0>=1){
a0=0;
}else {
a0++;
} } else if (valor_key==18){//Letra B arriba
if (a0<=0){
a0=1;
}
else{
a0--;
}
}
if(a0==0){
if (valor_key==-13){//simbolo # atras
valor_key =0;
Inicial();
}else {
Menu();}}
else if(a0==1){
if (valor_key==-13){//simbolo # atras
valor_key =0;
Inicial();
}else{
if (valor_key==20){//Letra D aceptar
a0=0;
valor_key =0;
Configuracion();
}else {
lcd_gotoxy(7,1);
printf(lcd_putc,"\fRutinas");
lcd_gotoxy(1,2);
printf(lcd_putc,"*Configuracion");
}}
}
}else if ( NivelMenu==2 ) {//Menu principal
if (valor_key==19){//Letra C abajo
if (b0>=1){
b0=0;
}else {
b0++;
} } else if (valor_key==18){//Letra B arriba
if (b0<=0){
b0=1;
}
else{
b0--;
}
}
if( b0==0 ) {
if (valor_key==-13){//simbolo # atras
valor_key =0;
Menu();
}else{
Rutinas();}
}
else if(b0==1){
if (valor_key==-13){//simbolo # atras
valor_key =0;
Menu();
}else{
if (valor_key==20){//Letra D aceptar
b0=0;
valor_key =0;
lcd_gotoxy(1,1);
printf(lcd_putc,"\fRutina 2");
delay_ms(1000);
NivelMenu=7;
Inicial();
}else{lcd_gotoxy(7,1);
printf(lcd_putc,"\fRutina 1");
lcd_gotoxy(1,2);
printf(lcd_putc,"*Rutina 2");}
}}
}else if ( NivelMenu==3 ) {
//Configuracion
if (valor_key==19){//Letra C abajo
if (b1>=1){
b1=0;
}else {
b1++;
} } else if (valor_key==18){//Letra B arriba
if (b1<=0){
b1=1;
}
else{
b1--;
}
}
if( b1==0 ) {if (valor_key==-13){//simbolo # atras
valor_key =0;
Menu();
}else{
Configuracion();}
}else if (b1==1){
if (valor_key==-13){//simbolo # atras
valor_key =0;
Menu();
}else{
if (valor_key==20){//Letra D| aceptar
NivelMenu=5;
b1=0;
valor_key =0;
Volumen();
}else{
lcd_gotoxy(7,1);
printf(lcd_putc,"\fConteo");
lcd_gotoxy(1,2);
printf(lcd_putc,"*Volumen");
}
}}
}else if ( NivelMenu==4 ) { //Conteo
if (valor_key==19){//Letra C abajo
if (b2>=1){
b2=0;
}else {
b2++;
} } else if (valor_key==18){//Letra B arriba
if (b2<=0){
b2=1;
}
else{
b2--;
}
}
if ( b2==0 ) { if (valor_key==-13){//simbolo # atras
valor_key =0;
Configuracion();
}else{
Conteos();}
}
else if(b2== 1){
if (valor_key==-13){//simbolo # atras
valor_key =0;
Configuracion();
}else{
if (valor_key==20){//Letra D aceptar
b2=0;
valor_key =0;
Conteo=0;
lcd_gotoxy(7,1);
printf(lcd_putc,"\f %i",Conteo);
delay_ms(1000);
Inicial();
}else{ lcd_gotoxy(7,1);
printf(lcd_putc,"\fAscendente %i",NivelMenu);
lcd_gotoxy(1,2);
printf(lcd_putc,"*Desendente");}
}
}}
}
}
}