Менюшка дело довольно не простое. Даже вот эта графика на несчастном LCD 20x4 занимает 200 слишнем строк.
#include <hallo.h>
#include <meny.h>
// LCD module connections
sbit LCD_RS at RD4_bit;
sbit LCD_EN at RD5_bit;
sbit LCD_D4 at RD0_bit;
sbit LCD_D5 at RD1_bit;
sbit LCD_D6 at RD2_bit;
sbit LCD_D7 at RD3_bit;
sbit LCD_RS_Direction at TRISD4_bit;
sbit LCD_EN_Direction at TRISD5_bit;
sbit LCD_D4_Direction at TRISD0_bit;
sbit LCD_D5_Direction at TRISD1_bit;
sbit LCD_D6_Direction at TRISD2_bit;
sbit LCD_D7_Direction at TRISD3_bit;
short d_m;
char txt2[21];
short tempp, tm=0, page=1;
struct meny_a
{
char *mark;
int I_N;
int I_N1;
float F_L;
char C_H[5];
};
struct meny_a meny_a = {" IAmount-> IPrice--> FWieghi-> CName---> ",250,55,5.33,"name"};
struct meny_b
{
char *mark;
int I_N;
int I_N1;
float F_L;
int I_N2;
};
struct meny_b meny_b = {" IVector-> ISpeed--> FDista--> IStop---> ",1250,7123,2.23,6541};
struct meny_c
{
char *mark;
int I_N;
int I_N1;
int I_N2;
int I_N3;
};
struct meny_c meny_c = {" IBoost--> IFixing-> IUpFix--> IDownFix> ",9950,55123,12533,4852};
struct meny_d
{
char *mark;
int I_N;
char C_H[5];
int I_N1;
float F_L;
};
struct meny_d meny_d = {" IParam1-> CName---> IParam2-> FParam3-> ",7750,"name",55,1.33};
struct meny_e
{
char *mark;
};
struct meny_e meny_e = {" CMeny_1A CMeny_2A CMeny_3A CMeny_4A "};
struct meny_e1
{
char *mark;
};
struct meny_e1 meny_e1 = {" CMeny_1B CMeny_2B CMeny_3B CMeny_4B "};
struct meny_e2
{
char *mark;
};
struct meny_e2 meny_e2 = {" CMeny_1D CMeny_2D CMeny_3D CMeny_4D "};
void main()
{
TRISE=0;
ANCON1=0b11111111;
INTCON.INT0IE=1;
INTCON.GIE=1;
INTCON.PEIE=1;
INTCON2.RBPU=0;
INTCON2.INTEDG0=0;
hallo();
//==============================================================================
while(1)
{
if(tempp != tm )
{
tm=tempp;
if(page == 1)
{
d_m = GenMeny(meny_e.mark,0,0,0,0,0,0,0,0,"","CCCC",&tempp);
if(d_m > 4)
{
page=2;
tempp=1;
}
}
if(page == 2)
{
d_m = GenMeny(meny_e1.mark,0,0,0,0,0,0,0,0,"","CCCC",&tempp);
if(d_m > 4)
{
page=3;
tempp=1;
}
}
if(page == 3)
{
d_m = GenMeny(meny_e2.mark,0,0,0,0,0,0,0,0,"","CCCC",&tempp);
if(d_m > 4)
{
page=1;
tempp=1;
}
}
sprinti(txt2, "P%-1u", page);
Lcd_Out(1,19,txt2);
}
}
}
//==============================================================================
void interrupt()
{
if(INTCON.INT0IF)
{
INTCON.INT0IF=0;
LATE=~LATE;
if(PORTB.RB1)
{
tempp++;
}
else if(PORTB.RB2)
{
tempp--;
}
}
}
/*d_m = GenMeny(meny_e.mark,0,0,0,0,0,0,0,0,"","CCCC");
Delay_ms(1000);
d_m = GenMeny(meny_a.mark,meny_a.I_N,meny_a.I_N1,0,0,0,0,meny_a.F_L,0,meny_a.C_H,"IIFC");
Delay_ms(1000);
d_m = GenMeny(meny_b.mark,meny_b.I_N,meny_b.I_N1,0,meny_b.I_N2,0,0,meny_b.F_L,0,"","IIFI");
Delay_ms(1000);
d_m = GenMeny(meny_c.mark,meny_c.I_N,meny_c.I_N1,meny_c.I_N2,meny_c.I_N3,0,0,0,0,"","IIII");
Delay_ms(1000);
d_m = GenMeny(meny_d.mark,meny_d.I_N,0,meny_d.I_N1,0,0,0,0,meny_d.F_L,meny_d.C_H,"ICIF");
Delay_ms(1000);
Lcd_Cmd(_LCD_MOVE_CURSOR_LEFT);
Delay_ms(1000);
Lcd_Cmd(_LCD_MOVE_CURSOR_LEFT);
Delay_ms(1000);
Lcd_Cmd(_LCD_SECOND_ROW);
Delay_ms(1000);
Lcd_Cmd(_LCD_THIRD_ROW);
Delay_ms(1000);*/