⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 touchtest.c

📁 SDIO文件系统forHMI-STM32
💻 C
字号:
#include "GUI.h"
#include "LCD_ConfDefaults.h" /* valid LCD configuration */
#include "BUTTON.h"
#include "EDIT.h"

extern const GUI_BITMAP bmMicriumLogo;
extern const GUI_BITMAP bmMicriumLogoWRed;
extern const GUI_BITMAP bm6;
extern const GUI_BITMAP bmfolder;
extern const GUI_BITMAP bmTXT;
//extern const GUI_BITMAP bmSeggerLogoBlue;
#define countof(Obj) (sizeof(Obj)/sizeof(Obj[0]))
/*********************************************************************
*
* Static functions
*
**********************************************************************
*/

static int _Log2Phys(int l,I32 l0,I32 l1,I32 p0,I32 p1)
{
  return p0+((p1-p0)*(l-l0))/(l1-l0);
}

static void _Calibrate(int Coord,int Log0,int Log1,int Phys0,int Phys1,int *p0,int *p1) 
{
 int l0 = 0;
 int l1 =(Coord==GUI_COORD_X)?LCD_XSIZE-1:LCD_YSIZE-1;
 *p0 = _Log2Phys(l0,Log0,Log1,Phys0,Phys1);
 *p1 = _Log2Phys(l1,Log0,Log1,Phys0,Phys1);
}
/*********************************************************************
*
* _ExecCalibration
*
**********************************************************************
*/
void _ExecCalibration(void) 
{
  int ax_Phys[2],ay_Phys[2];
 /* calculate log. Positions */
  int ax[2]={15,LCD_XSIZE-1-15};
// const int ay[2] = { 15, LCD_YSIZE-1-15};
  int ay[2]={LCD_YSIZE-1-15,15};
  GUI_TOUCH_SetDefaultCalibration();
/* _Calibrate upper left */
  GUI_SetBkColor(GUI_RED);
  GUI_Clear();

  GUI_SetColor(GUI_WHITE); 
  GUI_FillCircle(ax[0],ay[0],10);
  GUI_SetColor(GUI_RED); 
  GUI_FillCircle(ax[0],ay[0],5);

  GUI_SetColor(GUI_WHITE);
  GUI_DispStringAt("Press here", ax[0]+20,ay[0]);
  do{
      GUI_PID_STATE State;
      GUI_TOUCH_GetState(&State);
      if(State.Pressed)
	    {
          ax_Phys[0] = GUI_TOUCH_GetxPhys();
          ay_Phys[0] = GUI_TOUCH_GetyPhys();
          break;
        }
      GUI_Delay (100);
    }while(1);
/* Tell user to release */
  GUI_Clear();
  GUI_DispStringAt("OK", ax[0]+20, ay[0]);
  do{
      GUI_PID_STATE State;
      GUI_TOUCH_GetState(&State);
      if(State.Pressed==0) 
	    {
          break;
        }
      GUI_Delay (100);
     }while(1);
/* _Calibrate lower right */
GUI_SetBkColor(GUI_RED);
GUI_Clear();
GUI_SetColor(GUI_WHITE); 
GUI_FillCircle(ax[1],ay[1], 10);
GUI_SetColor(GUI_RED); 
GUI_FillCircle(ax[1], ay[1], 5);
GUI_SetColor(GUI_WHITE);
GUI_SetTextAlign(GUI_TA_RIGHT);
GUI_DispStringAt("Press here",ax[1]-20,ay[1]);
do {
     GUI_PID_STATE State;
     GUI_TOUCH_GetState(&State);
     if(State.Pressed) 
      {
       ax_Phys[1] = GUI_TOUCH_GetxPhys();
       ay_Phys[1] = GUI_TOUCH_GetyPhys();
       break;
      }
     GUI_Delay (100);
   }while(1);
GUI_TOUCH_Calibrate(GUI_COORD_X,ax[0],ax[1],ax_Phys[0],ax_Phys[1]);
GUI_TOUCH_Calibrate(GUI_COORD_Y,ay[0],ay[1],ay_Phys[0],ay_Phys[1]);
{ /* calculate and display values for configuration file */
int x0, x1;
int y0, y1;
GUI_Clear();
_Calibrate(GUI_COORD_X,ax[0],ax[1],ax_Phys[0],ax_Phys[1],&x0,&x1);
_Calibrate(GUI_COORD_Y,ay[0],ay[1],ay_Phys[0],ay_Phys[1],&y0,&y1);
GUI_DispStringAt("x0: ",0,0); 
GUI_DispDec(x0,4);
GUI_DispNextLine();
GUI_DispString("x1: "); 
GUI_DispDec(x1,4); 
GUI_DispNextLine();
GUI_DispString("y0: "); 
GUI_DispDec(y0,4); 
GUI_DispNextLine();
GUI_DispString("y1: ");
GUI_DispDec(y1,4); 
GUI_DispNextLine();
GUI_DispString("Please touch display to continue...");
GUI_Delay(1000);
do {
    GUI_PID_STATE State;
    GUI_TOUCH_GetState(&State);
    if(State.Pressed)
        break;
    GUI_Delay (10);
   }while(1);
}
}
/*********************************************************************
*
* _TestCalibration
*
**********************************************************************
*/
void _TestCalibration(void) 
{
int IdleCnt=0;
BUTTON_Handle hButton;
GUI_SetBkColor(GUI_RED);
GUI_SetColor(GUI_WHITE);
GUI_Clear();
hButton = BUTTON_Create(225,15,80,40,1,BUTTON_CF_SHOW);	//创建一个按钮
BUTTON_SetText(hButton,"ABORT");   //设置按钮上的字符
BUTTON_SetFont(hButton,&GUI_FontComic18B_ASCII); //设置按钮上的字体
while((IdleCnt<50)&&(GUI_GetKey()==0)) 
 {
  static GUI_PID_STATE StateLast;
  GUI_PID_STATE State;
  GUI_TOUCH_GetState(&State);

  if((StateLast.Pressed!=State.Pressed)&&(State.Pressed==0))  //触摸屏松开了
    {
      GUI_Clear();
    }

  if((StateLast.x!=State.x)||((StateLast.y!=State.y))) //点到了一个新的位置
   {
     if(State.Pressed) 	 //并切当前还是按下状态
	   {
         GUI_FillCircle(State.x,State.y,5);	//在按下的地方画一个圆圈
       }
     StateLast = State;	 //更新触摸屏的状态
   }

  if(State.Pressed)
    {
      IdleCnt =0;
    } 
  else 
    {
      IdleCnt++;
    }
  GUI_Delay (100);
 }
EDIT_Delete(hButton);  //删除按钮
}

