Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1013631
  • 博文数量: 238
  • 博客积分: 2842
  • 博客等级: 少校
  • 技术积分: 2765
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-16 00:20
个人简介

stdlf

文章分类

全部博文(238)

文章存档

2013年(6)

2012年(13)

2011年(82)

2010年(89)

2009年(48)

我的朋友

分类:

2010-01-26 20:11:50

S3C44B0X 与 LM2028 的接口及其编程
The interface and programming of LM2028 with S3C44BOX
(江苏工业学院)万 军 张小鸣Wan,Jun Zhang,Xiaoming摘 要:简要描述了 S3C44B0X 内置的 LCD 控制器和图形点阵式液晶显示模块 LM2028的主要特性,给出了 S3C44B0X 与 LM2028 的硬件电路连接图。并在此基础之上,详细介绍了基本图形、图像、中英文字符在 LCD 模块上的显示方法。关键词:S3C44B0X;LCD 控制器;液晶显示模块;LM2028中图分类号:TP368 文献标识码:
BAbstract: This Paper briefly describes the main characteristic of S3C44B0X LCD Controller and the full graphics LCD Module LM2028.The hardware interface circuit between S3C44B0X and LM2028 is given. Then the display methods of basic graphics 、picture and Chinese and western character are introduced in detail.Key words:S3C44B0X;LCD Controller;LCD Module;LM2028
1.引言
S3C44B0X 是 Samsung 公司为手持设备等应用提供的高性价比的微处理器。它采用ARM7TDMI 核,并在 ARM7TDMI 核基本功能的基础上集成了丰富的外围功能模块,诸如ADC、UART 、LCD 控制器等外围器件,以便低成本设计嵌入式应用系统。其中,LCD 控制器支持彩色/灰度/单色 LCD 屏,具有很强的通用性。LM2028 是像素格式为 320×240 的STN 型灰度液晶显示模块。本文给出了 S3C44B0X 与 LM2028 的硬件电路连接方法,搭建了以两者为基础的嵌入式液晶系统工作平台。在此平台的基础上,本文详细讨论了基本图形、图像、中英文字符的显示方法,并给出了具体实现的程序。
2 S3C44B0X LCD 控制器简介
LCD 控制器的作用是将系统存储器中的 LCD 图像数据传送到外部 LCD 驱动器中,并产生必须的 LCD 控制信号。S3C44B0X LCD 控制器支持在灰白 LCD 上的单色、4 级灰度、16 级灰度显示,也能与彩色 LCD 接口支持最大 256 色的显示。可以编程支持不同水平和垂直点数(640×480, 320×240, 160×160 等)、不同数据线宽度、不同接口时序和刷新速率的LCD,支持 4 位双扫描、4 位单扫描、8 位单扫描的 LCD 显示器,并支持水平/垂直卷动,以用来支持更大的屏幕显示(如 1280×1280)[1]。S3C44B0X 支持查找表,用于各种色彩选择或灰度级别的选择。在灰度模式中,通过查找表可以在 16 级灰度中选择四种灰度,在彩色模式中,一个字节的图像数据是用 3 位表示红色,3 位表示绿色,2 位表示蓝色,通过查找表可以选择 16 级红色中的 8 种红色、16级绿色中的 8 种绿色和 16 级蓝色中的 4 种蓝色。
3 LM2028 介绍
[2]LM2028 是 TopWay 公司生产的图形点阵 STN 液晶模块。该模块显示格式为 320 像素×240 行,使用 Samsung S6B2086 芯片对显示屏幕进行驱动,具有接口简单、可靠性高和便于操作等特点。该型号液晶显示模块共有 16 根引脚,包括 5 根电源线、4 根数据线和 7 根控制线。FLM、
LP、CP 分别为帧同步信号、行扫描信号、时钟信号;M 为 LCD 驱动器的 AC 控制信号;/DISPOFF 为液晶显示屏开关控制信号;V0 为 LCD 对比度调节设置;D0~D3 为显示数据输入信号,可以直接连到数据总线上;VDD、VSS、VEE、BLA、BLK 为电源线,其中 VEE为驱动 LCD 的负电压,BLA 和 BLK 分别为背光正极、背光负极。LM2028 的接口时序图如图 1 所示。在该时序图中未画出时钟脉冲 CP。LP 信号的周期为 320/4 个 CP 脉冲,该信号启动 LCD 屏的新一行数据。每个帧同步 FLM 信号周期为 240个 LP 脉冲。MFLMLPD0~D3图 1 LM2028 的信号时序图
4 S3C44B0X 和 LM2028 的连接
S3C44B0X 和 LM2028 液晶显示模块的连接比较容易实现,只需将 S3C44B0X LCD 的外部接口信号 VFRAME、VLINE、VCLOCK、VM、VD0~VD3 分别连接到 LM2028 的对应引脚上。并在 LCD 模块的电源线引脚上加载相应的电源。具体引脚连接如图 2 所示。图中NC 引脚保持断开,/DISPOFF 可以接至 VDD,V0 通过电位器 R 来进行液晶屏对比度调节,VEE 负压值也通过电位器进行改变。图 2 接口连接电路
5 软件编程
5.1 基本图形的显示基本图形包括直线、矩形、圆等。基本图形显示的关键是像素点的绘制。若对液晶显示模块设置显示模式为黑白单色模式,则屏上每个像素点只需一个数据位表示。但显示缓冲区的内容在 4 位单扫描模式下与显示屏像素点对应关系是,每一行以大端模式的“字”为单位顺序排列,即以 4 个字节为单位,高字节在前排列。例如,LCD 屏上的第一个像素点对应显示缓冲区的第 3 个字节的第 7 位。绘制像素点函数代码如下:
#define SCR_XSIZE (320)
void LCD_PutPixel(int x,int y, unsigned char c)
{ unsigned int *pbuffer;
if(DISPMOD==MONO) //黑白单色模式
{ pbuffer =(U32*)frameBuffer1;
pbuffer[(y)*SCR_XSIZE/32+(x)/32]=pbuffer[(y)*SCR_XSIZE/32+(x)/32]&(~(0x80000000>>(x%32)))|((c)<<(31-(x)%32));
}
 else if(DISPMOD==G16) //16 级灰度模式
{ pbuffer =(U32*)frameBuffer16;
pbuffer[(y)*SCR_XSIZE/8+(x)/8]=pbuffer[(y)*SCR_XSIZE/8+(x)/8]&(~(0xf0000000>>((x%8)*4)))|((c)<<(7-((x)%8)*4));
}
}函数中,参数包含像素点的坐标(x,y)和绘制的颜色。对于本程序,c 的值只有 0x1 或0x0,0x1 时表示点亮像素点。像素点的参考坐标设定以 LCD 屏幕的左上角为原点,水平方向为 x 轴,垂直方向为 y 轴。在黑白单色模式下,对于每个像素点,需要 1 位来存储灰度信息,则对于 320×240 的液晶屏,需要的显示缓冲区大小为 320*240/32*4=9600 个字节单元,而在 16 级灰度模式下,每个像素点需要 4 位来存储灰度信息,显示缓冲区大小应为320*240/8*4=38400 个字节单元。根据绘制像素点的函数,即可构造显示各种基本图形的函数。特别的,利用 S3C44B0X的实时时钟中断和绘制线段函数,可以实现类似于 Windows 中闪烁光标的效果。5.2 图像的显示实现图像的显示一般包含两种方法。一是直接分析各种图像文件的格式,从图像数据中读取像素颜色或亮度等信息,该方法需要对图像文件的格式有深入的了解,编程难度也较大。另一方法是将所显示的图像转换为液晶显示模块所需要的点阵图形。具体的,可以利用转换工具将各种图像转换成 C 语言格式的数组文件。以下是采用上述第二种方法来显示一副大小为 320×240 的 bmp 图像的示例,如图 3 所示,显示模式是 16 级灰度。实际操作时,首先用转换工具 Image2Lcd 软件把 bmp 图像转换成 Image 点阵数组,数组中一个字节存放两个像素点的灰度信息。然后依次将 Image 数组中的数据分量按每 4 个字节构成一组,放置到 LCD 显示缓冲区的字单元中。图 3 图像显示

