14509|32

210

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

做比赛用ti的图形驱动库做的LCD驱动。。。 [复制链接]

参加了ti的电子设计大赛,用ti的图形驱动库做了一个lcd的驱动,ti那个图形驱动库分了三层:底层驱动层,图形基元层,小工具层,现在自己只做了两层,底层驱动层,图形基元层。还没有做到小工具层,感觉那个要复杂一些,看到坛子里有人发出stellaris共学计划,不知道自己学习ti的图形驱动库算不算,呵呵。传两张图上来,小小show一下

 

看了七楼的建议,我把我自己写的一个源代码传上来,希望对大家有帮助。

 

 

看到十楼的那位兄弟的回贴,实在是言重了,自己对运用TI这个库驱动LCD也只是略知一二,既然如此,那我就给大家讲讲我是怎么用ti的图形驱动库来驱动这个LCD的,我们大家一起共同进步!

 

ti的这个图形库自下向上分为三层displaydriverlayer,graphicsprimitiveslayer(图形基元层),widgetlayer(小工具层),我们要做的就是写Thedisplaydriverlayer。也就是底层驱动层,写好了这一层,当你调用上面的graphicsprimitiveslayer画一些基本的图形的时候(如画圆),那么中间的那一个graphicsprimitiveslayer(图形基元层)就会自己去调用displaydriverlayer(显示驱动层)里的我们自己编写的函数(画点)来完成当前的绘制工作。同理,最上面的widgetlayer(小工具层)也是通过调用graphicsprimitiveslayer(图形基元层)来实现更加复杂的图形,如边栏,滑调,画线。所以就是为什么我说ti这个图是自下向上的原因。那我们要怎么来使用这个库呢?

 

首先,大家把LCD联上ti的m3,可以用IO,也可以用总线,当然我是用的IO,然后跟据lcd驱动IC来配置里面的各种寄存器,让LCD做好显示的准备工作,我传的那份LCDDisplay那个工程里大家可以进LCDFunc.c那个源文件去看一下,其中的LCD_Init()这个函数就完成了这个工作。所以,在LCD显示部分,他总是最先被调用的。LCD显示的准备工作做好了,大家可以编写一些最底层的图形函数。大家看下我传上来的ti图形驱动库的文档,ti的库提供了一个结构tDisplay。这个结构是需要我们去补充的,只要你补充好了这个结构,基本上就万事大吉了。在这个结构里基本上都是函数指针。指向了我们要补充的基本图形函数,如画点,画平水线,画竖直线,画填充矩形。大家在编写这些函数的时候要注意,一定要按照他的要求去编写,如要编写一个画水平线的函数,那么这个函数的形参和返回值都要和这个库的要求匹配起来,顺序不要搞反了,如形参传递的顺序。但是函数名称大家可以随便写,只要你在这个结构里的位置放对就好。因为他传递的只是一个函数指针,只要让库正确的找到那个函数就OK。大家把这个结构搞定后,基本就比交顺利了。那么,我们现在来看一个实际的例子。

#include <SystemInit.h>

#include <grlib.h>

tRectangle MyRect;

 

const tDisplay MyDisplay=
{
 sizeof(tDisplay),
 0,
 320,       // LCD width
 240,       // LCD height
 LCDPixelDraw,
 (void*)0,

LCDlineDrawH,
LCDlineDrawV,
LCDRectFill,
LCDColorTranslate,
LCDFlush,
};

 

tContext MyContext;


