728x90
STemWin GUIBUILDER 프로그램을 이용하여 GUI 디자인을 합니다.
GUIBUILDER을 이용하여 디자인한 화면을 STM32H7 보드에 적용합니다.
프로그래밍
GUIBuilder를 이용하여 생성한 FramwinDLG.c 파일입니다.
위젯에 대한 정의를 포함합니다.
/*********************************************************************
* *
* SEGGER Microcontroller GmbH & Co. KG *
* Solutions for real time microcontroller applications *
* *
**********************************************************************
* *
* C-file generated by: *
* *
* GUI_Builder for emWin version 5.32 *
* Compiled Oct 8 2015, 11:59:02 *
* (c) 2015 Segger Microcontroller GmbH & Co. KG *
* *
**********************************************************************
* *
* Internet: www.segger.com Support: support@segger.com *
* *
**********************************************************************
*/
// USER START (Optionally insert additional includes)
// USER END
#include "DIALOG.h"
#include "gpio.h"
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
#define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
#define ID_BUTTON_0 (GUI_ID_USER + 0x01)
#define ID_BUTTON_1 (GUI_ID_USER + 0x02)
#define ID_SLIDER_0 (GUI_ID_USER + 0x03)
#define ID_TEXT_0 (GUI_ID_USER + 0x04)
#define ID_TEXT_1 (GUI_ID_USER + 0x05)
#define ID_CHECKBOX_0 (GUI_ID_USER + 0x06)
#define ID_BUTTON_2 (GUI_ID_USER + 0x07)
// USER START (Optionally insert additional defines)
// USER END
/*********************************************************************
*
* Static data
*
**********************************************************************
*/
// USER START (Optionally insert additional static data)
// USER END
/*********************************************************************
*
* _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 12, 12, 1024, 600, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "LED_1 ON", ID_BUTTON_0, 69, 160, 240, 80, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "LED_2 OFF", ID_BUTTON_1, 321, 160, 240, 80, 0, 0x0, 0 },
{ SLIDER_CreateIndirect, "Slider", ID_SLIDER_0, 196, 52, 574, 50, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "STEPPING MOTOR", ID_TEXT_0, 24, 67, 190, 42, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_1, 819, 75, 80, 20, 0, 0x64, 0 },
{ CHECKBOX_CreateIndirect, "CHECK_LED_2", ID_CHECKBOX_0, 77, 271, 160, 40, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_2, 0, 0, 80, 20, 0, 0x0, 0 },
// USER START (Optionally insert additional widgets)
// USER END
};
/*********************************************************************
*
* Static code
*
**********************************************************************
*/
/*********************************************************************
*
* FRAMEWIN_OnValueChanged
*/
static void FRAMEWIN_OnValueChanged(WM_HWIN hDlg, int Id) {
WM_HWIN hItem;
int Value;
hItem = WM_GetDialogItem(hDlg, Id);
switch (Id) {
case ID_SLIDER_0:
Value = SLIDER_GetValue(hItem);
printf("ID_SLIDER_0 # FRAMEWIN_OnValueChanged %d\r\n", Value);
WM_HWIN hItemT;
hItemT = WM_GetDialogItem(hDlg, ID_TEXT_1);
char temp[8] = { 0x00, };
sprintf(temp, "%d", Value);
TEXT_SetText(hItemT, temp);
break;
case ID_CHECKBOX_0:
Value = CHECKBOX_IsChecked(hItem);
printf("ID_CHECKBOX_0 # FRAMEWIN_OnValueChanged %d\r\n", Value);
if(Value == 1) HAL_GPIO_WritePin(LED_1_GPIO_Port, LED_1_Pin, GPIO_PIN_SET);
else HAL_GPIO_WritePin(LED_1_GPIO_Port, LED_1_Pin, GPIO_PIN_RESET);
break;
}
}
// USER START (Optionally insert additional static code)
// USER END
/*********************************************************************
*
* _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg) {
int NCode;
int Id;
// USER START (Optionally insert additional variables)
WM_HWIN hDlg;
WM_HWIN hItem;
// USER END
hDlg = pMsg->hWin;
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
//
// Initialization of 'LED_1 ON'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
BUTTON_SetFont(hItem, GUI_FONT_20_1);
//
// Initialization of 'LED_2 OFF'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
BUTTON_SetFont(hItem, GUI_FONT_20_1);
//
// Initialization of 'STEPPING MOTOR'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
TEXT_SetFont(hItem, GUI_FONT_20_1);
TEXT_SetTextColor(hItem, GUI_MAKE_COLOR(0x00FF0000));
//
// Initialization of 'Text'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_1);
TEXT_SetText(hItem, "Text");
TEXT_SetFont(hItem, GUI_FONT_20_1);
TEXT_SetTextColor(hItem, GUI_MAKE_COLOR(0x000000FF));
//
// Initialization of 'CHECK_LED_2'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_0);
CHECKBOX_SetText(hItem, "LED_2 Toggle");
CHECKBOX_SetFont(hItem, GUI_FONT_20_1);
CHECKBOX_SetTextColor(hItem, GUI_MAKE_COLOR(0x0000FF00));
// USER START (Optionally insert additional code for further widget initialization)
// USER END
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch(Id) {
case ID_BUTTON_0: // Notifications sent by 'START'
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally insert code for reacting on notification message)
printf("ID_BUTTON_0 - WM_NOTIFICATION_CLICKED\r\n");
HAL_GPIO_WritePin(LED_1_GPIO_Port, LED_1_Pin, GPIO_PIN_SET);//LED1 ON
// USER END
break;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally insert code for reacting on notification message)
printf("ID_BUTTON_0 - WM_NOTIFICATION_RELEASED\r\n");
// USER END
break;
// USER START (Optionally insert additional code for further notification handling)
// USER END
}
break;
case ID_BUTTON_1: // Notifications sent by 'STOP'
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally insert code for reacting on notification message)
printf("ID_BUTTON_1 - WM_NOTIFICATION_CLICKED\r\n");
HAL_GPIO_WritePin(LED_1_GPIO_Port, LED_1_Pin, GPIO_PIN_RESET);//LED1 ON
// USER END
break;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally insert code for reacting on notification message)
printf("ID_BUTTON_1 - WM_NOTIFICATION_RELEASED\r\n");
// USER END
break;
// USER START (Optionally insert additional code for further notification handling)
// USER END
}
break;
case ID_SLIDER_0: // Notifications sent by 'Slider'
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally insert code for reacting on notification message)
printf("ID_SLIDER_0 - WM_NOTIFICATION_CLICKED\r\n");
// USER END
break;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
case WM_NOTIFICATION_VALUE_CHANGED:
// USER START (Optionally insert code for reacting on notification message)
printf("ID_SLIDER_0 - WM_NOTIFICATION_VALUE_CHANGED\r\n");
FRAMEWIN_OnValueChanged(hDlg, Id);
// USER END
break;
// USER START (Optionally insert additional code for further notification handling)
// USER END
}
break;
case ID_CHECKBOX_0: // Notifications sent by 'CHECK_LED_2'
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
case WM_NOTIFICATION_VALUE_CHANGED:
// USER START (Optionally insert code for reacting on notification message)
printf("ID_CHECKBOX_0 - WM_NOTIFICATION_VALUE_CHANGED\r\n");
FRAMEWIN_OnValueChanged(hDlg, Id);
// USER END
break;
// USER START (Optionally insert additional code for further notification handling)
// USER END
}
break;
case ID_BUTTON_2: // Notifications sent by 'Button'
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
// USER START (Optionally insert additional code for further notification handling)
// USER END
}
break;
// USER START (Optionally insert additional code for further Ids)
// USER END
}
break;
// USER START (Optionally insert additional message handling)
// USER END
default:
WM_DefaultProc(pMsg);
break;
}
}
/*********************************************************************
*
* Public code
*
**********************************************************************
*/
/*********************************************************************
*
* CreateFramewin
*/
WM_HWIN CreateFramewin(void);
WM_HWIN CreateFramewin(void) {
WM_HWIN hWin;
hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
return hWin;
}
void TEST_MainTask()
{
while(1)
{
GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
GUI_Delay(10);
GUI_Exec();
}
}
// USER START (Optionally insert additional public code)
// USER END
/*************************** End of file ****************************/
테스트영상
주요내용은 윗글에 포함되어 있습니다.
부득이하게 설명이나 소스코드가 필요하면 구입부탁드립니다.
https://smartstore.naver.com/taklive/products/5025381977
'임베디드 보드 > STM32' 카테고리의 다른 글
STM32F4 LED Pinmap (0) | 2020.09.15 |
---|---|
Servo Motor PWM 제어 (0) | 2020.08.31 |
STemWin (0) | 2020.07.20 |
STM32H7 스테핑모터 & JOYSTICK 키 제어 (0) | 2020.07.20 |
STM32H7 JOYSTICK KEY 테스트 (0) | 2020.07.18 |