UCGUI

 

*******************************************************************************

Adc  C source file

*******************************************************************************

#include <string.h>

#include "44b.h"

#include "44blib.h"

#include "adc.h"

#include "GUI.h"

#include "rtc.h"

void __irq BDMA1_Done(void);

int ReadAdc(int ch);

extern int Sec_Old,nsec;

void Draw_Line(void)

{

    float Y_Pos=0;

    int y=0,i=0;

    GUI_AA_SetFactor(6);

    GUI_SetColor(GUI_YELLOW);

    GUI_AA_DrawLine(20,119,640,119) ;

    GUI_AA_DrawLine(20,0,20,239) ;

    GUI_SetColor(GUI_WHITE);

    for (i=0;i<20;i++)

        {

        GUI_GotoXY(0,232-y);

        y+=22;

        GUI_DispFloat(Y_Pos,3);

        Y_Pos+=0.3;

        }

}

void Disp_AdcPicture(void)

{

int a0_Old,a1_Old,a2_Old,a0_New,a1_New,a2_New,a0_Y=0,a1_Y=0,a2_Y=0,X=20;

   GUI_Clear();

   Draw_Line();

   GUI_SetFont(&GUI_FontHZ12);

   GUI_DispStringAt("基于ARMuCGUI的多通道数据采集系统,3通道10AD转换,数据同时存储在FLASH 39VF160",30,226);

while(1)

     {    

       Read_Rtc();       

       if(Sec_Old!=nsec)

         {

          Sec_Old=nsec;

          Disp_TimeAd();

    a0_Old=a0_New;

    a0_New=Get_AverageAd(0) ;

    a1_Old=a1_New;

    a1_New=Get_AverageAd(1) ;

    a2_Old=a2_New;

    a2_New=Get_AverageAd(2) ;

    GUI_SetColor(GUI_RED);

    GUI_AA_DrawLine(X,a0_Old,X+2,a0_New) ;

    GUI_SetColor(GUI_GREEN);

    GUI_AA_DrawLine(X,a1_Old,X+2,a1_New) ;

    GUI_SetColor(GUI_BLUE);

    GUI_AA_DrawLine(X,a2_Old,X+2,a2_New) ;

    GUI_DispStringAt("a0=         a1=         a2=     ",335,0);

    GUI_SetColor(GUI_WHITE);

    GUI_DispDecAt(a0_New,360,0,3);

    GUI_DispDecAt(a1_New,420,0,3);

    GUI_DispDecAt(a2_New,480,0,3);

    //GUI_SetFont(GUI_FontHZ12);

    //GUI_DispStringAt("   

    X+=2;

    if(X>=639) {

                X=20;

                GUI_Clear();

                Draw_Line();

                }

         }   

     }

}

//GUI_DrawPixel//

int Get_AverageAd(int ch)

{

int i=0,total=0;

for (i=0;i<10;i++)

    {

    total+=ReadAdc(ch);

    }

    total=(239-total/43);

return total;

}

void Test_Adc(void)

{

    int a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0;

    int adcpsr;

    Uart_Printf("The ADC_IN are adjusted to the following values./n");       

    Uart_Printf("Push any key to exit!!!/n");  

    rCLKCON=0x7ff8;

    rADCCON=0x1|(0<<2);     //Enable ADC

    Delay(100);             //delay for 10ms for ADC reference voltage stabilization.

    //Uart_Printf("Input ADCPSR value:");

    //adcpsr=Uart_GetIntNum();

    adcpsr=255;

    rADCPSR=adcpsr;

    Uart_Printf("ADC conv. freq.=%d(Hz)/n",(int)(MCLK/(2.*(adcpsr+1.))/16.) );   

    while(Uart_GetKey()==0)

    {

    Delay(9000);

    a0=ReadAdc(0);

    a1=ReadAdc(1);

    a2=ReadAdc(2);

    //a3=ReadAdc(3);

    //a4=ReadAdc(4);

    //a5=ReadAdc(5);

    //a6=ReadAdc(6);

    //a7=ReadAdc(7);   

    Uart_Printf("0:  %04d   1:  %04d   2:  %04d /n",/*3:%04d 4:%04d 5:%04d 6:%04d 7:%04d/n",*/

        a0,a1,a2,a3,a4,a5,a6,a7);

    }

}

int ReadAdc(int ch)

{

    int i;

    static int prevCh=-1;

    if(prevCh!=ch)

    {

        rADCCON=0x0|(ch<<2);    //setup channel.

        for(i=0;i<150;i++); //min. 15us

    }

    rADCCON=0x1|(ch<<2);    //Start A/D conversion

    while(rADCCON &0x1);    //To avoid The first FLAG error case.

                            //(The START bit is cleared in one ADC clock.)

    while(!(rADCCON & 0x40));

    for(i=0;i<rADCPSR;i++);     //To avoid The second FLAG error case

    prevCh=ch;

    return rADCDAT;

}

volatile char end_test;

void Test_DMA_Adc(void)

{

    unsigned int *dst, *temp,i;

    end_test=0;

    pISR_BDMA1=(unsigned)BDMA1_Done;

    rINTMSK=~(BIT_GLOBAL|BIT_BDMA1);   

    Uart_Printf("Test of the 'Start by read' in ADC block./n");

    Uart_Printf("Change the value of AIN0/n");

//    rCLKCON=0x7ff8;

    dst=(unsigned int *)malloc(0x100);

    rNCACHBE0= ((int)dst>>12) + ( (((int)dst>>12) +1)<<16 );

    temp=dst;

    /***ADC init***/

    rADCCON=0x2;    //normal,AIN0,enable start by read

    rADCPSR=0x4;    // MCLK/2

    /***BDMA1 init***/

    rBDISRC1=(2<<30)+(3<<28)+0x1d40008;     //word,peri.(ADC)

    rBDIDES1=(2<<30)+(1<<28)+(unsigned)dst; //IO2M,++

    rBDICNT1=(1<<30)+(1<<26)+(3<<22)+(0<<20)+10*4;//timer,unit,end->interrupt,disable,count=10(word)

    rBDICNT1 |= (1<<20);//enable

    rBDCON1 = 0x0; 

    /***Timer0 init***/

    rTCFG0=255;     //prescaler0=255

    rTCFG1=(1<<24)+4;   //Timer0 DMA, div=32

    rTCNTB0=4902;   //(1/(40MHz/255/32))*4902=1.xx s

    rTCON=0xa;      //auto, update

    rTCON=0x9;      //Start

    while(!end_test);   

    Uart_Printf("dst=0x%x,temp=0x%x/n",dst,temp);

    for(i=0;i<10;i++)

    Uart_Printf("%d=0x%03x/n",i,*temp++);

    Uart_Printf("dst=0x%x,temp=0x%x/n",dst,temp);

    free(dst);

    rINTMSK=BIT_GLOBAL;

}

void __irq BDMA1_Done(void)

{

    rI_ISPC=BIT_BDMA1;  //clear pending bit

    rTCON=0x0;      //Stop

    end_test=1;     //set end flag

}

**************************************************************************

ADC C or C++ include file

*************************************************************************

#ifndef __ADC_H__

#define __ADC_H__

 

void Test_DMA_Adc(void);

void Test_Adc(void);

 

#endif /*__ADC_H__*/

**************************************************************************

2DGL_DrawPolygon.c

**************************************************************************

/***************************************************************************

*        uC/GUI

* Universal graphic software for embedded applications

* (c) Copyright 2002, Micrium Inc., Weston, FL

* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH

* /GUI is protected by international copyright laws. Knowledge of the

* source code may not be used to write a similar product. This file may

* only be used in accordance with a license and should not be redistributed

* in any way. We appreciate your understanding and fairness.

----------------------------------------------------------------------

File        : 2DGL_DrawPolygon.c

Purpose     : Example for drawing a polygon

---------------------------------------------------------------------*/

#include "gui.h"

/**********************************************************************/

#define countof(Array) (sizeof(Array) / sizeof(Array[0]))

const GUI_POINT aPoints[] = {

{ 0, 20},

{ 40, 20},

{ 20, 0}

};

GUI_POINT aEnlargedPoints[countof(aPoints)];

void DrawPolygon(void) {

    int i;

    GUI_Clear();

    GUI_SetDrawMode(GUI_DM_XOR);

    GUI_FillPolygon(aPoints, countof(aPoints), 140, 110);

    for (i = 1; i < 10; i++) {

        GUI_EnlargePolygon(aEnlargedPoints, aPoints, countof(aPoints), i * 5);

        GUI_FillPolygon(aEnlargedPoints, countof(aPoints), 140, 110);

    }

}

################################################################################

AA_HiResAntialiasing.c

################################################################################

/*******************************************************************************

*                                                uC/GUI

*    Universal graphic software for embedded applications

*   (c) Copyright 2002, Micrium Inc., Weston, FL

*   (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH

*   /GUI is protected by international copyright laws. Knowledge of the

*   source code may not be used to write a similar product. This file may

*   only be used in accordance with a license and should not be redistributed

*     in any way. We appreciate your understanding and fairness.

----------------------------------------------------------------------

File        : AA_HiResAntialiasing.c

Purpose     : Demonstrates high resolution antialiasing

-------------------------------------------------------------------*/

#include "GUI.H"

#include "44blib.h"

/*******************************************************************

*            Data

*******************************************************************/

#define countof(Obj) (sizeof(Obj)/sizeof(Obj[0]))

static const GUI_POINT aPointer[] = {

  {  0,  3},

  { 85,  1},

  { 90,  0},

  { 85, -1},

  {  0, -3}

};

static GUI_POINT aPointerHiRes[countof(aPointer)];

typedef struct {

  GUI_AUTODEV_INFO AutoInfo;

  GUI_POINT aPoints[countof(aPointer)];

  int Factor;

} PARAM;

/*******************************************************************

*                 Drawing routines

*******************************************************************/

static void DrawHiRes(void * p) {

  PARAM * pParam = (PARAM *)p;

  if (pParam->AutoInfo.DrawFixed) {

    GUI_ClearRect(0, 0, 99, 99);

  }

  GUI_AA_FillPolygon(pParam->aPoints,

                     countof(aPointer),

                     5 * pParam->Factor,

                     95 * pParam->Factor);

}

static void Draw(void * p) {

  PARAM * pParam = (PARAM *)p;

  if (pParam->AutoInfo.DrawFixed) {

    GUI_ClearRect(100, 0, 199, 99);

  }

  GUI_AA_FillPolygon(pParam->aPoints, countof(aPointer), 105, 95);

}

/*******************************************************************

*    Demonstrate high resolution by drawing rotating pointers

********************************************************************/

