uint8_t opcoes(void){


	uint8_t   ascii_code=0;			// Variável para receber valor ascii
	ascii_code=GetKey();        // GetKey retorna valor ascii apenas 1 vez quando tem algum novo
	static uint16_t   cor=4;

	uint16_t cor_Table [] = {
			LCD_COLOR_WHITE, LCD_COLOR_BLACK, LCD_COLOR_GREY, LCD_COLOR_BLUE, LCD_COLOR_BLUE2,
			LCD_COLOR_RED, LCD_COLOR_MAGENTA, LCD_COLOR_GREEN, LCD_COLOR_CYAN, LCD_COLOR_YELLOW
	};

	if (ascii_code==6 || ascii_code==8){
		cor+=1;
		aktColor=cor_Table[cor];
		UB_Font_DrawString(10,10,"Cor do texto",&Arial_11x20,aktColor,RGB_COL_WHITE);
		}
		if (ascii_code==7 || ascii_code==5){
			cor-=1;
			aktColor=cor_Table[cor];
			UB_Font_DrawString(10,10,"Cor do texto",&Arial_11x20,aktColor,RGB_COL_WHITE);
			}


	if (ascii_code==4 || ascii_code==1)
	return(0);
	else
	return(2);
}
コード例 #2
0
ファイル: main.c プロジェクト: papadkostas/BH1750_UB
int main(){
  SystemInit();
  UB_LCD_Init();
  UB_LCD_LayerInit_Fullscreen();
  UB_LCD_SetLayer_1();
  UB_LCD_FillLayer(RGB_COL_WHITE);
  UB_LCD_SetLayer_2();
  UB_LCD_FillLayer(RGB_COL_BLACK);
  UB_LCD_Rotate_0();
  UB_Font_DrawString(5,10,"STM32F429-BH1750 TEST",&Arial_11x18,RGB_COL_BLUE,RGB_COL_BLACK);
  UB_I2C3_Init();
  Delay(5000000);
  while(1){
	  int lux;
	  char buf[20];
	  lux = BH1750_Read(ONE_TIME_H_1LX);
	  if(lux < 0){
		  return 0;
	  }
	  else{
		  sprintf(buf,"Lux = %d    ",lux);
		  UB_Font_DrawString(10,40,buf,&Arial_11x18,RGB_COL_BLUE,RGB_COL_BLACK);
	  }
	  Delay(5000000);
  }
}
コード例 #3
0
ファイル: oszi.c プロジェクト: duvitech/STM32F429i-Disco_OSC
//--------------------------------------------------------------
// init vom Oszi
//--------------------------------------------------------------
void oszi_init(void)
{
  uint32_t check;

  //---------------------------------------------
  // Hardware init
  //--------------------------------------------- 
  check=p_oszi_hw_init();
  p_oszi_send_uart("OSZI 4 STM32F429 [UB]");
  if(check==1) {
    // Touch init error
    UB_LCD_FillLayer(BACKGROUND_COL);
    UB_Font_DrawString(10,10,"Touch ERR",&Arial_7x10,FONT_COL,BACKGROUND_COL);
    while(1);
  }
  else if(check==2) {
    // Fehler in den Defines
    UB_LCD_FillLayer(BACKGROUND_COL);
    UB_Font_DrawString(10,10,"Wrong ADC Array-LEN",&Arial_7x10,FONT_COL,BACKGROUND_COL);
    while(1);
  }


  //---------------------------------------------
  // FFT init
  //---------------------------------------------
  fft_init();

  //---------------------------------------------
  // Software init
  //---------------------------------------------
  p_oszi_sw_init();
  ADC_change_Frq(Menu.timebase.value);
}
コード例 #4
0
ファイル: menu.c プロジェクト: duvitech/STM32F429i-Disco_OSC
//--------------------------------------------------------------
// zeichnet einen TOP-Menupunkt
//--------------------------------------------------------------
void p_gui_draw_TOP(uint32_t mm_nr, const SM_Item_t um[], uint32_t um_nr)
{
  sprintf(buf,"%s%s",MM_ITEM[mm_nr].txt,um[um_nr].stxt);
  if(GUI.akt_menu==mm_nr) {
    UB_Font_DrawString(LINE(1),MM_ITEM[mm_nr].yp,buf,&Arial_7x10,MENU_VG_COL,MENU_AK_COL);
  }
  else {
    UB_Font_DrawString(LINE(1),MM_ITEM[mm_nr].yp,buf,&Arial_7x10,MENU_VG_COL,MENU_BG_COL);
  }
}
コード例 #5
0
ファイル: BH1750.c プロジェクト: papadkostas/BH1750_UB
int8_t BH1750_Command(uint8_t cmd) {
    /* Check if NULL */
    assert_param(cmd);
    cmdstatus = UB_I2C3_WriteByte(0x23<<1,0x00,cmd,1);
    /* Print Initialization Error ID */
#ifdef DEBUG
    if(cmdstatus < 0) {
        sprintf(bufbh,"Command 0x%04x", cmd);
        UB_Font_DrawString(10,40,bufbh,&Arial_11x18,RGB_COL_RED,RGB_COL_BLACK);
        sprintf(bufbh,"Returned %d", cmdstatus);
        UB_Font_DrawString(10,60,bufbh,&Arial_11x18,RGB_COL_RED,RGB_COL_BLACK);
        return cmdstatus;
    }
#endif
    return cmdstatus;
}
コード例 #6
0
ファイル: menu.c プロジェクト: duvitech/STM32F429i-Disco_OSC
//--------------------------------------------------------------
// zeichnet Untermenu : "CURSOR"
//--------------------------------------------------------------
void p_menu_draw_BOT_CUR(void)
{
  uint16_t delta;

  p_menu_draw_BOT(MM_CUR_MODE,UM_09,Menu.cursor.mode,0);
  if((Menu.cursor.mode==1) || (Menu.cursor.mode==2)) {
    // Cursor = CH1/CH2
    p_menu_draw_BOT(MM_CUR_P1,UM_07,0,3);
    p_menu_draw_BOT(MM_CUR_P2,UM_07,0,4);
    if(Menu.cursor.p1>=Menu.cursor.p2) {
      delta=Menu.cursor.p1-Menu.cursor.p2;
    }
    else {
      delta=Menu.cursor.p2-Menu.cursor.p1;
    }
    P_FloatToDezStr(FAKTOR_ADC*delta);
    sprintf(buf,"~=%sV",bval);
    UB_Font_DrawString(LINE(24),33*FONT_W,buf,&Arial_7x10,MENU_VG_COL,MENU_BG_COL);
  }
  else if(Menu.cursor.mode==3) {
    // Cursor = TIME
    p_menu_draw_BOT(MM_CUR_P1,UM_07,0,5);
    p_menu_draw_BOT(MM_CUR_P2,UM_07,0,6);
    if(Menu.cursor.t1>=Menu.cursor.t2) {
      delta=Menu.cursor.t1-Menu.cursor.t2;
    }
    else {
      delta=Menu.cursor.t2-Menu.cursor.t1;
    }
    P_FloatToDezStr(P_Time_to_Float(Menu.timebase.value, (delta+2048)));
    if(Menu.timebase.value<3) {
      sprintf(buf,"~=%ss",bval);
    }
    else if(Menu.timebase.value<12) {
      sprintf(buf,"~=%sms",bval);
    }
    else {
      sprintf(buf,"~=%sus",bval);
    }

    UB_Font_DrawString(LINE(24),33*FONT_W,buf,&Arial_7x10,MENU_VG_COL,MENU_BG_COL);
  }
  else if(Menu.cursor.mode==4) {
    // Cursor = FFT
    p_menu_draw_BOT(MM_CUR_P1,UM_07,0,8);
  }
}
コード例 #7
0
ファイル: menu.c プロジェクト: duvitech/STM32F429i-Disco_OSC
//--------------------------------------------------------------
// zeichnet das komplette Menu
// (alle TOP und alle BOTTOM Menu-Punkte und die GUI)
//--------------------------------------------------------------
void menu_draw_all(void)
{
  //---------------------------------
  // obere Menu-Leiste
  //---------------------------------
  // Hintergrundbalken
  UB_Graphic2D_DrawFullRectDMA(LCD_MAXX-FONT_H-2,0,LCD_MAXY,FONT_H+2,MENU_BG_COL);
  // TOP-Menus
  p_gui_draw_TOP(MM_CH1, UM_01, Menu.ch1.faktor);
  p_gui_draw_TOP(MM_CH2, UM_01, Menu.ch2.faktor);
  p_gui_draw_TOP(MM_TIME, UM_02, Menu.timebase.value);  
  if(Menu.send.data==0) {
    p_gui_draw_TOP(MM_SETTING, UM_03, Menu.akt_setting);
  }
  else {
    UB_Font_DrawString(LINE(1),MM_ITEM[MM_SETTING].yp,"please wait",&Arial_7x10,MENU_VG_COL,MENU_AK_COL);
  }

  //---------------------------------
  // untere Menu-Leiste
  //---------------------------------
  // Hintergrundbalken
  UB_Graphic2D_DrawFullRectDMA(0,0,LCD_MAXY,FONT_H+2,MENU_BG_COL);
  // Bottom-Menus
  if(Menu.akt_setting==SETTING_TRIGGER) p_menu_draw_BOT_TRG();
  if(Menu.akt_setting==SETTING_CH1) p_menu_draw_BOT_CH1();
  if(Menu.akt_setting==SETTING_CH2) p_menu_draw_BOT_CH2();
  if(Menu.akt_setting==SETTING_CURSOR) p_menu_draw_BOT_CUR();
  if(Menu.akt_setting==SETTING_FFT) p_menu_draw_BOT_FFT();
  if(Menu.akt_setting==SETTING_SEND) p_menu_draw_BOT_SEND();
  if(Menu.akt_setting==SETTING_VERSION) p_menu_draw_BOT_VERSION();
  if(Menu.akt_setting==SETTING_HELP) p_menu_draw_BOT_HELP();

  if(GUI.gui_xpos==GUI_XPOS_OFF) {
    Menu.akt_transparenz=100;
  }
  else {
    Menu.akt_transparenz=200;
    //--------------------------
    // GUI
    //--------------------------
    p_menu_draw_GUI();
  }
}
コード例 #8
0
ファイル: oszi.c プロジェクト: duvitech/STM32F429i-Disco_OSC
//--------------------------------------------------------------
// zeichnet die Skala und die Cursor vom Oszi
//--------------------------------------------------------------
void p_oszi_draw_scale(void)
{
  uint32_t n,m;
  uint16_t xs,ys;
  int16_t signed_int;

  xs=SCALE_START_X;
  ys=SCALE_START_Y;

  //---------------------------------------------
  // Raster aus einzelnen Punkten
  //---------------------------------------------
  for(m=0;m<=SCALE_H;m+=SCALE_SPACE) {
    for(n=0;n<=SCALE_W;n+=SCALE_SPACE) {
      UB_Graphic2D_DrawPixelNormal(m+xs,n+ys,SCALE_COL);
    }
  }

  //---------------------------------------------
  // X-Achse (Horizontale Mittel-Linie)
  //---------------------------------------------
  signed_int=SCALE_Y_MITTE+xs;
  p_oszi_draw_line_h(signed_int,SCALE_COL,0);

  //---------------------------------------------
  // Y-Achse (Vertikale Mittel-Linie)
  //---------------------------------------------
  signed_int=SCALE_X_MITTE+ys;
  p_oszi_draw_line_v(signed_int,SCALE_COL,0);
 
  //---------------------------------------------
  // Umrandung
  //---------------------------------------------
  // unterste linie
  UB_Graphic2D_DrawStraightDMA(xs-1,ys-1,SCALE_W+2,LCD_DIR_HORIZONTAL,SCALE_COL);
  // oberste linie
  UB_Graphic2D_DrawStraightDMA(xs+SCALE_H+1,ys-1,SCALE_W+2,LCD_DIR_HORIZONTAL,SCALE_COL);
  // linke linie
  UB_Graphic2D_DrawStraightDMA(xs-1,ys-1,SCALE_H+2,LCD_DIR_VERTICAL,SCALE_COL);
  // rechte linie
  UB_Graphic2D_DrawStraightDMA(xs-1,ys+SCALE_W+1,SCALE_H+2,LCD_DIR_VERTICAL,SCALE_COL);


  //---------------------------------------------
  // Trigger-Linie (immer Sichtbar)
  //---------------------------------------------
  if(Menu.trigger.source==0) {
    signed_int=oszi_adc2pixel(Menu.trigger.value_ch1, Menu.ch1.faktor);
    signed_int+=SCALE_Y_MITTE+SCALE_START_X+Menu.ch1.position;
    if(signed_int<SCALE_START_X) signed_int=SCALE_START_X;
    if(signed_int>SCALE_MX_PIXEL) signed_int=SCALE_MX_PIXEL;

    p_oszi_draw_line_h(signed_int,ADC_CH1_COL,1);
    UB_Font_DrawString(signed_int-3,0,"T",&Arial_7x10,ADC_CH1_COL,BACKGROUND_COL);
  }
  else if(Menu.trigger.source==1) {
    signed_int=oszi_adc2pixel(Menu.trigger.value_ch2, Menu.ch2.faktor);
    signed_int+=SCALE_Y_MITTE+SCALE_START_X+Menu.ch2.position;
    if(signed_int<SCALE_START_X) signed_int=SCALE_START_X;
    if(signed_int>SCALE_MX_PIXEL) signed_int=SCALE_MX_PIXEL;

    p_oszi_draw_line_h(signed_int,ADC_CH2_COL,1);
    UB_Font_DrawString(signed_int-3,0,"T",&Arial_7x10,ADC_CH2_COL,BACKGROUND_COL);
  }

  //---------------------------------------------
  // Cursor-Linien (nur falls aktiviert)
  //---------------------------------------------
  if(Menu.cursor.mode==1) {
    //------------------------------- 
    // Cursor (CH1)
    //-------------------------------
    signed_int=oszi_adc2pixel(Menu.cursor.p1, Menu.ch1.faktor);
    signed_int+=SCALE_Y_MITTE+SCALE_START_X+Menu.ch1.position;
    if(signed_int<SCALE_START_X) signed_int=SCALE_START_X;
    if(signed_int>SCALE_MX_PIXEL) signed_int=SCALE_MX_PIXEL;

    p_oszi_draw_line_h(signed_int,CURSOR_COL,2);
    UB_Font_DrawString(signed_int-3,312,"A",&Arial_7x10,CURSOR_COL,BACKGROUND_COL);

    signed_int=oszi_adc2pixel(Menu.cursor.p2, Menu.ch1.faktor);
    signed_int+=SCALE_Y_MITTE+SCALE_START_X+Menu.ch1.position;
    if(signed_int<SCALE_START_X) signed_int=SCALE_START_X;
    if(signed_int>SCALE_MX_PIXEL) signed_int=SCALE_MX_PIXEL;

    p_oszi_draw_line_h(signed_int,CURSOR_COL,2);
    UB_Font_DrawString(signed_int-3,312,"B",&Arial_7x10,CURSOR_COL,BACKGROUND_COL);
  }
  else if(Menu.cursor.mode==2) {
    //-------------------------------
    // Cursor (CH2)
    //-------------------------------
    signed_int=oszi_adc2pixel(Menu.cursor.p1, Menu.ch2.faktor);
    signed_int+=SCALE_Y_MITTE+SCALE_START_X+Menu.ch2.position;
    if(signed_int<SCALE_START_X) signed_int=SCALE_START_X;
    if(signed_int>SCALE_MX_PIXEL) signed_int=SCALE_MX_PIXEL;

    p_oszi_draw_line_h(signed_int,CURSOR_COL,2);
    UB_Font_DrawString(signed_int-3,312,"A",&Arial_7x10,CURSOR_COL,BACKGROUND_COL);

    signed_int=oszi_adc2pixel(Menu.cursor.p2, Menu.ch2.faktor);
    signed_int+=SCALE_Y_MITTE+SCALE_START_X+Menu.ch2.position;
    if(signed_int<SCALE_START_X) signed_int=SCALE_START_X;
    if(signed_int>SCALE_MX_PIXEL) signed_int=SCALE_MX_PIXEL;

    p_oszi_draw_line_h(signed_int,CURSOR_COL,2);
    UB_Font_DrawString(signed_int-3,312,"B",&Arial_7x10,CURSOR_COL,BACKGROUND_COL);
  }
  else if(Menu.cursor.mode==3) {
    //-------------------------------
    // Cursor (TIME)
    //-------------------------------
    signed_int=Menu.cursor.t1*FAKTOR_T;
    signed_int+=SCALE_START_Y;
    if(signed_int<SCALE_START_Y) signed_int=SCALE_START_Y;
    if(signed_int>SCALE_MY_PIXEL) signed_int=SCALE_MY_PIXEL;

    p_oszi_draw_line_v(signed_int,CURSOR_COL,2);
    UB_Font_DrawString(215,signed_int-3,"A",&Arial_7x10,CURSOR_COL,BACKGROUND_COL);

    signed_int=Menu.cursor.t2*FAKTOR_T;
    signed_int+=SCALE_START_Y;
    if(signed_int<SCALE_START_Y) signed_int=SCALE_START_Y;
    if(signed_int>SCALE_MY_PIXEL) signed_int=SCALE_MY_PIXEL;

    p_oszi_draw_line_v(signed_int,CURSOR_COL,2);
    UB_Font_DrawString(215,signed_int-3,"B",&Arial_7x10,CURSOR_COL,BACKGROUND_COL);
  }
  else if(Menu.cursor.mode==4) {
    //-------------------------------
    // Cursor (FFT)
    //-------------------------------
    signed_int=Menu.cursor.f1*FAKTOR_F;
    signed_int+=FFT_START_Y+1;
    if(signed_int<FFT_START_Y) signed_int=FFT_START_Y;
    if(signed_int>(FFT_START_Y+FFT_VISIBLE_LENGTH)) signed_int=(FFT_START_Y+FFT_VISIBLE_LENGTH);

    p_oszi_draw_line_v(signed_int,CURSOR_COL,2);
    UB_Font_DrawString(215,signed_int-3,"A",&Arial_7x10,CURSOR_COL,BACKGROUND_COL);
  }
}
コード例 #9
0
ファイル: menu.c プロジェクト: duvitech/STM32F429i-Disco_OSC
//--------------------------------------------------------------
// zeichnet Untermenu : "HELP"
//--------------------------------------------------------------
void p_menu_draw_BOT_HELP(void)
{
  UB_Font_DrawString(LINE(24),10,"CH1=PA5 | CH2=PA7 | TX=PA9 | 500Hz=PB2",&Arial_7x10,MENU_VG_COL,MENU_BG_COL); // Noah 20141013
//  UB_Font_DrawString(LINE(24),10,"CH1=PA3 | CH2=PA7 | TX=PA9 | 500Hz=PB2",&Arial_7x10,MENU_VG_COL,MENU_BG_COL);
}
コード例 #10
0
ファイル: menu.c プロジェクト: duvitech/STM32F429i-Disco_OSC
//--------------------------------------------------------------
// zeichnet Untermenu : "VERSION"
//--------------------------------------------------------------
void p_menu_draw_BOT_VERSION(void)
{
 // UB_Font_DrawString(LINE(24),10,"STM32F429-Oszi | UB | V:1.6 | 24.03.2014",&Arial_7x10,MENU_VG_COL,MENU_BG_COL); // Noah 20141013
  UB_Font_DrawString(LINE(24),10,"STM32F429-Noah | Oszi/UB|V:0.1| 2014.10.13",&Arial_7x10,MENU_VG_COL,MENU_BG_COL);
}
コード例 #11
0
ファイル: menu.c プロジェクト: duvitech/STM32F429i-Disco_OSC
//--------------------------------------------------------------
// zeichnet einen BOTTOM-Menu-Punkt
//--------------------------------------------------------------
void p_menu_draw_BOT(uint32_t mm_nr, const SM_Item_t um[], uint32_t um_nr, uint32_t mode)
{

  if(mode==0) {
    // standard Menupunkt
    sprintf(buf,"%s%s",MM_ITEM[mm_nr].txt,um[um_nr].stxt);
  }
  else if(mode==1) {
    // Sondermenupunkt : "Trigger Value"
    if(Menu.trigger.source==0) {
      P_FloatToDezStr(FAKTOR_ADC*Menu.trigger.value_ch1);
      sprintf(buf,"%s%sV",MM_ITEM[mm_nr].txt,bval);
    }
    if(Menu.trigger.source==1) {
      P_FloatToDezStr(FAKTOR_ADC*Menu.trigger.value_ch2);
      sprintf(buf,"%s%sV",MM_ITEM[mm_nr].txt,bval);
    }
  }
  else if(mode==2) {
    // Sondermenupunkt : "Channel position"
    if(Menu.akt_setting==SETTING_CH1) {
      P_FloatToDezStr(P_Volt_to_Float(Menu.ch1.faktor,Menu.ch1.position));
      sprintf(buf,"%s%sV",MM_ITEM[mm_nr].txt,bval);
    }
    if(Menu.akt_setting==SETTING_CH2) {
      P_FloatToDezStr(P_Volt_to_Float(Menu.ch2.faktor,Menu.ch2.position));
      sprintf(buf,"%s%sV",MM_ITEM[mm_nr].txt,bval);
    }
  }
  else if(mode==3) {
    // Sondermenupunkt : "CH1/CH2 Cursor-A position"
    P_FloatToDezStr(FAKTOR_ADC*Menu.cursor.p1);
    sprintf(buf,"%s%sV",MM_ITEM[mm_nr].txt,bval);
  }
  else if(mode==4) {
    // Sondermenupunkt : "CH1/CH2 Cursor-B position"
    P_FloatToDezStr(FAKTOR_ADC*Menu.cursor.p2);
    sprintf(buf,"%s%sV",MM_ITEM[mm_nr].txt,bval);
  }
  else if(mode==5) {
    // Sondermenupunkt : "TIME Cursor-A position"
    P_FloatToDezStr(P_Time_to_Float(Menu.timebase.value, Menu.cursor.t1));
    sprintf(buf,"%s%s",MM_ITEM[mm_nr].txt,bval);
  }
  else if(mode==6) {
    // Sondermenupunkt : "TIME Cursor-B position"
    P_FloatToDezStr(P_Time_to_Float(Menu.timebase.value, Menu.cursor.t2));
    sprintf(buf,"%s%s",MM_ITEM[mm_nr].txt,bval);
  }
  else if(mode==7) {
    // Sondermenupunkt : "Trigger Reset"
    sprintf(buf,"%s%s",MM_ITEM[mm_nr].txt,um[um_nr].stxt);
  }
  else if(mode==8) {
    // Sondermenupunkt : "FFT Cursor-A position"
    P_FloatToDezStr(P_FFT_to_Float(Menu.timebase.value, Menu.cursor.f1));
    if(Menu.timebase.value<=12) {
      sprintf(buf,"%s%sHz",MM_ITEM[mm_nr].txt,bval);
    }
    else {
      sprintf(buf,"%s%skHz",MM_ITEM[mm_nr].txt,bval);
    }
  }

  if(GUI.akt_menu==mm_nr) {
    UB_Font_DrawString(LINE(24),MM_ITEM[mm_nr].yp,buf,&Arial_7x10,MENU_VG_COL,MENU_AK_COL);
  }
  else {
    UB_Font_DrawString(LINE(24),MM_ITEM[mm_nr].yp,buf,&Arial_7x10,MENU_VG_COL,MENU_BG_COL);
  }
}
/**
  * @brief  Está rotina é chamada para imprimir o menu principal, ela apaga a tela completamente e
  * insere retângulos dos botões e textos
  * @param  Nenhum
  * @retval Nenhum
  */
