4005|4

1万

帖子

16

TA的资源

版主

楼主
 

【M4开发板Hanker试用狂】ddllxxrr之二:HELLO EEWORLD [复制链接]

Stellaris 系列 M3/M4 之所以强大 StellarisWare 软件库提供的快速软件开发解决方案功不可没 作为 TI StellarisWare 库的一部分 StellarisWare 图形库提供了一套比较完整的 MCU 图形显示方案 即可以进行图形 文字的绘制 也可以轻松实现在 PC 机上常见的基于事件响应的控件。伴随着 Stellaris LM4F 系列的推出, StellarisWare 图形库也将进一步升级,内置汉字字库。ellarisWare 图形库,为我们的 MCU 世界增加更多美丽的应用

Stellaris 图形库分成了三层,分别是:

(1) 显示驱动层 (Display Driver Layer)

(2) 基本图形层 (Graphics Primitives Layer)

(3) 控件层 (Widget Layer)

 

显示驱动层提供了和硬件通信的基本功能,这层直接和硬件直接通信。提供了两类驱动,一个是图形输出驱动、第二个是用户输入驱动。分层的好处是方便移置。只动最底层而不用动高层。

(唉!干活地总是最下边的人!)

下边是最底层的数据结构:

 

 

//*****************************************************************************

//

//! This structure defines the characteristics of a display driver.

//

//*****************************************************************************

typedef struct

{

    //

    //! The size of this structure.

    //

    long lSize;

 

    //

    //! A pointer to display driver-specific data.

    //

    void *pvDisplayData;

 

    //

    //! The width of this display.

    //

    unsigned short usWidth;

 

    //

    //! The height of this display.

    //

    unsigned short usHeight;

 

    //

    //! A pointer to the function to draw a pixel on this display.

    //

    void (*pfnPixelDraw)(void *pvDisplayData, long lX, long lY,

                         unsigned long ulValue);

 

    //

    //! A pointer to the function to draw multiple pixels on this display.

    //

    void (*pfnPixelDrawMultiple)(void *pvDisplayData, long lX, long lY,

                                 long lX0, long lCount, long lBPP,

                                 const unsigned char *pucData,

                                 const unsigned char *pucPalette);

 

    //

    //! A pointer to the function to draw a horizontal line on this display.

    //

    void (*pfnLineDrawH)(void *pvDisplayData, long lX1, long lX2, long lY,

                         unsigned long ulValue);

 

    //

    //! A pointer to the function to draw a vertical line on this display.

    //

    void (*pfnLineDrawV)(void *pvDisplayData, long lX, long lY1, long lY2,

                         unsigned long ulValue);

 

    //

    //! A pointer to the function to draw a filled rectangle on this display.

    //

    void (*pfnRectFill)(void *pvDisplayData, const tRectangle *pRect,

                        unsigned long ulValue);

 

    //

    //! A pointer to the function to translate 24-bit RGB colors to

    //! display-specific colors.

    //

    unsigned long (*pfnColorTranslate)(void *pvDisplayData,

                                       unsigned long ulValue);

 

    //

    //! A pointer to the function to flush any cached drawing operations on

    //! this display.

    //

    void (*pfnFlush)(void *pvDisplayData);

}

tDisplay;

 

我们要用时只要给这个结构赋值就行:

const tDisplay g_slcd_320x240_ili932x =

{

    sizeof(tDisplay),

    0,

#if defined(PORTRAIT) || defined(PORTRAIT_FLIP)

    LCD_VERTICAL_MAX,

    LCD_HORIZONTAL_MAX,

#else

    LCD_HORIZONTAL_MAX,

    LCD_VERTICAL_MAX,

#endif

    lcd_ili932x_pixel_draw,

    lcd_ili932x_pixel_draw_multiple,

    lcd_ili932x_line_draw_hor,

    lcd_ili932x_line_draw_ver,

    lcd_ili932x_rect_fill,

    lcd_ili932x_color_translate,

    lcd_ili932x_flush

};

 

底层定义后,要初始化一下,就是把参数传进去。

