微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > LCD驱动的移植及其GUI仿真如何进行,LCD数模转换现实原理及其源代码

LCD驱动的移植及其GUI仿真如何进行,LCD数模转换现实原理及其源代码

时间:04-25 来源:网络整理 点击:

0xFB40

  5) 好了,各个寄存器的设置完成了,最后在驱动 CSTN屏的时候需要提醒大家一句,CSTN的信号引脚中有一个叫VM/DISP的信号线,这个信号线的作用就是打开LCD的显示开关,让其进行显示,它 可以接到任何一个 GPIO 口上。S3C2410 中提供了一个 VM 信号,可以将 LCD的这个信号与 S3C2410 的 VM 信号相接即可,然后在驱动中一定要加上如下语句(蓝色选中部分):

  否则你的 LCD可能没有任何显示哦(对于 TFT 屏不需要这个语句)

  6) 关于 12 位色的 CSTN屏的驱动还需要做一些工作,我在这里简单介绍一下:

  a) 首先要完成一个 fbcon-cfb12.c和 fbcon-cfb12.h 的编写,这两个文件很简单,在armLinux 中不是提供了 fbcon-cfb16.c 和 fbcon-cfb12.h 吗?简单修改一下就可以了;

  b) 将 fbcon-cfb12.c 的编译加入 Config.in 中(不会的话去 google 搜一下,或者看一下我的另一篇文章《JFFS2 在 HHARM2410 上的实现》,里边有一些说明),并定义一个 FBCON_HAS_CFB12 参数(模仿 FBCON_HAS_CFB16 呗);

  c) 另外,需要在 s3c2410fb.c 中的相应部分加上对 12位色的支持即可。呵,说起来简单,但实际做起来可能会有一些问题,给大家一个窍门:在程序中找到#ifdef FBCON_HAS_CFB16 之类的代码,简单理解一下加上对 12 位色的支持;

  d) 我只给出函数 s3c2410fb_set_var中的改动,其他的应该都不是很困难,相信朋友们都能搞定。

  e) 不要跟我要源码哦,否则老板会不高兴哦 。

  4. 驱动写好了,重新 Make,下载就可以了。如果一切顺利,在 TFT 屏或 256 色的 CSTN屏上会有一个漂亮的小蜻蜓(应该是蜻蜓吧)出现。注意,并不是蜻蜓出现了就代表你的驱动 OK了,还要用 GUI 程序做进一步的测试,因为某一个或几个参数虽然不正确,但是仍然能够看到小蜻蜓的,但显示图形的时候就有问题了。另外,在驱动 CSTN到 12位色的时候,我们在屏上看不到小蜻蜓(我的 N块 CSTN屏上都没见到小蜻蜓),我想,可能是 armLinux 本身不支持 12 位色显示,或者我们某些地方没搞对的原因吧,但这不代表你的驱动有问题,用 GUI 程序写 FrameBuffer,看看能否的到正确的结果。

  5. GUI 程序的编写

  FrameBuffer 驱动写好了,那么怎么去使用,怎么在 LCD 上显示图像呢?这就是 GUI程序的任务了,其实要在 LCD 上显示图像,说白了就是把数据(包含颜色)写到FrameBuffer 中对应的位置就可以了。如果你使用如 Microwinow、MiniGui、Qt 之类的GUI,则没有必要关心 FrameBuffer与 LCD屏上的点如何进行映射了,但如果你在使用了 CSTN 屏,并且要显示效果好的照片,选择了 CSTN 的 12 位色(4096色 ),那你就要自己写 GUI 程序了,因为好像 armLinux(Linux)本身都不支持 12 位色的,听说 MiniGui支持 12 位色,但我在工作中的要求只是显示图形而已,没有去深入研究 MiniGui,所以自己写了。

  另外请朋友们见谅的是我不能给出全部的源代码,因为我毕竟受雇于人,有些东东是可以 GPL 的,而有些东东暂时是不可以 GPL 的。

  下面给出我的程序的部分代码,希望对朋友们有所帮助。

  1) 全局变量的定义:

  定义几个全局变量,用起来方便。

  2) 初始化图形显示引擎,将 fb0与 GUI 的 buffer做个映射

  用mmap函数使用户空间的一段地址关联到设备内存(FrameBuffer)上。无论何时,只要程序在分配的地址范围内进行读取或者写入,实际上就是对 设备的访问,使用 mmap 可以既快速又简单地访问显示卡的内存。对于象这样的性能要求比较严格的应用来说,直接访问能给我们提供很大不同。 不过我曾将帮一个网友调试了一个 S3C44B0 上的 GUI 程序,在他的 GUI 中 mmap 函数总会出错,因为没有拿到他的硬件和驱动源码,没有分析出其中的原因,所以只得用 write函数,直接向 fb0 写入数据,奇怪的是只写入一部分数据好像都不起任何作用,只得整屏数据写入才搞定了。这可就比较痛苦了,不过好在他只是写入的黑白数据,数据量还不是很 大,要是彩色的那可真的痛苦了 。

另外,我还想多啰嗦两句,FrameBuffer的像素点与LCD屏上的像素点的对应关系 ,深入了解一下对程序的理解可能会更清楚一点。我们知道黑白(2 色)颜色用 0 和 1 就可以表示了,也就是 1 位数据就可以了,那 1 个字节就可以表示 8 位数据,假如这个字节是10101010,FrameBuffer 的偏移地址为 0,则在 LCD 屏上便会显示出 4 个黑点,黑点中间会有 4 个白点出现(假如 1 是黑色);对于 4 色则

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top