浙江工业大学单片机第六次实验Word格式文档下载.docx
《浙江工业大学单片机第六次实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《浙江工业大学单片机第六次实验Word格式文档下载.docx(32页珍藏版)》请在冰豆网上搜索。
![浙江工业大学单片机第六次实验Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-10/2/3cae92ff-d7af-4416-8036-28dd4acc00f0/3cae92ff-d7af-4416-8036-28dd4acc00f01.gif)
TFT(ThinFilmTransistor)LCD即薄膜场效应晶体管LCD,是有源矩阵类型液晶显示器
(AM-LCD)中的一种。
和TN技术不同的是,TFT的显示采用“背透式”照射方式——假想的
光源路径不是像TN液晶那样从上至下,而是从下向上。
这样的作法是在液晶的背部设置特
殊光管,光源照射时通过下偏光板向上透出。
由于上下夹层的电极改成FET电极和共通电
极,在FET电极导通时,液晶分子的表现也会发生改变,可以通过遮光和透光来达到显示
的目的,响应时间大大提高到80ms左右。
因其具有比TNLCD更高的对比度和更丰富的色
彩,荧屏更新频率也更快,故TFT俗称“真彩”。
LCD是由二层玻璃基板夹住液晶组成的,形成一个平行板电容器,通过嵌入在下玻璃
基板上的TFT对这个电容器和内置的存储电容充电,维持每幅图像所需要的电压直到下一
幅画面更新。
液晶的彩色都是透明的必须给LCD衬以白色的背光板上才能将五颜六色表达
出来,而要使白色的背光板有反射就需要在四周加上白色灯光。
因此在TFTLCD的底部都
组合了灯具,如CCFL或LED。
2.OTM4001A控制芯片简介
OTM4001A是一款262144色,用于中小型TFTLCD显示屏的片上系统(SoC)驱动芯
片,通过指定用于图形数据的RAM能支持达240xRGBx432分辨率。
OTM4001A内部的时
序控制器能为不同的需求提供不同接口方式,OTM4001A提供了系统接口,包括8/9/16/18
位并口和SPI串口方式(本实验采用16位并口方式);
OTM4001A也提供了6/16/18位RGB
接口,用于动态显示图片。
OTM4001A的主要特性还有窗口地址功能能限制数据重写区域,
并减少数据传输;
内部6位D/A转换器输出的64γ颜色校准;
内部233280字节的RAM;
背光引脚输出控制的内置自适应背光控制功能(CABC);
逻辑供电电压范围2.5~3.6V,IO接口支持操作电压1.65~3.6V,模拟供电电压范围2.5~3.6V;
内置的内部晶振与硬件复位。
本实验中,采用80系统总线的16位并口方式,对TFTLCD的常规写操作时序特征和
时序图分别如下表10-1和图10-1所示:
表10-116位并口方式时序特征
图10-116位并口方式时序图
为使液晶正常工作,我们需要在初始化之前先复位液晶,复位液晶的时序特征和时序图
分别如下表10-2和图10-2所示:
表10-2TFTLCD复位时序特征
图10-2TFTLCD复位时序图
为减少数据访问次数,OTM4001A还有窗口访问功能,能指定对液晶的操作区域,相关
寄存器如下:
HSA7-0和HEA7-0代表了水平方向的窗口起始和结束地址,VSA8-0和VEA8-0代表垂
直方向的窗口起始和结束地址。
要使用窗口功能需满足下式:
“00”h≤HSA7-0<
HEA7-0≤“EF”handHEA-HAS>
=”04h”
“00”h≤VSA8-0<
VEA8-0≤9’h1AF
对窗口访问功能定义如下图10-3所示:
图12-3窗口访问功能定义
通过上述寄存器设置好访问的RAM之后,写入一个数据将会写到指定的区域,不需要
完全擦除所有数据,这样大大减少了操作时间。
理解OTM4001A的操作时序与窗口访问功能后,我们就能进行对TFTLCD进行初始
化,让LCD显示我们需要的文字或图片。
OTM4001A有运行模式,睡眠模式,深度睡眠模
式,睡眠模式和深度睡眠模式用于当不用显示时,节省电量开销,对于其他寄存器的操作,
请参考TFTdisplay.pdf。
3.TivaWareCseries的数学库IQmathLib.h
Tiva™IQmath.h是一个高度优化和高精度的数学函数库,帮助C/C++程序员在Tiva器
件上无缝地将浮点运算转化为定点计算。
计算速度将显著快于浮点运算。
IQmath库采用32
位定点带符号数作为基本数据类型。
这些定点数的格式从IQ1到IQ30,这里IQ数据格式代
表了数的小数位数。
C语言中要调用IQmath函数,需要先包含头文件“IQmath/IQmathLib.h”。
然后,才能使用_iq和_iqN的数据类型以及库中的函数,以下代码是对IQmath库函数的简
单调用:
#include"
IQmath/IQmathLib.h"
intmain(void)
{
_iq24X,Y,Z;
X=_IQ24(1.0);
Y=_IQ24(7.0);
Z=_IQ24div(X,Y);
}
IQmath库函数的具体使用请参阅TivaWare™IQmathLibraryUSER’SGUIDE。
4.TM4C129xSeriesCortex-M4的EPI工作原理与方式
外围设备接口(EPI,ExternalPeripheralInterface),是一种用于外设或存储设备的高速并
行总线。
有3种主要的工作方式,能无缝对接众多类型的外部设备。
EPI类似于标准的微处
理器地址/数据总线,通常必须和1种外设连接,不能一次和2种不同的外设连接。
增强了
包括支持uDMA,时钟控制和支持外部FIFO缓冲区等功能。
EPI模块有以下主要特性:
Ø
用于外围设备和存储器的专用8/16/32位并行总线;
存储器接口支持连续存储访问,不限数据总线宽度,允许程序直接从SDRAM,
SRAM和Flash存储器中运行;
阻断和非阻断读取;
使用内部写FIFO将处理器从严格时序要求中分离;
采用uDMA控制器高效地传输数据;
EPI的3种主要的工作模式为SDRAM模式,传统的Host-Bus模式和通用模式,本实
验选用EPI的Host-Bus模式。
Host-Bus模式主要特点有:
支持8位,16位MCU总线接口;
兼容类似PIC,ATmega,8051等其他类似设备;
访问SRAM,NORFlash和其他器件时,在非复用工作方式下,支持高达1MB的地
址访问,在多路复用工作方式下,支持256MB访问(16位总线模式不带字节选择
的情况下,支持512MB);
对于一系列无地址的8位/16位FIFO接口,支持外部FIFO(XFIFO)EMPTY和
FULL信号;
带有读和写数据等待状态计数器;
多种片选方式,包括单芯片,双芯片,四芯片片选。
5.实用到的主要库函数简介
voidEPIModeSet(uint32_tui32Base,uint32_tui32Mode)函数用于选择EPI的工作方式。
ui32Base为EPI模块的基地址;
ui32Mode为EPI的工作模式,本实验选择为EPI_MODE_HB16,
配置成16位总线模式。
voidEPIConfigHB16Set(uint32_tui32Base,uint32_tui32Config,uint32_tui32MaxWait)函数用于16位总线工作模式的详细设置。
ui32Config为16位总
线工作方式的配置参数;
ui32MaxWait为等待的最大外部时钟数。
voidEPIAddressMapSet(uint32_tui32Base,uint32_tui32Map)函数用于配置外部设备的地
址映射。
ui32Map是地址映射参数,由一些宏定义的参数通
过逻辑与组成。
对于存储设备,EPI将外设视为一块连续的存储空间;
对于无地址设备,EPI
将外设视为一个地址。
6.简化的EPI模块配置步骤(左)和实验程序流程图(右)
图10-5简化EPI初始化流程图10-6液晶显示程序流程图
三、实验代码、注释(最好每条注释)及现象
实验代码:
#include<
stdbool.h>
stdint.h>
string.h>
inc/hw_memmap.h"
inc/hw_types.h"
inc/hw_epi.h"
inc/hw_ints.h"
driverlib/epi.h"
driverlib/gpio.h"
driverlib/sysctl.h"
driverlib/rom.h"
driverlib/rom_map.h"
driverlib/pin_map.h"
driverlib/systick.h"
driverlib/interrupt.h"
driverlib/ssi.h"
driverlib/fpu.h"
utils/uartstdio.h"
TFTinit/TFT_400x240_OTM4001A_16bit.h"
EPIinit/EPIinit.h"
//ProvideadefinitionforM_PI,ifitwasnotprovidedbymath.h.
#ifndefM_PI
#defineM_PI3.14159265358979323846F
#endif
uint32_tg_ui32SysClock;
//SystemclockrateinHz.
//Acounterforsystemclockticks,usedfortrackingtime.
staticvolatileunsignedlongg_ulTickCount;
#defineSERIES_LENGTH240
//Createsabufferforholdingthevaluesofthedataseries.Itmustbe
//largeenoughtoholdthemaximumnum