void ShowHiresAntialiasing(void) {

  int i;

  GUI_AUTODEV aAuto[2];

  PARAM Param;

  Param.Factor = 3;

  GUI_DispStringHCenterAt("Using/nhigh/nresolution/nmode", 50, 120);

  GUI_DispStringHCenterAt("Not using/nhigh/nresolution/nmode", 150, 120);

  /* Create GUI_AUTODEV objects */

  for (i = 0; i < countof(aAuto); i++) {

    GUI_MEMDEV_CreateAuto(&aAuto[i]);

  }

  /* Calculate pointer for high resolution */

  for (i = 0; i < countof(aPointer); i++) {

    aPointerHiRes[i].x = aPointer[i].x * Param.Factor;

    aPointerHiRes[i].y = aPointer[i].y * Param.Factor;

  }

  GUI_AA_SetFactor(Param.Factor); /* Set antialiasing factor */

  while(1) {

    for (i = 0; i < 1800; i+=10) {

      float Angle = (i >= 900) ? 1800 - i : i;

      Angle *= 3.1415926f / 1800;

      /* Draw pointer with high resolution */

      GUI_AA_EnableHiRes();

      GUI_RotatePolygon(Param.aPoints, aPointerHiRes, countof(aPointer), Angle);

      GUI_MEMDEV_DrawAuto(&aAuto[0], &Param.AutoInfo, DrawHiRes, &Param);

      /* Draw pointer without high resolution */

      GUI_AA_DisableHiRes();

      GUI_RotatePolygon(Param.aPoints, aPointer, countof(aPointer), Angle);

      GUI_MEMDEV_DrawAuto(&aAuto[1], &Param.AutoInfo, Draw, &Param);

//      GUI_Delay(2);

      if (GetKey()!=0xff)

        return;

    }

  }

}

***********************************************************************

AA_Lines.c

***********************************************************************

/*********************************************************************

*                        uC/GUI

*   Universal graphic software for embedded applications

*   (c) Copyright 2002, Micrium Inc., Weston, FL

*   (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH

*   /GUI is protected by international copyright laws. Knowledge of the

*   source code may not be used to write a similar product. This file may

*   only be used in accordance with a license and should not be redistributed

*   in any way. We appreciate your understanding and fairness.

----------------------------------------------------------------------

File        : AA_Lines.c

Purpose     : Shows lines with different antialiasing qualities

--------------------------------------------------------------------*/

#include "GUI.H"

/*******************************************************************

*         Show lines with different antialiasing qualities

*******************************************************************/

void DemoAntialiasing(void) {

  int i, x1, x2;

  int y = 2;

  /* Set drawing attributes */

  GUI_SetColor(GUI_BLACK);

  GUI_SetBkColor(GUI_WHITE);

  GUI_SetPenShape(GUI_PS_FLAT);

  GUI_Clear();

  x1 = 10; x2 = 90;

  /* Draw lines without antialiasing */

  GUI_DispStringHCenterAt("/nNormal", (x1 + x2) / 2, 10);

  for (i = 1; i < 12; i++) {

    GUI_SetPenSize(i);

    GUI_DrawLine(x1, 40 + i * 15, x2, 40 + i * 15 +  y);

  }

  x1 = 110; x2 = 190;

  /* Draw lines with antialiasing quality faktor 2 */

  GUI_AA_SetFactor(2);

  GUI_DispStringHCenterAt("Antialiased/n/nusing factor 2", (x1 + x2) / 2, 10);

  for (i = 1; i < 12; i++) {

    GUI_SetPenSize(i);

    GUI_AA_DrawLine(x1, 40 + i * 15, x2, 40 + i * 15 +  y);

  }

  x1 = 210; x2 = 290;

  /* Draw lines with antialiasing quality faktor 6 */

  GUI_AA_SetFactor(6);

  GUI_DispStringHCenterAt("Antialiased/n/nusing factor 6", (x1 + x2) / 2, 10);

  for (i = 1; i < 12; i++) {

    GUI_SetPenSize(i);

    GUI_AA_DrawLine(x1, 40 + i * 15, x2, 40 + i * 15 +  y);

  }

}

##########################################################################

COLOR_ShowColorBar.c

##########################################################################

----------------------------------------------------------------------

File        : COLOR_ShowColorBar.c

Purpose     : Example draws a color bar

-------------------------------------------------------------------*/

#include "GUI.H"

#include "LCDConf.h"

/*******************************************************************

*                 Draws 13 color bars

******************************************************************/

void ShowColorBar(void) {

  int x0 = 60, y0 = 40, yStep = 15, i;

  int xsize     = LCD_GetDevCap(LCD_DEVCAP_XSIZE) - x0;

    GUI_SetFont(&GUI_Font16_ASCII);

  #if (LCD_FIXEDPALETTE)

    GUI_DispString("colorboard");

    GUI_DispDecMin(LCD_FIXEDPALETTE);

  #endif

  GUI_DispStringAt("red",     0, y0 +      yStep);

  GUI_DispStringAt("green",   0, y0 +  3 * yStep);

  GUI_DispStringAt("blue",    0, y0 +  5 * yStep);

  GUI_DispStringAt("gray",    0, y0 +  6 * yStep);

  GUI_DispStringAt("yellow",  0, y0 +  8 * yStep);

  GUI_DispStringAt("cyan",    0, y0 + 10 * yStep);

  GUI_DispStringAt("purple", 0, y0 + 12 * yStep);

  for (i = 0; i < xsize; i++) {

    U16 cs = (255 * (U32)i) / xsize;

    U16 x = x0 + i;;

    /* Red */

    GUI_SetColor(cs);

    GUI_DrawVLine(x, y0             , y0 +     yStep - 1);

    GUI_SetColor(0xff + (255 - cs) * 0x10100L);

    GUI_DrawVLine(x, y0 +      yStep, y0 + 2 * yStep - 1);

    /* Green */

    GUI_SetColor(cs<<8);

    GUI_DrawVLine(x, y0 +  2 * yStep, y0 + 3 * yStep - 1);

    GUI_SetColor(0xff00 + (255 - cs) * 0x10001L);

    GUI_DrawVLine(x, y0 +  3 * yStep, y0 + 4 * yStep - 1);

    /* Blue */

    GUI_SetColor(cs * 0x10000L);

    GUI_DrawVLine(x, y0 +  4 * yStep, y0 + 5 * yStep - 1);

    GUI_SetColor(0xff0000 + (255 - cs) * 0x101L);

    GUI_DrawVLine(x, y0 +  5 * yStep, y0 + 6 * yStep - 1);

    /* Gray */

    GUI_SetColor((U32)cs * 0x10101L);

    GUI_DrawVLine(x, y0 +  6 * yStep, y0 + 7 * yStep - 1);

    /* Yellow */

    GUI_SetColor(cs * 0x101);

    GUI_DrawVLine(x, y0 +  7 * yStep, y0 + 8 * yStep - 1);

    GUI_SetColor(0xffff + (255 - cs) * 0x10000L);

    GUI_DrawVLine(x, y0 +  8 * yStep, y0 + 9 * yStep - 1);

    /* Cyan */

    GUI_SetColor(cs * 0x10100L);

    GUI_DrawVLine(x, y0 +  9 * yStep, y0 + 10 * yStep - 1);

    GUI_SetColor(0xffff00 + (255 - cs) * 0x1L);

    GUI_DrawVLine(x, y0 + 10 * yStep, y0 + 11 * yStep - 1);

    /* Magenta */

    GUI_SetColor(cs * 0x10001);

    GUI_DrawVLine(x, y0 + 11 * yStep, y0 + 12 * yStep - 1);

    GUI_SetColor(0xff00ff + (255 - cs) * 0x100L);

    GUI_DrawVLine(x, y0 + 12 * yStep, y0 + 13 * yStep - 1);

  }

}

*****************************************************************

DIALOG_All.c

*****************************************************************

----------------------------------------------------------------------

File        : Dialog_All.c

Purpose     : Example demonstrating DIALOG and widgets

--------------------------------------------------------------------*/

#include <stddef.h>

#include "GUI.H"

#include "DIALOG.h"

/*********************************************************************

*       static data

*********************************************************************/

/*********************************************************************

*       Dialog resource

* This table conatins the info required to create the dialog.

* It has been created manually, but could also be created by a GUI-builder.

*/

static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {

  { FRAMEWIN_CreateIndirect, "uCdragon", 0,              10,  10, 180, 230, FRAMEWIN_CF_MOVEABLE, 0  },

  { BUTTON_CreateIndirect,   "OK",     GUI_ID_OK,     100,  5,   60,  20 },

  { BUTTON_CreateIndirect,   "Cancel", GUI_ID_CANCEL, 100,  30,  60,  20 },

  { TEXT_CreateIndirect,     "LText",  0,              10,  55,  48,  15, TEXT_CF_LEFT  },

  { TEXT_CreateIndirect,     "RText",  0,              10,  80,  48,  15, TEXT_CF_RIGHT },

  { EDIT_CreateIndirect,     NULL,     GUI_ID_EDIT0,   60,  55, 100,  15, 0, 50 },

  { EDIT_CreateIndirect,     NULL,     GUI_ID_EDIT1,   60,  80, 100,  15, 0, 50 },

  { TEXT_CreateIndirect,     "Hex",    0,              10, 100,  48,  15, TEXT_CF_RIGHT },

  { EDIT_CreateIndirect,     NULL,     GUI_ID_EDIT2,   60, 100, 100,  15, 0, 6 },

  { TEXT_CreateIndirect,     "Bin",    0,              10, 120,  48,  15, TEXT_CF_RIGHT },

  { EDIT_CreateIndirect,     NULL,     GUI_ID_EDIT3,   60, 120, 100,  15 },

  { LISTBOX_CreateIndirect,  NULL,     GUI_ID_LISTBOX0,10,  10,  60,  40 },

  { CHECKBOX_CreateIndirect, NULL,     GUI_ID_CHECK0,  10, 140,   0,   0 },

  { CHECKBOX_CreateIndirect, NULL,     GUI_ID_CHECK1,  30, 140,   0,   0 },

  { SLIDER_CreateIndirect,   NULL,     GUI_ID_SLIDER0, 60, 140, 100,  20 },

  { SLIDER_CreateIndirect,   NULL,     GUI_ID_SLIDER1, 10, 170, 150,  30 }

};

/*********************************************************************

*              Initializers for listbox*/

static const GUI_ConstString _apListBox[] = {

  "English", "Deutsch", "Franis", "Japanese", "Italiano", NULL

};

/*********************************************************************

*       static code

********************************************************************/

/*********************************************************************

*       Dialog callback routine*/