具体程序参考如下:

void PictureDisp(void)
{
 unsigned int *pbuffer,temp_data,i;
 pbuffer =(unsigned int*) frameBuffer16; //LCD 显示缓冲区
 clrscreen();//清屏
 for(i = 0; i< (38400/4) ;i++)
  {
     temp_data = (Image [i*4] << 24) + (Image [i*4+1] << 16) +  (Image[i*4+2] << 8) +(Image [i*4+3]);
     pbuffer[i] = temp_data;
 }
}

5.3 字符的显示
可以通过编程在液晶显示屏上实现各种字体、各种大小的英文和中文字符。通常的方法有两种,一是利用字库文件,根据字符在字库中的位置得到字符的点阵数据。另一种方法是采用与图像显示类似的方法。本文采用后一种方法,具体的步骤为:(1) 首先利用画图软件,新建一副保存待显示字符的图片,图片宽度和高度视待显示字符大小而定。比如要显示 32×32 点阵汉字,则图片宽度和高度均设为 32 像素,在图片框内输入字号为 22 的汉字,字体可以事先设定。(2) 利用图像转换软件将(1)中保存的图片进行转换,提取出字符字模。(3) 根据字符在液晶屏上的显示位置,将字符点阵数据写到显示缓冲区中对应的存储单元。具体程序如下:

void DWordDisp(unsigned char (*codes)[128],int num,int pos,int high) //32*32
{
   unsigned int *pbuffer,temp_data,int;
   pbuffer =(unsigned int*)frameBuffer1;
   for(i = 0; i< (128/4) ;i++)
 {
      temp_data = (codes[num][i*4] << 24) + (codes[num][i*4+1] << 16) +(codes[num][i*4+2] << 8) +(codes[num][i*4+3]);
      pbuffer[(i+high)*10+ pos] = temp_data;
  }
}
该程序用以显示 32×32 点阵字符,其中指针数组 codes 保存转换后的一些字符的点阵数据,num 表示待显示的字符索引,pos 为字符显示的位置,high 为字符左上角的高度,以像素为单位。在显示点阵为 32×32、LCD 显示屏为 320×240 大小的情况下,每行显示 10个字符,共显示 7 行。参考上述程序,可以类似的实现 16×16 点阵、8×16 点阵字符的显示;也可方便的实现字符串的整体显示,而不需要将字符串中字符分别显示。图 4 是用数码相机拍摄的字符和基本图形显示效果图。
6 总结
本文在将 S3C44B0X 和 LM2028 结合使用的基础上设计和开发了液晶显示系统,该系统提供了良好的界面显示效果,已在真空重合器智能控制软件中得到了使用。文中所讨论的显示方法在实现 S3C44B0X 与其它类型 LCD 模块连接和应用时,具有一定的参考价值。在构造液晶显示程序时,有两点值得注意:(1)对于容量比较大的系统中实现字符的

阅读(742) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~