易妖游戏网
您的当前位置:首页实验四 液晶显示实验 昆明理工大学

实验四 液晶显示实验 昆明理工大学

来源:易妖游戏网
昆明理工大学信息工程与自动化学院学生实验报告

( 2011 —2012 学年 第 2 学期 )

课程名称:嵌入式应用及基础 开课实验室:443 2014 年 5 月 27 日 年级、专业、班 物联网111 学号 201110410130 姓名 杨国锋 成绩 实验项目名称 教师评语 实验四 液晶显示实验 A.了解□ A.强 □ A.达到□ A.规范□ A.详细□ B.基本了解□ B.中等 □ B.基本达到□ B.基本规范□ B.一般 □ 指导教师 欧阳鑫 该同学是否了解实验原理: 该同学的实验能力: 该同学的实验是否达到要求: 实验报告是否规范: 实验过程是否详细记录: C.不了解□ C.差 □ C.未达到□ C.不规范□ C.没有 □ 教师签名: 年 月 日 一、实验目的: 初步掌握液晶屏的使用及其电路设计方法。

掌握S3C44B0X处理器的LCD控制器的使用。

通过实验掌握液晶显示文本和图形的方法以及程序设计。 二、实验原理:

1. 液晶显示屏(LCD,Liquid Crystal Display)

主要用于显示文本及图形信息。它具有重量轻、体积小、耗电量低、无辐射、平面直角 显示以及影像稳定不闪烁等特点,因此在许多电子应用系统中,常使用液晶屏作为人机界面, 而且已广泛应用于各类显示器件上。 主要类型及性能参数

液晶显示按显示原理分为STN和TFT两种:

(1) STN(Super Twisted Nematic,超扭曲向列 )液晶显示屏

STN液晶显示器与液晶材料、光线的干涉现象有关,显示的色调以淡绿色与橘色为主。 STN液晶显示器中,使用X、Y轴交叉的单纯电极驱动方式,水平方向驱动电压控制显示 部分的亮或暗,垂直方向的电极则负责驱动液晶分子的显示。 (2) TFT(Thin Film Transistor,薄膜晶体管)彩色液晶屏

随着液晶显示技术的不断发展和进步, TFT液晶显示屏被广泛用于制作成电脑中的液 晶显示设备。 TFT液晶显示屏既可在笔记本电脑上应用(现在大多数笔记本电脑都使用TFT 显示屏),也常用于主流台式显示器。 (3) 液晶显示屏主参数

使用液晶显示屏时主要考虑的参数有外形尺寸、分辨率、点宽、色彩模式等。 2. S3C44B0X LCD控制器

S3C44B0X处理器集成了LCD控制器,支持4位单扫描、4位双扫描和8位单扫描工

作方式。处理器使用内部RAM区作为显示缓存,并支持屏幕水平和垂直滚动显示。数据的 传送采用DMA方式,以达到最小的延迟。支持多种类型的液晶屏,如下: 单色液晶

4级或16级灰度屏

256色彩色液晶(STN液晶)

LCD控制器主要提供液晶屏显示数据的传送、时钟和各种信号的产生与控制功能。 S3C44B0X处理器的LCD控制器主要部分框图如下图所示:

1) LCD控制器接口S3C44B0X LCD控制器接口如下表所列:

2) S3C44B0X支持的扫描模式

a) 4位单扫描显示控制器扫描线从左上角位置进行数据显示。显示数据从VD[3:0]获得;彩色液晶屏数据位代表RGB色。

b) 4位双扫描显示控制器分别使用两个扫描线进行数据显示。显示数据从VD[3:0]获得高扫描数据;从VD[7:4]获得低扫描数据;彩色液晶屏数据位代

表RGB色 。

c) 8位单扫描显示控制器扫描线从左上角位置进行数据显示。显示数据从VD[7:0]获得;彩色液晶屏数据位代表RGB色 。

3) 数据的存放与显示液晶控制器传送的数据表示了一个像素的属性:4级灰度屏用2个数据位,16级灰度屏用4个数据位,RGB彩色液晶屏使用8个数据位(R[7:5]、G[4:2]、B[1:0])。显示缓存中存放的数据必须符合硬件及软件设置,即要注意字节对准方式。4) LCD控制器寄存器S3C44B0X LCD处理器所包含的可编程控制寄存器共有18个,如下表所列:

