TFT 液晶显示实验_第1页
TFT 液晶显示实验_第2页
TFT 液晶显示实验_第3页
TFT 液晶显示实验_第4页
TFT 液晶显示实验_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验十 TFT 液晶显示实验一、实验目的1. 了解 240x400TFT LCD 的工作原理。2. 了解 TFT LCD 控制芯片OTM4001A 的控制方式。3. 学习并使用数学库 IQmathLib.h。4. 学习 TM4C129x Series Cortex-M4 的EPI 总线操作方式。5. 学习 EPI 相关库函数的使用。二、实验原理1. TFT 彩屏工作原理TFT(Thin Film Transistor)LCD 即薄膜场效应晶体管LCD,是有源矩阵类型液晶显示器(AM-LCD)中的一种。和TN 技术不同的是,TFT 的显示采用“背透式”照射方式假想的光源路径不是像TN 液晶那样从

2、上至下,而是从下向上。这样的作法是在液晶的背部设置特殊光管,光源照射时通过下偏光板向上透出。由于上下夹层的电极改成FET 电极和共通电极,在FET 电极导通时,液晶分子的表现也会发生改变,可以通过遮光和透光来达到显示的目的,响应时间大大提高到80ms 左右。因其具有比TN LCD 更高的对比度和更丰富的色彩,荧屏更新频率也更快,故TFT 俗称“真彩”。LCD 是由二层玻璃基板夹住液晶组成的,形成一个平行板电容器,通过嵌入在下玻璃基板上的TFT 对这个电容器和内置的存储电容充电,维持每幅图像所需要的电压直到下一幅画面更新。液晶的彩色都是透明的必须给LCD 衬以白色的背光板上才能将五颜六色表达出来

3、,而要使白色的背光板有反射就需要在四周加上白色灯光。因此在TFT LCD 的底部都组合了灯具,如CCFL 或LED。2. OTM4001A 控制芯片简介OTM4001A 是一款262144 色,用于中小型TFT LCD 显示屏的片上系统(SoC)驱动芯片,通过指定用于图形数据的RAM 能支持达240xRGBx432 分辨率。OTM4001A 内部的时序控制器能为不同的需求提供不同接口方式,OTM4001A 提供了系统接口,包括8/9/16/18位并口和SPI 串口方式(本实验采用16 位并口方式);OTM4001A 也提供了6/16/18 位RGB接口,用于动态显示图片。OTM4001A 的主

4、要特性还有窗口地址功能能限制数据重写区域,并减少数据传输;内部6 位D/A 转换器输出的64 颜色校准;内部233280 字节的RAM;背光引脚输出控制的内置自适应背光控制功能(CABC);逻辑供电电压范围2.53.6V,IO接口支持操作电压1.653.6V,模拟供电电压范围2.53.6V;内置的内部晶振与硬件复位。本实验中,采用80 系统总线的16 位并口方式,对TFT LCD 的常规写操作时序特征和时序图分别如下表10-1 和图10-1 所示:为使液晶正常工作,我们需要在初始化之前先复位液晶,复位液晶的时序特征和时序图分别如下表10-2 和图10-2 所示:3. TivaWare C se

5、ries 的数学库IQmathLib.hTiva IQmath.h 是一个高度优化和高精度的数学函数库,帮助C/C+程序员在Tiva 器件上无缝地将浮点运算转化为定点计算。计算速度将显著快于浮点运算。IQmath 库采用32位定点带符号数作为基本数据类型。这些定点数的格式从IQ1 到IQ30,这里IQ 数据格式代表了数的小数位数。C语言中要调用IQmath 函数,需要先包含头文件“IQmath/IQmathLib.h”。然后,才能使用_iq 和_iqN 的数据类型以及库中的函数,以下代码是对IQmath 库函数的简单调用:#include "IQmath/IQmathLib.h&qu

6、ot;int main(void)_iq24 X, Y, Z;X = _IQ24(1.0);Y = _IQ24(7.0);Z = _IQ24div(X, Y);IQmath 库函数的具体使用请参阅TivaWare IQmath Library USERS GUIDE。4.实验用到的主要库函数简介void EPIModeSet(uint32_t ui32Base, uint32_t ui32Mode)函数用于选择EPI 的工作方式。ui32Base 为EPI 模块的基地址;ui32Mode 为EPI 的工作模式,本实验选择为EPI_MODE_HB16,配置成16 位总线模式。void EPICo

7、nfigHB16Set(uint32_t ui32Base, uint32_t ui32Config,uint32_t ui32MaxWait)函数用于16 位总线工作模式的详细设置。ui32Base 为EPI 模块的基地址;ui32Config 为16 位总线工作方式的配置参数;ui32MaxWait 为等待的最大外部时钟数。void EPIAddressMapSet(uint32_t ui32Base, uint32_t ui32Map)函数用于配置外部设备的地址映射。ui32Base 为EPI 模块的基地址;ui32Map 是地址映射参数,由一些宏定义的参数通过逻辑与组成。对于存储设备,

