Menus LCD TFT
Dependents: Example_Menu_LCD_TFT
Menus.h@0:310ed2337a8f, 2011-03-15 (annotated)
- Committer:
- Suky
- Date:
- Tue Mar 15 23:23:51 2011 +0000
- Revision:
- 0:310ed2337a8f
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Suky | 0:310ed2337a8f | 1 | /* |
Suky | 0:310ed2337a8f | 2 | \file Menus.h |
Suky | 0:310ed2337a8f | 3 | \version: 1.0 |
Suky | 0:310ed2337a8f | 4 | |
Suky | 0:310ed2337a8f | 5 | \brief Este fichero contiene funciones para creación de Menus es LCD TFT.- |
Suky | 0:310ed2337a8f | 6 | |
Suky | 0:310ed2337a8f | 7 | \web www.micros-designs.com.ar |
Suky | 0:310ed2337a8f | 8 | \date 15/03/11 |
Suky | 0:310ed2337a8f | 9 | |
Suky | 0:310ed2337a8f | 10 | *- Version Log --------------------------------------------------------------* |
Suky | 0:310ed2337a8f | 11 | * Fecha Autor Comentarios * |
Suky | 0:310ed2337a8f | 12 | *----------------------------------------------------------------------------* |
Suky | 0:310ed2337a8f | 13 | * 15/03/11 Suky Original * |
Suky | 0:310ed2337a8f | 14 | *----------------------------------------------------------------------------*/ |
Suky | 0:310ed2337a8f | 15 | /////////////////////////////////////////////////////////////////////////// |
Suky | 0:310ed2337a8f | 16 | //// //// |
Suky | 0:310ed2337a8f | 17 | //// //// |
Suky | 0:310ed2337a8f | 18 | //// (C) Copyright 2011 www.micros-designs.com.ar //// |
Suky | 0:310ed2337a8f | 19 | //// Este código puede ser usado, modificado y distribuido libremente //// |
Suky | 0:310ed2337a8f | 20 | //// sin eliminar esta cabecera y sin garantía de ningún tipo. //// |
Suky | 0:310ed2337a8f | 21 | //// //// |
Suky | 0:310ed2337a8f | 22 | //// //// |
Suky | 0:310ed2337a8f | 23 | /////////////////////////////////////////////////////////////////////////// |
Suky | 0:310ed2337a8f | 24 | #ifndef __MENUS_H__ |
Suky | 0:310ed2337a8f | 25 | #define __MENUS_H__ |
Suky | 0:310ed2337a8f | 26 | |
Suky | 0:310ed2337a8f | 27 | #include "mbed.h" |
Suky | 0:310ed2337a8f | 28 | #include "LCDTFT.h" |
Suky | 0:310ed2337a8f | 29 | #include "Touch.h" |
Suky | 0:310ed2337a8f | 30 | #include "GenericTypeDefs.h" |
Suky | 0:310ed2337a8f | 31 | #include "Images.h" |
Suky | 0:310ed2337a8f | 32 | |
Suky | 0:310ed2337a8f | 33 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 34 | #define TOUCH_X_MIN 20 |
Suky | 0:310ed2337a8f | 35 | #define TOUCH_X_MAX 230 |
Suky | 0:310ed2337a8f | 36 | #define TOUCH_Y_MIN 15 |
Suky | 0:310ed2337a8f | 37 | #define TOUCH_Y_MAX 240 |
Suky | 0:310ed2337a8f | 38 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 39 | #define MENU_FIN 0 |
Suky | 0:310ed2337a8f | 40 | #define MENU_COMANDO 1 |
Suky | 0:310ed2337a8f | 41 | #define MENU_SUBMENU 2 |
Suky | 0:310ed2337a8f | 42 | #define SUBMENU_ANTERIOR 3 |
Suky | 0:310ed2337a8f | 43 | #define MENU_MAIN 4 |
Suky | 0:310ed2337a8f | 44 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 45 | #define MENSAJE_ATRAS_OK 1 |
Suky | 0:310ed2337a8f | 46 | #define MENSAJE_NO_SI 2 |
Suky | 0:310ed2337a8f | 47 | #define MENSAJE_ATRAS 3 |
Suky | 0:310ed2337a8f | 48 | |
Suky | 0:310ed2337a8f | 49 | #define MENSAJE_ACCION_ATRAS 1 |
Suky | 0:310ed2337a8f | 50 | #define MENSAJE_ACCION_OK 2 |
Suky | 0:310ed2337a8f | 51 | #define MENSAJE_ACCION_NO 3 |
Suky | 0:310ed2337a8f | 52 | #define MENSAJE_ACCION_SI 4 |
Suky | 0:310ed2337a8f | 53 | |
Suky | 0:310ed2337a8f | 54 | #define MODIFICADOR_ACEPTAR 1 |
Suky | 0:310ed2337a8f | 55 | #define MODIFICADOR_CANCELAR 2 |
Suky | 0:310ed2337a8f | 56 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 57 | #define IMAGEN_FONDO_MENU 10 |
Suky | 0:310ed2337a8f | 58 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 59 | #define BOTON_NORMAL 1 |
Suky | 0:310ed2337a8f | 60 | #define BOTON_PRES_IZQ 2 |
Suky | 0:310ed2337a8f | 61 | #define BOTON_PRES_DER 3 |
Suky | 0:310ed2337a8f | 62 | #define ITEM_NORMAL 4 |
Suky | 0:310ed2337a8f | 63 | #define ITEM_PRES 5 |
Suky | 0:310ed2337a8f | 64 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 65 | #define COLOR_LETRA_BOTON ColorAqua |
Suky | 0:310ed2337a8f | 66 | #define COLOR_LETRA_BOTON_PRES ColorWhite |
Suky | 0:310ed2337a8f | 67 | #define COLOR_FONDO_LETRA ColorGray |
Suky | 0:310ed2337a8f | 68 | #define COLOR_MSJ ColorWhite |
Suky | 0:310ed2337a8f | 69 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 70 | #define JUST_IZQ 1 |
Suky | 0:310ed2337a8f | 71 | #define JUST_DER 2 |
Suky | 0:310ed2337a8f | 72 | #define JUST_CENTRADO 3 |
Suky | 0:310ed2337a8f | 73 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 74 | #define AREA_BTN_INF_DER() (Coordenadas.x<235 && Coordenadas.x>135) && (Coordenadas.y<320 && Coordenadas.y>290) |
Suky | 0:310ed2337a8f | 75 | #define AREA_BTN_INF_IZQ() (Coordenadas.x<105 && Coordenadas.x>5) && (Coordenadas.y<320 && Coordenadas.y>290) |
Suky | 0:310ed2337a8f | 76 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 77 | TouchScreenADS7843 MyTouch(p9,p10,p12,p11,p8); // ADS7843-> SDO,SDI,SCK,CS,IRQ |
Suky | 0:310ed2337a8f | 78 | BusOut MyBus(p13,p14,p15,p16,p17,p18,p19,p20,p30,p29,p28,p27,p26,p25,p24,p23); |
Suky | 0:310ed2337a8f | 79 | LCDTFT MyLCD(p5,p6,p7,p22,p21,&MyBus); |
Suky | 0:310ed2337a8f | 80 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 81 | typedef struct{ |
Suky | 0:310ed2337a8f | 82 | UINT8 TipoMenu; |
Suky | 0:310ed2337a8f | 83 | const UINT8 *TextoMenu; |
Suky | 0:310ed2337a8f | 84 | UINT8 *Menu; |
Suky | 0:310ed2337a8f | 85 | void (*PtrFuncionSeleccion)(void); |
Suky | 0:310ed2337a8f | 86 | const UINT16 *PtrIcono; |
Suky | 0:310ed2337a8f | 87 | }MENU; |
Suky | 0:310ed2337a8f | 88 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 89 | struct{ |
Suky | 0:310ed2337a8f | 90 | const MENU *PtrMenu; |
Suky | 0:310ed2337a8f | 91 | UINT8 ElementoSeleccionActual; |
Suky | 0:310ed2337a8f | 92 | void (*FuncionActualEjecucion)(void); |
Suky | 0:310ed2337a8f | 93 | UINT8 CantElementosMenu; |
Suky | 0:310ed2337a8f | 94 | }MenuActual; |
Suky | 0:310ed2337a8f | 95 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 96 | struct{ |
Suky | 0:310ed2337a8f | 97 | float ValorInicial; |
Suky | 0:310ed2337a8f | 98 | float ValorActual; |
Suky | 0:310ed2337a8f | 99 | UINT8 String[15]; |
Suky | 0:310ed2337a8f | 100 | UINT8 Ptr; |
Suky | 0:310ed2337a8f | 101 | void (*FuncionActualEjecucion)(UINT8,float); |
Suky | 0:310ed2337a8f | 102 | }ModificadorVariable; |
Suky | 0:310ed2337a8f | 103 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 104 | struct{ |
Suky | 0:310ed2337a8f | 105 | UINT8 TipoMensajePantalla; |
Suky | 0:310ed2337a8f | 106 | void (*MensajeFuncionEjecutar)(UINT8); |
Suky | 0:310ed2337a8f | 107 | }MensajePantalla; |
Suky | 0:310ed2337a8f | 108 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 109 | TOUCH_DATA Coordenadas; |
Suky | 0:310ed2337a8f | 110 | volatile bool kbhit_irq=0; |
Suky | 0:310ed2337a8f | 111 | volatile bool kbhit_tratament=0; |
Suky | 0:310ed2337a8f | 112 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 113 | void vSeteoFuncionEjecutar(void (*PtrNuevaFuncion)(void)); |
Suky | 0:310ed2337a8f | 114 | void vEjecutaEventosMenu(void); |
Suky | 0:310ed2337a8f | 115 | void vSeleccionarMenuAnterior(void); |
Suky | 0:310ed2337a8f | 116 | void vSeleccionMenu(const MENU *Menu,UINT8 ElementoMenuSeleccion); |
Suky | 0:310ed2337a8f | 117 | void vEventosSubMenu(void); |
Suky | 0:310ed2337a8f | 118 | void vDibujarImagenFondo(UINT8 Seleccion); |
Suky | 0:310ed2337a8f | 119 | void vDibujarMenuInferior(const UINT8 *TextoIzq,const UINT8 *TextoDer, UINT8 Status); |
Suky | 0:310ed2337a8f | 120 | void vDibujarElementoMenu(UINT8 NElemento,UINT8 Status); |
Suky | 0:310ed2337a8f | 121 | void vMensajePantalla(const UINT8 *Mensaje,UINT16 YInicial,UINT8 TipoMensaje,void (*FuncionEjecutar)(UINT8)); |
Suky | 0:310ed2337a8f | 122 | void vEventosPantallaMensaje(void); |
Suky | 0:310ed2337a8f | 123 | void vModificadorVariables(const UINT8 *NombreVariable,float ValorInicial,void (*PtrFuncion)(UINT8,float)); |
Suky | 0:310ed2337a8f | 124 | void vEventosModificadorVariables(void); |
Suky | 0:310ed2337a8f | 125 | void vTextoJustificado(const unsigned char *PtrTexto,unsigned short ExtremoIzq, unsigned short ExtremoDer, unsigned short y, unsigned char Just,const char (*Fuente)[5],unsigned char Alto, unsigned short Color); |
Suky | 0:310ed2337a8f | 126 | void vEscribirMensaje(unsigned short YInicial,const unsigned char *Mensaje,const char (*Fuente)[5],unsigned char Just, unsigned short Color); |
Suky | 0:310ed2337a8f | 127 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 128 | // Rutina de atencion de interrupcion.- |
Suky | 0:310ed2337a8f | 129 | void vISRTouchIRQ(){ |
Suky | 0:310ed2337a8f | 130 | UINT_COORDxy Temp; |
Suky | 0:310ed2337a8f | 131 | |
Suky | 0:310ed2337a8f | 132 | |
Suky | 0:310ed2337a8f | 133 | MyTouch.vTestTouchPanel(&Coordenadas); |
Suky | 0:310ed2337a8f | 134 | // Coordenadas dentro del rango de pantalla LCD: |
Suky | 0:310ed2337a8f | 135 | if((Coordenadas.x>TOUCH_X_MIN && Coordenadas.x<TOUCH_X_MAX) && (Coordenadas.y>TOUCH_Y_MIN && Coordenadas.y<TOUCH_Y_MAX)){ |
Suky | 0:310ed2337a8f | 136 | if(kbhit_tratament==0){ |
Suky | 0:310ed2337a8f | 137 | // Cambio de coordenda y escala: |
Suky | 0:310ed2337a8f | 138 | Temp=Coordenadas.y; |
Suky | 0:310ed2337a8f | 139 | Coordenadas.y=((float)((255.0-TOUCH_X_MIN)-Coordenadas.x)*(320.0/(TOUCH_X_MAX-TOUCH_X_MIN))); |
Suky | 0:310ed2337a8f | 140 | Coordenadas.x=((float)(Temp-TOUCH_Y_MIN)*(240.0/(TOUCH_Y_MAX-TOUCH_Y_MIN))); |
Suky | 0:310ed2337a8f | 141 | kbhit_irq=1; |
Suky | 0:310ed2337a8f | 142 | } |
Suky | 0:310ed2337a8f | 143 | } |
Suky | 0:310ed2337a8f | 144 | } |
Suky | 0:310ed2337a8f | 145 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 146 | void vInitLCDTFTAndTouch(void){ |
Suky | 0:310ed2337a8f | 147 | MyTouch.vInitADS7843(USE_8BITS,&vISRTouchIRQ); |
Suky | 0:310ed2337a8f | 148 | MyLCD.vLCDTFTInit(); |
Suky | 0:310ed2337a8f | 149 | Led1=0; |
Suky | 0:310ed2337a8f | 150 | Led2=0; |
Suky | 0:310ed2337a8f | 151 | } |
Suky | 0:310ed2337a8f | 152 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 153 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 154 | /* ** Se carga en puntero la funcion que se ejecutara dentro del while ** */ |
Suky | 0:310ed2337a8f | 155 | void vSeteamosFuncionEjecutar(void (*PtrNuevaFuncion)(void)){ |
Suky | 0:310ed2337a8f | 156 | MenuActual.FuncionActualEjecucion = PtrNuevaFuncion; |
Suky | 0:310ed2337a8f | 157 | } |
Suky | 0:310ed2337a8f | 158 | /* ** Ejecuta funcion que se encuentra apuntada ** */ |
Suky | 0:310ed2337a8f | 159 | void vEjecutaEventosMenu(void){ |
Suky | 0:310ed2337a8f | 160 | (*MenuActual.FuncionActualEjecucion)(); |
Suky | 0:310ed2337a8f | 161 | } |
Suky | 0:310ed2337a8f | 162 | /* ** Selecciona Menu anterior a mostrar despues de un comando ** */ |
Suky | 0:310ed2337a8f | 163 | void vSeleccionarMenuAnterior(void){ |
Suky | 0:310ed2337a8f | 164 | vSeleccionMenu(MenuActual.PtrMenu,MenuActual.ElementoSeleccionActual); |
Suky | 0:310ed2337a8f | 165 | } |
Suky | 0:310ed2337a8f | 166 | |
Suky | 0:310ed2337a8f | 167 | /* ** Selecciona y dibuja un submenu, luego carga en puntero funcion que atiende sus eventos ** */ |
Suky | 0:310ed2337a8f | 168 | void vSeleccionMenu(const MENU *Menu,UINT8 ElementoMenuSeleccion){ |
Suky | 0:310ed2337a8f | 169 | UINT8 NElemento; |
Suky | 0:310ed2337a8f | 170 | |
Suky | 0:310ed2337a8f | 171 | /* ** Guardamos el Menu actual que se visualiza y trabaja ** */ |
Suky | 0:310ed2337a8f | 172 | MenuActual.PtrMenu=Menu; |
Suky | 0:310ed2337a8f | 173 | MenuActual.ElementoSeleccionActual=ElementoMenuSeleccion; |
Suky | 0:310ed2337a8f | 174 | |
Suky | 0:310ed2337a8f | 175 | /* ** Borramos pantalla y dibujamos elementos del menu** */ |
Suky | 0:310ed2337a8f | 176 | vDibujarImagenFondo(IMAGEN_FONDO_MENU); |
Suky | 0:310ed2337a8f | 177 | |
Suky | 0:310ed2337a8f | 178 | /* ** Dibujamos barra con titulo ** */ |
Suky | 0:310ed2337a8f | 179 | MyLCD.vLCDTFTDrawImage(0,0,WIDTH_TITULO,HEIGH_TITULO,LENGTH_TITULO,&Titulo[0]); |
Suky | 0:310ed2337a8f | 180 | vTextoJustificado(MenuActual.PtrMenu[0].TextoMenu,5,234,4,JUST_CENTRADO,&ARIAL[0],2,ColorAzulMarino); |
Suky | 0:310ed2337a8f | 181 | /* ** Dibujamos Items ** */ |
Suky | 0:310ed2337a8f | 182 | NElemento=1; |
Suky | 0:310ed2337a8f | 183 | while(MenuActual.PtrMenu[NElemento].TipoMenu!=MENU_FIN){ |
Suky | 0:310ed2337a8f | 184 | vDibujarElementoMenu(NElemento-1,ITEM_NORMAL); |
Suky | 0:310ed2337a8f | 185 | NElemento++; |
Suky | 0:310ed2337a8f | 186 | } |
Suky | 0:310ed2337a8f | 187 | MenuActual.CantElementosMenu=NElemento-1; |
Suky | 0:310ed2337a8f | 188 | |
Suky | 0:310ed2337a8f | 189 | if(MenuActual.PtrMenu[0].TipoMenu==MENU_MAIN){ |
Suky | 0:310ed2337a8f | 190 | vDibujarMenuInferior(" ","Menu",BOTON_NORMAL); |
Suky | 0:310ed2337a8f | 191 | }else{ |
Suky | 0:310ed2337a8f | 192 | vDibujarMenuInferior("Atras"," ",BOTON_NORMAL); |
Suky | 0:310ed2337a8f | 193 | } |
Suky | 0:310ed2337a8f | 194 | /* ** Cargamos en puntero funci�n que atiende eventos del Submenu (Funci�n en while del main)** */ |
Suky | 0:310ed2337a8f | 195 | vSeteamosFuncionEjecutar(vEventosSubMenu); |
Suky | 0:310ed2337a8f | 196 | } |
Suky | 0:310ed2337a8f | 197 | |
Suky | 0:310ed2337a8f | 198 | void vDibujarImagenFondo(UINT8 Seleccion){ |
Suky | 0:310ed2337a8f | 199 | |
Suky | 0:310ed2337a8f | 200 | switch(Seleccion){ |
Suky | 0:310ed2337a8f | 201 | case IMAGEN_FONDO_MENU: |
Suky | 0:310ed2337a8f | 202 | for(short k=0;k<320;k+=10){ |
Suky | 0:310ed2337a8f | 203 | MyLCD.vLCDTFTDrawImage(0,k,WIDTH_FONDO,HEIGH_FONDO,LENGTH_FONDO,&Fondo[0]); |
Suky | 0:310ed2337a8f | 204 | } |
Suky | 0:310ed2337a8f | 205 | break; |
Suky | 0:310ed2337a8f | 206 | } |
Suky | 0:310ed2337a8f | 207 | } |
Suky | 0:310ed2337a8f | 208 | /* ** Dibuja barra inferior de botones ** */ |
Suky | 0:310ed2337a8f | 209 | void vDibujarMenuInferior(const UINT8 *TextoIzq,const UINT8 *TextoDer, UINT8 Status){ |
Suky | 0:310ed2337a8f | 210 | |
Suky | 0:310ed2337a8f | 211 | |
Suky | 0:310ed2337a8f | 212 | switch(Status){ |
Suky | 0:310ed2337a8f | 213 | case BOTON_PRES_IZQ: |
Suky | 0:310ed2337a8f | 214 | vTextoJustificado(TextoIzq,5,105,296,JUST_CENTRADO,&ARIAL[0],2,COLOR_LETRA_BOTON_PRES); |
Suky | 0:310ed2337a8f | 215 | break; |
Suky | 0:310ed2337a8f | 216 | case BOTON_PRES_DER: |
Suky | 0:310ed2337a8f | 217 | vTextoJustificado(TextoDer,135,234,296,JUST_CENTRADO,&ARIAL[0],2,COLOR_LETRA_BOTON_PRES); |
Suky | 0:310ed2337a8f | 218 | break; |
Suky | 0:310ed2337a8f | 219 | case BOTON_NORMAL: |
Suky | 0:310ed2337a8f | 220 | MyLCD.vLCDTFTDrawImage(0,289,WIDTH_BOTONES,HEIGH_BOTONES,LENGTH_BOTONES,&Botones[0]); |
Suky | 0:310ed2337a8f | 221 | vTextoJustificado(TextoIzq,5,105,296,JUST_CENTRADO,&ARIAL[0],2,COLOR_LETRA_BOTON); |
Suky | 0:310ed2337a8f | 222 | vTextoJustificado(TextoDer,135,234,296,JUST_CENTRADO,&ARIAL[0],2,COLOR_LETRA_BOTON); |
Suky | 0:310ed2337a8f | 223 | break; |
Suky | 0:310ed2337a8f | 224 | } |
Suky | 0:310ed2337a8f | 225 | } |
Suky | 0:310ed2337a8f | 226 | /* ** Dibuja elementos del submenu ** */ |
Suky | 0:310ed2337a8f | 227 | void vDibujarElementoMenu(UINT8 NElemento,UINT8 Status){ |
Suky | 0:310ed2337a8f | 228 | |
Suky | 0:310ed2337a8f | 229 | if(Status==ITEM_NORMAL){ |
Suky | 0:310ed2337a8f | 230 | if((NElemento%2)==0){ |
Suky | 0:310ed2337a8f | 231 | MyLCD.vLCDTFTDrawImage(35,28+((((NElemento+2)/2)-1)*65),WIDTH_ICONO,HEIGH_ICONO,LENGTH_ICONO,MenuActual.PtrMenu[NElemento+1].PtrIcono); |
Suky | 0:310ed2337a8f | 232 | MyLCD.vLCDTFTRectangle(5,81+((((NElemento+2)/2)-1)*65),114,90+((((NElemento+2)/2)-1)*65),1,COLOR_FONDO_LETRA); |
Suky | 0:310ed2337a8f | 233 | vTextoJustificado(MenuActual.PtrMenu[NElemento+1].TextoMenu,5,114,82+((((NElemento+2)/2)-1)*65),JUST_CENTRADO,&ARIAL[0],1,COLOR_LETRA_BOTON); |
Suky | 0:310ed2337a8f | 234 | }else{ |
Suky | 0:310ed2337a8f | 235 | MyLCD.vLCDTFTDrawImage(155,28+((((NElemento+2)/2)-1)*65),WIDTH_ICONO,HEIGH_ICONO,LENGTH_ICONO,MenuActual.PtrMenu[NElemento+1].PtrIcono); |
Suky | 0:310ed2337a8f | 236 | MyLCD.vLCDTFTRectangle(125,81+((((NElemento+2)/2)-1)*65),234,90+((((NElemento+2)/2)-1)*65),1,COLOR_FONDO_LETRA); |
Suky | 0:310ed2337a8f | 237 | vTextoJustificado(MenuActual.PtrMenu[NElemento+1].TextoMenu,125,234,82+((((NElemento+2)/2)-1)*65),JUST_CENTRADO,&ARIAL[0],1,COLOR_LETRA_BOTON); |
Suky | 0:310ed2337a8f | 238 | } |
Suky | 0:310ed2337a8f | 239 | }else{ |
Suky | 0:310ed2337a8f | 240 | if((NElemento%2)==0){ |
Suky | 0:310ed2337a8f | 241 | vTextoJustificado(MenuActual.PtrMenu[NElemento+1].TextoMenu,5,114,82+((((NElemento+2)/2)-1)*65),JUST_CENTRADO,&ARIAL[0],1,COLOR_LETRA_BOTON_PRES); |
Suky | 0:310ed2337a8f | 242 | }else{ |
Suky | 0:310ed2337a8f | 243 | vTextoJustificado(MenuActual.PtrMenu[NElemento+1].TextoMenu,125,234,82+((((NElemento+2)/2)-1)*65),JUST_CENTRADO,&ARIAL[0],1,COLOR_LETRA_BOTON_PRES); |
Suky | 0:310ed2337a8f | 244 | } |
Suky | 0:310ed2337a8f | 245 | } |
Suky | 0:310ed2337a8f | 246 | } |
Suky | 0:310ed2337a8f | 247 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 248 | // **************************************************************************************** |
Suky | 0:310ed2337a8f | 249 | void vEventosSubMenu(void){ |
Suky | 0:310ed2337a8f | 250 | const MENU *SubMenu; |
Suky | 0:310ed2337a8f | 251 | void (*PtrComando)(void); |
Suky | 0:310ed2337a8f | 252 | |
Suky | 0:310ed2337a8f | 253 | if(kbhit_irq==1){ |
Suky | 0:310ed2337a8f | 254 | kbhit_irq=0; |
Suky | 0:310ed2337a8f | 255 | kbhit_tratament=1; |
Suky | 0:310ed2337a8f | 256 | |
Suky | 0:310ed2337a8f | 257 | if(MenuActual.PtrMenu[0].TipoMenu==MENU_MAIN){ |
Suky | 0:310ed2337a8f | 258 | if(AREA_BTN_INF_DER()){ |
Suky | 0:310ed2337a8f | 259 | vDibujarMenuInferior(" ","Menu",BOTON_PRES_DER); |
Suky | 0:310ed2337a8f | 260 | wait_ms(300); |
Suky | 0:310ed2337a8f | 261 | SubMenu=(MENU *)MenuActual.PtrMenu[0].Menu; |
Suky | 0:310ed2337a8f | 262 | vSeleccionMenu(SubMenu,1); |
Suky | 0:310ed2337a8f | 263 | } |
Suky | 0:310ed2337a8f | 264 | kbhit_tratament=0; |
Suky | 0:310ed2337a8f | 265 | }else{ |
Suky | 0:310ed2337a8f | 266 | for(char k=0;k<MenuActual.CantElementosMenu;k++){ |
Suky | 0:310ed2337a8f | 267 | if((k%2)==0){ |
Suky | 0:310ed2337a8f | 268 | if((Coordenadas.x<85 && Coordenadas.x>35) && (Coordenadas.y<(78+((((k+2)/2)-1)*65)) && Coordenadas.y>(28+((((k+2)/2)-1)*65)))){ |
Suky | 0:310ed2337a8f | 269 | vDibujarElementoMenu(k,ITEM_PRES); |
Suky | 0:310ed2337a8f | 270 | wait_ms(300); |
Suky | 0:310ed2337a8f | 271 | MenuActual.ElementoSeleccionActual=k+1; |
Suky | 0:310ed2337a8f | 272 | /* ** Abrimos otro submenu o ejecutamos comando ** */ |
Suky | 0:310ed2337a8f | 273 | switch(MenuActual.PtrMenu[k+1].TipoMenu){ |
Suky | 0:310ed2337a8f | 274 | case MENU_COMANDO: |
Suky | 0:310ed2337a8f | 275 | PtrComando=(void(*)(void))MenuActual.PtrMenu[k+1].PtrFuncionSeleccion; |
Suky | 0:310ed2337a8f | 276 | kbhit_tratament=0; |
Suky | 0:310ed2337a8f | 277 | if(PtrComando!=NULL) (*PtrComando)(); |
Suky | 0:310ed2337a8f | 278 | break; |
Suky | 0:310ed2337a8f | 279 | case MENU_SUBMENU: |
Suky | 0:310ed2337a8f | 280 | SubMenu=(MENU *)MenuActual.PtrMenu[k+1].Menu; |
Suky | 0:310ed2337a8f | 281 | vSeleccionMenu(SubMenu,1); |
Suky | 0:310ed2337a8f | 282 | break; |
Suky | 0:310ed2337a8f | 283 | } |
Suky | 0:310ed2337a8f | 284 | } |
Suky | 0:310ed2337a8f | 285 | }else{ |
Suky | 0:310ed2337a8f | 286 | if((Coordenadas.x<205 && Coordenadas.x>155) && (Coordenadas.y<(78+((((k+2)/2)-1)*65)) && Coordenadas.y>(28+((((k+2)/2)-1)*65)))){ |
Suky | 0:310ed2337a8f | 287 | vDibujarElementoMenu(k,ITEM_PRES); |
Suky | 0:310ed2337a8f | 288 | wait_ms(300); |
Suky | 0:310ed2337a8f | 289 | MenuActual.ElementoSeleccionActual=k+1; |
Suky | 0:310ed2337a8f | 290 | /* ** Abrimos otro submenu o ejecutamos comando ** */ |
Suky | 0:310ed2337a8f | 291 | switch(MenuActual.PtrMenu[k+1].TipoMenu){ |
Suky | 0:310ed2337a8f | 292 | case MENU_COMANDO: |
Suky | 0:310ed2337a8f | 293 | PtrComando=(void(*)(void))MenuActual.PtrMenu[k+1].PtrFuncionSeleccion; |
Suky | 0:310ed2337a8f | 294 | kbhit_tratament=0; |
Suky | 0:310ed2337a8f | 295 | if(PtrComando!=NULL) (*PtrComando)(); |
Suky | 0:310ed2337a8f | 296 | break; |
Suky | 0:310ed2337a8f | 297 | case MENU_SUBMENU: |
Suky | 0:310ed2337a8f | 298 | SubMenu=(MENU *)MenuActual.PtrMenu[k+1].Menu; |
Suky | 0:310ed2337a8f | 299 | vSeleccionMenu(SubMenu,1); |
Suky | 0:310ed2337a8f | 300 | break; |
Suky | 0:310ed2337a8f | 301 | } |
Suky | 0:310ed2337a8f | 302 | } |
Suky | 0:310ed2337a8f | 303 | } |
Suky | 0:310ed2337a8f | 304 | } |
Suky | 0:310ed2337a8f | 305 | |
Suky | 0:310ed2337a8f | 306 | if(AREA_BTN_INF_IZQ()){ |
Suky | 0:310ed2337a8f | 307 | vDibujarMenuInferior("Atras"," ",BOTON_PRES_IZQ); |
Suky | 0:310ed2337a8f | 308 | wait_ms(300); |
Suky | 0:310ed2337a8f | 309 | SubMenu=(MENU *)MenuActual.PtrMenu[0].Menu; |
Suky | 0:310ed2337a8f | 310 | vSeleccionMenu(SubMenu,1); |
Suky | 0:310ed2337a8f | 311 | } |
Suky | 0:310ed2337a8f | 312 | kbhit_tratament=0; |
Suky | 0:310ed2337a8f | 313 | } |
Suky | 0:310ed2337a8f | 314 | } |
Suky | 0:310ed2337a8f | 315 | } |
Suky | 0:310ed2337a8f | 316 | // ******************************************************************************************************************************** |
Suky | 0:310ed2337a8f | 317 | // ****************************************** MENSAJES EN PANTALLA **************************************************************** |
Suky | 0:310ed2337a8f | 318 | // ******************************************************************************************************************************** |
Suky | 0:310ed2337a8f | 319 | /* ** Se escribe un mensaje en pantalla para elemento del tipo comando, presentando en barra inferior opcion a elegir ** */ |
Suky | 0:310ed2337a8f | 320 | void vMensajePantalla(const UINT8 *Mensaje,UINT16 YInicial,UINT8 TipoMensaje,void (*FuncionEjecutar)(UINT8)){ |
Suky | 0:310ed2337a8f | 321 | |
Suky | 0:310ed2337a8f | 322 | MensajePantalla.MensajeFuncionEjecutar=FuncionEjecutar; |
Suky | 0:310ed2337a8f | 323 | MensajePantalla.TipoMensajePantalla=TipoMensaje; |
Suky | 0:310ed2337a8f | 324 | |
Suky | 0:310ed2337a8f | 325 | vDibujarImagenFondo(IMAGEN_FONDO_MENU); |
Suky | 0:310ed2337a8f | 326 | MyLCD.vLCDTFTDrawImage(0,0,WIDTH_TITULO,HEIGH_TITULO,LENGTH_TITULO,&Titulo[0]); |
Suky | 0:310ed2337a8f | 327 | vTextoJustificado(MenuActual.PtrMenu[MenuActual.ElementoSeleccionActual].TextoMenu,5,234,4,JUST_CENTRADO,&ARIAL[0],2,ColorAzulMarino); |
Suky | 0:310ed2337a8f | 328 | |
Suky | 0:310ed2337a8f | 329 | MyLCD.vLCDTFTRectangle(5,30,234,284,1,ColorGray); |
Suky | 0:310ed2337a8f | 330 | MyLCD.vLCDTFTRectangle(5,30,234,31,1,ColorWhite); |
Suky | 0:310ed2337a8f | 331 | MyLCD.vLCDTFTRectangle(5,283,234,284,1,ColorBlack); |
Suky | 0:310ed2337a8f | 332 | MyLCD.vLCDTFTRectangle(5,30,6,284,1,ColorWhite); |
Suky | 0:310ed2337a8f | 333 | MyLCD.vLCDTFTRectangle(233,30,234,284,1,ColorWhite); |
Suky | 0:310ed2337a8f | 334 | |
Suky | 0:310ed2337a8f | 335 | vEscribirMensaje(YInicial,Mensaje,&ARIAL[0],JUST_CENTRADO,COLOR_MSJ); |
Suky | 0:310ed2337a8f | 336 | |
Suky | 0:310ed2337a8f | 337 | switch(TipoMensaje){ |
Suky | 0:310ed2337a8f | 338 | case MENSAJE_ATRAS_OK: |
Suky | 0:310ed2337a8f | 339 | vDibujarMenuInferior("Atras", "Ok",BOTON_NORMAL); |
Suky | 0:310ed2337a8f | 340 | break; |
Suky | 0:310ed2337a8f | 341 | case MENSAJE_NO_SI: |
Suky | 0:310ed2337a8f | 342 | vDibujarMenuInferior("No", "Si",BOTON_NORMAL); |
Suky | 0:310ed2337a8f | 343 | break; |
Suky | 0:310ed2337a8f | 344 | case MENSAJE_ATRAS: |
Suky | 0:310ed2337a8f | 345 | vDibujarMenuInferior("Atras", " ",BOTON_NORMAL); |
Suky | 0:310ed2337a8f | 346 | break; |
Suky | 0:310ed2337a8f | 347 | } |
Suky | 0:310ed2337a8f | 348 | vSeteamosFuncionEjecutar(vEventosPantallaMensaje); |
Suky | 0:310ed2337a8f | 349 | } |
Suky | 0:310ed2337a8f | 350 | |
Suky | 0:310ed2337a8f | 351 | /* ** Se atiende eventos de pantalla con mensaje ** */ |
Suky | 0:310ed2337a8f | 352 | void vEventosPantallaMensaje(void){ |
Suky | 0:310ed2337a8f | 353 | UINT8 AccionPulsIzq,AccionPulsDer; |
Suky | 0:310ed2337a8f | 354 | const UINT8 *TextDer,*TextIzq; |
Suky | 0:310ed2337a8f | 355 | |
Suky | 0:310ed2337a8f | 356 | switch(MensajePantalla.TipoMensajePantalla){ |
Suky | 0:310ed2337a8f | 357 | case MENSAJE_ATRAS_OK: |
Suky | 0:310ed2337a8f | 358 | AccionPulsIzq = MENSAJE_ACCION_ATRAS; |
Suky | 0:310ed2337a8f | 359 | AccionPulsDer = MENSAJE_ACCION_OK; |
Suky | 0:310ed2337a8f | 360 | TextDer="Atras"; |
Suky | 0:310ed2337a8f | 361 | TextIzq="Ok"; |
Suky | 0:310ed2337a8f | 362 | break; |
Suky | 0:310ed2337a8f | 363 | |
Suky | 0:310ed2337a8f | 364 | case MENSAJE_NO_SI: |
Suky | 0:310ed2337a8f | 365 | AccionPulsIzq = MENSAJE_ACCION_NO; |
Suky | 0:310ed2337a8f | 366 | AccionPulsDer = MENSAJE_ACCION_SI; |
Suky | 0:310ed2337a8f | 367 | TextDer="No"; |
Suky | 0:310ed2337a8f | 368 | TextIzq="Si"; |
Suky | 0:310ed2337a8f | 369 | break; |
Suky | 0:310ed2337a8f | 370 | |
Suky | 0:310ed2337a8f | 371 | default: |
Suky | 0:310ed2337a8f | 372 | AccionPulsIzq = MENSAJE_ACCION_ATRAS; |
Suky | 0:310ed2337a8f | 373 | AccionPulsDer = MENSAJE_ACCION_ATRAS; |
Suky | 0:310ed2337a8f | 374 | TextDer="Atras"; |
Suky | 0:310ed2337a8f | 375 | TextIzq=" "; |
Suky | 0:310ed2337a8f | 376 | } |
Suky | 0:310ed2337a8f | 377 | if(kbhit_irq==1){ |
Suky | 0:310ed2337a8f | 378 | kbhit_irq=0; |
Suky | 0:310ed2337a8f | 379 | kbhit_tratament=1; |
Suky | 0:310ed2337a8f | 380 | |
Suky | 0:310ed2337a8f | 381 | if(AREA_BTN_INF_DER()){ |
Suky | 0:310ed2337a8f | 382 | vDibujarMenuInferior(TextIzq,TextDer,BOTON_PRES_DER); |
Suky | 0:310ed2337a8f | 383 | wait_ms(300); |
Suky | 0:310ed2337a8f | 384 | (*MensajePantalla.MensajeFuncionEjecutar)(AccionPulsIzq); |
Suky | 0:310ed2337a8f | 385 | } |
Suky | 0:310ed2337a8f | 386 | if(AREA_BTN_INF_IZQ()){ |
Suky | 0:310ed2337a8f | 387 | vDibujarMenuInferior(TextIzq,TextDer,BOTON_PRES_IZQ); |
Suky | 0:310ed2337a8f | 388 | wait_ms(300); |
Suky | 0:310ed2337a8f | 389 | (*MensajePantalla.MensajeFuncionEjecutar)(AccionPulsDer); |
Suky | 0:310ed2337a8f | 390 | } |
Suky | 0:310ed2337a8f | 391 | kbhit_tratament=0; |
Suky | 0:310ed2337a8f | 392 | } |
Suky | 0:310ed2337a8f | 393 | } |
Suky | 0:310ed2337a8f | 394 | |
Suky | 0:310ed2337a8f | 395 | void vModificadorVariables(const UINT8 *NombreVariable,float ValorInicial,void (*PtrFuncion)(UINT8,float)){ |
Suky | 0:310ed2337a8f | 396 | const UINT8 PtrLetras[13][2]={"7","8","9","4","5","6","1","2","3",".","0","c"}; |
Suky | 0:310ed2337a8f | 397 | UINT8 Ptr=0,Fmt[30]; |
Suky | 0:310ed2337a8f | 398 | |
Suky | 0:310ed2337a8f | 399 | ModificadorVariable.ValorInicial=ValorInicial; |
Suky | 0:310ed2337a8f | 400 | ModificadorVariable.ValorActual=0.0; |
Suky | 0:310ed2337a8f | 401 | memset(&ModificadorVariable.String[0],0,15); |
Suky | 0:310ed2337a8f | 402 | ModificadorVariable.Ptr=0; |
Suky | 0:310ed2337a8f | 403 | ModificadorVariable.FuncionActualEjecucion=PtrFuncion; |
Suky | 0:310ed2337a8f | 404 | |
Suky | 0:310ed2337a8f | 405 | vDibujarImagenFondo(IMAGEN_FONDO_MENU); |
Suky | 0:310ed2337a8f | 406 | MyLCD.vLCDTFTDrawImage(0,0,WIDTH_TITULO,HEIGH_TITULO,LENGTH_TITULO,&Titulo[0]); |
Suky | 0:310ed2337a8f | 407 | vTextoJustificado(NombreVariable,5,234,4,JUST_CENTRADO,&ARIAL[0],2,ColorAzulMarino); |
Suky | 0:310ed2337a8f | 408 | |
Suky | 0:310ed2337a8f | 409 | MyLCD.vLCDTFTRectangle(22,122,217,148,1,ColorWhite); |
Suky | 0:310ed2337a8f | 410 | MyLCD.vLCDTFTRectangle(20,120,219,121,1,ColorGray); |
Suky | 0:310ed2337a8f | 411 | MyLCD.vLCDTFTRectangle(20,120,21,150,1,ColorGray); |
Suky | 0:310ed2337a8f | 412 | MyLCD.vLCDTFTRectangle(218,120,219,150,1,ColorGray); |
Suky | 0:310ed2337a8f | 413 | MyLCD.vLCDTFTRectangle(20,149,219,150,1,ColorBlack); |
Suky | 0:310ed2337a8f | 414 | sprintf((char *)&Fmt[0],"%f",ValorInicial); |
Suky | 0:310ed2337a8f | 415 | vTextoJustificado((const UINT8 *)&Fmt[0],20,219,128,JUST_CENTRADO,&ARIAL[0],2,ColorAzulMarino); |
Suky | 0:310ed2337a8f | 416 | |
Suky | 0:310ed2337a8f | 417 | // Dibuja pad Numerico: |
Suky | 0:310ed2337a8f | 418 | for(int k=209;k<289;k+=20){ |
Suky | 0:310ed2337a8f | 419 | for(int j=0;j<240;j+=80){ |
Suky | 0:310ed2337a8f | 420 | MyLCD.vLCDTFTDrawImage(j,k,WIDTH_TECLAS,HEIGH_TECLAS,LENGTH_TECLAS,&Teclas[0]); |
Suky | 0:310ed2337a8f | 421 | vTextoJustificado(&PtrLetras[Ptr++][0],j,j+79,k+3,JUST_CENTRADO,&ARIAL[0],2,ColorCian); |
Suky | 0:310ed2337a8f | 422 | } |
Suky | 0:310ed2337a8f | 423 | } |
Suky | 0:310ed2337a8f | 424 | vDibujarMenuInferior("Cancelar","Aceptar",BOTON_NORMAL); |
Suky | 0:310ed2337a8f | 425 | |
Suky | 0:310ed2337a8f | 426 | vSeteamosFuncionEjecutar(vEventosModificadorVariables); |
Suky | 0:310ed2337a8f | 427 | } |
Suky | 0:310ed2337a8f | 428 | |
Suky | 0:310ed2337a8f | 429 | void vEventosModificadorVariables(void){ |
Suky | 0:310ed2337a8f | 430 | const UINT8 PtrLetras[12][2]={"7","8","9","4","5","6","1","2","3",".","0","c"}; |
Suky | 0:310ed2337a8f | 431 | UINT8 PtrTecla; |
Suky | 0:310ed2337a8f | 432 | float Temp; |
Suky | 0:310ed2337a8f | 433 | |
Suky | 0:310ed2337a8f | 434 | if(kbhit_irq==1){ |
Suky | 0:310ed2337a8f | 435 | kbhit_irq=0; |
Suky | 0:310ed2337a8f | 436 | kbhit_tratament=1; |
Suky | 0:310ed2337a8f | 437 | |
Suky | 0:310ed2337a8f | 438 | // Testea Pad Numerico.- |
Suky | 0:310ed2337a8f | 439 | PtrTecla=0; |
Suky | 0:310ed2337a8f | 440 | for(int k=209;k<289;k+=20){ |
Suky | 0:310ed2337a8f | 441 | for(int j=0;j<240;j+=80){ |
Suky | 0:310ed2337a8f | 442 | if((Coordenadas.x<(j+74)) && (Coordenadas.x>(j+5)) && (Coordenadas.y<(k+15)) && (Coordenadas.y>(k+5))){ |
Suky | 0:310ed2337a8f | 443 | vTextoJustificado(&PtrLetras[PtrTecla][0],j,j+79,k+3,JUST_CENTRADO,&ARIAL[0],2,ColorWhite); |
Suky | 0:310ed2337a8f | 444 | wait_ms(300); |
Suky | 0:310ed2337a8f | 445 | vTextoJustificado(&PtrLetras[PtrTecla][0],j,j+79,k+3,JUST_CENTRADO,&ARIAL[0],2,ColorCian); |
Suky | 0:310ed2337a8f | 446 | // Borrar? |
Suky | 0:310ed2337a8f | 447 | if(PtrTecla==11){ |
Suky | 0:310ed2337a8f | 448 | if(ModificadorVariable.Ptr!=0){ |
Suky | 0:310ed2337a8f | 449 | ModificadorVariable.Ptr--; |
Suky | 0:310ed2337a8f | 450 | ModificadorVariable.String[ModificadorVariable.Ptr]='\0'; |
Suky | 0:310ed2337a8f | 451 | } |
Suky | 0:310ed2337a8f | 452 | }else{ |
Suky | 0:310ed2337a8f | 453 | ModificadorVariable.String[ModificadorVariable.Ptr++]=((UINT8)PtrLetras[PtrTecla][0]); |
Suky | 0:310ed2337a8f | 454 | } |
Suky | 0:310ed2337a8f | 455 | MyLCD.vLCDTFTRectangle(22,122,217,148,1,ColorWhite); |
Suky | 0:310ed2337a8f | 456 | vTextoJustificado((const UINT8 *)&ModificadorVariable.String[0],20,219,128,JUST_CENTRADO,&ARIAL[0],2,ColorAzulMarino); |
Suky | 0:310ed2337a8f | 457 | kbhit_tratament=0; |
Suky | 0:310ed2337a8f | 458 | return; |
Suky | 0:310ed2337a8f | 459 | } |
Suky | 0:310ed2337a8f | 460 | PtrTecla++; |
Suky | 0:310ed2337a8f | 461 | } |
Suky | 0:310ed2337a8f | 462 | } |
Suky | 0:310ed2337a8f | 463 | |
Suky | 0:310ed2337a8f | 464 | if(AREA_BTN_INF_DER()){ |
Suky | 0:310ed2337a8f | 465 | vDibujarMenuInferior("Cancelar","Aceptar",BOTON_PRES_DER); |
Suky | 0:310ed2337a8f | 466 | wait_ms(300); |
Suky | 0:310ed2337a8f | 467 | Temp=atof((const char *)&ModificadorVariable.String[0]); |
Suky | 0:310ed2337a8f | 468 | (*ModificadorVariable.FuncionActualEjecucion)(MODIFICADOR_ACEPTAR,Temp); |
Suky | 0:310ed2337a8f | 469 | |
Suky | 0:310ed2337a8f | 470 | } |
Suky | 0:310ed2337a8f | 471 | if(AREA_BTN_INF_IZQ()){ |
Suky | 0:310ed2337a8f | 472 | vDibujarMenuInferior("Cancelar","Aceptar",BOTON_PRES_IZQ); |
Suky | 0:310ed2337a8f | 473 | wait_ms(300); |
Suky | 0:310ed2337a8f | 474 | (*ModificadorVariable.FuncionActualEjecucion)(MODIFICADOR_CANCELAR,0.0); |
Suky | 0:310ed2337a8f | 475 | } |
Suky | 0:310ed2337a8f | 476 | kbhit_tratament=0; |
Suky | 0:310ed2337a8f | 477 | } |
Suky | 0:310ed2337a8f | 478 | } |
Suky | 0:310ed2337a8f | 479 | // ************************************************************************************************ |
Suky | 0:310ed2337a8f | 480 | void vTextoJustificado(const unsigned char *PtrTexto,unsigned short ExtremoIzq, unsigned short ExtremoDer, unsigned short y, unsigned char Just,const char (*Fuente)[5],unsigned char Alto, unsigned short Color){ |
Suky | 0:310ed2337a8f | 481 | unsigned char x,NCaracteres; |
Suky | 0:310ed2337a8f | 482 | const unsigned char *Ptr; |
Suky | 0:310ed2337a8f | 483 | |
Suky | 0:310ed2337a8f | 484 | if(Just!=JUST_IZQ){ |
Suky | 0:310ed2337a8f | 485 | for(Ptr=PtrTexto;*Ptr!='\0';Ptr++); |
Suky | 0:310ed2337a8f | 486 | NCaracteres=Ptr - PtrTexto; |
Suky | 0:310ed2337a8f | 487 | } |
Suky | 0:310ed2337a8f | 488 | switch(Just){ |
Suky | 0:310ed2337a8f | 489 | case JUST_IZQ: |
Suky | 0:310ed2337a8f | 490 | x=ExtremoIzq+5; |
Suky | 0:310ed2337a8f | 491 | break; |
Suky | 0:310ed2337a8f | 492 | case JUST_DER: |
Suky | 0:310ed2337a8f | 493 | x=ExtremoDer-NCaracteres*(5*Alto+1)-4; |
Suky | 0:310ed2337a8f | 494 | break; |
Suky | 0:310ed2337a8f | 495 | case JUST_CENTRADO: |
Suky | 0:310ed2337a8f | 496 | x=((ExtremoIzq+ExtremoDer-NCaracteres*(5*Alto+1))/2); |
Suky | 0:310ed2337a8f | 497 | break; |
Suky | 0:310ed2337a8f | 498 | } |
Suky | 0:310ed2337a8f | 499 | MyLCD.vLCDTFTText(x,y,(const char *)PtrTexto,Fuente,Alto,Color); |
Suky | 0:310ed2337a8f | 500 | } |
Suky | 0:310ed2337a8f | 501 | /* ** Escribe mensaje en pantalla multilinea justificado ** */ |
Suky | 0:310ed2337a8f | 502 | void vEscribirMensaje(unsigned short YInicial,const unsigned char *Mensaje,const char (*Fuente)[5],unsigned char Just, unsigned short Color){ |
Suky | 0:310ed2337a8f | 503 | char Texto[50],k,dy=0; |
Suky | 0:310ed2337a8f | 504 | |
Suky | 0:310ed2337a8f | 505 | while(*Mensaje!='\0'){ |
Suky | 0:310ed2337a8f | 506 | k=0; |
Suky | 0:310ed2337a8f | 507 | do{ |
Suky | 0:310ed2337a8f | 508 | Texto[k++]=*Mensaje++; |
Suky | 0:310ed2337a8f | 509 | }while(*Mensaje!='\0' && *Mensaje!='\n'); |
Suky | 0:310ed2337a8f | 510 | if(*Mensaje=='\n') *Mensaje++; |
Suky | 0:310ed2337a8f | 511 | if(k<50){while(k<50){Texto[k++]='\0';}} |
Suky | 0:310ed2337a8f | 512 | vTextoJustificado((const unsigned char *)&Texto[0],0,239,YInicial+dy,Just,Fuente,1,Color); |
Suky | 0:310ed2337a8f | 513 | dy+=11; |
Suky | 0:310ed2337a8f | 514 | } |
Suky | 0:310ed2337a8f | 515 | } |
Suky | 0:310ed2337a8f | 516 | #endif |