static void _cbCallback(WM_MESSAGE * pMsg) {

  int NCode, Id;

  WM_HWIN hEdit0, hEdit1, hEdit2, hEdit3, hListBox;

  WM_HWIN hWin = pMsg->hWin;

  switch (pMsg->MsgId) {

    case WM_INIT_DIALOG:

      /* Get window handles for all widgets */

      hEdit0   = WM_GetDialogItem(hWin, GUI_ID_EDIT0);

      hEdit1   = WM_GetDialogItem(hWin, GUI_ID_EDIT1);

      hEdit2   = WM_GetDialogItem(hWin, GUI_ID_EDIT2);

      hEdit3   = WM_GetDialogItem(hWin, GUI_ID_EDIT3);

      hListBox = WM_GetDialogItem(hWin, GUI_ID_LISTBOX0);

      /* Initialize all widgets */

      EDIT_SetText(hEdit0, "Edit0");

      EDIT_SetText(hEdit1, "Edit1");

      EDIT_SetTextAlign(hEdit1, GUI_TA_LEFT);

      EDIT_SetHexMode(hEdit2, 0x1234, 0, 0xffff);

      EDIT_SetBinMode(hEdit3, 0x1234, 0, 0xffff);

      LISTBOX_SetText(hListBox, _apListBox);

      WM_DisableWindow (WM_GetDialogItem(hWin, GUI_ID_CHECK1));

      CHECKBOX_Check(  WM_GetDialogItem(hWin, GUI_ID_CHECK0));

      CHECKBOX_Check(  WM_GetDialogItem(hWin, GUI_ID_CHECK1));

      SLIDER_SetWidth( WM_GetDialogItem(hWin, GUI_ID_SLIDER0), 5);

      SLIDER_SetValue( WM_GetDialogItem(hWin, GUI_ID_SLIDER1), 50);

      SCROLLBAR_CreateAttached(hListBox, SCROLLBAR_CF_VERTICAL);

      break;

    case WM_KEY:

      switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) {

      case GUI_KEY_ESCAPE:

        GUI_EndDialog(hWin, 1);

        break;

      case GUI_KEY_ENTER:

        GUI_EndDialog(hWin, 0);

        break;

      }

      break;

    case WM_NOTIFY_PARENT:

      Id    = WM_GetId(pMsg->hWinSrc);    /* Id of widget */

      NCode = pMsg->Data.v;               /* Notification code */

      switch (NCode) {

        case WM_NOTIFICATION_RELEASED:    /* React only if released */

          if (Id == GUI_ID_OK) {          /* OK Button */

            GUI_EndDialog(hWin, 0);

          }

          if (Id == GUI_ID_CANCEL) {      /* Cancel Button */

            GUI_EndDialog(hWin, 1);

          }

          break;

      }

      break;

    default:

      WM_DefaultProc(pMsg);

  }

}

/*********************************************************************

*       main

********************************************************************/

void Dialog_All(void) {

    GUI_Clear();

    GUI_SetFont(&GUI_FontComic24B_ASCII);

    WM_SetDesktopColor(GUI_BLACK);

    WM_SetCreateFlags(WM_CF_MEMDEV); 

    GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);

}

*****************************************************************

DIALOG_MessageBox.c

*****************************************************************

----------------------------------------------------------------------

File        : DIALOG_MessageBox.c

Purpose     : Example demonstrating GUI_MessageBox

--------------------------------------------------------------------*/

#include "GUI.h"

/*********************************************************************

*       GUIDEMO_Dialog

*********************************************************************/

void GUIDEMO_Messagebox(void) {

  GUI_COLOR Color;

  Color = WM_SetDesktopColor(GUI_BLACK);

  GUI_MessageBox("Message1", "文本", 0);

//  GUI_Delay(1000);

  GUI_MessageBox("Message2", "Text", 0);

//  GUI_Delay(1000);

  WM_SetDesktopColor(Color);

########################################################################

DIALOG_Radio.c

########################################################################

----------------------------------------------------------------------

File        : DIALOG_SliderColor.c

Purpose     : Example demonstrating the use of a DIALOG widget

--------------------------------------------------------------------*/

#include <stddef.h>

#include "GUI.H"

#include "DIALOG.h"

/*********************************************************************

*       static data

********************************************************************/

/*********************************************************************

*       Dialog resource

* This table conatins the info required to create the dialog.

* It has been created manually, but could also be created by a GUI-builder.

*/

static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {

  { FRAMEWIN_CreateIndirect, "Radio button sample", 0,         10,  10, 260, 100, FRAMEWIN_CF_MOVEABLE},

  { RADIO_CreateIndirect,     NULL,     GUI_ID_RADIO0,   5, 10,0,0,0, 3  },

  { TEXT_CreateIndirect,     "Suspend" ,  0,            25,  10,  70,  20, TEXT_CF_LEFT },

  { TEXT_CreateIndirect,     "Shut down", 0,            25,  30,  70,  20, TEXT_CF_LEFT },

  { TEXT_CreateIndirect,     "Restart after",  0,       25,  50,  70,  20, TEXT_CF_LEFT },

  { TEXT_CreateIndirect,     "seconds",  0,            130,  50,  70,  20, TEXT_CF_LEFT },

  { EDIT_CreateIndirect,     "200",     GUI_ID_EDIT0,   95,  47,  30,  19, 0, 3},

  { BUTTON_CreateIndirect,   "OK",      GUI_ID_OK,     180,  10,  60,  20 },

  { BUTTON_CreateIndirect,   "Cancel",  GUI_ID_CANCEL, 180,  40,  60,  20 }

};

/*********************************************************************

*       static code

*********************************************************************/

/*********************************************************************

*       Dialog callback routine*/

static void _cbCallback(WM_MESSAGE * pMsg) {

  int Sel;

  int NCode, Id;

  WM_HWIN hDlg, hItem;

  hDlg = pMsg->hWin;

  switch (pMsg->MsgId) {

    case WM_INIT_DIALOG:

      hItem = WM_GetDialogItem(hDlg, GUI_ID_EDIT0);

      EDIT_SetDecMode(hItem, 30,   0, 999, 0, 0);    /* Select decimal mode */

      WM_DisableWindow(hItem);

      break;

    case WM_KEY:

      switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) {

        case GUI_ID_ESCAPE:

          GUI_EndDialog(hDlg, 1);

          break;

        case GUI_ID_ENTER:

          GUI_EndDialog(hDlg, 0);

          break;

      }

      break;

    case WM_NOTIFY_PARENT:

      Id    = WM_GetId(pMsg->hWinSrc);      /* Id of widget */

      NCode = pMsg->Data.v;                 /* Notification code */

      switch (NCode) {

        case WM_NOTIFICATION_RELEASED:      /* React only if released */

          if (Id == GUI_ID_OK) {            /* OK Button */

            GUI_EndDialog(hDlg, 0);

          }

          if (Id == GUI_ID_CANCEL) {        /* Cancel Button */

            GUI_EndDialog(hDlg, 1);

          }

          break;

        case WM_NOTIFICATION_VALUE_CHANGED:

          hItem = WM_GetDialogItem(hDlg, GUI_ID_RADIO0);

          Sel   = RADIO_GetValue(hItem);

          hItem = WM_GetDialogItem(hDlg, GUI_ID_EDIT0);

          WM_SetEnableState(hItem, Sel == 2);     

          break;

      }

      break;

    default:

      WM_DefaultProc(pMsg);

  }

}

/*********************************************************************

*       main

***********************************************************************/

void Dialog_Radio(void) {

  GUI_Clear();

  WM_SetDesktopColor(GUI_RED);      /* Automacally update desktop window */

  WM_SetCreateFlags(WM_CF_MEMDEV);  /* Use memory devices on all windows to avoid flicker */

  GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);

}

###########################################################################

DIALOG_SliderColor.c

##########################################################################

----------------------------------------------------------------------

File        : DIALOG_SliderColor.c

Purpose     : Example demonstrating the use of a DIALOG widget

--------------------------------------------------------------------*/

#include <stddef.h>

#include "GUI.H"

#include "DIALOG.h"

/*********************************************************************

*       static data

*********************************************************************/

/*********************************************************************

*       Dialog resource

* This table conatins the info required to create the dialog.

* It has been created manually, but could also be created by a GUI-builder.

*/

static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {

  { FRAMEWIN_CreateIndirect, "Radio button sample", 0,         10,  10, 260, 100, FRAMEWIN_CF_MOVEABLE},

  { RADIO_CreateIndirect,     NULL,     GUI_ID_RADIO0,   5, 10,0,0,0, 3  },

  { TEXT_CreateIndirect,     "Suspend" ,  0,            25,  10,  70,  20, TEXT_CF_LEFT },

  { TEXT_CreateIndirect,     "Shut down", 0,            25,  30,  70,  20, TEXT_CF_LEFT },

  { TEXT_CreateIndirect,     "Restart after",  0,       25,  50,  70,  20, TEXT_CF_LEFT },

  { TEXT_CreateIndirect,     "seconds",  0,            130,  50,  70,  20, TEXT_CF_LEFT },

  { EDIT_CreateIndirect,     "200",     GUI_ID_EDIT0,   95,  47,  30,  19, 0, 3},

  { BUTTON_CreateIndirect,   "OK",      GUI_ID_OK,     180,  10,  60,  20 },

  { BUTTON_CreateIndirect,   "Cancel",  GUI_ID_CANCEL, 180,  40,  60,  20 }

};

/*********************************************************************

*       static code

*********************************************************************/

/*********************************************************************

*       Dialog callback routine*/

static void _cbCallback(WM_MESSAGE * pMsg) {

  int Sel;

  int NCode, Id;

  WM_HWIN hDlg, hItem;

  hDlg = pMsg->hWin;

  switch (pMsg->MsgId) {

    case WM_INIT_DIALOG:

      hItem = WM_GetDialogItem(hDlg, GUI_ID_EDIT0);

      EDIT_SetDecMode(hItem, 30,   0, 999, 0, 0);    /* Select decimal mode */

      WM_DisableWindow(hItem);

      break;

    case WM_KEY:

      switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) {

        case GUI_ID_ESCAPE:

          GUI_EndDialog(hDlg, 1);

          break;

        case GUI_ID_ENTER:

          GUI_EndDialog(hDlg, 0);

          break;

      }

      break;

    case WM_NOTIFY_PARENT:

      Id    = WM_GetId(pMsg->hWinSrc);      /* Id of widget */

      NCode = pMsg->Data.v;                 /* Notification code */

      switch (NCode) {

        case WM_NOTIFICATION_RELEASED:      /* React only if released */

          if (Id == GUI_ID_OK) {            /* OK Button */

            GUI_EndDialog(hDlg, 0);

          }

          if (Id == GUI_ID_CANCEL) {        /* Cancel Button */

            GUI_EndDialog(hDlg, 1);

          }

          break;

        case WM_NOTIFICATION_VALUE_CHANGED:

          hItem = WM_GetDialogItem(hDlg, GUI_ID_RADIO0);

          Sel   = RADIO_GetValue(hItem);

          hItem = WM_GetDialogItem(hDlg, GUI_ID_EDIT0);

          WM_SetEnableState(hItem, Sel == 2);     

          break;

      }

      break;

    default:

      WM_DefaultProc(pMsg);

  }

}

