*******************************************************************************
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("基于ARM和uCGUI的多通道数据采集系统,3通道10位AD转换,数据同时存储在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", "Fran鏰is", "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 II和uCGUI制作的时钟,操作系统创建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", "Fran鏰is", "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();
}