硬汉嵌入式论坛

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

[emWin] 请教版主以个关于emWin在12864上移植的问题

[复制链接]

2

主题

31

回帖

37

积分

新手上路

积分
37
发表于 2015-1-21 17:40:23 | 显示全部楼层 |阅读模式
最st7920控制器的12864LCD上移植了emWin5.24
由于emWin不支持st7920的控制器,我自己改了底层代码,
目前能正常打点,画线。
但是使用emWin自带的调色板是无法正常显示应用界面,

所以我自己写了色彩板:

//自定义颜色转化接口
static unsigned _Color2Index_User(LCD_COLOR Color) {
    unsigned Index;
    /* Add code for converting the RGB value to an index value for the hardware */
    if(0 == Color)
        Index = 1;
    else
        Index = 0;
    return Index;
}

static LCD_COLOR _Index2Color_User(unsigned Index) {
    LCD_COLOR Color;
    /* Add code for converting the index value into an RGB value */
    if(0 == Index)
        Color = 0x00ffffff;
    else
        Color = 0;
    return Color;
}

static unsigned _GetIndexMask_User(void) {
    return 0xffff; /* Example for using 16 bits */
}

const LCD_API_COLOR_CONV LCD_API_ColorConv_User = {
     _Color2Index_User,
     _Index2Color_User,
     _GetIndexMask_User
};

能显示了部分界面,但是,用户界面的反白部分无法显示。
不知道什么原因,希望版主能给指导一下,谢谢。
回复

使用道具 举报

2

主题

31

回帖

37

积分

新手上路

积分
37
 楼主| 发表于 2015-1-21 17:42:06 | 显示全部楼层
仿真.jpg
            仿真图片


实际.jpg

实际,不显示选择项。
回复

使用道具 举报

2

主题

31

回帖

37

积分

新手上路

积分
37
 楼主| 发表于 2015-1-21 17:44:11 | 显示全部楼层
我用的不是emWin的底层 API (这个效果没有使用 Draw Bitmap 1 BPP 的功能),我尝试用过emWin的底层API,
   GUICC_1,代码如下:

   #define COLOR_CONVERSION    GUICC_1
   #define DISPLAY_DRIVER         &GUIDRV_Template_API  

    void LCD_X_Config(void)
    {               
        GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0);

        LCD_SetSizeEx    (0, 128, 64);
        LCD_SetVSizeEx   (0, 128, 64);        
   }

   但是,这样的LCD配置无法正常显示,效果是花屏,GUIDRV_Template_API  我自定义实现的
   void LCD_PutPixel(u32 x, u32 y, u8 color);
   uint8_t LCD_GetPixel(uint32_t x, uint32_t y);

   经过测试均正常绘制点;
回复

使用道具 举报

2

主题

31

回帖

37

积分

新手上路

积分
37
 楼主| 发表于 2015-1-21 17:44:36 | 显示全部楼层
我所用的LCM是ST7920的控制器,是单色屏(黑白屏),无色阶,同样,emWin所提供的GUICC_1也是单色的,黑白两色
    可能是我对调色板理解的不对?
回复

使用道具 举报

2

主题

31

回帖

37

积分

新手上路

积分
37
 楼主| 发表于 2015-1-21 17:44:59 | 显示全部楼层
我自定义的调色板转化的API是(这是替换GUICC_1):
    【色彩索引API功能】:无论入口参数是什么颜色,返回的色彩只有黑色或者白色
     static LCD_COLOR _Index2Color_User(unsigned Index){
        LCD_COLOR Color;
        if(0 == Index)
           Color = 0x00ffffff;  
        else
           Color = 0;
        return Color;
    }
   
    static unsigned _Color2Index_User(LCD_COLOR Color) {
        unsigned Index;
        if(0 == Color)
          Index = 1;
        else
          Index = 0;
        return Index;
   }


值得怀疑有问题两个API接口
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2015-1-21 20:10:12 | 显示全部楼层
单色屏使用GUICC_1就可以了。只有黑白两色。我这里有做的oled的,你可以参考,基本和12864是一样的。
http://www.armbbs.cn/forum.php?mod=viewthread&tid=1678
回复

使用道具 举报

2

主题

31

回帖

37

积分

新手上路

积分
37
 楼主| 发表于 2015-1-21 21:41:58 | 显示全部楼层

回 eric2013 的帖子

eric2013:单色屏使用GUICC_1就可以了。只有黑白两色。我这里有做的oled的,你可以参考,基本和12864是一样的。
http://www.armbbs.cn/forum.php?mod=viewthread&tid=1678 (2015-01-21 20:10) 
多谢大神的耐心指导,我先按您说的步骤修改,之后有问题再向您请教。谢谢。
回复

使用道具 举报

2

主题

31

回帖

37

积分

新手上路

积分
37
 楼主| 发表于 2015-1-22 10:09:08 | 显示全部楼层

回 worldsing 的帖子

worldsing:

多谢大神的耐心指导,我先按您说的步骤修改,之后有问题再向您请教。谢谢。

按照您提供的方法修改能正常显示反白部分了,但是有个问题是,Edit控件无法显示光标,也就是反白的光标
下面是效果图:
Edit仿真.jpg
仿真效果,有Edit的反白光标

Edit实际显示.jpg


在12864实际屏上显示的是没有Edit光标,当前焦点在“年”前面的Edit。

不知何故,再次向版主请教,谢谢版主。
回复

使用道具 举报

2

主题

31

回帖

37

积分

新手上路

积分
37
 楼主| 发表于 2015-1-22 10:10:51 | 显示全部楼层

回 eric2013 的帖子

eric2013:单色屏使用GUICC_1就可以了。只有黑白两色。我这里有做的oled的,你可以参考,基本和12864是一样的。
http://www.armbbs.cn/forum.php?mod=viewthread&tid=1678 (2015-01-21 20:10) 
Edit 无发显示光标,版主有空时给指导以下,谢谢版主
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2015-2-28 14:12:02 | 显示全部楼层
我现在用12864屏幕,在仿真都无法反白显示。是怎么回事啊?
回复

使用道具 举报

7

主题

38

回帖

59

积分

初级会员

积分
59
发表于 2015-9-10 11:17:27 | 显示全部楼层

回 worldsing 的帖子

worldsing:按照您提供的方法修改能正常显示反白部分了,但是有个问题是,Edit控件无法显示光标,也就是反白的光标
下面是效果图:

....... (2015-01-22 10:09) 
我的一块单色屏没有控制器,请问可以用恶魔emwin吗
回复

使用道具 举报

7

主题

38

回帖

59

积分

初级会员

积分
59
发表于 2015-9-17 11:56:01 | 显示全部楼层
亲,你的底层代码都是改的些啥啊,我现在有一块屏也是不支持的控制器,不知道怎么移植了
回复

使用道具 举报

5

主题

69

回帖

5

积分

初级会员

积分
5
发表于 2015-9-25 15:36:32 | 显示全部楼层
请问楼主驱动12864流畅么?我的驱动12864 刷屏太慢了,楼主可有好的解决办法?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2015-9-28 09:03:57 | 显示全部楼层

回 shouyuxinyan 的帖子

shouyuxinyan:请问楼主驱动12864流畅么?我的驱动12864 刷屏太慢了,楼主可有好的解决办法? (2015-09-25 15:36) 
有解决办法,可以搞一个显存,比如我们V5或者V4板子上面的OLED就是这样。


/* 12864 OLED的显存镜像,占用1K字节. 共8行,每行128像素 */
static uint8_t s_ucGRAM[8][128];

具体实现你可以参考下。
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2016-5-18 14:29:41 | 显示全部楼层
//------------------------自定义调色板,从LCDP1.c拷贝-------------------------------------------
static  unsigned int   User_LCDDEV_Color2Index  (LCD_COLOR Color)
{
      int r,g,b;
  r = Color      &255;
  g = (Color>>8) &255;
  b = Color>>16;
  return (r+g+b+300) /(3*255) ? 0 : 1;
}
static LCD_COLOR      User_LCDDEV_Index2Color  (unsigned Index)
{
      return Index ?   0 : 0xFFFFFF;
}

static  unsigned int   User_LCDDEV_GetIndexMask (void)
{
      return 0x01;
}
static void User_LCDDEV_Color2IndexBulk(LCD_COLOR * pColor, void * pIndex, U32 NumItems, U8 SizeOfIndex)
{
      
}
static  void User_LCDDEV_Index2ColorBulk(void * pIndex, LCD_COLOR * pColor, U32 NumItems, U8 SizeOfIndex)
{
      
}

const LCD_API_COLOR_CONV LCD_API_ColorConv_User = {
      User_LCDDEV_Color2Index ,
      User_LCDDEV_Index2Color ,
      User_LCDDEV_GetIndexMask ,
      0 ,
      User_LCDDEV_Color2IndexBulk ,
      User_LCDDEV_Index2ColorBulk
};

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


/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       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*/&LCD_API_ColorConv_User, 0, 0);
  //
  // Display driver configuration, required for Lin-driver
  //
  LCD_SetSizeEx    (0, XSIZE_PHYS,   YSIZE_PHYS);
  LCD_SetVSizeEx   (0, VXSIZE_PHYS,  VYSIZE_PHYS);
  LCD_SetVRAMAddrEx(0, (void *)VRAM_ADDR);
  //
  // Set user palette data (only required if no fixed palette is used)
  //
  #if defined(PALETTE)
    LCD_SetLUTEx(0, PALETTE);
  #endif
}
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2016-5-18 14:37:19 | 显示全部楼层
LCD12864驱动部分:
emWin 5.24之LCD12864驱动.rar (18 KB, 下载次数: 513)
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2016-5-18 15:08:11 | 显示全部楼层
//------------------------自定义调色板,从LCDP1.c拷贝-------------------------------------------
static  unsigned int   User_LCDDEV_Color2Index  (LCD_COLOR Color)
{
      int r,g,b;
  r = Color      &255;
  g = (Color>>8) &255;
  b = Color>>16;
  //return (r+g+b+383) /(3*255) ? 0 : 1;
  
  return ((299*r+587*g+114*b) / 1000) > 125 ? 0 : 1;
}
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2016-5-19 09:01:38 | 显示全部楼层
ST12864驱动请加入Q群 45528358 自行下载------------老酒
回复

使用道具 举报

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2016-12-31 17:40:15 | 显示全部楼层
来看看
回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2017-1-22 22:29:23 | 显示全部楼层
来看看,学习学习。
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2017-8-20 08:26:55 | 显示全部楼层
我也在搞单色屏
回复

使用道具 举报

1

主题

5

回帖

27

积分

新手上路

积分
27
发表于 2017-10-19 15:12:34 | 显示全部楼层
来学习下,现在正在做这个东西[s:151]
回复

使用道具 举报

3

主题

6

回帖

15

积分

新手上路

积分
15
发表于 2017-11-11 12:46:04 | 显示全部楼层
我也正在搞。不过是128128的。楼主这个不错啊。对我有帮助。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 17:57 , Processed in 0.252152 second(s), 33 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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