<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ucos II+ucGUI+s3c2410+LCD+觸摸屏整合

          ucos II+ucGUI+s3c2410+LCD+觸摸屏整合

          作者: 時間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

          #if GUI_SUPPORT_MEMDEV

          GUI_SelectLCD();

          #else

          LCD_SetClipRectMax();//LCD_L0_GetRect

          #endif

          pContext->pLCD_HL = LCD_HL_APIList;

          pContext->pAFont = GUI_DEFAULT_FONT;

          pContext->pClipRect_HL = GUI_Context.ClipRect;

          pContext->PenSize = 1;

          pContext->DrawMode = GUI_DRAWMODE_NORMAL;//add

          pContext->TextMode = GUI_TEXTMODE_NORMAL;//add

          pContext->TextAlign = GUI_TA_LEFT|GUI_TA_TOP;//add

          pContext->AA_HiResEnable = 0;//add

          /* Variables in WM module */

          #if GUI_WINSUPPORT

          pContext->hAWin = WM_GetDesktopWindow();

          #endif

          /* Variables in GUI_AA module */

          pContext->AA_Factor = 3;

          LCD_SetBkColor(GUI_DEFAULT_BKCOLOR);

          LCD_SetColor(GUI_DEFAULT_COLOR);

          }

          修改如下函數(shù)為:(位于GUIAlloc.c)

          void GUI_ALLOC_Init(void) {

          ........

          GUI_ALLOC.NumUsedBytes = 0;

          memset(aBlock,0,sizeof(aBlock[0])*GUI_MAXBLOCKS);/////self

          aBlock[0].Size = (1

          .......

          }

          修改如下函數(shù)為:(位于WM.c)(DDDDDDDDDDNew)

          void WM_Init(void) {

          if (!_IsInited) {

          ……….

          memset(_ClipContext,0,sizeof(WM_IVR_CONTEXT));//add

          NextDrawWin = WM__FirstWin = WM_HWIN_NULL;

          ……………….

          _IsInited =1;

          }

          }

          2)自己編寫如下函數(shù)(ads1.2):

          void MyInit()

          {

          IsInitialized = 0;//MemDev

          _IsInited = 0;//Win

          WM__CreateFlags = 0;

          GUI_CURSOR_pfTempHide = NULL;

          GUI_Context.hDevData = 0;

          WM__hCapture=0;

          WM__hWinFocus=0;

          WM_pfPollPID = 0;

          WM_pfHandlePID = 0;

          GUI_pfTimerExec = 0;

          _KeyMsgCnt = 0;

          }

          該函數(shù)應(yīng)在GUI_Init()調(diào)用之前調(diào)用。

          6、改寫GUI_Init()函數(shù):

          int GUI_Init(void) {

          int r;

          GUI_DEBUG_LOG(nGUI_Init());

          /* Init system wide globals first */

          GUI_DecChar = '.';

          /* Init context */

          _InitContext(GUI_Context);

          GUITASK_INIT();

          r = LCD_Init();

          #if GUI_WINSUPPORT

          WM_Init();

          #endif

          GUITASK_COPY_CONTEXT();

          GUI_Clear();

          GUI_X_Init();

          GUI_CURSOR_Show();//啟動即顯示鼠標(biāo)

          return r;

          }

          三、ucGUI與ucOS的整合,主要修改GUI_X.c文件:

          1、定義信號量及全局量:

          static OS_EVENT *DispSem;

          static OS_EVENT *EventMbox;

          static OS_EVENT *KeySem;

          static int KeyPressed;

          static char KeyIsInited;

          2、實現(xiàn)結(jié)合函數(shù):

          int GUI_X_GetTime(void)

          {

          return ((int)OSTimeGet());

          }

          void GUI_X_Delay(int period)

          {

          INT32U ticks;

          ticks = (period * 1000) / OS_TICKS_PER_SEC;

          OSTimeDly((INT16U)ticks);

          }

          void GUI_X_Unlock(void)

          {

          OSSemPost(DispSem);

          }

          void GUI_X_Lock(void)

          {

          U8 err;

          OSSemPend(DispSem, 0, err);

          }

          U32 GUI_X_GetTaskId(void)

          {

          return ((U32)(OSTCBCur->OSTCBPrio));

          }

          void GUI_X_WaitEvent (void)

          {

          INT8U err;

          (void)OSMboxPend(EventMbox, 0, err);

          }

          void GUI_X_SignalEvent (void)

          {

          (void)OSMboxPost(EventMbox, (void *)1);

          }

          void GUI_X_InitOS(void)

          {

          DispSem = OSSemCreate(1);

          EventMbox = OSMboxCreate((void *)0);

          }

          void GUI_X_ExecIdle(void) {GUI_X_Delay(1);}

          void GUI_X_Init(void) {

          SetTSInterrupt();//此處接入觸摸屏的中斷設(shè)置

          GUI_TOUCH_SetDefaultCalibration();//用默認值校準(zhǔn)觸摸屏

          }

          四、與觸摸屏有關(guān)的函數(shù):

          1、4個功能函數(shù):

          void GUI_TOUCH_X_ActivateX(void) {//空}

          void GUI_TOUCH_X_ActivateY(void) {//空}

          int GUI_TOUCH_X_MeasureX(void) {

          return TX;//返回觸摸坐標(biāo)x

          }

          int GUI_TOUCH_X_MeasureY(void){

          return TY; //返回觸摸坐標(biāo)y

          }

          2、觸摸屏校準(zhǔn)任務(wù)(進程, 來自示例程序:TOUCH_Calibrate.c):

          #if TOUCH_NEED_CALIBRATE

          static const char * _acPos[] = {

          (upper left position),

          (lower right position)

          };

          static void _WaitForPressedState(int Pressed) {

          GUI_PID_STATE State;

          /* Wait until touch is pressed */

          do {

          GUI_TOUCH_GetState(State);

          if (State.Pressed == Pressed) {

          break;

          }

          GUI_Delay (100);

          } while (1);

          }

          static void _DispStringCentered(const char * pString) {

          GUI_RECT Rect;

          Rect.x0 = Rect.y0 = 0;

          Rect.x1 = LCD_GetXSize() - 1;

          Rect.y1 = LCD_GetYSize() - 1;

          GUI_DispStringInRect(pString, Rect, GUI_TA_HCENTER | GUI_TA_VCENTER);

          }

          static void _GetPhysValues(int LogX, int LogY, int * pPhysX, int * pPhysY, const char * pString) {



          關(guān)鍵詞:

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();