/*********************************************************************

*       main

*********************************************************************/

void Dialog_Radio(void) {

  GUI_Clear();

  WM_SetDesktopColor(GUI_RED);      /* Automacally update desktop window */

  WM_SetCreateFlags(WM_CF_MEMDEV);  /* Use memory devices on all windows to avoid flicker */

  GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);

}

#######################################################################

DIALOG_SliderColor.c

#######################################################################

----------------------------------------------------------------------

File        : DIALOG_SliderColor.c

Purpose     : Example demonstrating the use of a DIALOG widget

--------------------------------------------------------------------*/

#include <stddef.h>

#include "GUI.H"

#include "DIALOG.h"

/*********************************************************************

*       static data

*********************************************************************/

static U8 _aColorSep[3] = {0, 127, 255};  /* Red, green and blue components */

/*********************************************************************

*       Dialog resource

* This table conatins the info required to create the dialog.

* It has been created manually, but could also be created by a GUI-builder.

*/

static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {

  { FRAMEWIN_CreateIndirect, "Adjust color", 0,         10,  10, 300, 160 , FRAMEWIN_CF_MOVEABLE},

  { TEXT_CreateIndirect,     "Red:" ,  0,                5,  20,  35,  20, TEXT_CF_LEFT },

  { TEXT_CreateIndirect,     "Green:", 0,                5,  50,  35,  20, TEXT_CF_LEFT },

  { TEXT_CreateIndirect,     "Blue:",  0,                5,  80,  35,  20, TEXT_CF_LEFT },

  { TEXT_CreateIndirect,     "Preview",0,              205,   4,  81,  15, TEXT_CF_HCENTER },

  { SLIDER_CreateIndirect,   NULL,     GUI_ID_SLIDER0,  40,  20, 100,  20 },

  { SLIDER_CreateIndirect,   NULL,     GUI_ID_SLIDER1,  40,  50, 100,  20 },

  { SLIDER_CreateIndirect,   NULL,     GUI_ID_SLIDER2,  40,  80, 100,  20 },

  { EDIT_CreateIndirect,     NULL,     GUI_ID_EDIT0,   145,  20,  30,  20, 0, 3 },

  { EDIT_CreateIndirect,     NULL,     GUI_ID_EDIT1,   145,  50,  30,  20, 0, 3 },

  { EDIT_CreateIndirect,     NULL,     GUI_ID_EDIT2,   145,  80,  30,  20, 0, 3 },

  { BUTTON_CreateIndirect,   "OK",     GUI_ID_OK,       10, 110,  60,  20 },

  { BUTTON_CreateIndirect,   "Cancel", GUI_ID_CANCEL,  230, 110,  60,  20 },

};

/*********************************************************************

*       static code

*********************************************************************/

/*********************************************************************

*       _OnPaint

  This routine draws the color rectangles.

  The widgets are drawn automatically.*/

static void _OnPaint(WM_HWIN hWin) {

  /* Draw RGB values */

  GUI_SetColor(_aColorSep[0]);

  GUI_FillRect(180, 20, 199, 39);

  GUI_SetColor(_aColorSep[1] << 8);

  GUI_FillRect(180, 50, 199, 69);

  GUI_SetColor(((U32)_aColorSep[2]) << 16);

  GUI_FillRect(180, 80, 199, 99);

  /* Draw resulting color */

  GUI_SetColor(_aColorSep[0] | (((U32)_aColorSep[1]) << 8) | (((U32)_aColorSep[2]) << 16));

  GUI_FillRect(205, 20, 285, 99);

}

/*********************************************************************

*       _OnValueChanged*/

static void _OnValueChanged(WM_HWIN hDlg, int Id) {

  unsigned Index, v;

  WM_HWIN hSlider, hEdit;

  if ((Id >= GUI_ID_SLIDER0) && (Id <= GUI_ID_SLIDER2)) {

    Index = Id - GUI_ID_SLIDER0;

    /* SLIDER-widget has changed, update EDIT-widget */

    hSlider = WM_GetDialogItem(hDlg, GUI_ID_SLIDER0 + Index);

    hEdit   = WM_GetDialogItem(hDlg, GUI_ID_EDIT0 + Index);

    v = SLIDER_GetValue(hSlider);

    EDIT_SetValue(hEdit, v);

  } else if ((Id >= GUI_ID_EDIT0) && (Id <= GUI_ID_EDIT2)) {

    Index = Id - GUI_ID_EDIT0;

    /* If EDIT-widget has changed, update SLIDER-widget */

    hSlider = WM_GetDialogItem(hDlg, GUI_ID_SLIDER0 + Index);

    hEdit   = WM_GetDialogItem(hDlg, GUI_ID_EDIT0 + Index);

    v = EDIT_GetValue(hEdit);

    SLIDER_SetValue(hSlider, v);

  }

  _aColorSep[Index] = v;

  /* At last invalidate dialog client window */

  WM_InvalidateWindow(WM_GetClientWindow(hDlg));

}

/*********************************************************************

*       Dialog callback routine*/

static void _cbCallback(WM_MESSAGE * pMsg) {

  int i;

  int NCode, Id;

  WM_HWIN hDlg, hItem;

  hDlg = pMsg->hWin;

  switch (pMsg->MsgId) {

    case WM_PAINT:

      _OnPaint(hDlg);

      return;

    case WM_INIT_DIALOG:

      for (i = 0; i < 3; i++) {

        hItem = WM_GetDialogItem(hDlg, GUI_ID_SLIDER0 + i);

        SLIDER_SetRange(hItem, 0, 255);

        SLIDER_SetValue(hItem, _aColorSep[i]);

        /* Init EDIT-widgets */

        hItem = WM_GetDialogItem(hDlg, GUI_ID_EDIT0 + i);

        EDIT_SetDecMode(hItem, _aColorSep[i],   0, 255, 0, 0);

      }

      break;

    case WM_KEY:

      switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) {

        case GUI_ID_ESCAPE:

          GUI_EndDialog(hDlg, 1);

          break;

        case GUI_ID_ENTER:

          GUI_EndDialog(hDlg, 0);

          break;

      }

      break;

    case WM_NOTIFY_PARENT:

      Id    = WM_GetId(pMsg->hWinSrc);      /* Id of widget */

      NCode = pMsg->Data.v;                 /* Notification code */

      switch (NCode) {

        case WM_NOTIFICATION_RELEASED:      /* React only if released */

          if (Id == GUI_ID_OK) {            /* OK Button */

            GUI_EndDialog(hDlg, 0);

          }

          if (Id == GUI_ID_CANCEL) {        /* Cancel Button */

            GUI_EndDialog(hDlg, 1);

          }

          break;

        case WM_NOTIFICATION_VALUE_CHANGED: /* Value has changed */

          _OnValueChanged(hDlg, Id);

          break;

      }

      break;

    default:

      WM_DefaultProc(pMsg);

  }

}

/*********************************************************************

*       main

*********************************************************************/

void Dialog_SliderClolor(void) {

  GUI_Clear();

  WM_SetDesktopColor(GUI_RED);      /* Automacally update desktop window */

  WM_SetCreateFlags(WM_CF_MEMDEV);  /* Use memory devices on all windows to avoid flicker */

  GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);

}

######################################################################

GUIDEMO_Touch.c

#####################################################################

----------------------------------------------------------------------

File        : GUIDEMO_Touch

Purpose     : Touch demo

---------------------------END-OF-HEADER----------------------------*/

#include "GUI.h"

#include "LCD_ConfDefaults.h"      /* valid LCD configuration */

//#include "GUIDEMO.h"

#include "Button.h"

#include "Edit.h"

#if (GUI_WINSUPPORT && GUI_SUPPORT_TOUCH)

#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_TOUCH_tState 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_TOUCH_tState 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_TOUCH_tState 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_TOUCH_tState 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_TOUCH_tState StateLast;

    GUI_TOUCH_tState 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.*/

#if (LCD_XSIZE == 320) && (LCD_YSIZE == 240)

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', 'Q'

                        ,0, 'Z', 'X', 'C', 'V', 'B', 'N', 'M', ' ', ' ', ' '

                        ,' ', ' ', ' ', ' ', ' ', 0, 0

};

int _ExecKeyboard(void) {

  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_SetColor(GUI_WHITE); 

  GUI_Clear();

//  GUI_DrawBitmap(&bmMicriumLogoWRed, 5, 5);

  GUI_SetFont(&GUI_Font16B_1);

  GUI_DispStringInRect("uC/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 = WaitKey();

    switch (Key) {

    case 0:

    case GUI_ID_CANCEL:

     break;

    default:

      EDIT_AddKey(hEdit, Key);

    }

  } while ((Key != 'N') && (Key!=GUI_ID_CANCEL) && (Key!=0));

  /* Cleanup */

  for (i=0; i< countof(ahButton); i++) {

    BUTTON_Delete(ahButton[i]);

  }

  BUTTON_Delete(hButtonESC);

  EDIT_Delete(hEdit);

  return Key;

}

#else

static char _acText[] = {

  '7','8','9','/',

  '4','5','6','*',

  '1','2','3','-',

  '0',',','+','=',0

};

int _ExecKeyboard(void) {

  int y0 = 75;

  int XSize = LCD_GetXSize();

  int YSize = LCD_GetYSize();

  int XStep = XSize / 4;

  int YStep = (YSize - y0) / 4;

  int i;

  int Key;

  BUTTON_Handle ahButton[16];

  BUTTON_Handle hButtonESC;

  EDIT_Handle   hEdit;

  GUI_RECT rText = {0};

  rText.x1 = LCD_GetXSize() - 3;

  rText.y1 = 15;

  GUI_SetBkColor(GUI_RED); 

  GUI_Clear();

  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; _acText[i]; i++) {

    int XPos = (i%4) * XStep + 3;

    int YPos = (i/4) * YStep + 3 + y0;

    char c = _acText[i];

    int Id = c ? c : 1;

    char ac[2] = {0};

    char *s= ac;

    ac[0] = c;

    ahButton[i] = BUTTON_Create( XPos, YPos, XStep - 5, YStep - 5, Id, BUTTON_CF_SHOW );

    BUTTON_SetText(ahButton[i], s);

    BUTTON_EnableMemdev(ahButton[i]);

  }

  hButtonESC = BUTTON_Create( 3, 3, 80, 25, GUI_ID_CANCEL, BUTTON_CF_SHOW );

  BUTTON_SetText(hButtonESC, "ESC");

  hEdit = EDIT_Create( 5, y0 - 30, XSize - 10, 25, ' ', 80, 0 );

  EDIT_SetFont(hEdit, &GUI_Font8x16);

  /* Handle Keyboard until ESC or ENTER is pressed */

  do {

    Key = WaitKey();

    switch (Key) {

    case 0:

    case GUI_ID_CANCEL:

     break;

    default:

      EDIT_AddKey(hEdit, Key);

    }

  } while ((Key != 'N') && (Key!=GUI_ID_CANCEL) && (Key!=0));

  /* Cleanup */

  for (i=0; i< countof(ahButton); i++) {

    BUTTON_Delete(ahButton[i]);

  }

  BUTTON_Delete(hButtonESC);

  EDIT_Delete(hEdit);

  return Key;

}