8、EPI 将外设视为一块连续的存储空间;对于无地址设备,EPI将外设视为一个地址。5. 简化的 EPI 模块配置步骤三、实验代码。Sine_wave.c:#include <stdbool.h>#include <stdint.h>#include <string.h>#include "inc/hw_memmap.h"#include "inc/hw_types.h"#include "inc/hw_epi.h"#include "inc/hw_ints.h"#include &

9、quot;driverlib/epi.h"#include "driverlib/gpio.h"#include "driverlib/sysctl.h"#include "driverlib/rom.h"#include "driverlib/rom_map.h"#include "driverlib/pin_map.h"#include "driverlib/systick.h"#include "driverlib/interrupt.h"

10、#include "driverlib/ssi.h"#include "driverlib/fpu.h"#include "utils/uartstdio.h"#include "TFTinit/TFT_400x240_OTM4001A_16bit.h"#include "EPIinit/EPIinit.h"#include "IQmath/IQmathLib.h" #ifndef M_PI#define M_PI 3.14159265358979323846F#endifu

11、int32_t g_ui32SysClock;static volatile unsigned long g_ulTickCount;#define SERIES_LENGTH 240typedef struct _Seriesuint32_t xAxis;int32_t data;tSeries;static tSeries g_cSeries240;uint16_t ui32Loop = 0,ulItemCount=0,FinishCalculateFlag=0,ulLastTickCount=0;float fElapsedTime;_iq24 fRadians,fSine;#defin

12、e TICKS_PER_SECOND 40#define FSECONDS_PER_TICK (1.0F / (float)TICKS_PER_SECOND)voidSysTickIntHandler(void) TickCount+; if(g_ulTickCount>=480) g_ulTickCount = 0;voidConfigureUART(void) SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); GPIOPinConfigure(GPIO_P

13、A0_U0RX); GPIOPinConfigure(GPIO_PA1_U0TX); GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); UARTStdioConfig(0, 115200, g_ui32SysClock);void DrawTriWave(int Tlenth) /绘制三角波,参数为周期的长度,应该为60的倍数int count; while(ulLastTickCount = g_ulTickCount) ulLastTickCount = g_ulTickCount; if(ulItemCount = SE

14、RIES_LENGTH) /SERIES_LENGTH为240 FinishCalculateFlag = 1; else g_cSeriesulItemCount.xAxis = +ulItemCount; count=g_ulTickCount; while(count>=Tlenth) count-=Tlenth; if(count<Tlenth/2) g_cSeriesulItemCount - 1.data =count; else if(count<Tlenth) g_cSeriesulItemCount - 1.data =(-1)*(count)+Tlenth

15、; if(!FinishCalculateFlag) TFTLCD_DrawPoint(g_cSeriesulItemCount - 1.xAxis,g_cSeriesulItemCount - 1.data+60,BLUE); elsefor(ui32Loop=2;ui32Loop<SERIES_LENGTH;ui32Loop+)TFTLCD_DrawPoint(g_cSeriesui32Loop-1.xAxis,g_cSeriesui32Loop-1.data+60,0);g_cSeriesui32Loop-1.data = g_cSeriesui32Loop.data;TFTLCD

16、_DrawPoint(g_cSeriesui32Loop-1.xAxis,g_cSeriesui32Loop-1.data+60,BLUE);void TFTLCD_DrawCircle(int x,int y,int r)int num=800;float i;_iq24 angle,xi,yi,fr,sin_angle,cos_angle;fr=_IQ24(r);for(i=0;i<num;i+)angle= _IQ24( (i/ (float)(num/2) *(float)M_PI); sin_angle= _IQ24sin(angle); cos_angle=_IQ24cos(

17、angle); xi=_IQ24mpy(cos_angle,fr);yi=_IQ24mpy(sin_angle,fr);TFTLCD_DrawPoint(x+_IQ24int(xi),y+_IQ24int(yi),WHITE);void main() FPUEnable(); FPULazyStackingEnable(); g_ui32SysClock = SysCtlClockFreqSet(SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480), 120000000); SysTickPerio

18、dSet(g_ui32SysClock / TICKS_PER_SECOND); IntMasterEnable(); SysTickIntEnable(); SysTickEnable(); ConfigureUART(); EPIGPIOinit(); UARTprintf("TFTLCD testn"); UARTprintf("EPI Type: host-bus 16-bit interfacen"); TFT_400x240_OTM4001Ainit(g_ui32SysClock); / Open BackLight. GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_0); GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, GPIO_PIN_0);TFTLCD_ShowString(50,10,"GC211 TFTLCD test!",CYAN,LIGHTBLUE);TFTLCD_ShowString(60,40,"Draw Triangle wave!",GREEN,BLACK);TFTLCD_DrawHorizontalLine(0,2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论