基于uC/GUI的数据显示系统的设计及实现方法研究

发布者:qpb1234最新更新时间:2010-01-27 来源: 现代显示关键字:uC/GUI  S3C44B0  移植  LCD 手机看文章 扫描二维码
随时随地手机看文章

    uC/GUI是Micrigm 公司推出的用于嵌入式系统的图形用户接口(graphics user interface,GUI)软件包,由于uC/GUI完全以ANSI-C编写,因此它与处理器无关,可以很方便地移植到不同的操作系统和嵌入式微处理器上,并可支持不同尺寸的图形液晶显示器。它采用层次化的设计,功能强大,移植方便,被广泛地应用于嵌入式领域,如PDA、机顶盒以及DVD NCD播放机等。本文详细介绍了uC/GUI在ARM 内核S3C44B0X的移植。实践证明uC/GUI具有良好的实时性和稳定性以及广泛的应用前景。

1、硬件连接与液晶显示原理

    本设计使用的硬件采用ARM7开发板,液晶模块为L78C64,它是7.8in 256色STN型LCD显示屏,分辨率为640×480。

    LCD控制器外部接口信号的定义及其与LCD模块各信号之间的对应关系如下:

(1)VFRAME:LCD控制器与LCD驱动器之间的帧同步信号。该信号负责指出LCD屏新的一帧开始的时间。LCD控制器在一个完整帧显示完成后立即插入一个VFRAME信号,并开始新一帧的显示。该信号与LCD模块的YD信号相对应;

(2)VLINE:LCD控制器和LCD驱动器之间的线同步脉冲信号。该信号用于将LCD驱动器水平线(行)移位寄存器的内容传送给LCD屏显示。LCD控制器在整个水平线(整行)数据移入LCD控制器后,插入一个VLINE信号。该信号与LCD模块的LP信号相对应;

(3)VCLK:LCD控制器和LCD驱动器之间的像素时钟信号。由LCD控制器送出的数据在VCLK的上升沿处送出,在VCLK的下降沿被LCD驱动器采样。该信号与LCD模块的XCK信号相对应;

(4)VM:LCD驱动器的AC信号。VM信号被LCD驱动器用于改变行和列的电压极性,从而控制像素点的显示和熄灭。VM信号可以与每个帧同步,也可以与可变数量的VLINE信号同步;

(5)VD3~0 LCD:像素点的数据输入端口。与LCD模块的D3~0相对应:

(6)VD7~4 LCD:像素点的数据输入端口。与LCD模块的D7~4相对应。

    液晶显示原理:写满整个屏的数据称为1个“帧”数据,YD是帧同步信号,该信号启动LCD屏的新一帧数据。两个YD脉冲之间的时间长度称为帧周期。根据LCD模块的特性,刷新时间为12~14ms,频率为70~80Hz。每一帧包括480个LP脉冲。LP为行(共480行)数据输入锁存信号,也就是行同步脉冲信号。该信号启动LCD屏的新一行数据。XCK为行数据输入信号,也就是每1行中像素点数据传输的时钟信号。每组8位的数据在XCK的下降沿被输入锁存,因此,每1行包括640×3/8个XCK脉冲信号。D0~D7是8位的显示数据输入信号。

2、驱动程序设计

    下面分三步完成液晶的初始化。

(1)I/O口的初始化

    由于采用S3C44B0X的PC接口和PD接口作为LCD驱动接口,因此,需要设置PC接口工作在第3功能状态和PD接口工作在第2功能状态。

(2)相应控制寄存器的设置方法

    S3C44B0X包括一个LCD控制器时序发生器TIMEGEN, 由它来产生VFRAM,VLINE,VCLK和VM 控制时序。这些控制信号由寄存器LCOCON1和LCDCON2进行配置。通过对寄存器种配置项目的设置,TIMEGEN就可以产生适应于各种LCD屏的控制信号了。

    VFRAM和VLINE脉冲的产生是通过对LCDCON2寄存器的HOZVAL和LINEVAL进行配置来完成的。每个域都与LCD的尺寸和显示模式有关。

其中,HOZVAL=(显示宽度/VD数据线位数)-1。

    在彩色模式下,显示宽度=3×每行的像素点数。

    对所选的液晶模块,HOZVAL=(640×3/8)-1;LINEVAL=(显示宽度)-1。

    对所选的液晶模块,LlNEVAL=480-1。

    VCLK信号的频率可以通过LCDCON1寄存器的CLKVAL域来确定,即

VCLK=MCLK/(CLKVAL×2)

    LCD控制器的最大VCLK频率为16.5MHz,几乎支持所有已有的LCD驱动器。由于上述关系,CLKVAL的值决定了VCLK的频率。为了确定CLKVAL的值,应该计算一下LCD控制器向VD端口传输数据的速率,以便使VCLK的值大于数据传输的速率。

    数据传输速率的公式为:

