LCD的驱动控制实验
实验目的 了解LCD基本概念与原理 理解LCD的驱动控制 熟悉用总线方式驱动LCD模块 熟悉用ARM内置的LCD控制器驱动LCD
实验内容 学习LCD显示器的基本原理,理解其驱动控制方法.掌握两种LCD驱动方式的基本原理和方法.并编程实现: 2. 用ARM内置的LCD控制器驱动LCD
预备知识 DMA (Direct Memory Access) 用ADS1.2集成开发环境编写和调试程序的基本过程 ARM应用程序的框架结构
LCD液晶显示器的硬件结构 液晶显示的原理是液晶在不同电压的作用下会呈现不同的光特性.液晶在物理上分成两大类,一类是无源Passive的(也称被动式),这类液晶本身不发光,需要外部提供光源,根据光源位置,又可以分为反射式和透射式两种.Passive液晶显示的成本较低,但是亮度和对比度不大,而且有效视角较小,彩色无源液晶显示的色饱和度较小,因而颜色不够鲜艳.
另一类是有电源的,主要是TFT (Thin Film Transitor). 每个液晶实际上就是一个可以发光的晶体管,所以严格地说不是液晶
为每个象素都配备一个物理的寄存器是不现实的,实际上只配备一行的寄存器,这些寄存器轮流连接到每一行象素并装入该行内容,将所有象素行都驱动一遍就显示一个完整的画面(Frame).
Frame Buffer 显示屏的整个显示区域在系统内会有一段存储空间与之对应,通过改变存储空间的内容,从而改变显示屏的内容,该存储空间被称为Frame Buffer或显存.显示屏上的每一点都与Frame Buffer的某一位置对应.所以,实验时我们首先要确定的是Frame Buffer的大小和屏幕上每一象素同Frame Buffer的映射关系. 按照显示屏的性能或显示模式区分,显示屏可以分为单色和彩色.彩色又分为2位色,4位色,8位色,16位色...,显示屏的单双屏幕模式,这些因素会影响显存空间的大小.
单屏幕模式 显示范围是整个屏幕,只需一个Frame Buffer存储整个显示内容,并且只需一个通道来将Frame Buffer的内容传输到显示屏上 双屏幕模式 将屏幕划分成两部分:上半部和下半部.每个部分的显示方式与单屏的方式一致,且两部分同时扫描,工作方式独立,有各自的Frame Buffer,同时有独立的两个通道将Frame Buffer的数据传输到显示屏.
实验原理 Frame Buffer通常是在内存空间中由连续的字节组成.显示器操作:从左到右逐点象素扫描,从上到下逐行扫描.这使得显示屏上的象素同Frame Buffer中的内存空间建立了一对一映射.
实验原理 计算机反映自然界的颜色是通过RGB值来表示.获得RGB值的方式有两种:直接从Frame Buffer里得到,或者是间接得到. 直接得到是指Frame Buffer里存放的就是象素的RGB值.而间接得到是指Frame Buffer里存放的不是RGB值,而是调色板索引值,调色板里存放的才是RGB值.
实验原理 1. LCD的驱动控制 市面上出售的LCD显示模块主要有两种: 带驱动电路的LCD显示模块 操作简单,体积较大,常用总线方式驱动 体积小,需另外的驱动芯片
(1)总线驱动方式 一般带有驱动模块的LCD 显示屏使用这种驱动方式,由于LCD 已经带有驱动硬件电路,因此模块给出的是总线接口,便于与单片机的总线进行连接。驱动模块具有八位数据总线,外加一些电源接口和控制信号。而且自带显示缓存,只需要将要显示的内容送到显示缓存中就可以实现内容的显示。
一个典型的显示模块(HY- 12864B)提供的总线接口
(2)控制器扫描方式 S3C2410X 中具有内置的LCD 控制器,它具有将显示缓存(在系统存储器中)中的LCD图象数据传输到外部LCD 驱动电路的逻辑功能
内置的LCD 控制器提供了下列外部接口信号: VFRAME/VSYNC/STV:帧同步信号(STN)/垂直同步信号(TFT)/SEC TFT信号 VLINE/HSYNC/CPV:行同步脉冲信号(STN)/水平同步信号(TFT)/SEC TFT信号 VCLK/LCD_HCLK:象素时钟信号(STN/TFT)/SEC TFT信号 VD[23:0]:LCD 像素数据输出端口(STN/TFT/SEC TFT) VM/VDEN/TP:LCD驱动交流偏置信号(STN)/数据使能信号(TFT)/SEC TFT 信号 LEND/STH:行结束信号(TFT)/SEC TFT信号 LCD_PWREN:LCD面板电源使能控制信号 LCDVF0:SEC TFT OE信号 LCDVF1:SEC TFT REV信号 LCDVF2:SEC TFT REVB信号
LCD控制器与LCD屏数据线接口
与ARM自带LCD驱动器有关的寄存器 GPCCON Configure the pins of port C GPDCON Configure the pins of port D LCDCON1 LCD control 1 register LCDCON2 LCD control 2 register LCDCON3 LCD control 3 register LCDCON4 LCD control 4 register LCDCON5 LCD control 5 register
与ARM自带LCD驱动器有关的寄存器 LCDSADDR1 Frame buffer start address 1 register Virtual screen address set
本实验参数设置 single scan LCD 分辨率:640×480 TFT 16 BPP (Bits Per Pixel) mode RGB 5:6:5 建立两个一级缓冲,一个二级缓冲: 一级缓冲大小 16bit×(640×480) 二级缓冲大小 24bit×(640×480)
LCDSADDR1 LCDBANK These bits indicate A[30:22] of the bank location for the video buffer in the system memory. LCDBASEU These bits indicate A[21:1] of the start address of the LCD frame buffer.
LCDSADDR2 LCDBASEL These bits indicate A[21:1] of the end address of the LCD frame buffer.
程序流程 初始化实验开发板 初始化LCD 修改二级显存 刷新LCD屏幕 待机
LCD初始化程序流程 设置GPIO(GPC,GPD) 关闭LCD输出 设置LCD控制寄存器(LCDCON1-5) 在地址寄存器中记录一级缓存的地址 清空一级缓存内容 开启LCD输出
刷新LCD函数流程 从二级缓存取得24位象素的RGB值,变换为16位RGB值,并将结果放入一级缓存 转换公式:pixcolor=((pbuf[0]&0xf8)<<11)|((pbuf[1]&0xfc)<<6)|(pbuf[2]&0xf8) 在地址寄存器中记录一级缓存的地址
思考题 1. 实现两屏颜色交替显示 2. 实现屏幕上的纵向彩色条文横向滚动的效果