emWin学习

来源:互联网 发布:php魔术常量有哪些 编辑:程序博客网 时间:2024/05/19 05:40

一、API学习

   1.1、初始化

         int GUI_Init(void);  函数来初始化emWin内部数据结构和变量。如果在初始化之前调用WM_SetCreateFlags()使用窗口管理器,则在GUI_Init()内创建背景窗口。(也就是窗口设置创建标记必须在初始化之前)。

    1.2、显示文本

          可以显示字符串、十六进制、十进制、二进制数,文本可以定位在屏幕上的任何像素。

     控制字符指字符代码小于32的字符,wmWin只能识别两个字符:

换行 ‘\n’,当前文本改变值下一行的开始,默认x=0,y+=字体-距离(像素)。

回车‘\r’ ,  当前文本位置改变至当前行的开始,默认x=0.

    1.2.1 文本API

            GUI_GotoXY( x ,y) ;坐标跳到x,y像素位置。


二、使用过程注意事项

     1、窗口管理的设置标志必须在emWin初始化之前,即WMSetCreatFlags() 在GUI_Init()之前。

     2、GUI_Clear() 函数,使用GUI_SetBkColor()函数之后,如果调用GUI_Clear()函数之后会对整个屏幕的背景颜色进行重新填充,如果GUI_SetBkColor()设置背景色后,没有调用GUI_Clear()函数,则只改变显示的文本部分的背景色,但是整个屏幕的背景色还是原来的颜色。

     3、GUI_DrawPoint();    画点函数,点的大小和画笔大小有关,可以用GUI_SetPenSize()函数来改变画笔大小,从而改变点的大小。

     3、GUI_Goto()函数在画线函数中不能改变画线函数相对偏移的起始位置,调用GUI_MoveTo();  函数改变画线函数的起始位置。 (至于为什么还没明白。) 如果不调用GUI_MoveTo()函数改变线条的位置,则默认是从原点开始的。

     4、样式:

               文本的样式  GUI_SetTextStyle()

               文本的模式  GUI_SetTextMode();

               线条的样式:GUI_SetLineStyle();    GUI_DrawLine() 使用线条样式,仅适用与pensize为1的情况。

               绘图模式:GUI_SetDrawMode();

    5、画多边形时坐标的计算

          GUI_DrawPolygon(const GUIPOINT *point,int NumPoints,int x,int y);  多变行绘制函数

           *point是一个结构体数组,包含着多变成每个拐点的坐标值,Numpoints 有几个拐点,x,y,多边行坐标的原点。与数学坐标略有不同,X轴与数学坐标一样,原点左边的是负右边的是正;Y轴与数学坐标相反,原点上边的是负,原点下边的是正。

    6、图片的显示分为两种:

         (1) 将图片加载到存储区然后显示

               可以用emwin带的位图转换软件将图片转换成.c文件或.dta格式文件,.c文件可以直接添加到工程中,然后在程序里边用函数GUI_BMP_Draw(); 直接调用.c文件中的数据来显示。这样耗费很大的Flash,而且也保存不了几幅图片。

               .dta格式或者本身的bmp格式图片可以放在外部的SD卡中,然后在程序中开辟足够大的内存空间,用fatfs文件系统的读函数将整个图片读到RAM中然后显示。

               加载到存储区显示比较耗费RAM空间,需要在配置emwin过程中指定的RAM空间至少比要显示图片的大小大5K左右,如果分配的是单片机内部的RAM,那单片机的RAM需要很大很大,最好是单片机挂载外部的SRAM,emwin配置过程将emwin的内存分配到外部SRAM。这样可以开辟较大空间加速图片的显示速度。

        (2) 图片无需加载到存储区

              图片以原格式放在SD卡中也可以显示,需要自己实现一个读数据的函数,buff的大小可以是屏幕行的大小*4,比较节省空间,在函数内部读一行像素的大小或更小,每次读完要进行地址的偏移。

               调用函数GUI_BMP_DrawEx(); 来实现从无需加载到存储区的显示。





0 0
原创粉丝点击