ili9325心得体会
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9325 TFT320*240 触摸屏学习总结
(2011-02-27 14:51:23)
转载
分类:学习笔记
标签:
杂谈
一、图片显示
液晶显示最重要的是了解TFT320*240的工作原理。TFT320*240顾名思义就是有一行中320个点,而总共有240行,即共有320*240个点。每个点的颜色由两位U8的数据(Image2Lcd产生的是8位的数组,如果图片是320*240的,则输出同样类型的图片产生的数组个数是320*240*2)决定,也可以说一个点显示在液晶上,对它的描述是一个U16的数。
遇到的问题:
arm79中有关于关于Image2LCD软件的设置。
真彩色LCD设置:
C语言数组
水平扫描
16位真彩色
320 240
图片的容量需小于:37KB
使用代码:
address_set(0,0,239,319);
for(i=0;i<73280;i++)
{
dd=(0x00|gImage_picture[i*2+1])<<8;
dd=dd|gImage_picture[i*2];
LCD_WriteRAM(dd);
}
我用这种方式显示图片时发现图片显示过后,屏幕就马上变为白色,相当于显示了就马上清屏。用while(1)让以上程序不断循环时发现,屏幕处于显示图片和清屏交替的状态。
后来修改了显示程序:
address_set(0, 0,239,319); // i,j,
for(i=0; i<240; i++)
{
for(j=0; j<320; j++)
{
dd=(unsigned int)gImage_mm[i*320*2+j*2+1]<<8;
dd=dd|(unsigned int)gImage_mm[i*320*2+j*2];
LCD_WriteRAM(dd);
}
}
LCD_WriteRAM_Ready();
图片显示正常。
其中除了一些关于寄存器的初始化工作外,地址的设置也是很重要的,
void address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2) {
LCD_WriteReg(0x0020,x1);//设置X坐标位置地址计数器初始值x
LCD_WriteReg(0x0021,y1);//设置Y坐标位置地址计数器初始值y
LCD_WriteReg(0x0050,x1); //开始X
LCD_WriteReg(0x0052,y1); //开始Y
LCD_WriteReg(0x0051,x2); //结束X
LCD_WriteReg(0x0053,y2); //结束Y
LCD_WriteRAM_Prepare(); // 写数据准备
}
地址设置出现问题或与原来图片的尺寸有差别时会导致图片无法正常显示。
FSMC地址设置问题:
奋斗STM32 MINI版中TFT的RS接到了地址STM32的A16 ,
为什么地址是这样定义的,不懂
#define Bank1_LCD_D ((uint32_t)0x60020000) //disp Data ADDR
#define Bank1_LCD_C ((uint32_t)0x60000000) //disp Reg ADDR
如果选择地址16的话我感觉应该是
#define Bank1_LCD_D ((uint32_t)0x60010000) //disp Data ADDR
#define Bank1_LCD_C ((uint32_t)0x60000000) //disp Reg ADDR
STM32 FSMC设置为16位时,并不是A0无效,而是A0当A1用.那么A16就当A17用了. 所以是 20000.
有些CPU则是 16或32位时,A0,A1无效.这样.地址不变.
二、彩条显示程序
void ili9320_Test()
{
u16 i,j;
address_set(0,0,239,319);
for(i=0;i<240;i++)
for(j=0;j<320;j++)
{
if(i>199)LCD_WriteRAM(0x07e0);
else if(i>159)LCD_WriteRAM(0x07ff);
else if(i>119)LCD_WriteRAM(0xf800);
else if(i>79)LCD_WriteRAM(0xf81f);
else if(i>39)LCD_WriteRAM(0xffe0);
else LCD_WriteRAM(0xffff);
}
三、在屏幕上显示12张80*80的图片
for(j=0;j<3;j++)
{
for(k=0;k<4;k++)
{
address_set(80*j,80*k,80*j+79,80*k+79);
for(i=0; i<80; i++)
{
for(m=0; m<80; m++)
{
dd=(unsigned int)gImage_1[i*80*2+m*2+1]<<8;
dd=dd|(unsigned int)gImage_1[i*80*2+m*2];
LCD_WriteRAM(dd);
}
}
}