#endif

//**********************************************************************

//*              USER_Task

//**********************************************************************

//#if GUIDEMO_LARGE

//void GUIDEMO_Touch(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;

//  GUIDEMO_NotifyStartNext();

//  GUIDEMO_HideInfoWin();

//  do {

//    GUI_RECT rText;/*= {0, 80, XSize, 120};*/

//    BUTTON_Handle ahButton[3];

//    rText.x0=0;

//    rText.y0=60;

//    rText.x1=XSize;

//    rText.y1=100;

//    GUI_SetBkColor(GUI_BLUE);

//    GUI_Clear();

//    GUI_DrawBitmap(&bmMicriumLogo, (XSize - 1 - bmMicriumLogo.XSize) / 2, 15);

//    GUI_SetFont(&GUI_Font24B_1);

//    GUI_DispStringInRect("/GUI Touch screen demo", &rText, GUI_TA_HCENTER | GUI_TA_VCENTER);

//  GUI_SetFont(&GUI_Font16B_1);

//  ahButton[0] =  BUTTON_Create( XMid - 50, YMid - 20, 100, 50, ID_CALIBRATE,BUTTON_CF_SHOW );

//    ahButton[1] =  BUTTON_Create( XMid - 90, YMid + 40, 80, 30, ID_KEYBOARD, BUTTON_CF_SHOW );

//    ahButton[2] =  BUTTON_Create( XMid + 10, YMid + 40, 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 = WaitKey();

//    if (r==0) {

//      r = ID_KEYBOARD;

//      BUTTON_SetState(ahButton[1],BUTTON_STATE_PRESSED);

//      GUIDEMO_Delay(500);

//    }

//    for (i=0; i< countof(ahButton); i++) {

//      BUTTON_Delete(ahButton[i]);

//    }

//    switch (r) {

//    case ID_KEYBOARD:  r= _ExecKeyboard(); break;

//    case ID_CALIBRATE: _ExecCalibration(); break;

//    case ID_TESTCAL:   _TestCalibration(); break;

//    }

//  } while (r && (r!='n') && (r!='N'));

//}

//

//#else

//

//void GUIDEMO_Touch(void) {}

//

//#endif

//

//#else

//

//void GUIDEMO_Touch(void) {} /* avoid empty object files */

//

#endif /* #if GUI_WINSUPPORT */

#############################################################

MEMDEV_AutoDev.c

############################################################

----------------------------------------------------------------------

File        : MEMDEV_AutoDev.c

Purpose     : Example demonstrating the use of GUI_AUTODEV-objects

--------------------------------------------------------------------*/

#include "gui.h"

#include <math.h>

#include <stddef.h>

#include "44blib.h"

#include  "WM.H"

#define countof(Obj) (sizeof(Obj)/sizeof(Obj[0]))

#define DEG2RAD      (3.1415926f/180)

/*******************************************************************

*                       Scale bitmap

*******************************************************************/

/*int hMem;

static void MemDev(void)

{

GUI_meMDEV_handle hMem;

hMem=GUI_MEMDEV_Create(0,0,110,18);

GUI_MEMDEV_Select(hMem);

GUI_DispStringAt("Memmory Device",0,0);

GUI_MEMDEV_CopyToLCD(hMem);

GUI_MEMDEV_Select(0);

GUI_MEMDEV_Select(0);

GUI_Delay(1000);

GUI_Clear();

}*/

static const GUI_COLOR ColorsScaleR140[] = {

  0x000000,0x00AA00,0xFFFFFF,0x0000AA,

  0x00FF00,0xAEAEAE,0x737373,0xD3D3D3,

  0xDFDFDF,0xBBDFBB,0x6161DF,0x61DF61,

  0xBBBBDF,0xC7C7C7,0x616193

};

static const GUI_LOGPALETTE PalScaleR140 = {

  15,   /* number of entries */

  0,    /* No transparency */

  &ColorsScaleR140[0]

};

static const unsigned char acScaleR140[] = {

  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x55, 0x55, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x85, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

};

static const GUI_BITMAP bmScaleR140 = {

 200,          /* XSize */

 73,           /* YSize */

 100,          /* BytesPerLine */

 4,            /* BitsPerPixel */

 acScaleR140,  /* Pointer to picture data (indices) */

 &PalScaleR140 /* Pointer to palette */

};

/*******************************************************************

*                    Shape of polygon

*******************************************************************/

#define MAG 3

static const GUI_POINT aNeedle[] = {

  { MAG * ( 0), MAG * (  0 + 125)},

  { MAG * (-3), MAG * (-15 + 125)},

  { MAG * (-3), MAG * (-65 + 125)},

  { MAG * ( 3), MAG * (-65 + 125)},

  { MAG * ( 3), MAG * (-15 + 125)},

};

/*******************************************************************

*      Structure containing information for drawing routine

*******************************************************************/

typedef struct {

  /* Information about what has to be displayed */

  GUI_AUTODEV_INFO AutoDevInfo;

  /* Polygon data */

  GUI_POINT aPoints[7];

  float Angle;

} PARAM;

/*******************************************************************

*                     GetAngle

********************************************************************

This routine returns the value value to indicate. In a real application,

this value would somehow be measured.*/

static float GetAngle(int tDiff) {

  if (tDiff < 15000) {

    return  225 - 0.006 * tDiff ;

  }

  tDiff -= 15000;

  if (tDiff < 7500) {

    return  225 - 90 + 0.012 * tDiff ;

  }

  tDiff -= 7000;

  return 225;

}

/*******************************************************************

*                     Drawing routine

********************************************************************/

static void Draw(void * p) {

  PARAM * pParam = (PARAM *)p;

  /* Fixed background */

  if (pParam->AutoDevInfo.DrawFixed) {

    GUI_ClearRect (60, 50 + bmScaleR140.YSize, 60 + bmScaleR140.XSize - 1, 150);

    GUI_DrawBitmap(&bmScaleR140, 60, 50);

  }

  /* Moving needle */

  GUI_SetColor(GUI_WHITE);

  GUI_AA_FillPolygon(pParam->aPoints, countof(aNeedle), MAG * 160, MAG * 190);

  /* Fixed foreground */

  if (pParam->AutoDevInfo.DrawFixed) {

    GUI_SetTextMode(GUI_TM_TRANS);

    GUI_SetColor(GUI_RED);

    GUI_SetFont(&GUI_Font24B_ASCII);

    GUI_DispStringHCenterAt("RPM / 1000", 160, 110);

  }

}

/*******************************************************************

*  Shows a scale with a needle using a banding memory device

*******************************************************************/

void DemoScale(void) {

  int Cnt=0;

  int tDiff=0;

  PARAM Param;            /* Parameters for drawing routine */

  GUI_AUTODEV AutoDev;    /* Object for banding memory device */

  /* Show message */

  GUI_SetColor(GUI_WHITE);

  GUI_SetBkColor(GUI_BLACK);

  GUI_Clear();

  GUI_SetFont(&GUI_Font8x16);

  GUI_DispStringHCenterAt("Scale using GUI_AUTODEV-object", 160, 0);

  /* Enable high resolution for antialiasing */

  GUI_AA_EnableHiRes();

  GUI_AA_SetFactor(MAG);

  /* Create GUI_AUTODEV-object */

  GUI_MEMDEV_CreateAuto(&AutoDev);

while (tDiff < 3600)

    {

    Param.Angle = (tDiff)* DEG2RAD;

    GUI_RotatePolygon(Param.aPoints, aNeedle, countof(aNeedle), Param.Angle);

    GUI_MEMDEV_DrawAuto(&AutoDev, &Param.AutoDevInfo, &Draw, &Param);

    Cnt++;

    tDiff+=20;

    }

  /* Display milliseconds / picture */

  GUI_SetColor(GUI_WHITE);

  GUI_SetFont(&GUI_Font8x16);

  GUI_DispStringHCenterAt("Milliseconds / picture:", 160, 180);

  GUI_SetTextAlign(GUI_TA_CENTER);

  GUI_SetTextMode(GUI_TM_NORMAL);

  GUI_DispNextLine();

  GUI_GotoX(160);

  GUI_DispFloatMin((float)tDiff / (float)Cnt, 2);

  /* Delete GUI_AUTODEV-object */

  GUI_MEMDEV_DeleteAuto(&AutoDev);

}

##########################################################

MEMDEV_Banding.c

#########################################################

----------------------------------------------------------------------

File        : MEMDEV_Banding.c

Purpose     : Example demonstrating the use of banding memory devices

--------------------------------------------------------------------*/

#include "gui.h"

#include <math.h>

#include "44blib.h"

U8 Time_Flag=0;

extern int nsec,nmin,nhour,nyear,nmonth,nday,nweekday;

#define Clock_CenterX 510

#define Clock_CenterY 119

extern const GUI_BITMAP bmtwins;

extern const GUI_BITMAP bmbf;

int left=0,kl=0,ml=0,mn=0,klh=0;

unsigned char dir=1;

#define SIZE_OF_ARRAY(Array) (sizeof(Array) / sizeof(Array[0]))

static const GUI_POINT Hour_Polygon[] = {

  {-3,  0},

  {-3, 50},

  { 0 , 70},

  { 3, 50},

  { 3,  0},

 

};

static const GUI_POINT Min_Polygon[] = {

  {-3,  0},

  {-3, 60},

  { 0 ,100},

  { 3, 60},

  { 3,  0},

};

static const GUI_POINT Sec_Polygon[] = {

  {0,  0},

  {0, 115},

 // { 0 , 119},

  { 2, 115},

  { 2,  0},

};

typedef struct {

  GUI_POINT Hour_PolygonDes[5];

  GUI_POINT Min_PolygonDes[5];

  GUI_POINT Sec_PolygonDes[5];

}Time_Struct;

void Disp_TimeAd(void)