void main()
{
CLOCK_Init();//时钟初始化

GPIO_Init();//GPIO初始化

LCD_Init();//LCD初始化

LCDClearScreen(BLACK);//清屏

GrContextInit(&MyContext, &MyDisplay);//初始化图形描绘上下文

TiLogDraw(); //画LOG


//**********************************************************************
//显示菜单
//********************************************************************** 
      //
    // 为LCD底部填充一个的紫罗兰红的矩形
    //
    MyRect.sXMin = 0;
    MyRect.sYMin = 217;
    MyRect.sXMax = GrContextDpyWidthGet(&MyContext) - 1;
    MyRect.sYMax = 240;
    GrContextForegroundSet(&MyContext, ClrMediumVioletRed);
    GrRectFill(&MyContext, &MyRect);
  
    //
    // 为这个矩形放一个白色的边框
    //
    GrContextForegroundSet(&MyContext, ClrWhite);
    GrRectDraw(&MyContext, &MyRect);
   
 
    //
    // 放置这个应用程序的名字在矩形之中,Cm20字体,白色
    //
    GrContextFontSet(&MyContext, &g_sFontCm20);
    GrStringDrawCentered(&MyContext, "Grlib test demo", -1,
                         GrContextDpyWidthGet(&MyContext) / 2, 227, 0);
   
   
    //写LCD中用cm48i字体,绿黄色写上“Hello,eeworld !”
    GrContextForegroundSet(&MyContext, ClrLime);
   
    GrContextFontSet(&MyContext, &g_sFontCm48i);
   
    GrStringDrawCentered(&MyContext, "Hello eeworld !", -1,
                         GrContextDpyWidthGet(&MyContext) / 2, 120, 0);
    while(true);

}

首先我定义了一个tDisplay形的结构 Mydisplay,传入了LCD的大小和各种底层函数。我用的时候就用Mydisplay这个结构。当然,你必须还要定义一个tContext形的结构。我的为 MyContext,大家可以去看文档,这个结构中包含了绘制的上下文,如你要用什么字体,什么背景,什么前景,在这个结构中都有定义,到时我们在绘制过程之中,如需要改变我们绘制的条件,只需要改变这个结构中的成员的值即可。如我们在写字的时候,我们想用大点儿的字体,那么,只需要改变其中ulForeground这个参数就可以了,当然,这些事情不用我们手工去一个一个的改,ti的图形驱动库提供了具体的函数,你只需要调用函数即可,如我们想要改字体,那么只需要调用GrContextFontSet这个函数,传入你正在使用的描绘上下文(我的为MyContext),和你要设置的字体即可。那么你在下次绘制的时候,只要你用MyContext这个上下文去绘制,那么那些字体正是你上次写入的字体,是不是很在意思?改颜色也是一个道理。其中字体和颜色大字可以去ti的文档的最后几页看,有样板在,你喜欢那个就写那个,非常简单。

 

在这个程序中,我们先初始化LCD,然后把整屏刷黑。就可以开始图形库操作了,首先你必须调用GrContextInit这个函数,对图形库进行初使化,你就可以开始绘制工作了。具体绘制过程大家可以对照ti图形驱动库的说明文档,一个一个的看这些函数实现什么功能,需要传入那些参数,我相信大家很快就可以搞明白。最后附上这个程序的最终显示结果,自己还是一个生学,买不起相机,这次比赛用的同学的,但是同学回家了,所以用自己手机拍的,大家将就一下吧。

[ 本帖最后由 zhengjiewen 于 2010-8-1 13:24 编辑 ]

@Xin0135.jpg (102.47 KB, 下载次数: 3)

@Xin0135.jpg

@Xin0139.jpg (117.12 KB, 下载次数: 1)

@Xin0139.jpg

图像068.jpg (52.12 KB, 下载次数: 1)

图像068.jpg

LCDDisplay.rar

810.24 KB, 下载次数: 257

SW-GRL-UG-5821.pdf

1.69 MB, 下载次数: 215

最新回复

TI的库 可以用在stm32上的  详情 回复 发表于 2012-6-11 22:44
 
点赞 关注

回复
举报

640

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
界面不错!
    小声问一下: ti的图形驱动库有没有硬件\软件限制吗? 限制于TI的器件?
 
 

回复

210

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
这个库是ti m3专用的,但是里面的源代码很有参考价值
 
 
 

回复

640

帖子

0

TA的资源

五彩晶圆(初级)

4
 