/*********************************************************************
*
* _ExecKeyboard
*
**********************************************************************
This creates a sample keyboard.
The routine returns after ENTER or ESC has been pressed.
*/

static char _acText[]={'1','2','3','4','5','6','7','8','9','0','=',
                         0,'Q','W','E','R','T','Y','U','I','O','P',
                         0,'A','S','D','F','G','H','J','K','L',':',
                         0,'Z','X','C','V','B','N','M','<','>','?',
                       ' ',' ',' ',' ',' ',0,0
					  };


void _ExecKeyboard(void) 
{
 //char xxxx[20];
 //char *tttt=xxxx;
 int i;
 int Key;
 BUTTON_Handle ahButton[52];
 BUTTON_Handle hButtonESC;
 EDIT_Handle hEdit;
 GUI_RECT rText={000,0,LCD_XSIZE,20};
 GUI_SetBkColor(GUI_BLUE);
 GUI_Clear();
 GUI_DrawBitmap(&bmMicriumLogo,0,0);
 GUI_SetFont(&GUI_Font16B_1);
 GUI_SetColor(GUI_WHITE);
 GUI_DispStringInRect("礐/GUI",&rText,GUI_TA_RIGHT|GUI_TA_VCENTER);
 rText.y0 +=20;
 rText.y1 +=20;
 GUI_DispStringInRect("Touch screen demo",&rText,GUI_TA_RIGHT|GUI_TA_VCENTER);
/* Create Keyboard Buttons */
 for(i=0;i<51;i++) 
  {
   int Pos =(i<47)?i:i+4;
   int x0 =5+28*(Pos%11);
   int y0 =100+28*(Pos/11);
   char c =_acText[i];
   int Id = c?c:1;
   char ac[2] = {0};
   char *s= ac;
   ac[0] = c;
   ahButton[i] = BUTTON_Create(x0,y0,25,25,Id,BUTTON_CF_SHOW);
   BUTTON_SetText(ahButton[i],s);
   #if GUI_SUPPORT_MEMDEV
      BUTTON_EnableMemdev(ahButton[i]);
   #endif
  }
ahButton[i]=BUTTON_Create(89,212,109,25,' ',BUTTON_CF_SHOW);
 hButtonESC=BUTTON_Create(230,40,80,25,GUI_ID_CANCEL,BUTTON_CF_SHOW );
  BUTTON_SetText(hButtonESC,"ESC");
 hEdit=EDIT_Create(5,70,310,25,' ',80,0 );
EDIT_SetFont(hEdit,&GUI_Font8x16);
BUTTON_SetBkColor(ahButton[49],0,GUI_RED);
BUTTON_SetBkColor(ahButton[50],0,GUI_BLUE);


/* Handle Keyboard until ESC or ENTER is pressed */
 do{
     Key = WM_WaitKey();
     switch(Key) 
	   {
         case GUI_ID_CANCEL:
                            break;
         case 0:
		        //EDIT_GetText(hEdit,tttt,19);
				//GUI_DispStringAt(tttt,50,50);
         default:
                  EDIT_AddKey(hEdit,Key);
				  //EDIT_GetText(hEdit,tttt,19);
				 //GUI_DispStringAt(tttt,200,50);
       }
    }while((Key!=GUI_ID_CANCEL)&&(Key!=0));


 for(i=0;i<countof(ahButton);i++) 
   {
    BUTTON_Delete(ahButton[i]);
   }
  BUTTON_Delete(hButtonESC);
  EDIT_Delete(hEdit);
}
/*
**********************************************************************
*
* USER_Task
*
**********************************************************************
*/
void USER_Task(void) 
{
#define ID_KEYBOARD 1
#define ID_TESTCAL 2
#define ID_CALIBRATE 3
int i, r;
int XSize = LCD_GetXSize();
int YSize = LCD_GetYSize();
int XMid = XSize / 2;
int YMid = YSize / 2;
while (1)
 {
  GUI_RECT rText;/*= {0, 80, XSize, 120};*/
  BUTTON_Handle ahButton[3];
  rText.x0=0;
  rText.y0=50;
  rText.x1=XSize;
  rText.y1=90;
  GUI_SetBkColor(GUI_BLUE);
  GUI_Clear();

 // GUI_DrawBitmap(&bmMicriumLogo,(XSize-1-bmMicriumLogo.XSize)/2,15);
  GUI_DrawBitmap(&bmfolder,7,7);
  GUI_DrawBitmap(&bmTXT,30,30);
  GUI_SetFont(&GUI_Font16B_1);
  //GUI_SetFont(&GUI_FontHZ_FangSong_GB2312_14);
  GUI_DispStringInRect("礐/GUI Touch screen demo",&rText,GUI_TA_HCENTER|GUI_TA_VCENTER);
 // GUI_DispStringInRect("uC/GUI触摸屏演示程序",&rText,GUI_TA_HCENTER|GUI_TA_VCENTER);
  ahButton[0]=BUTTON_Create(XMid-50,YMid-30,100,50,ID_CALIBRATE,BUTTON_CF_SHOW);
  ahButton[1]=BUTTON_Create(XMid-90,YMid+30,80,30,ID_KEYBOARD,BUTTON_CF_SHOW);
  ahButton[2]=BUTTON_Create(XMid+10,YMid+30,80,30,ID_TESTCAL,BUTTON_CF_SHOW);
  BUTTON_SetText(ahButton[0],"Calibrate");
  BUTTON_SetBkColor(ahButton[0],0,GUI_RED);
  BUTTON_SetText(ahButton[1],"Keyboard");
  BUTTON_SetText(ahButton[2],"Test calibration");
  BUTTON_SetFont(ahButton[0],&GUI_FontComic18B_ASCII);


  r = WM_WaitKey();  //等待按键
  for(i=0;i<countof(ahButton);i++) 
    {
      BUTTON_Delete(ahButton[i]);
    }

  switch(r) 
    {
      case ID_KEYBOARD: 
	                   _ExecKeyboard(); 
					   break;
      case ID_CALIBRATE: 
	                   _ExecCalibration(); 
					   break;
      case ID_TESTCAL: 
	                   _TestCalibration(); 
					   break;
    }
 }
}
/*
*******************************************************************
*
* MainTask() in Simulation
*
*******************************************************************
*/
void MainTask(void) {
GUI_Init();
USER_Task();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -