来看看最近在12864 屏上运行的ucGUI效果

2019-12-27 18:50发布

本帖最后由 flyer_4 于 2014-11-23 17:40 编辑

http://v.youku.com/v_show/id_XODMxNzgwODcy.html
12864液晶屏,st7920驱动。使用一个较低优先级的任务把内存中一块虚拟显存中的内容通过SPI发送给st7920,GUI低层的写屏函数只把要显示的数据写入虚拟显存中。目前GUI部分已经完成大部分,剩下的正在领导半天一小催,一天一大催的紧张气氛下往前赶。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
97条回答
xyz543
1楼-- · 2020-01-08 08:38
xyz543 发表于 2015-1-20 15:59
让 GUI 整屏刷?!若是自己写的 GUI 这我就不便说了!但若是使用 uC/GUI or emWin 的话,整屏刷这又是何 ...

我的控制器是ST7920 128x64的单 {MOD}LCD,控制器支持读回,但是速度很低,所以开了1K的buf,
gui是emWin,emWin官方目前不支持7920的控制器,自己写的接口,emwin更新一个点的颜 {MOD}
就需要发送4个byte的数据,而且,从整个图形层再到点的绘制估计会占用很长时间,
所以,有了和楼主以样的思路:
     1个任务是刷屏,一次写入16个点的数据;
     1个任务用于emWin
worldsing
2楼-- · 2020-01-08 11:41
worldsing 发表于 2015-1-20 20:45
我的控制器是ST7920 128x64的单 {MOD}LCD,控制器支持读回,但是速度很低,所以开了1K的buf,
gui是emWin,em ...

嗯,明白了,worldsing 兄,我以前捣鼓的 LCM 也是有回读的暂存器,而 emWin 当然也是没有针对市上全部的 LCD Contrroler 给予支持,所以我自己就写了个可以回读的接口,维有如此才能在不占用内存之下发挥较高的效率。
不过,我是没有搞过移植到这么小的 (128 x 64 单 {MOD}) LCM 过,所以也不知这 LCM 是否有其限制,但也没关系,重要的是只要能运行得起来怎样搞都行,没事的!呵呵~
apachectl
3楼-- · 2020-01-08 11:51
 精彩回答 2  元偷偷看……
xyz543
4楼-- · 2020-01-08 16:30
本帖最后由 apachectl 于 2015-1-21 13:05 编辑

真不明白,上这么高档次一个单片机,却用个12864的屏,现在都是彩屏年代的了,为什么不直接换彩屏,价格也差不多

实验证明,小内存单片机一样驱动的了彩屏,而且速度更快
详见:http://www.amobbs.com/thread-5598855-1-1.html

11_调整大小.JPG (93.73 KB, 下载次数: 0)

下载附件

2015-1-21 13:02 上传




worldsing
5楼-- · 2020-01-08 18:30
worldsing 发表于 2015-1-21 12:50
嗯,多谢xyz543兄指导
CPU的片内RAM有富裕的,所以采取了开1K = (64/2) *(128/8) 个shor类型的Buf方式
em ...

worldsing 兄,指导真是不敢当,就当相互学习交流吧!
我不清楚您所指的 "emWin在反处理上的问题" 您是指在于 LISTBOX 内将所要选取的那一行自反白显示 (HighLight) 是吗?
而我对于 GUI 的应用面知道的比较少,学到较多的是移植方面的工作,而在于 2009 年后就几乎没在捣鼓 GUI 这东西了,虽然现在手上有着 emWin v5.20c 版的 SourceCode。
在我看来您的底层 API 貌似不是使用 Draw Bitmap 1 BPP 的功能在运作,而是大于 1 BPP 的有彩 {MOD}或灰阶的方式在运作是吗?
若是这样的话,估计您使用单 {MOD}的 LCM 而用大于 1 BPP 的 Function 工作的话,有可能在于您所开启的 MCU 内部显示快取资料区所回读的资料或方式会不正确而发生问题!
而又若您是使用正确的  1 BPP 的 Function 在运作的话,这...我就不清楚了,我只知道单 {MOD}的显示方式与灰阶显示及彩 {MOD}显示的 API 调用方式都是有所不同的!
不过若真要快速的找到解决的方法也是有,那就是您可以去私下请教 Eric2013 大神吧!Eric2013 兄他能在这么短的时间内将 GUI 搞到这么高的境界连我都要拜他为神了,呵呵~
worldsing
6楼-- · 2020-01-08 20:00
xyz543 发表于 2015-1-21 15:21
worldsing 兄,指导真是不敢当,就当相互学习交流吧!
我不清楚您所指的 "emWin在反处理上的问题" 您是指 ...

多谢xyz543兄耐心指导, 您谦虚了。

1、是的,我打的字有问题,现象是是LISTBOX选择项无法反白显示,从图上来看是直接不显示反白部分,标题栏部分也无法显示;

2、您说的对,我用的不是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);

   经过测试均正常绘制点;

3、我所用的LCM是ST7920的控制器,是单 {MOD}屏(黑白屏),无 {MOD}阶,同样,emWin所提供的GUICC_1也是单 {MOD}的,黑白两 {MOD}
    可能是我对调 {MOD}板理解的不对?
   

4、我自定义的调 {MOD}板转化的API是(这是替换GUICC_1):
    【 {MOD}彩索引API功能】:无论入口参数是什么颜 {MOD},返回的 {MOD}彩只有黑 {MOD}或者白 {MOD}
     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接口





一周热门 更多>