5) LCD控制器主要参数设定正确使用S3C44B0X LCD控制器,必须设置控制器所有18 个寄存器。控制器信号VFRME、VCLK、VLINE和VM要求配置控制寄存器LCDCON1/2;液晶显示屏的显示与控制以及数据的存取控制,则要求配置其他相关寄存器。详细配置情况可参考教材及其他参考资料。

6) 灰度屏的支持与设置S3C44B0X中的LCD控制器支持两种灰度模块:2位象素(4级灰度)、4位象素(16级灰度)。对于4级灰度屏(2位象素),LCD控制器通过设置BLUELUT[15:0]指定使用的灰度级,并且从0 ~ 4级使用BLUELUT 的4个数据位。16级灰度屏使用BLUELUT的每一位来表示灰度级别。

7) 液晶(LCD)电路设计设计液晶显示屏控制电路时必须提供电源驱动、偏压驱动及LCD显示控制器。由于S3C44B0X处理器自带LCD控制器,而且可以驱动实验板所选用的液晶屏,所以控制电路的设计可以省去显示控制电路,只需进行电源驱动和偏压驱动的电路设计即可。其结构如图3-6所示。

电源驱动与偏压驱动参考电路实验板所选用的液晶屏的驱动电源是21.5V,因此,直接使用实验系统的3V或5V电源时需要电压生压控制。实验系统采用MAX629电压管理模块,以提供液晶屏的驱动电压。偏压电源可由系统升压后的电源分压得到。S3CEV40的电源驱动与偏压驱动参考电 路如图3-7所示。

三、实验内容

1. LCD液晶屏:320*240像素,16级灰度,单扫描模式,首地址为0xC300000,偏移点数2048(512个字节) VLINE=垂直尺寸-1=240-1=0xEF PAGEWIDTH=320*4/16 OFFSIZE=512

LCDBANK=0xC300000>>22 LCDBASEU=0x100000>>1

LCDBASEL= LCDBASEU+(PAGEWIDTH+OFFSIZE)*(LINEVAL+1) 如是双扫描则LINEVAL和LCDBASEL变化。

三、 实验代码

1)寄存器初始化 void Lcd_Init (void)

{

rDITHMODE=0x12210; rDP1_2 =0xa5a5; rDP4_7 =0xba5da65; rDP3_5 =0xa5a5f; rDP2_3 =0xd6b; rDP5_7 =0xeb7b5ed; rDP3_4 =0x7dbe; rDP4_5 =0x7ebdf; rDP6_7 =0x7fdfbfe;

1.抖动模式寄存器(DP1_2、DP4_7、DP3_5、DP2_3、DP5_7、DP3_4、DP4_5、DP6_7和DITHMODE,前8个使用初始值,最后使用定值)

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

2.LCD控制寄存器1:首先定义八位单扫描显示模式;频率由MVAL决定;WDLY=16CLOCK;WLH=16CLOCK.

rLCDCON2=(LINEVAL)|(HOZVAL_COLOR<<10)|(10<<21); 3.LCD控制器2:设置320*240;扫描空闲时间为10MCLK rLCDCON3=0; 4.禁止LCD自动刷新

rLCDSADDR1= (0x3<<27) | ( ((unsigned int)aLcdActiveBuffer>>22)<<21 ) | M5D((unsigned int)aLcdActiveBuffer>>1);

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

rLCDSADDR3= (LCD_XSIZE/2) | ( ((SCR_XSIZE-LCD_XSIZE)/2)<<9 ); 5.帧缓冲起始地址寄存器1/2/3

rREDLUT =0xfdb920; rGREENLUT=0xfdb920; rBLUELUT =0xfb40;

6.颜色查找表寄存器:前两个高16位后为1,低十六位后为0;蓝的高8位后为两个1,低8位后为两个0

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

7.重置为8为单扫描 rPDATE=0xfe; 8.打开背光灯 Lcd_Clr(); }

2)清屏函数