数据传输速率=HS×VS×FR×MV

其中,HS—LCD的行像素值;VS—LCD的列像素值:FR—帧速率;MV—模式值,这里取8位单扫描,彩色。

    对于所选用的液晶模块:HS=640;VS=480;FR=70Hz:MV=3/8。因此,数据传输速率=640×480×70×3/8=8,064,000Hz。

    VCLK值应该大于8MHz而小于16MHz,因此,CLKVAL可以取9~15。

(3)完整的液晶初始化程序

C程序

void LCD_Init_Controler()

{

rLCDCON1=(0)|(2<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_COLOR<<12);

//disable,8B_SNGL_SCAN,WDLY=8clk,WLH=8clk,rLCDCON2=(LINEVAL)|(HOZVAL_COLOR<<10)|(10<<21);

//LINEBLANK=10(without any calculation)

rLCDSADDR1= (0x3<<27) | (((U32)frameBuffer256>>22)<<21)|M5D((U32)frameBuffer256>>1);

//256-color,LCDBANK,LCDBASEU

rLCDSADDR2=M5D((((U32)frameBuffer256+(SCR_XSIZE*LCD_YSIZE))>>1))|(MVAL<<21);

rLCDSADDR3= (LCD_XSIZE/2) | (((SCR_XSIZE-LCD_XSIZE)/2)<<9);

//The following value

has to be changed forbetter display.

rREDLUT =0xfdb96420;

rGREENLUT=0xfdb96420;

rBLUELUT=0xfb40;

rDITHMODE=0x0;

rDP1_2=0xa5a5;

rDP4_7=0xba5da65;

rDP3_5=0xa5a5f;

rDP2_3=0xd6b;

rDP5_7=0xeb7b5ed:

rDP3_4=0x7dbe;

rDP4_5=0x7ebdf;

rDP6_7=0x7fdfbfe;

rLCDCON1= (1)|(2<<5)|(0<<7)|(0x3<<8)|(0x3<<10)|(4<<12);

}

    经过以上几步,就完成了液晶的硬件驱动,下面就是移植软件包,调用底层驱动,完成复杂的显示任务。

3、uC/GUI软件包的移植

3.1 uC/GUI特点

(1)支持任何8位、16位和32位的CPU,只要求CPU具有相应的ANSI-C编译器即可;

(2)所有硬件接口定义都使用可配置的宏;

(3)字符、位图可显示与LCD的任意点,并不限制与字节长度的整数倍数地址;

(4)所有程序在长度和速度方面都进行了优化,结构清晰;

(5)对于慢速的LCD控制器,可以使用缓冲存储器减少访问时间,提高显示速度。

3.2 uC/GUl移植步骤

    在使用uC/GUI时,可以按照以下几个步骤来进行:

(1)按照需要,定制uC/GUI;

(2)指定硬件设备的地址,编写接口驱动代码;

(3)编译、链接、调试例子程序;

(4)修改例子程序,并测试增加需要的功能;

(5)编写自己的应用程序。

3.3 具体实现

(1)首先介绍uC/GUI的目录结构和基本配置。

uC/GUI主要目录如下:

GUI/ConvertMono 使用黑白显示设备时,所要使用的灰度转换函数

GUI/ConvertColor 使用彩色显示设备时,使用的色彩转换函数

GUI/Config 包含了对uC/GUI进行配置的一些文件

GUI/Core uC/GUI核心代码

GUI/Font uC/GUI与字体相关的代码文件

GUI/LCDDriver LCD驱动代码文件

GUI/MemDev 内存设备支持文件代码

GUI/Touch 输入设备支持的文件代码

GUI/Widget uC/GU1支持的控件代码,包括编辑框、列表框、按钮和选择框等

GUI/WM uC/GUI窗口管理部分代码

(2)修改uC/GUI,使之适于移植。

    在ADS环境中新建一个工程,将上述gui文件夹下的所有文件加入工程。

    将Config文件夹下的3个文件GUIConf.h、GUITouchConf.h和LCDConf.h加入新工程,如下修改LCDConf.h的内容:

C程序

/*LCDConf.h*/

#ifndef LCDCONF_H

#define LCDCONF_H

#define LCDG4 //lcd颜色数,必须定义,LCDMONO(单色),LCDG4(四级灰度),LCDG16(16级灰度)

#define LCD_XSIZE(640) /* LCD水平分辨率 */

#define LCD_YSIZE(480) /* LCD垂直分辨率 */

#define LCD BITSPERPIXEL(8)

#endif /*LCDC0NF_H*/

/*以下是S3C44B0X LCD控制器的配置*/

#include "..incoption.h"

#define SCR_XSIZE (640) //视窗屏幕大小

#define SCR_YSIZE (480)

