emWin任务的具体实现(在MainTask.c文件里面):
复制代码
#include "MainTask.h"
/*
*********************************************************************************************************
* 条件编译
*********************************************************************************************************
*/
#ifndef GUI_CONST_STORAGE
#define GUI_CONST_STORAGE const
#endif
/*
*********************************************************************************************************
* 位图数据
*********************************************************************************************************
*/
static GUI_CONST_STORAGE unsigned short _acpic[] = {
/* 位图数据省略,未贴出 */
}
GUI_CONST_STORAGE GUI_BITMAP bmpic = {
64, // xSize
64, // ySize
128, // BytesPerLine
16, // BitsPerPixel
(unsigned char *)_acpic, // Pointer to picture data
NULL, // Pointer to palette
GUI_DRAW_BMP565
};
static GUI_CONST_STORAGE unsigned short _acpic1[] = {
/* 位图数据省略,未贴出 */
}
GUI_CONST_STORAGE GUI_BITMAP bmpic1 = {
64, // xSize
64, // ySize
256, // BytesPerLine
32, // BitsPerPixel
(unsigned char *)_acpic1, // Pointer to picture data
NULL, // Pointer to palette
GUI_DRAW_BMP8888
};
/*
*********************************************************************************************************
* 函 数 名: MainTask
* 功能说明: GUI主函数
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void MainTask(void)
{
GUI_MEMDEV_Handle hMem0;
GUI_MEMDEV_Handle hMem1;
GUI_MEMDEV_Handle hMem2;
GUI_MEMDEV_Handle hMem3;
/* 初始化 */
GUI_Init();
/*
关于多缓冲和窗口内存设备的设置说明
1. 使能多缓冲是调用的如下函数,用户要在LCDConf_Lin_Template.c文件中配置了多缓冲,调用此函数才有效:
WM_MULTIBUF_Enable(1);
2. 窗口使能使用内存设备是调用函数:WM_SetCreateFlags(WM_CF_MEMDEV);
3. 如果emWin的配置多缓冲和窗口内存设备都支持,二选一即可,且务必优先选择使用多缓冲,实际使用
STM32F429BIT6 + 32位SDRAM + RGB565/RGB888平台测试,多缓冲可以有效的降低窗口移动或者滑动时的撕裂
感,并有效的提高流畅性,通过使能窗口使用内存设备是做不到的。
4. 所有emWin例子默认是开启三缓冲。
*/
WM_MULTIBUF_Enable(1);
/*
触摸校准函数默认是注释掉的,电阻屏需要校准,电容屏无需校准。如果用户需要校准电阻屏的话,执行
此函数即可,会将触摸校准参数保存到EEPROM里面,以后系统上电会自动从EEPROM里面加载。
*/
//TOUCH_Calibration();
/* 设置字体 */
GUI_SetFont(&GUI_Font16B_ASCII);
//////////////////////////方式一/////////////////////////////////////
/* 创建内存设备,并将RGB565格式的位图绘制到内存设备上 */
hMem0 = GUI_MEMDEV_CreateEx(0, 0, 64, 64, GUI_MEMDEV_HASTRANS);
GUI_MEMDEV_Select(hMem0);
GUI_DrawBitmap(&bmpic, 0, 0);
GUI_MEMDEV_Select(0);
/* 显示RGB565格式的位图 */
GUI_DispStringAt("This is RGB565 bitmap & GUI_MEMDEV_CreateEx", 100, 50);
GUI_MEMDEV_WriteAt(hMem0, 20, 20);
////////////////////////////方式二///////////////////////////////////
/* 创建内存设备,并将RGB565格式的位图绘制到内存设备上 */
hMem1 = GUI_MEMDEV_CreateFixed(0, 0, 64, 64, GUI_MEMDEV_HASTRANS,
GUI_MEMDEV_APILIST_16,
GUI_COLOR_CONV_565);
GUI_MEMDEV_Select(hMem1);
GUI_DrawBitmap(&bmpic, 0, 0);
GUI_MEMDEV_Select(0);
/* 显示RGB565格式的位图 */
GUI_DispStringAt("This is RGB565 bitmap & GUI_MEMDEV_CreateFixed", 100, 150);
GUI_MEMDEV_WriteAt(hMem1, 20, 120);
//////////////////////////////方式三/////////////////////////////////
/* 创建内存设备,并将ARGB8888格式的位图绘制到内存设备上 */
hMem2 = GUI_MEMDEV_CreateEx(0, 0, 64, 64, GUI_MEMDEV_HASTRANS);
GUI_MEMDEV_Select(hMem2);
GUI_DrawBitmap(&bmpic1, 0, 0);
GUI_MEMDEV_Select(0);
/* 显示ARGB8888格式的位图 */
GUI_DispStringAt("This is ARGB8888 bitmap & GUI_MEMDEV_CreateEx", 100, 250);
GUI_MEMDEV_WriteAt(hMem2, 20, 220);
////////////////////////////////方式四///////////////////////////////
/* 创建内存设备,并将ARGB8888格式的位图绘制到内存设备上 */
hMem3 = GUI_MEMDEV_CreateFixed(0, 0, 64, 64, GUI_MEMDEV_HASTRANS,
GUI_MEMDEV_APILIST_32,
GUI_COLOR_CONV_8888);
GUI_MEMDEV_Select(hMem3);
GUI_DrawBitmap(&bmpic1, 0, 0);
GUI_MEMDEV_Select(0);
/* 显示ARGB8888格式的位图 */
GUI_DispStringAt("This is ARGB8888 bitmap & GUI_MEMDEV_CreateFixed", 100, 350);
GUI_MEMDEV_WriteAt(hMem3, 20, 320);
while(1)
{
GUI_Delay(10);
}
} |