////////////////////////////////////////////////////////////////////////////////////
/// LCD4x20 //////
/// //////
////////////////////////////////////////////////////////////////////////////////////
#include <16F877A.h> /// libreria para el manejo del pic16f877a
#use delay(clock=4000000) /// declara la frecuencia del cristal
#fuses HS,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT
#include <lcd420.c>
#use fast_io(A)
#use fast_io(B)
#use fast_io(C) /// con esta instruccion evitamos que
#use fast_io(D) /// se este configurando cada vez que usamos
#use fast_io(E) /// alguna instruccion de entrada o salida
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)
#byte portc = 7 /// se definen direcciones de memoria
#byte portd = 8
const char menup1[8][10]={"1.Menu1A\0","2.Menu2A\0","3.Menu3A\0","4.Menu4A\0","5.Menu5A\0","6.Menu6A\0","7.Menu7A\0","8.Atras\0"};
//const char menup2[8][10]={"1.Menu1B\0","2.Menu2B\0","3.Menu3B\0","4.Menu4B\0","5.Menu5B\0","6.Menu6B\0","7.Menu7B\0","8.Atras\0"};
//const char menup3[8][10]={"1.Menu1C\0","2.Menu2C\0","3.Menu3C\0","4.Menu4C\0","5.Menu5C\0","6.Menu6C\0","7.Menu7C\0","8.Atras\0"};
//const char menup4[8][10]={"1.Menu1D\0","2.Menu2D\0","3.Menu3D\0","4.Menu4D\0","5.Menu5D\0","6.Menu6D\0","7.Menu7D\0","8.Atras\0"};
int pulsado[8]="0";
int y,n=0;
int posA=3,posB=1; //posiciones del cursor
int col,pos,pan;
int lini,lin,E;
/////////////////// Definicion de funciones ////////////////////////////
void sm1(int y);void sm1a();
void menu1(int y);
void cursor1(int y);
void cursor0(int y);
void pantalla(int col,int lin,int posA,int posB,char menup1[]);
/////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
//////////////////////Comienzo de la funcion principal/////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
void main()
{
set_tris_a(0x3F);
//set_tris_b(0x37);
//set_tris_c(0x37);
set_tris_d(0x00);
//set_tris_e(0x00);
lcd_init(); /// inicializamos lcd
//////////////////////////////////////////////////////////////////////////////////////////////////////
// inicio de valores para el menu,por defecto
// menu1 ------- menu principal
// E=8; ------- elementos del vector
// lin=4 ------- 4 lineas por defecto
// pan=E-lin ------- número (pan) pantallas a mostrar
// lini=pan-1 ------- ajusta inicio de pantalla a mostrar, con respeto y, en nuestro caso 3
// y=1; ------- posicion por fecto del cursor de secion de menu
//////////////////////////////////////////////////////////////////////////////////////////////////////
E=8;
lin=4;
pan=E-lin; /// numero de pantallas
lini=pan-1; ///
y=1; ///posicion por defecto del cursor
col=y; ///columna a mostrar
cursor1(y); ///situa cursor en linea 1
while(true)
{
/////////////////////////pulsadores//////////////////////////////////////////
if(input(PIN_A0)) ///verifico si esta pulsado P1
{
delay_ms(300);
cursor0(y); ///limpia cursor
y=y+1; ///incremento cursor (bajo cursor)
////pregunta longitud menu
if(y>E){y=E;} //linito avance del cursor ***cambiar a funcion
cursor1(y); ///imprimo cursor
}
if(input(PIN_A1)) ///verifico si esta pulsado P2
{
delay_ms(300);
cursor0(y); /// Limpia cursor
y=y-1; ///decremento cursor(subo cursor)
if(y<1){y=1;} //***cambiar a funcion
cursor1(y); ///imprimo cursor
}
if(input(PIN_A2)) ///verifico si esta pulsado P3
{
delay_ms(300);
n=n+1;
pulsado[n-1]=y; //guardo selecion del menu para cuando vuelva atras
//****selecion menu
y=1;
menu1(y);
}
///////////////////////////////////////////////////////////////////////////////
//////////////////FUNCION-Elementos del vector ////////////////limita cursor
/* if(y>E){y=E;}
if(y<1){y=1;}
cursor1(y);
*/
/////////////////segun CURSOR , muestra la pantalla correspondiente////////////
if(y>0&&y<lin+1) /// >0 y <nº linas+1 (4)
{
col=1; ///muestra pantalla 1
}
if(y>lin&&y<E+1) /// >4 y <9 las lineas
{
col=y-(lini); ///avanza pantalla segun pulso
// 4-1 ->3
}
/////////////////////////////////////////////////////////////
pantalla(col,lin,posA,posB,menup1[]);
/*
for(pos=col;pos<col+lin;pos++) ///limita las lineas a mostrar
{
lcd_gotoxy(posA,posB); /// Situa menu 3,posb(1,2,3,4)
printf(lcd_putc,"%s",menup1[pos-1]); ///muestra mirecion de menu
posB=posB+1; ///inc. linea
if(posB>lin){posB=1;} ///limita linea
}
*/
}
//fin de main
}
/////////////////funciones ///////////////////
void cursor1(int y)
{
Lcd_gotoxy(1,y);
printf(lcd_putc
,"%c",126); ///para sacar "->" en el lcd }
void cursor0(int y)
{
Lcd_gotoxy(1,y);
}
//////////////////preparando funcion/////////////////////7
void pantalla(int col,int lin,int posA,int posB,char menup1[])
{
int pos;
for(pos=col;pos<col+lin;pos++) ///limita las lineas a mostrar
{
lcd_gotoxy(posA,posB);
printf(lcd_putc
,"%s",menup1
[pos
-1]); ///muestra dato posB=posB+1;
if(posB>lin){posB=1;}
}
}
////////////////////
/*void pantalla(int col,int lin,int posA,int posB,char* posy, char menup1[])
{
int pos;
for(pos=col;pos<col+lin;pos++) ///limita las lineas a mostrar
{
lcd_gotoxy(posA,posB);
sprintf(posy,"%s",menup1[pos-1]); ///muestra dato
posB=posB+1;
}
}*/
/*
void ds1307_get_day_of_week(char* ptr){
byte lday;
byte lmonth;
byte lyr;
byte ldow;
ds1307_get_date(lday,lmonth,lyr,ldow);
sprintf(ptr,"%s",days_of_week[ldow]);
}
*/
///////////////hacer segun opcion//////////////
void menu1(int y) ///menu principal
{
switch(y)
{
case 1:sm1(y);break;
/* case 2:sm2();break;
case 3:sm3();break;
case 4:sm4();break;
case 5:sm5();break;
case 6:sm6();break;
case 7:sm7();break;*/
case 8:break; //Salir del menu
}
}
//////////////////submenu 1 ///////////////////////
void sm1(int y)
{
switch(y)
{
case 1:sm1a();break;
/* case 2:sm1a();break;
case 3:sm1a();break;
case 4:sm1a();break;
case 5:atras();break;*/ //volver al a menu anterior
case 6:break; //salir del menu
}
}
/////////////////////funciones del Submenu/////////////////////
void sm1a() //submenu del submenu 1
{
output_high(PIN_D4); //pita zumbador 1 seg.
delay_ms(1000);
output_low(PIN_D4);
}
/*
void atras() //volver al menu anterior
{
//llamada a menu anterior
//llamada a ultima posicion selecionada en el salto
//llamada a mostrar menu
}
*/