原帖由 zhengjiewen 于 2010-7-31 10:41 发表 这个库是ti m3专用的,但是里面的源代码很有参考价值

    强!  还没有接触过这个.

    再问一下: 就是类似LM3S8962这样的ti m3专用的?

    上面的那些 TI 的LOG能不能改掉?

    多多交流!

 
 
 

回复

210

帖子

0

TA的资源

一粒金砂(高级)

5
 

log是我自己搞上去的哈,ti的m3都可以用的。多多交流

 
 
 

回复

210

帖子

0

TA的资源

一粒金砂(高级)

6
 

回复 4楼 zhdphao 的帖子

log是我自己搞上去的哈,ti的m3都可以用的。多多交流
 
 
 

回复

546

帖子

0

TA的资源

一粒金砂(高级)

7
 
这个具体怎么弄的,给点建议吧!
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(初级)

8
 

看看,以后要多多支持,多多分享好东东~~~

看看,以后要多多支持,多多分享好东东~~~
 
 
 

回复

210

帖子

0

TA的资源

一粒金砂(高级)

9
 

回复 7楼 wulei19880906 的帖子

建议把ti的那个文档好好看一下,你要先写底层驱动,比如说画点,画线,画矩形之类的,然后你把这些函数指针传到库给的tDisplay里一个结构里,就可以调用了。。
 
 
 

回复

640

帖子

0

TA的资源

五彩晶圆(初级)

10
 

原帖由 zhengjiewen 于 2010-7-31 20:16 发表 建议把ti的那个文档好好看一下,你要先写底层驱动,比如说画点,画线,画矩形之类的,然后你把这些函数指针传到库给的tDisplay里一个结构里,就可以调用了。。

    是不是这样: 为了配合不同的LCD,需要自己重写 ti的图形驱动库 指定的那些画点,画线,画矩形之类的函数(函数接口的那些变量不能改,但是可以自己编写函数的具体过程)。以后调用 ti的图形驱动库 就行了。

    能否拿一个简单的例子讲讲,给我们扫扫盲。

[ 本帖最后由 zhdphao 于 2010-7-31 22:19 编辑 ]
 
 
 

回复

210

帖子

0

TA的资源

一粒金砂(高级)

11
 
晕,才发现一个问题,soso好早,6点多就上班了。。。。
 
 
 

回复

762

帖子

0

TA的资源

一粒金砂(中级)

12
 
十分感谢,正在准备大赛,呵呵,加油
 
 
 

回复

210

帖子

0

TA的资源

一粒金砂(高级)

13
 

回复 12楼 450678797 的帖子

问下,你参加的什么的比赛呢?
 
 
 

回复

640

帖子

0

TA的资源

五彩晶圆(初级)

14
 

不错的资料,学习了!谢谢楼主。

也祝上面各位大赛取得好成绩。

[ 本帖最后由 zhdphao 于 2010-8-1 12:00 编辑 ]
 
 
 

回复

602

帖子

0

TA的资源

一粒金砂(中级)

15
 
楼主,你的那些资料能传上来不?
 
 
 

回复

210

帖子

0

TA的资源

一粒金砂(高级)

16
 

回复 15楼 zhandetian 的帖子

晕,才忘了把那个驱动库文档传上来,马上
 
 
 

回复

640

帖子

0

TA的资源

五彩晶圆(初级)

17
 

    谢谢!资料分量挺足,有几百页,要慢慢看。 以后多多交流啊!

    我才刚开始用LM3S8962。这里有很多人都有LM3S8962开发板,有不少人都共享了一些很好的例子。

[ 本帖最后由 zhdphao 于 2010-8-1 19:15 编辑 ]
 
 
 

回复

210

帖子

0

TA的资源

一粒金砂(高级)

18
 

回复 17楼 zhdphao 的帖子

你们在哪里搞到的8962啊?是ti送的吗?我也想有一套研究一下
 
 
 

回复

640

帖子

0

TA的资源

五彩晶圆(初级)

19
 

回复 18楼 zhengjiewen 的帖子

是TI公司的,48元的那种。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(高级)

20
 
;P 楼主不错呀,很认真,+U
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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