void imprimir_menu(void){
	LCD_DrawFullRect(45, 70, 150, 60, RGB_COL_WHITE);
	UB_Font_DrawString(65,90,"Digitar",&Arial_11x20,RGB_COL_BLACK,RGB_COL_WHITE);
	LCD_DrawFullRect(45, 200, 150, 60, RGB_COL_WHITE);
	UB_Font_DrawString(65,220,"Opções",&Arial_11x20,RGB_COL_BLACK,RGB_COL_WHITE);
}
int main(void)
{
	SystemInit();						// Configurações e inicialização do clock

	UB_LCD_Init();					// Inicialização LCD

	UB_LCD_LayerInit_Fullscreen();	// Inicialização da camadas da tela

	UB_LCD_SetLayer_1();				// Inicialização da camadas do fundo

	UB_LCD_FillLayer(RGB_COL_WHITE);	// Cor do fundo

	UB_LCD_SetLayer_2();				// Inicialização da camadas em primeiro plano

	UB_LCD_FillLayer(RGB_COL_WHITE);	// Cor do primeiro plano

	CurrentFrameBuffer=LCD_FRAME_BUFFER + LCD_FRAME_OFFSET;  // Variáveis de controle da tela
	aktColor=LCD_COLOR_BLUE;			// Variável para armazenar cor de preferência

	menu=0;							//Programa inicia no menu inicial

	if(UB_Touch_Init()!=SUCCESS)	// Verifica se a inicialização da tela sensível ao toque ocorreu corretamente
	{
		UB_Font_DrawString(10,28,"Touch error",&Arial_11x20,RGB_COL_WHITE,RGB_COL_RED);		//Imprime mensagem de erro
		UB_Font_DrawString(10,46,"Reconecte a energia",&Arial_11x20,RGB_COL_WHITE,RGB_COL_RED);
	while(1);						//Impede o progresso das demais rotinas
	}

	USB_HID_HOST_STATUS_t host_status;	// Variável para armazenar o estado da comunicação USB

	USB_Init();							// Inicializações para utilizar USB

	while(1){

	  LCD_DrawFullRect(0, 0, 240, 320, LCD_COLOR_BLACK);	// Imprime retângulo branco do tamanha da tela(apaga tudo)
	  imprimir_menu();										// Imprime grafismo do menu inicial

//--------------------------------------------------------------
	  while(menu==0)					// Enquanto menu==0 o programa fica no menu inicial
	  {

		  host_status=USB_Function();			// Esta função deve ser chamada periodicamente para o funcionamento do teclado

		  if(host_status!=USB_HID_DEV_DETACHED)	// Se o USB não tiver sido desconectado
			  menu = arrow_function();			// Chama função que controla o selecionamento do menu

		  UB_Touch_Read();						// Lê informações do touch
		  if(Touch_Data.status==TOUCH_PRESSED) {
			  if((Touch_Data.yp < 130) && (Touch_Data.yp >= 70)) {			// Verifica limites da região de um botão touch na tela
				  if((Touch_Data.xp < 215) && (Touch_Data.xp > 45)) {
					  menu=1;												// Se o toque ocorreu muda o estado do programa
				  }
			  }
		  }

		  if(Touch_Data.status==TOUCH_PRESSED) {
			  if((Touch_Data.yp < 260) && (Touch_Data.yp >= 200)) {			// Verifica limites da região de um botão touch na tela
				  if((Touch_Data.xp < 215) && (Touch_Data.xp > 45)) {
		 					  menu=2;												// Se o toque ocorreu muda o estado do programa
				  }
			  }
		  }

		  if(menu==1){							// menu==1 equivale ao modo de Digitação
			  pos.x = 10;						// Posições onde o cursor de digitação começa
			  pos.y = 10;
			  LCD_DrawFullRect(0, 0, 240, 320, LCD_COLOR_WHITE);	// Imprime retângulo branco do tamanha da tela(apaga tudo)
		  }
		  if(menu==2){							// menu==2 equivale ao modo de Opções
			  LCD_DrawFullRect(0, 0, 240, 320, LCD_COLOR_WHITE);	// Imprime retângulo branco do tamanha da tela(apaga tudo)
			  UB_Font_DrawString(10,10,"Cor do texto",&Arial_11x20,aktColor,RGB_COL_WHITE);		//Imprime mensagem
		  }
	  }

	  while(menu==1)							// menu==1 equivale ao modo de Digitação
	  {
		host_status=USB_Function();				//Esta função deve ser chamada periodicamente para o funcionamento do teclado

		UB_Touch_Read();						//Leitura do Touch
		LCD_DrawLine(pos.x,pos.y, 20, LCD_DIR_VERTICAL, RGB_COL_WHITE);
		if(Touch_Data.status==TOUCH_PRESSED) {
			if((Touch_Data.yp < 317) && (Touch_Data.yp >= 3)) {		// Verifica se touch foi na tela( para evitar erros}
				if((Touch_Data.xp < 237) && (Touch_Data.xp > 3)) {
					pos.x=Touch_Data.xp;							// Posiciona o cursor sobre o local tocado
					pos.y=Touch_Data.yp;
					LCD_DrawLine(pos.x,pos.y, 20, LCD_DIR_VERTICAL, RGB_COL_WHITE);
				}
			}

		}

		if(host_status!=USB_HID_DEV_DETACHED)		//Se o USB não tiver sido desconectado
			pos = key_function(pos);				//Interpreta todas teclas e funções do teclado, retorna posição do cursor

		if(host_status==USB_HID_DEV_CONNECTED)		//Se o USB for reconectado
			LCD_DrawFullRect(0, 302, 240, 320, LCD_COLOR_WHITE);	//Apaga mensagem pedindo para conectar

		if(host_status==USB_HID_DEV_DETACHED)		//Se o USB for desconectado
			UB_Font_DrawString(10,302,"Teclado desconectado",&Arial_11x20,RGB_COL_RED,RGB_COL_WHITE);	//Imprime mensagem
	  }
	  while(menu==2)							// menu==2 equivale ao modo de Opções
	  {
		  host_status=USB_Function();			//Esta função deve ser chamada periodicamente para o funcionamento do teclado

		  if(host_status!=USB_HID_DEV_DETACHED)	//Se o USB não tiver sido desconectado
			  menu = opcoes();

	  }
	}
}