这里用了:GrContextInit(&g_sContext, &g_sLcdDisplay);这就是声明一下上下文。

g_sContext 在程序的前边声明为:tContext g_sContext;

g_sLcdDisplay 也是在前边定义为:#define g_sLcdDisplay g_slcd_320x240_ili932x

可以知道就是定义的底层声明。

 

下边工作简单了:就是直接调用库中的函数就行了。

GrContextForegroundSet(&g_sContext,ClrLightCoral);

这句实际就是把g_sContext这个绘制上下文的前景颜色设置为ClrLightCoral

颜色参考如下:

 

 

字体设置也是一样的道理。字体参考如下:

如我想设置为g_sFontCmss36i这种字体,那么我们只需要写一句:

GrContextFontSet(&g_sContext,
&g_sFontCmss36i);
这样就在g_sContext这个上下文中设置好了绘制的字体。

现在我们开始绘制。
调用函数void GrStringDraw(const tContext *pContext, const char *pcString,
long lLength, long lX, long lY,
unsigned long bOpaque);

形参意义如下:
pContext
:图形绘制的上下文。
*pcString,
:要绘制的字符串指针
long lLength
:要绘制的字符串长度,如果全部绘制的话那么设置为-1.
long lX, long lY,
为绘制的起始坐标。
bOpaque
:这个参数决定了在绘制的时候是否绘制背景色。

以下是程序:它实现了HELLO EEWORLD DDLLXXRR的显示。

 

int

main(void)

{

   

      

       FPUEnable();

       FPULazyStackingEnable();

      

    // Set the system clock to run at 50MHz from the PLL

    Clock_Init();

 

    //

      GUI_Init();

       GUI_Display_Heading("Hello Eeworld Demo");

       GrContextForegroundSet(&g_sContext,ClrLightCoral);

       GrContextBackgroundSet(&g_sContext,ClrWhite);

       GrContextFontSet(&g_sContext, &g_sFontCmss36i);

       DpyColorTranslate(&g_sLcdDisplay,ClrWhite);//清屏

    //写字符

    GrStringDraw(&g_sContext,"hello eeworld!",-1,10,120,true);

 

       GrStringDraw(&g_sContext,"ddllxxrr",8,50,250,1);

       lcd_ili932x_flush(&g_sContext);

      //设置前景色

    GrContextForegroundSet(&g_sContext,ClrLime);

    //画填充圆

    GrCircleFill(&g_sContext,250,60,50);

    //设置前景色

    GrContextForegroundSet(&g_sContext,ClrDarkOrange);

    //画填充圆

    GrCircleFill(&g_sContext,50,190,40);

 

      // Set the touch screen event handler.

   // Touch_Callback_Set(WidgetPointerMessage);

 

    // Add the compile-time defined widgets to the widget tree.

    //WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sBntEqu);

 

    // Paint the widget tree to make sure they all appear on the display.

    //WidgetPaint(WIDGET_ROOT);

       //WidgetMessageQueueProcess();

      

       GUI_Bcaklight_On();

       //GUI_Reflush();

 

       //Touch_Init();

       // Enable Interrupts

    //IntMasterEnable();

    // Loop forever, processing widget messages.

    while(1)

    {

        // Process any messages from or for the widgets.

       // WidgetMessageQueueProcess();

    }

}

 

由于出差刚回照相机没到位,晚上上图哈!!!

 

压缩文件:

hello eeworld.rar (614.01 KB, 下载次数: 167)

 

上图:

[ 本帖最后由 ddllxxrr 于 2012-6-5 18:04 编辑 ]

最新回复

貌似楼主的工程不完整呀!  详情 回复 发表于 2012-12-28 16:49
 
点赞 关注
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr

回复
举报

2002

帖子

24

TA的资源

五彩晶圆(高级)

沙发
 
坐地板上等
 
 

回复

4138

帖子

0

TA的资源

五彩晶圆(中级)

板凳
 
 
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

4
 

回复 楼主 ddllxxrr 的帖子

继续,加油,还有汉字的显示
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

5
 
貌似楼主的工程不完整呀!
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表