请选择 进入手机版 | 继续访问电脑版

硬汉嵌入式论坛

 找回密码
 立即注册
查看: 30636|回复: 39
收起左侧

[emWin娱乐篇] 第一期:在OLED上面移植STemWin5.20

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106338
QQ
发表于 2013-9-28 15:40:28 | 显示全部楼层 |阅读模式
       从本期开始逐渐的开始推出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,也就是说直接支持了这种单色屏。官方的
应该就是经过优化的,值得期待下。
2.png

1.2  移植要点
第一步:找到这个文件进行修改,只需提供两个函数,并修改一个函数就可以了,这里不做深入的优化
                有兴趣的可以研究下。
1.png

第一个要修改的地方
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
3.png



剩下就是根据这些定义已经前面做好的底层驱动做一下配置就可以了,这一部的配置都是在文件
GUIConf.c文件里面进行的,最关键的一步,配置一些就好了。
4.png


/*
****************************************************************************
*
*       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卡等)
图片 003.jpg



下面这幅图是OLED显示控件的效果。
图片 005.jpg

有一点要说明一下,这个OLED只有两种颜色,所以设置颜色的时候注意一下。
附上程序下载:
第一期娱乐篇--OLED的STemWin移植.zip (16.11 MB, 下载次数: 16424)

评分

参与人数 1金币 +18 收起 理由
xode + 18 很给力!

查看全部评分

回复

使用道具 举报

36

主题

2038

回帖

2146

积分

至尊会员

积分
2146
发表于 2013-9-28 15:48:25 | 显示全部楼层
强烈支持汉子哥[s:151]
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

20

主题

55

回帖

20

积分

初级会员

积分
20
发表于 2013-9-28 15:48:53 | 显示全部楼层
大力支持[s:149]
天天向上
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106338
QQ
 楼主| 发表于 2013-10-4 11:40:52 | 显示全部楼层
顶一下
回复

使用道具 举报

116

主题

798

回帖

1146

积分

至尊会员

积分
1146
QQ
发表于 2013-10-9 09:45:26 | 显示全部楼层
[s:151]  [s:151]
回复

使用道具 举报

1

主题

27

回帖

30

积分

新手上路

积分
30
发表于 2014-5-5 16:12:38 | 显示全部楼层
期待
回复

使用道具 举报

0

主题

10

回帖

10

积分

新手上路

积分
10
QQ
发表于 2014-5-26 11:24:21 | 显示全部楼层
强大  果断的顶一个
回复

使用道具 举报

36

主题

2038

回帖

2146

积分

至尊会员

积分
2146
发表于 2014-9-2 15:33:22 | 显示全部楼层
[s:151] [s:151] [s:151]
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

32

主题

295

回帖

391

积分

高级会员

积分
391
发表于 2014-12-12 12:32:09 | 显示全部楼层
[s:151]   谢谢分享
回复

使用道具 举报

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
发表于 2014-12-12 13:02:58 | 显示全部楼层
[s:152] [s:152] [s:152]
努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

2

主题

31

回帖

37

积分

新手上路

积分
37
发表于 2015-1-21 21:33:14 | 显示全部楼层
#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

//------------------------------------------------------------------------------------------------------

楼主,看了程序,以上的宏定义都没有使用
回复

使用道具 举报

2

主题

31

回帖

37

积分

新手上路

积分
37
发表于 2015-1-21 21:48:50 | 显示全部楼层
第3个要修改的地方
在于
#define GUI_SUPPORT_MEMDEV   1    // Memory device package available

这个宏的配置,GUI_SUPPORT_MEMDEV    为0是可以不用修改

谢谢
回复

使用道具 举报

2

主题

31

回帖

37

积分

新手上路

积分
37
发表于 2015-1-21 21:49:45 | 显示全部楼层
回复

使用道具 举报

7

主题

38

回帖

59

积分

初级会员

积分
59
发表于 2015-9-10 10:53:54 | 显示全部楼层
看了这个图片,感觉真不怎么漂亮,就像xp的风格,单色的可以像彩色TFT进行颜色润化么?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106338
QQ
 楼主| 发表于 2015-9-10 10:57:09 | 显示全部楼层

回 zhoulei 的帖子

zhoulei:看了这个图片,感觉真不怎么漂亮,就像xp的风格,单色的可以像彩色TFT进行颜色润化么? (2015-09-10 10:53) 
不行。
回复

使用道具 举报

9

主题

24

回帖

51

积分

初级会员

积分
51
发表于 2017-4-10 17:45:44 | 显示全部楼层
正需要 学习学习 多谢楼主分享
回复

使用道具 举报

0

主题

2

回帖

0

积分

新手上路

积分
0
发表于 2017-4-19 18:22:13 | 显示全部楼层
你好,我想在F1C8T6上实现OLED STemwin  ,我用的是您的OLED驱动函数,测试也都正常,STemwin需要修改的地方我都修改了,但是在执行GUI_Init()的时候进入硬件中断,初始化中调用的三个函数都没问题,但是在调用完LCD_X_DisplayDriver()函数返回时就进入硬件中断了。我修改堆栈大小及内存大小都还是进入硬件中断,如果您有时间,请帮忙看下,谢谢
Car_Study_20170419.zip (18.64 MB, 下载次数: 865)
回复

使用道具 举报

0

主题

2

回帖

0

积分

新手上路

积分
0
发表于 2017-4-19 20:22:47 | 显示全部楼层
谢谢各位,问题已解决。
解决方案:
void LCD_X_Config(void) {
  // Set display driver and color conversion
  //
//  GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_1, 0, 0);     //此语句为原始模板
   GUI_DEVICE_CreateAndLink(GUIDRV_TEMPLATE, GUICC_1, 0, 0);  //改成这样 问题即解决
  LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS);
  LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS);
}
回复

使用道具 举报

3

主题

43

回帖

52

积分

初级会员

积分
52
发表于 2018-5-9 11:34:46 | 显示全部楼层
请教一下,STemWin520d_CM4_OS_Keil.lib文件是专门对单色屏幕优化的吗,我使用这个库在单色屏幕上控件可以显示完全,但是使用更高版本的STemWin532_CM4_OS_Keil.lib在单色屏幕上控件就显示不全。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106338
QQ
 楼主| 发表于 2018-5-10 03:03:31 | 显示全部楼层
lhb292 发表于 2018-5-9 11:34
请教一下,STemWin520d_CM4_OS_Keil.lib文件是专门对单色屏幕优化的吗,我使用这个库在单色屏幕上控件可以 ...

那就用低版本就行,因为高版本的特性在单色屏上面没区别。

库名字带ot的是做了优化的。
回复

使用道具 举报

3

主题

43

回帖

52

积分

初级会员

积分
52
发表于 2018-5-10 08:48:27 | 显示全部楼层
eric2013 发表于 2018-5-10 03:03
那就用低版本就行,因为高版本的特性在单色屏上面没区别。

库名字带ot的是做了优化的。

STemWin520d_CM4_OS_Keil.lib是520d,后边有个d是什么意思?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106338
QQ
 楼主| 发表于 2018-5-11 00:14:41 | 显示全部楼层
lhb292 发表于 2018-5-10 08:48
STemWin520d_CM4_OS_Keil.lib是520d,后边有个d是什么意思?

算是5.20系列里面的小版本。
回复

使用道具 举报

0

主题

22

回帖

22

积分

新手上路

积分
22
发表于 2018-8-3 14:39:55 | 显示全部楼层
谢谢硬汉!
回复

使用道具 举报

0

主题

38

回帖

38

积分

新手上路

one is enough

积分
38
发表于 2019-6-18 21:49:03 | 显示全部楼层
mark~~~1024
回复

使用道具 举报

29

主题

514

回帖

606

积分

金牌会员

积分
606
QQ
发表于 2019-10-7 14:29:35 | 显示全部楼层
顶一下,2013年的娱乐贴。
Releasing your creativity
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2019-12-6 14:31:40 | 显示全部楼层
有最新的V5.5版本吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106338
QQ
 楼主| 发表于 2019-12-6 14:45:40 | 显示全部楼层
zhcj66 发表于 2019-12-6 14:31
有最新的V5.5版本吗

最新版emWin5.50的单片机版软件包已经可以下载
http://www.armbbs.cn/forum.php?m ... 4491&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2019-12-7 16:32:10 | 显示全部楼层
硬汉 STemWin520d_CM4_OS_Keil.lib中的CM4是不是代表只适用于M4内核?
OS是不是代表可以非裸奔?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106338
QQ
 楼主| 发表于 2019-12-7 17:45:40 | 显示全部楼层
zhcj66 发表于 2019-12-7 16:32
硬汉 STemWin520d_CM4_OS_Keil.lib中的CM4是不是代表只适用于M4内核?
OS是不是代表可以非裸奔?

对,是这个意思
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2019-12-7 19:18:38 | 显示全部楼层

硬汉有m0的gui吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106338
QQ
 楼主| 发表于 2019-12-8 12:39:55 | 显示全部楼层

前天给你发的那个5.50下载就行
回复

使用道具 举报

3

主题

13

回帖

22

积分

新手上路

积分
22
发表于 2020-1-15 23:00:59 | 显示全部楼层
怎样做深度优化?我安装您这个帖子移植好了emwn,但是刷屏速度比较慢,比不用emwin时裸刷屏慢。请问怎样优化呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106338
QQ
 楼主| 发表于 2020-1-17 00:46:12 | 显示全部楼层
work.hex 发表于 2020-1-15 23:00
怎样做深度优化?我安装您这个帖子移植好了emwn,但是刷屏速度比较慢,比不用emwin时裸刷屏慢。请问怎样优 ...

参考这个帖子,OLED的刷新做了特别处理。

基于V7的emWin多屏显示方案模板,同时驱动LCD和OLED例程
http://www.armbbs.cn/forum.php?m ... id=94380&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2021-2-24 16:14:32 | 显示全部楼层
硬汉个,请教一下,我已经按照您教程来移植stemwin了,也可正常执行显示字和画线简单的GUI指令,但是显示不了GUIBuilder生成的控件,这是为什么呢?
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2021-2-24 16:24:06 | 显示全部楼层
硬汉哥,请教一下。我按照您步骤移植好了stemwin在f103中,可以正常显示字符串和画线,但是不能显示GUIBuilder生成的插件,请问这是为什么呢?
回复

使用道具 举报

6

主题

106

回帖

124

积分

初级会员

积分
124
发表于 2021-6-22 16:42:00 | 显示全部楼层
请问下用的是SPI的LCD屏幕,有没有EMWIN移植教程?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106338
QQ
 楼主| 发表于 2021-6-23 08:57:12 | 显示全部楼层
xudongqiang 发表于 2021-6-22 16:42
请问下用的是SPI的LCD屏幕,有没有EMWIN移植教程?

跟这个帖子方法一样,仅需提供打点和读点即可。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106338
QQ
 楼主| 发表于 2021-6-23 08:58:09 | 显示全部楼层
haauhaau 发表于 2021-2-24 16:24
硬汉哥,请教一下。我按照您步骤移植好了stemwin在f103中,可以正常显示字符串和画线,但是不能显示GUIBuil ...

估计是函数 _GetDevData和16bpp函数没有处理好。
回复

使用道具 举报

2

主题

49

回帖

55

积分

初级会员

积分
55
发表于 2021-6-23 08:58:48 | 显示全部楼层
我用的oled是SSD1325  驱动在slin里面  但是移植完有残影  感觉自带的驱动有问题
回复

使用道具 举报

2

主题

49

回帖

55

积分

初级会员

积分
55
发表于 2021-6-23 10:22:04 | 显示全部楼层
jiaoxiake 发表于 2021-6-23 08:58
我用的oled是SSD1325  驱动在slin里面  但是移植完有残影  感觉自带的驱动有问题

问题已解决,是我显示屏初始代码没配置正确,交换了字节的高低位
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-17 06:55 , Processed in 0.324182 second(s), 38 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表