#define LCD_XSIZE (640) //液晶屏幕大小

#define LCD_YSIZE (480)

#define M5D(n)((n)&0x1fffff)

#define ARRAY_SIZE_G4(SCR_XSIZE/4*SCR_YSIZE)

#define HOZVAL (LCD_XSIZE/4-1)

#define HOZVAL_COLOR (LCD_XSIZE*3/8-1)

#define LINEVAL (LCD_YSIZE-1)

#define MVAL (13)

#define CLKVAL_G4 (10)

#define MVAL_USED 0

#endif /*LCDCONF_H */

(3)加载LCD驱动。

    LCD驱动程序如前面所述,保存在lcd44b0.c中。出了底层的初始化函数LCD_Init_Controler()以外,还需要做以下修改,这里只提关键部分。

    主要进行相关的寄存器配置,以及和GUI的接口程序。这里只提及关键部分。

① 定义显示缓冲区时使用的char数据类型,它是8bit的:

unsigned char Bmp[ARRAY_SIZE_G16];//液晶显示缓冲数组

② 定义读写缓冲区时使用的数据类型,也是8bit的U8:

#define LCD_READ_MEM (Off)*((U8*)(frameBuffer256+(((U32)(Off)))))

#define LCD_WRRITE_MEM(Off,data)*((U8*)frameBuffer256+(((U32)(Off)))))=data

#define LCD_WRITE_REG(Off,data)

⑧ 定义液晶总线宽度定义位8bit:

#ifndef LCD_BUSWIDTH

#define LCD_BUSWIDTH(8)

#endif

④ 定义字节顺序:

#define LCD_SWAP_BYTE_ORDER(0)

    至此uC/GUI的移植基本上已经完成了。当然这里只提供了移植的关键部分,更多更完整的移植还需要做不少的工作,如触控屏的移植、键盘鼠标的移植以及中文字体的移植等。详情请参阅uC/GUI手册中Getting Started一章。

4、数据显示程序设计

    数据显示程序主要是基于uC/GUI平台的GUI函数库,完成字符、曲线的绘制。与画线相关的GUI函数有:

GUI DrawHLine()

    原型:void GUI_DrawLine(int x0,int y0,int x1,int y1);

其中,x0、y0、x1、y1分别为UGI坐标系下的起点和终点的横坐标和纵坐标。

GUI DispDec()

    原型:void GUI_DispDec(I32 v,U8 Len);

其中,v为要显示的十进制变量值,Len为要显示的数据的位数。

5、总结

    本文主要介绍了基于ARM7内核S3C44B0X和L78C64液晶模块硬件平台的uC/GUI的移植,以及在工程上的应用,经过实际应用发现,uC/GUI功能强大,响应迅速,稳定性高,具有广泛的应用前景。

关键字:uC/GUI  S3C44B0  移植  LCD 引用地址:基于uC/GUI的数据显示系统的设计及实现方法研究

上一篇:嵌入式系统中DRAM控制器的CPLD解决方案
下一篇:一种嵌入式智能网络视频监控终端的研究与设计

推荐阅读最新更新时间:2024-05-02 20:59

嵌入式实时操作系统μC/OS-Ⅱ在DSP上的移植
  0. 引言   μC/OS-Ⅱ内核是一个强占式优先级调度的系统,能管理63个任务,支持旗语、信号量、互斥信号量、队列和消息邮箱,是一个是典型的嵌入式实时操作系统。它最早由Jean J. Labrosse创作,源码完全公开,已有众多应用范例,可靠性能得到保证,内核小,移植性好。TI的C2000系列DSP处理器 TMS320LF2407A片内集成16路10位AD,4个通用定时器,8个16位PWM通道,4个CAP捕获单元,41路I/O通道,以及SPI、 RS232、CAN等通信接口,丰富的片内资源,使得控制器不需任何扩展就能满足所有的功能要求,且冗余很少。   DSP处理器在数学运算方面的优势也为智能化过程所需的数据处理提供了支