{

     GUI_ClearRect(100,0,500,40);

      GUI_SetFont(&GUI_Font16B_ASCII);

     GUI_SetColor(GUI_RED);

     GUI_DispStringAt(":       :", 118,0);

     GUI_DispDecAt(nhour,100,0,2);

     GUI_DispDecAt(nmin, 130,0,2);

     GUI_DispDecAt(nsec, 160,0,2);

     GUI_SetColor(GUI_BLUE);

     GUI_DispStringAt("/       /",218,0);

     GUI_DispDecAt(nyear,  200,0,2);

     GUI_DispDecAt(nmonth, 230,0,2);

     GUI_DispDecAt(nday,   260,0,2);     

 }

void Disp_TimeDigital(void)

{

     GUI_SetColor(GUI_RED);

     GUI_SetFont(&GUI_FontD24x32);

     GUI_DispStringAt(":  :", 110,50);

     GUI_DispDecAt(nhour,60,50,2);

     GUI_DispDecAt(nmin, 130,50,2);

     GUI_DispDecAt(nsec, 200,50,2);

     GUI_SetFont(&GUI_Font32B_ASCII);

     GUI_SetColor(GUI_BLUE);

     GUI_DispStringAt("/     /", 100,100);

     GUI_DispDecAt(nyear,  65,100,2);

     GUI_DispDecAt(nmonth, 110,100,2);

     GUI_DispDecAt(nday,   160,100,2);

     GUI_DispDecAt(nweekday,235,100,1);

    

 }

void Draw_TimeScale(void)   //绘制表盘,共12,带显示修正

{ U16 i=0,x=Clock_CenterX, y=Clock_CenterY;

  int c=0;

  GUI_SetColor(GUI_GREEN);

  GUI_SetFont(&GUI_Font8x8);

  for (i=0;i<12;i++)

      {

      float o=(180-i*30)*0.0174532;

     // i%3==0?  GUI_SetFont(&GUI_Font16B_ASCII):GUI_SetFont(&GUI_Font8x8);

      x= i>=6? (x-2) : x ;

      if (c==0)           GUI_DispDecAt(12,x-6+100*sin(o),y+110*cos(o),2);

      if (c>0&&c<=9)      GUI_DispDecAt(c,x+100*sin(o),y-2+110*cos(o),1);

      if (c>9)            GUI_DispDecAt(c,x+100*sin(o),y+110*cos(o),2);

      c++;

      }

  }  

static void DrawIt(void * pData) {

  Time_Struct * nTime_Struct = (Time_Struct *)pData;

  GUI_Clear();

  GUI_AA_SetFactor(6);

  GUI_SetColor(GUI_GREEN);

  GUI_AA_FillPolygon(nTime_Struct->Hour_PolygonDes,  SIZE_OF_ARRAY(Hour_Polygon),  Clock_CenterX, Clock_CenterY);

  GUI_SetColor(GUI_GREEN);

  GUI_AA_FillPolygon(nTime_Struct->Min_PolygonDes,   SIZE_OF_ARRAY(Min_Polygon),    Clock_CenterX, Clock_CenterY);

   Disp_TimeDigital(); 

  GUI_SetColor(GUI_RED);

  GUI_AA_FillPolygon(nTime_Struct->Sec_PolygonDes,   SIZE_OF_ARRAY(Sec_Polygon),    Clock_CenterX, Clock_CenterY);

  GUI_SetColor(GUI_BLUE);

  GUI_DrawCircle(Clock_CenterX,Clock_CenterY,119);

  GUI_SetTextMode(GUI_TM_TRANS);

  Draw_TimeScale();

 ml++;

 if (ml>=10){

            ml=0;

            if(mn>=280) {

                        mn=280;

                        dir=0;

                        }

            if(mn<=1)   {

                        mn=1;

                        dir=1;

                        }           

            if(dir==1) mn++;

            if(dir==0) mn--;

                      

 }

  GUI_DrawBitmap(&bmtwins,mn,150);

 GUI_SetFont(&GUI_FontHZ12);

  //GUI_SetFont(&GUI_Font_HZK16); 

  GUI_DispStringAt("使用uCOS IIuCGUI制作的时钟,操作系统创建3个任务",0,0);

  GUI_DispStringAt("uCGUI旋转3个多边形、绘制表盘,6倍多边形抗锯齿特效",0,14);

  GUI_DispStringAt("触摸屏调整时间,存储机制、全屏无闪烁显示移动图片",0,28);

  if (kl>=30000){

                kl=0;

                klh++;

                if (klh>=3000)

                    {

                    klh=0;

                   

                    }

                }

  GUI_DispDecAt(kl++,140,200,5);

  GUI_DispDecAt(klh,80,200,5);

 

  GUI_SetColor(GUI_BLUE);

  GUI_DispStringAt("星期",200,111);

  GUI_SetColor(GUI_GREEN);

}

void Sec(void) {

     Time_Struct   DrawItContext;

     float Angle_Hour =(180-30*nhour-nmin/2) * 0.017453292;

     float Angle_Min = (180-6*(nmin)) * 0.017453292;

     float Angle_Sec = (180-6*nsec) * 0.017453292;//3.1415926 / 60;    

     GUI_RotatePolygon(DrawItContext.Hour_PolygonDes, Hour_Polygon, SIZE_OF_ARRAY(Hour_Polygon), Angle_Hour);

     GUI_RotatePolygon(DrawItContext.Min_PolygonDes,  Min_Polygon,  SIZE_OF_ARRAY(Min_Polygon),  Angle_Min);

     GUI_RotatePolygon(DrawItContext.Sec_PolygonDes,  Sec_Polygon,  SIZE_OF_ARRAY(Sec_Polygon),  Angle_Sec);   

     {   

      GUI_RECT Rect = {0, 0, 640,240};

      GUI_MEMDEV_Draw(&Rect, &DrawIt, &DrawItContext, 0, 0);

     }

 }

/*static const GUI_POINT aPoints[] = {

  {-50,  0},

  {-10, 10},

  {  0, 50},

  { 10, 10},

  { 50,  0},

  { 10,-10},

  {  0,-50},

  {-10,-10}

};

#define SIZE_OF_ARRAY(Array) (sizeof(Array) / sizeof(Array[0]))

typedef struct {

  int XPos_Poly, YPos_Poly;

  int XPos_Text, YPos_Text;

  GUI_POINT aPointsDest[8];

} tDrawItContext;

static void DrawIt(void * pData) {

  tDrawItContext * pDrawItContext = (tDrawItContext *)pData;

  GUI_Clear();

  GUI_SetFont(&GUI_Font8x8);

  GUI_SetTextMode(GUI_TM_TRANS);

  GUI_SetColor(GUI_GREEN);

  GUI_FillRect(pDrawItContext->XPos_Text,

               pDrawItContext->YPos_Text - 25,

               pDrawItContext->XPos_Text + 100,

               pDrawItContext->YPos_Text - 5); 

  GUI_SetColor(GUI_BLUE);

  GUI_FillPolygon(pDrawItContext->aPointsDest, SIZE_OF_ARRAY(aPoints), 160, 120);

  GUI_SetColor(GUI_RED);

  GUI_FillRect(220 - pDrawItContext->XPos_Text,

               pDrawItContext->YPos_Text + 5,

               220 - pDrawItContext->XPos_Text + 100,

               pDrawItContext->YPos_Text + 25);

}

#define USE_BANDING_MEMDEV 1

void DemoBandingMemdev(void) {

  int i;

  int XSize = LCD_GET_XSIZE();

  int YSize = LCD_GET_YSIZE();

  tDrawItContext DrawItContext;

  GUI_SetFont(&GUI_Font8x9);

  GUI_SetColor(GUI_WHITE);

  GUI_DispStringHCenterAt("Banding memory device/nwithout flickering",

                          XSize / 2, 40);

  DrawItContext.XPos_Poly = XSize / 2;

  DrawItContext.YPos_Poly = YSize / 2;

  DrawItContext.YPos_Text = YSize / 2 - 4;

 

  for (i = 0; i < (XSize - 100); i++) {

    float angle = i * 3.1415926 / 60;

    DrawItContext.XPos_Text = i/3;

    // Rotate the polygon

    GUI_RotatePolygon(DrawItContext.aPointsDest,

                      aPoints,

                      SIZE_OF_ARRAY(aPoints), angle);

    #if USE_BANDING_MEMDEV

    {

      GUI_RECT Rect = {0, 70, 320,170};

      // Use banding memory device for drawing

      GUI_MEMDEV_Draw(&Rect, &DrawIt, &DrawItContext, 0, 0);

    }

    #else    

      DrawIt((void *)&DrawItContext);

    #endif

    #ifdef WIN32

      GUI_Delay(20);

    #endif

    if (GetKey()!=0xff)

        return;

  }

}*/

######################################################################

MEMDEV_DrawGraph.c

######################################################################

----------------------------------------------------------------------

File        : MEMDEV_DrawGraph.c

Purpose     : Example for drawing graphs

--------------------------------------------------------------------*/

#include "gui.h"

#include "LCD_ConfDefaults.h"

#include <math.h>

#include <stdlib.h>

#include "44blib.h"

/*******************************************************************

*      Structure containing information for drawing routine

******************************************************************/

typedef struct {

  I16 *aY;

} PARAM;

/*******************************************************************

*                    Defines

********************************************************************/

#define YSIZE   (LCD_YSIZE - 100)

#define DEG2RAD (3.1415926f / 180)

#if LCD_BITSPERPIXEL == 1

  #define COLOR_GRAPH0 GUI_WHITE

  #define COLOR_GRAPH1 GUI_WHITE

#else

  #define COLOR_GRAPH0 GUI_GREEN

  #define COLOR_GRAPH1 GUI_YELLOW

#endif

/*******************************************************************

*                    Draws the graph area

*******************************************************************/

static void Draw(void * p) {

  int i;

  PARAM * pParam = (PARAM *)p;

  GUI_SetBkColor(GUI_BLACK);

  GUI_SetColor(GUI_DARKGRAY);

  GUI_ClearRect(19, (LCD_YSIZE - 20) - YSIZE, (LCD_XSIZE - 2), (LCD_YSIZE - 21));

  for (i = 0; i < (YSIZE / 2); i += 20) {

    GUI_DrawHLine((LCD_YSIZE - 20) - (YSIZE / 2) + i, 19, (LCD_XSIZE - 2));

    if (i) {

      GUI_DrawHLine((LCD_YSIZE - 20) - (YSIZE / 2) - i, 19, (LCD_XSIZE - 2));

    }

  }

  for (i = 40; i < (LCD_XSIZE - 20); i += 40) {

    GUI_DrawVLine(18 + i, (LCD_YSIZE - 20) - YSIZE, (LCD_YSIZE - 21));

  }

  GUI_SetColor(COLOR_GRAPH0);

  GUI_DrawGraph(pParam->aY, (LCD_XSIZE - 20), 19, (LCD_YSIZE - 20) - YSIZE);

}

