|
从本期开始逐渐的开始推出STemWin的娱乐贴,保证有可玩性,此贴可以尽情转载,在这里非常感谢大家的支持,
本版块的帖子不做回复可见处理,为的就是图个玩的开心。
本期一共分为三节
1.1 OLED介绍
1.2 移植要点(移植到armfly-v5开发板)
1.3 实验效果以及程序下载
1.1 OLED介绍
详细的资料介绍,大家可以看这里,基本都上传了http://www.armbbs.cn/forum.php?mod=viewthread&tid=196。
有个好消息是现在最新的emWin5.22版本加入了SSD1306,也就是说直接支持了这种单色屏。官方的
应该就是经过优化的,值得期待下。
1.2 移植要点
第一步:找到这个文件进行修改,只需提供两个函数,并修改一个函数就可以了,这里不做深入的优化
有兴趣的可以研究下。
第一个要修改的地方
static void _SetPixelIndex(GUI_DEVICE * pDevice, int x, int y, int PixelIndex) {
#ifdef WIN32
LCDSIM_SetPixelIndex(x, y, PixelIndex, pDevice->LayerIndex);
#else
//
// Convert logical into physical coordinates (Dep. on LCDConf.h)
//
#if (LCD_MIRROR_X == 1) || (LCD_MIRROR_Y == 1) || (LCD_SWAP_XY == 1)
int xPhys, yPhys;
xPhys = LOG2PHYS_X(x, y);
yPhys = LOG2PHYS_Y(x, y);
#else
#define xPhys x
#define yPhys y
#endif
GUI_USE_PARA(pDevice);
GUI_USE_PARA(x);
GUI_USE_PARA(y);
GUI_USE_PARA(PixelIndex);
{
/* 这里是要添加的打点函数 */
OLED_PutPixel(xPhys, yPhys, PixelIndex);
}
#if (LCD_MIRROR_X == 0) && (LCD_MIRROR_Y == 0) && (LCD_SWAP_XY == 0)
#undef xPhys
#undef yPhys
#endif
#endif
}
第二个要修改的地方
static unsigned int _GetPixelIndex(GUI_DEVICE * pDevice, int x, int y) {
unsigned int PixelIndex;
#ifdef WIN32
PixelIndex = LCDSIM_GetPixelIndex(x, y, pDevice->LayerIndex);
#else
//
// Convert logical into physical coordinates (Dep. on LCDConf.h)
//
#if (LCD_MIRROR_X == 1) || (LCD_MIRROR_Y == 1) || (LCD_SWAP_XY == 1)
int xPhys, yPhys;
xPhys = LOG2PHYS_X(x, y);
yPhys = LOG2PHYS_Y(x, y);
#else
#define xPhys x
#define yPhys y
#endif
GUI_USE_PARA(pDevice);
GUI_USE_PARA(x);
GUI_USE_PARA(y);
{
/* 这里是得到点的函数 */
PixelIndex = OLED_GetPixel(xPhys, yPhys);
}
#if (LCD_MIRROR_X == 0) && (LCD_MIRROR_Y == 0) && (LCD_SWAP_XY == 0)
#undef xPhys
#undef yPhys
#endif
#endif
return PixelIndex;
}
第三个要修改的地方
static void * _GetDevData(GUI_DEVICE * pDevice, int Index) { GUI_USE_PARA(pDevice);
#if GUI_SUPPORT_MEMDEV switch (Index) {
case LCD_DEVDATA_MEMDEV:
/* 这个一定记得要改,不改就悲剧了,根据自己屏的位数改,现在用的是双色屏,改成1就好了 */
return (void *)&GUI_MEMDEV_DEVICE_1; // TBD: Has to be adapted to the right memory device depending on the used color depth! }
#else GUI_USE_PARA(Index);
#endif return NULL;
}
第二步:这步比较关键些,应为这个要为STemWin提供直接的配置,配置不好是无法正确显示的。
#define XSIZE_PHYS 128 //给定层可见区的X尺寸 (单位:像素)
#define YSIZE_PHYS 64 //给定层可见区的Y尺寸 (单位:像素)
#define VXSIZE_PHYS 128 //给定层虚拟区的X尺寸 (单位:像素)
#define VYSIZE_PHYS 64 //给定层虚拟区的Y尺寸 (单位:像素)
#define LCD_CONTROLLER SSD1306
#define LCD_BITSPERPIXEL 1
#define LCD_USE_PARALLEL_16 0
//
// Color conversion
//
#define COLOR_CONVERSION GUICC_1 //这个一定记得改,单色屏
//
// Display driver
//
#define DISPLAY_DRIVER &GUIDRV_Template_API
剩下就是根据这些定义已经前面做好的底层驱动做一下配置就可以了,这一部的配置都是在文件
GUIConf.c文件里面进行的,最关键的一步,配置一些就好了。
/*
****************************************************************************
*
* LCD_X_Config
*
* Purpose:
* Called during the initialization process in order to set up the
* display driver configuration.
*
****************************************************************************
*/
void LCD_X_Config(void)
{
/* Set display driver and color conversion for 1st layer */
GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0);
/* Display driver configuration */
LCD_SetSizeEx (0, 128, 64);
LCD_SetVSizeEx (0, 128, 64);
}
1.3 实验效果以及程序下载
这里做了两个小测试,一个是显示一下汉字和字符,效果还不错,汉字是48*48的,汉字的显示方法采用
的是[STemWin教程入门篇]第六期:emWin5.20汉字显示方法二(将字库放到外部Flash,SD卡等)
下面这幅图是OLED显示控件的效果。
有一点要说明一下,这个OLED只有两种颜色,所以设置颜色的时候注意一下。
附上程序下载:
第一期娱乐篇--OLED的STemWin移植.zip
(16.11 MB, 下载次数: 16460)
|
评分
-
查看全部评分
|