void Lcd_Clr(void) {

INT32U i;

INT32U *pDisp = (INT32U*)aLcdActiveBuffer;

for (i = 0; i < (SCR_XSIZE * SCR_YSIZE / 4); i++) { *pDisp++ = ALLWHITE; } }

3)画水平和垂直线函数

void Lcd_Draw_HLine(INT16 usX0, INT16 usX1, INT16 usY0, INT8U ucColor, INT16U usWidth) {

INT16 usLen;

if( usX1 < usX0 ) {

GUISWAP (usX1, usX0); }

while( (usWidth--) > 0 ) {

usLen = usX1 - usX0 + 1; while( (usLen--) > 0 ) {

LCD_PutPixel(usX0 + usLen, usY0, ucColor); }

usY0++; } }

void Lcd_Draw_VLine (INT16 usY0, INT16 usY1, INT16 usX0, INT8U ucColor, INT16U usWidth) {

INT16 usLen;

if( usY1 < usY0 ) {

GUISWAP (usY1, usY0); }

while( (usWidth--) > 0 ) {

usLen = usY1 - usY0 + 1; while( (usLen--) > 0 ) {

LCD_PutPixel(usX0, usY0 + usLen, ucColor);

}

usX0++; } }

注:由此,可以画矩形框,只要定好四个顶点,随后画出两对水平和垂直线就可以了:

void Lcd_Draw_Box(INT16 usLeft, INT16 usTop, INT16 usRight, INT16 usBottom, INT8U ucColor) {

Lcd_Draw_HLine(usLeft, usRight, usTop, ucColor, 1); Lcd_Draw_HLine(usLeft, usRight, usBottom, ucColor, 1); Lcd_Draw_VLine(usTop, usBottom, usLeft, ucColor, 1); Lcd_Draw_VLine(usTop, usBottom, usRight, ucColor, 1); }

1) 汉字字符串

void Lcd_DspHz16(INT16U x0, INT16U y0, INT8U ForeColor, INT8U *s) {

INT16 i,j,k,x,y,xx; INT8U qm,wm; INT32U ulOffset;

INT8 hzbuf[32],temp[2];

for( i = 0; i < strlen((const char*)s); i++ ) { if( ((INT8U)(*(s+i))) < 161 ) { temp[0] = *(s+i); temp[1] = '\\0'; break; } else { qm = *(s+i) - 161; wm = *(s + i + 1) - 161; ulOffset = (INT32U)(qm * 94 + wm) * 32; for( j = 0; j < 32; j ++ ) {

hzbuf[j] = g_auc_HZK16[ulOffset + j]; }

for( y = 0; y < 16; y++ ) {

for( x = 0; x < 16; x++ ) {

k = x % 8;

if( hzbuf[y * 2 + x / 8] & (0x80 >> k) ) { xx = x0 + x + i * 8; LCD_PutPixel( xx, y + y0, (INT8U)ForeColor); } } } i++; } } }

2) 字符串

void Lcd_DspAscII8x16(INT16U x0, INT16U y0, INT8U ForeColor, INT8U * s) {

INT16 i,j,k,x,y,xx; INT8U qm;

INT32U ulOffset;

INT8 ywbuf[16],temp[2];

for( i = 0; i < strlen((const char*)s); i++ ) { if( (INT8U)*(s+i) >= 161 ) { temp[0] = *(s + i); temp[1] = '\\0'; return; } else { qm = *(s+i); ulOffset = (INT32U)(qm) * 16; //Here to be changed tomorrow for( j = 0; j < 16; j ++ ) { ywbuf[j] = g_auc_Ascii8x16[ulOffset + j]; }

for( y = 0; y < 16; y++ ) {

for( x = 0; x < 8; x++ ) {

k = x % 8; if( ywbuf[y] & (0x80 >> k) ) { xx = x0 + x + i*8;

LCD_PutPixel(xx, y + y0, (INT8U)ForeColor); } } } } } }

3) 本实验结果:

首先对18个寄存器进行初始化,在串口到超级终端可输出LCD测试选项,接着在LCD上显示蓝色的“Embest S3CEV40”和“英蓓特三星实验平台”和“ShenZhen Embest Info&Tech Co.,LTD”以及四个矩形。

因篇幅问题不能全部显示,请点此查看更多更全内容