电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>DSP>uC/GUI在S3C44B0X的移植及其在数据显示系统中的应用  

uC/GUI在S3C44B0X的移植及其在数据显示系统中的应用  

2017-10-26 | rar | 0.3 MB | 次下载 | 1积分

资料介绍

 C/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)完整的液晶初始化程序
  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的内容:
  /*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*)(frame
  Buffer256+(((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功能强大,响应迅速,稳定性高,具有广泛的应用前景。
下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1电子电路原理第七版PDF电子教材免费下载
  2. 0.00 MB  |  1489次下载  |  免费
  3. 2单片机典型实例介绍
  4. 18.19 MB  |  91次下载  |  1 积分
  5. 3S7-200PLC编程实例详细资料
  6. 1.17 MB  |  27次下载  |  1 积分
  7. 4笔记本电脑主板的元件识别和讲解说明
  8. 4.28 MB  |  18次下载  |  4 积分
  9. 5开关电源原理及各功能电路详解
  10. 0.38 MB  |  9次下载  |  免费
  11. 6基于AT89C2051/4051单片机编程器的实验
  12. 0.11 MB  |  4次下载  |  免费
  13. 7基于单片机和 SG3525的程控开关电源设计
  14. 0.23 MB  |  3次下载  |  免费
  15. 8基于单片机的红外风扇遥控
  16. 0.23 MB  |  3次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234313次下载  |  免费
  3. 2PADS 9.0 2009最新版 -下载
  4. 0.00 MB  |  66304次下载  |  免费
  5. 3protel99下载protel99软件下载(中文版)
  6. 0.00 MB  |  51209次下载  |  免费
  7. 4LabView 8.0 专业版下载 (3CD完整版)
  8. 0.00 MB  |  51043次下载  |  免费
  9. 5555集成电路应用800例(新编版)
  10. 0.00 MB  |  33562次下载  |  免费
  11. 6接口电路图大全
  12. 未知  |  30319次下载  |  免费
  13. 7Multisim 10下载Multisim 10 中文版
  14. 0.00 MB  |  28588次下载  |  免费
  15. 8开关电源设计实例指南
  16. 未知  |  21539次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935053次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537791次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420026次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234313次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233045次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191183次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183277次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138039次下载  |  免费