[嵌入式]
TCL华星:或今年推LCD全屏单点屏内指纹技术
TCL华星在其官方微信公众号发文称,TCL华星已于2019年成功开发出适用于LCD面板的屏下指纹产品,预计在今年推出屏内指纹技术。 据悉,屏下指纹识别是隐藏式指纹识别设计,手指直接按下屏幕指定区域即可解锁,主要是基于光学收集指纹图案后进行识别的方式。 TCL华星表示,为攻克LCD屏下指纹技术,公司花了两年时间,研发团队通过对LCD背光板的不断改造与尝试,成功解决了BLU films开发、TPM亮度的提升、红外传感器识别精度提升等难题,开发出适用于LCD面板的屏下指纹方案,可以清晰看到指纹图像的LCD面板+屏下指纹,并实现LCD屏下指纹的快速识别,多次申请屏下指纹专利技术积累30多件。 目前,武汉华星LCD屏下指纹技术已达量产水平。
[手机便携]
U-Boot在S3C2410上的移植
引言   U-Boot是用于初始化目标板硬件,为嵌入式操作系统提供目标板硬件配置信息,完成嵌入式操作系统装载、引导和运行的固件程序。它能够将系统的软硬件紧密衔接在一起。S3C2410是三星公司的一款基于ARM920T核的嵌入式通用处理器。本文将详细介绍U-Boot在S3C2410开发板上的移植与运行。 U-BOOT简介   U-Boot支持ARM、PowerPC等多种架构的处理器,也支持Linux、NetBSD和VxWorks等多种操作系统。它提供启动加载和下载两种工作模式。启动加载模式也称自主模式,一般是将存储在目标板Flash中的内核和文件系统的镜像装载到SDRAM中,整个过程无需用户的介入。在使用嵌入式产品时,一般工作
[嵌入式]
正点原子LCD-TFT原理讲解与配置介绍
初始化序列由厂家提供,直接向厂家要 对于这个指令9341的描述是错误的 FSMC的简介 TFTLCD没有地址线没有地址线,而把RS连接到A0-A15其中的任意一根线。当地址线来用,这样就可以吧TFTLCD当成一个SROM来用了。 HADDR不可以直接配置,而是固定死的,我们只能选择不能修改 当bank1接的是16位宽的存储器的时候要右移一位对齐。 这其中NBL是用不到的。A只用到了一个,最重要的还是看最下面这个D信号的时序,它对应我们的ILI9341的读写时序。 FSMC_BCRx 这个寄存器,x代表1-4,对应我们的前面的第一个区到第四个区。
[单片机]
正点原子<font color='red'>LCD</font>-TFT原理讲解与配置介绍
三星和LG拟关闭中国LCD电视工厂 中美贸易摩擦影响
    新浪科技讯 北京时间4月16日晚间消息,韩国媒体《The Investor》今日援引知情人士的消息称,受正在酝酿中的中美贸易战的影响,韩国两大科技巨头三星和LG可能被迫关闭其在中国的LCD电视机工厂。   三星和LG在中国LCD电视工厂生产的40英寸至50英寸电视机被出口到美国市场。知情人士称,这两家公司已接近作出关闭工厂的决定,因为美国可能向来自中国的电视机产品征收让他们难以承受的高关税。   据一位三星官员抱怨称:“这几乎是不可避免的。在征收25%的关税后,工厂连收支平衡都无法实现。”而LG一位官员称,LG正在考虑一系列选项,以应对中美之间的贸易冲突。一些知情人士称,关闭中国LCD电视工厂后,三星和LG将把受影
[手机便携]
成功移植SQLite3到ARM Linux开发板
SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。 在开始之前,我们需要确认有 SQLite3源码包; 有交叉编译环境; 有一块开发板; 1、下载 SQLite3源码 地址: http://www.sqlite.or
[单片机]
成功<font color='red'>移植</font>SQLite3到ARM Linux开发板
研調:高解析度已成OLED/LCD面板最重要規格
    不仅TFT-LCD液晶面板近年来持续朝高解析度化发展,三星电子最新Galaxy S-IV采用的AMOLED面板达到Full HD解析度、440 ppi(Pixel Per Inch),也为AMOLED技术立下新里程碑。市场研究机构NPD DisplaySearch认为,这显示「高解析度」已同时成为当前AMOLED和TFT-LCD面板产品之最重要规格。 然而,如何才能提高TFT-LCD面板和AMOLED面板之解析度?就生产制程来看,各有不同方式。以AMOLED面板来看,NPD DisplaySearch表示,虽然AMOLED面板结构较液晶面板简单,但其制造技术与程序却更复杂。目前只有Samsung Display制造技术最成熟
[手机便携]
凯盛科技拟投资5990万元对TFT-LCD玻璃面板生产线进行技改
近日公告,公司已委托下属公司蚌埠国显科技有限公司(以下简称“蚌埠国显”)专业化管理团队,专门运营TFT-LCD玻璃面板减薄业务。因经营业绩稳步提升,市场不断扩大,该生产线现有产能已不能满足市场需求。考虑到该业务市场前景广阔、经济效益较好,蚌埠国显拟新增投资5990万元,对现有TFT-LCD玻璃面板减薄生产线进行技术改造,改造完成后可新增产能126万片,并增加PF膜丝印等新工艺,进一步提高减薄业务竞争力。该项目建设期6个月。 公告表示。本项目的建设不仅弥补短板增加现有产品产能,满足目前订单需要;更将新增设备,完善工艺,以满足OLED减薄市场新的需求,项目有利于提升公司减薄业务的整体竞争力。 业内人士分析,凯盛科技有两大业务版块,即电
[手机便携]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

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