static void Draw2(void * p) {

  PARAM * pParam = (PARAM *)p;

  Draw(p);

  GUI_SetColor(COLOR_GRAPH1);

  GUI_DrawGraph(pParam->aY+15, (LCD_XSIZE - 20), 19, (LCD_YSIZE - 20) - YSIZE);

}

/*******************************************************************

*                    Labels the x & y-axis

********************************************************************/

static void Label(void) {

  int x, y;

  GUI_SetBkColor(GUI_RED);

  GUI_Clear();

  GUI_SetPenSize(1);

  GUI_ClearRect(0, (LCD_YSIZE - 21) - YSIZE, (LCD_XSIZE - 1), (LCD_YSIZE - 1));

  GUI_DrawRect(18, (LCD_YSIZE - 21) - YSIZE, (LCD_XSIZE - 1), (LCD_YSIZE - 20));

  GUI_SetFont(&GUI_Font6x8);

  for (x = 0; x < (LCD_XSIZE - 20); x += 40) {

    int xPos = x + 18;

    GUI_DrawVLine(xPos, (LCD_YSIZE - 20), (LCD_YSIZE - 14));

    GUI_DispDecAt(x / 40, xPos - 2, (LCD_YSIZE - 9), 1);

  }

  for (y = 0; y < YSIZE / 2; y += 20) {

    int yPos = (LCD_YSIZE - 20) - YSIZE / 2 + y;

    GUI_DrawHLine(yPos, 13, 18);

    if (y) {

      GUI_GotoXY(1, yPos - 4);

      GUI_DispSDec(-y / 20, 2);

      yPos = (LCD_YSIZE - 20) - YSIZE / 2 - y;

      GUI_DrawHLine(yPos, 13, 18);

      GUI_GotoXY(1, yPos - 4);

      GUI_DispSDec(y / 20, 2);

    } else {

      GUI_DispCharAt('0', 7, yPos - 4);

    }

  }

}

/******************************************************************

*               Draws random data

********************************************************************/

static void GetRandomData(I16 * paY, int Time, int n) {

  int aDiff, i;

  if (Time > 5000)

    Time -= 5000;

  if (Time > 2500)

    Time = 5000 - Time;

  Time /= 200;

  aDiff = Time * Time + 1;

  for (i = 0; i < n; i++) {

    if (!i) {

      paY[i] = rand() % YSIZE;

    } else {

      I16 yNew;

      int yD = aDiff - (rand() % aDiff);

      if (rand() & 1) {

        yNew = paY[i-1] + yD;

      } else {

        yNew = paY[i-1] - yD;

      }

      if (yNew > YSIZE) {

        yNew -= yD;

      } else { if (yNew < 0)

        yNew += yD;

      }

      paY[i] = yNew;

    }

  }

}

static void DemoRandomGraph(void) {

  PARAM Param;

  int tDiff, t0;

  GUI_RECT Rect = {19, (LCD_YSIZE - 20) - YSIZE, (LCD_XSIZE - 2), (LCD_YSIZE - 21)};

  GUI_HMEM hMem = GUI_ALLOC_Alloc((LCD_XSIZE - 20) * sizeof(I16));

  GUI_SetColor(GUI_WHITE);

  GUI_SetBkColor(GUI_RED);

  GUI_ClearRect(0, 0, LCD_XSIZE, 60);

  GUI_SetFont(&GUI_Font_HZK16);

  GUI_DispStringAt("随机波形", 10, 20);

  Param.aY = GUI_ALLOC_h2p(hMem);

  GUI_SetFont(&GUI_Font6x8);

  t0 = GUI_GetTime();

  while((tDiff = (GUI_GetTime() - t0)) < 10000) {

    int t1, tDiff2;

    GetRandomData(Param.aY, tDiff, (LCD_XSIZE - 20));

    t1 = GUI_GetTime();

    GUI_MEMDEV_Draw(&Rect, Draw, &Param, 0, 0);

    tDiff2 = GUI_GetTime() - t1;

    if (tDiff2 < 100) {

      GUI_Delay(100 - tDiff2);

      if (GetKey()!=0xff)

        break;

    }

  }

  GUI_ALLOC_Free(hMem);

}

/*******************************************************************

*               Draws a sine wave

*******************************************************************/

static void GetSineData(I16 * paY, int n) {

  int i;

  for (i = 0; i < n; i++) {

    float s = sin(i * DEG2RAD * 4);

    paY[i] = s * YSIZE / 2 + YSIZE / 2;

  }

}

static void DemoSineWave(void) {

  PARAM Param;

  I16 * pStart;

  int t0, Cnt = 0;

  GUI_RECT Rect = {19, (LCD_YSIZE - 20) - YSIZE, (LCD_XSIZE - 2), (LCD_YSIZE - 21)};

  GUI_HMEM hMem = GUI_ALLOC_Alloc(405 * sizeof(I16));

  GUI_SetColor(GUI_WHITE);

  GUI_SetBkColor(GUI_RED);

  GUI_ClearRect(0, 0, LCD_XSIZE, 60);

  GUI_SetFont(&GUI_Font_HZK16);

  GUI_DispStringAt("正弦波", 10, 20);

  pStart = GUI_ALLOC_h2p(hMem);

  GetSineData(pStart, 405);

  GUI_SetFont(&GUI_Font6x8);

  t0 = GUI_GetTime();

  while((GUI_GetTime() - t0) < 10000) {

    int t1, tDiff2;

    if (Cnt++ % 90) {

      Param.aY++;

    } else {

      Param.aY = pStart;

    }

    t1 = GUI_GetTime();

    GUI_MEMDEV_Draw(&Rect, Draw2, &Param, 0, 0);

    tDiff2 = GUI_GetTime() - t1;

    if (tDiff2 < 100) {

      GUI_Delay(100 - tDiff2);

      if (GetKey()!=0xff)

        break;

    }

  }

  GUI_ALLOC_Free(hMem);

}

/*******************************************************************

*               Adds several waves

*******************************************************************/

static void DrawOrData(GUI_COLOR Color, I16 * paY) {

  GUI_SetColor(Color);

  GUI_DrawGraph(paY, (LCD_XSIZE - 20), 19, (LCD_YSIZE - 20) - YSIZE);

}

static void DemoOrData(void) {

  int i;

  PARAM Param;

  GUI_RECT Rect = {19, (LCD_YSIZE - 20) - YSIZE, (LCD_XSIZE - 2), (LCD_YSIZE - 21)};

  GUI_HMEM hMem = GUI_ALLOC_Alloc(405 * sizeof(I16));

  GUI_SetColor(GUI_WHITE);

  GUI_SetBkColor(GUI_RED);

  GUI_ClearRect(0, 0, LCD_XSIZE, 60);

  GUI_SetFont(&GUI_Font_HZK16);

  GUI_DispStringAt("叠加波形",0,20);

  Param.aY = GUI_ALLOC_h2p(hMem);

  GetSineData(Param.aY, 405);

  GUI_MEMDEV_Draw(&Rect, Draw, &Param, 0, 0);

  for (i = 0; (i < 90); i++) {

    DrawOrData(GUI_GREEN, ++Param.aY);

    GUI_Delay(10);

  }

  GUI_ALLOC_Free(hMem);

}

/*******************************************************************

*               main

********************************************************************/

void Demo_DrawGraph(void) {

  GUI_Init();

  GUI_MEMDEV_Load();

  Label();

  DemoRandomGraph();

  DemoSineWave();

  DemoOrData();

}

###################################################################

WIDGET_ListBox.c

##################################################################

----------------------------------------------------------------------

File        : WIDGET_ListBox.c

Purpose     : Example demonstrating the LISTBOX widget

--------------------------------------------------------------------*/

#include "gui.H"

#include "framewin.h"

#include "listbox.h"

#include <stddef.h>

#include "44blib.h"

const GUI_ConstString ListBox[] = {

  "English", "Deutsch", "Franis", "Japanese", "Italiano", NULL

};

#define countof(Array) (sizeof(Array) / sizeof(Array[0]))

/*******************************************************************

*               Uses only the LISTBOX widget

*******************************************************************/

void DemoListBox(void) {

  int i;

  int Entries = countof(ListBox) - 1;

  LISTBOX_Handle hListBox;

  int ySize = GUI_GetFontSizeYOf(&GUI_Font13B_1) * Entries;

  /* Create the listbox */

  hListBox = LISTBOX_Create(ListBox, 10, 10, 120, ySize, WM_CF_SHOW);

  /* Modify listbox attributes */

  LISTBOX_SetFont(hListBox, &GUI_Font13B_1);

  LISTBOX_SetBackColor(hListBox, 0, GUI_BLUE);

  LISTBOX_SetBackColor(hListBox, 1, GUI_LIGHTBLUE);

  LISTBOX_SetTextColor(hListBox, 0, GUI_WHITE);

  LISTBOX_SetTextColor(hListBox, 1, GUI_BLACK);

  /* Change current selection of the listbox */

  for (i = 0; i < Entries - 1; i++) {

    GUI_Delay(5000);

    LISTBOX_IncSel(hListBox);

    WM_Paint(hListBox);

  }

  for (i = 0; i < Entries - 1; i++) {

    GUI_Delay(5000);

    LISTBOX_DecSel(hListBox);

    WM_Paint(hListBox);

  }

//  GUI_Delay(500);

  /* Delete listbox widget */

  LISTBOX_Delete(hListBox);

  GUI_Clear();

}

/*******************************************************************

*      Uses LISTBOX widget as child of a FRAMEWIN widget

*******************************************************************/

void DemoListBoxAsChild(void) {

  int i;

  int Entries = countof(ListBox) - 1;

  FRAMEWIN_Handle hFrame;

  LISTBOX_Handle hListBox;

  int ySize = GUI_GetFontSizeYOf(&GUI_Font13B_1) * Entries

            + GUI_GetFontSizeYOf(&GUI_Font16B_ASCII)

            + 7;

  /* Create the frame window */

  hFrame = FRAMEWIN_Create("List box", NULL, WM_CF_SHOW, 10, 10, 120, ySize);

  /* Modify frame window attributes */

  FRAMEWIN_SetFont(hFrame, &GUI_Font16B_ASCII);

  FRAMEWIN_SetTextColor(hFrame, GUI_RED);

  FRAMEWIN_SetBarColor(hFrame, 0, GUI_GREEN);

  FRAMEWIN_SetTextAlign(hFrame, GUI_TA_HCENTER);

  WM_Paint(hFrame);

  /* Create the listbox */

  hListBox = LISTBOX_CreateAsChild(ListBox, hFrame, 0, 0, 0, 0, WM_CF_SHOW);

  /* Modify listbox attributes */

  LISTBOX_SetBackColor(hListBox, 0, GUI_BLUE);

  LISTBOX_SetBackColor(hListBox, 1, GUI_LIGHTBLUE);

  LISTBOX_SetTextColor(hListBox, 0, GUI_WHITE);

  LISTBOX_SetTextColor(hListBox, 1, GUI_BLACK);

  LISTBOX_SetFont(hListBox, &GUI_Font13B_1);

  /* Change current selection of the listbox */

  for (i = 0; i < Entries - 1; i++) {

    GUI_Delay(5000);

    LISTBOX_IncSel(hListBox);

    WM_Paint(hListBox);

    }

  for (i = 0; i < Entries - 1; i++) {

    GUI_Delay(5000);

    LISTBOX_DecSel(hListBox);

    WM_Paint(hListBox);

    }

//  GUI_Delay(500);

  /* Delete listbox widget */

  LISTBOX_Delete(hListBox);

  /* Delete framewin widget */

  FRAMEWIN_Delete(hFrame);

  GUI_Clear();

}

/*******************************************************************

*             Demonstrates LISTBOX widget

*******************************************************************/

void DemoListbox(void) {

  GUI_SetBkColor(GUI_GRAY);

  GUI_Clear();

  while(1) {

    DemoListBox();

    DemoListBoxAsChild();

    if (GetKey()!=0xff)

        break;

  }

}

####################################################################

WIDGET_PhoneButton.c

####################################################################

----------------------------------------------------------------------

File        : WIDGET_PhoneButton.c

Purpose     : Example demonstrating the use of a BUTTON widget

------------------------------------------------------------------*/

#include "gui.h"

#include "button.h"

#include "44blib.h"

/*******************************************************************

*                 Bitmap data, 2 phone logos

********************************************************************/

static const GUI_COLOR Colors[] = { 0x000000, 0xFFFFFF };

static const GUI_LOGPALETTE Palette = { 2, 1, Colors };

static const unsigned char acPhone0[] = {

  ________, ________, ________, ________,

  ________, ________, ________, ________,

  ________, ________, ________, ________,

  ________, ________, ________, ________,

  ________, ________, ________, ________,

  ________, ________, ________, ________,

  ________, ________, ________, ________,

  ________, ________, ________, ________,

  ________, ________, ________, ________,

  ________, ________, ________, ________,

  ________, ________, ________, ________,

  _____XXX, XXXXXXXX, XXXXXXXX, XXX_____,

  ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,

  __XXXXXX, XXXXXXXX, XXXXXXXX, XXXXXX__,

  _XXXXXXX, X_______, _______X, XXXXXXX_,

  _XXXXXXX, X__XX___, ___XX__X, XXXXXXX_,

  _XXXXXXX, X__XX___, ___XX__X, XXXXXXX_,

  _XXXXXXX, X__XX___, ___XX__X, XXXXXXX_,

  ________, ___XX___, ___XX___, ________,

  _______X, XXXXXXXX, XXXXXXXX, X_______,

  ______XX, XXXXXXXX, XXXXXXXX, XX______,

  _____XXX, XXXX__X_, _X__XXXX, XXX_____,

  ____XXXX, XXXX__X_, _X__XXXX, XXXX____,

  ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,

  ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,

  ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,

  ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,

  ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,

  ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,

  ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,

  ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___

};

static const unsigned char acPhone1[] = {

  ______XX, X_______, ________, ________,

  ____XXXX, XXXXX___, ________, ________,

  ____XXXX, XXXXXXX_, ________, ________,

  ___XXXXX, XXXXXXXX, X_______, ________,

  ___XXXXX, XXXXXXXX, XXX_____, ________,

  _____XXX, XXXX_XXX, XXXXX___, ________,

  _______X, XXXX___X, XXXXXXX_, ________,

  ________, _XX_____, _XXXXXXX, X_______,

  ________, ________, ___XXXXX, XXX_____,

  ________, ________, _____XXX, XXXXX___,

  ________, ________, _______X, XXXXXX__,

  ________, ________, ________, XXXXXXX_,

  ________, ________, ________, XXXXXXX_,

  ________, ________, _______X, XXXXXXXX,

  ________, ________, _______X, XXXXXXXX,

  ________, ___XX___, ___XX___, _XXXXXXX,

  ________, ___XX___, ___XX___, ___XXXX_,

  ________, ___XX___, ___XX___, _____XX_,

  ________, ___XX___, ___XX___, ________,

  _______X, XXXXXXXX, XXXXXXXX, X_______,

  ______XX, XXXXXXXX, XXXXXXXX, XX______,

  _____XXX, XXXX__X_, _X__XXXX, XXX_____,

  ____XXXX, XXXX__X_, _X__XXXX, XXXX____,

  ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,

  ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,

  ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,

  ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,

  ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,

  ___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,

  ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,

  ___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___

};

static const GUI_BITMAP bm_1bpp_0 = { 32, 31, 4, 1, acPhone0, &Palette};

static const GUI_BITMAP bm_1bpp_1 = { 32, 31, 4, 1, acPhone1, &Palette};

/*******************************************************************

*            Demonstrates the use of a BUTTON widget

*******************************************************************/

void DemoButton(void) {

  BUTTON_Handle hButton;

  int Stat = 0;

  GUI_Init();

  GUI_SetFont(&GUI_Font8x16);

  GUI_DispStringHCenterAt("Click on phone button...", 160,0);

  /* Create the button */

  hButton = BUTTON_Create(142, 20, 36, 40, GUI_ID_OK, WM_CF_SHOW);

  /* Modify the button attributes */

  BUTTON_SetBkColor(hButton, 1, GUI_RED);

  BUTTON_SetBitmapEx(hButton, 0, &bm_1bpp_0, 2, 4);

  BUTTON_SetBitmapEx(hButton, 1, &bm_1bpp_1, 2, 4);

  /* Loop until button is pressed */

  while(GUI_GetKey() != GUI_ID_OK) {

    if (Stat ^= 1) {

      BUTTON_SetState(hButton,

                      BUTTON_STATE_HASFOCUS | BUTTON_STATE_INACTIVE);

    } else {

      BUTTON_SetState(hButton,

                      BUTTON_STATE_HASFOCUS | BUTTON_STATE_PRESSED);

    }

    WM_Paint(hButton);

    GUI_Delay(5000);

    if (GetKey()!=0xff)

        break;

  }

  /* Delete button object */

  BUTTON_Delete(hButton);

  GUI_Clear();

}

#############################################################

WIDGET_Progbar.c

#############################################################

----------------------------------------------------------------------

File        : WIDGET_Progbar.c

Purpose     : Simple demo shows the use of the PROGBAR widget

--------------------------------------------------------------------*/

#include "gui.h"

#include "progbar.h"

/*******************************************************************

*            Shows the use of progress bars

*******************************************************************/

static void DemoProgBar(void) {

  int i;

  PROGBAR_Handle ahProgBar[2];

  GUI_Clear();

  GUI_SetColor(GUI_WHITE);

  GUI_SetFont(&GUI_Font8x16);

  GUI_DispStringAt("Progress bar", 100,80);

  /* Create `em */ 

  ahProgBar[0] = PROGBAR_Create(100,100,100,20, WM_CF_SHOW);

  ahProgBar[1] = PROGBAR_Create( 80,150,140,10, WM_CF_SHOW);

  /* Use memory device (optional, for better looks) */

  PROGBAR_EnableMemdev(ahProgBar[0]);

  PROGBAR_EnableMemdev(ahProgBar[1]);

  GUI_Delay (1000);

  PROGBAR_SetMinMax(ahProgBar[1], 0, 500);

  while(1) {

    PROGBAR_SetFont(ahProgBar[0], &GUI_Font8x16);

    if (LCD_GetDevCap(LCD_DEVCAP_BITSPERPIXEL) <= 4) {

      PROGBAR_SetBarColor(ahProgBar[0], 0, GUI_DARKGRAY);

      PROGBAR_SetBarColor(ahProgBar[0], 1, GUI_LIGHTGRAY);

    } else {

      PROGBAR_SetBarColor(ahProgBar[0], 0, GUI_GREEN);

      PROGBAR_SetBarColor(ahProgBar[0], 1, GUI_RED);

    }

    for (i=0; i<=100; i++) {

      PROGBAR_SetValue(ahProgBar[0], i);

      PROGBAR_SetValue(ahProgBar[1], i);

      GUI_Delay(50);

      WM_Paint(ahProgBar[0]);

      WM_Paint(ahProgBar[1]);

    }

    PROGBAR_SetText(ahProgBar[0], "Tank empty");

    for (; i>=0; i--) {

      PROGBAR_SetValue(ahProgBar[0], i);

      PROGBAR_SetValue(ahProgBar[1], 200-i);

      GUI_Delay(50);

      WM_Paint(ahProgBar[0]);

      WM_Paint(ahProgBar[1]);

    }

    PROGBAR_SetText(ahProgBar[0], "Any text ...");

    PROGBAR_SetTextAlign(ahProgBar[0], GUI_TA_LEFT);

    for (; i<=100; i++) {

      PROGBAR_SetValue(ahProgBar[0], i);

      PROGBAR_SetValue(ahProgBar[1], 200+i);

      GUI_Delay(50);

      WM_Paint(ahProgBar[0]);

      WM_Paint(ahProgBar[1]);

    }

    PROGBAR_SetTextAlign(ahProgBar[0], GUI_TA_RIGHT);

    for (; i>=0; i--) {

      PROGBAR_SetValue(ahProgBar[0], i);

      PROGBAR_SetValue(ahProgBar[1], 400-i);

      GUI_Delay(50);

      WM_Paint(ahProgBar[0]);

      WM_Paint(ahProgBar[1]);

    }

    PROGBAR_SetFont(ahProgBar[0], &GUI_FontComic18B_1);

    PROGBAR_SetText(ahProgBar[0], "Any font ...");

    for (; i<=100; i++) {

      PROGBAR_SetValue(ahProgBar[0], i);

      PROGBAR_SetValue(ahProgBar[1], 400+i);

      GUI_Delay(50);

      WM_Paint(ahProgBar[0]);

      WM_Paint(ahProgBar[1]);

    }

    if (GetKey()!=0xff)

        break;

  }

  PROGBAR_DisableMemdev(ahProgBar[0]);

  PROGBAR_DisableMemdev(ahProgBar[1]);

  PROGBAR_Delete(ahProgBar[0]);

  PROGBAR_Delete(ahProgBar[1]); 

  GUI_Clear();

}

/*******************************************************************

*                 main

********************************************************************/

void Widget_Progbar(void) {

  GUI_Clear();

  DemoProgBar();

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值