9325TFT320*240触摸屏学习总结

一、图片显示

液晶显示最重要的是了解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=(unsignedint)gImage_mm[i*320*2+j*2+1]<<8;

dd=dd|(unsignedint)gImage_mm[i*320*2+j*2];

LCD_WriteRAM(dd);

}

}

LCD_WriteRAM_Ready();

图片显示正常。

其中除了一些关于寄存器的初始化工作外,地址的设置也是很重要的,

void address_set(unsignedint 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地址设置问题:

奋斗STM32MINI版中TFT的RS接到了地址STM32的A16,
为什么地址是这样定义的,不懂
#defineBank1_LCD_D((uint32_t)0x60020000)//dispDataADDR
#defineBank1_LCD_C((uint32_t)0x60000000)//dispRegADDR


如果选择地址16的话我感觉应该是
#defineBank1_LCD_D((uint32_t)0x60010000)//dispDataADDR
#defineBank1_LCD_C((uint32_t)0x60000000)//dispRegADDR

STM32FSMC设置为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);

elseif(i>159)LCD_WriteRAM(0x07ff);

elseif(i>119)LCD_WriteRAM(0xf800);

elseif(i>79)LCD_WriteRAM(0xf81f);

elseif(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=(unsignedint)gImage_1[i*80*2+m*2+1]<<8;

dd=dd|(unsignedint)gImage_1[i*80*2+m*2];

LCD_WriteRAM(dd);

}

}

}

}

四、显示ASCII字符

8*16点阵的ASCII字符表示液晶屏上的一个字符由8列16行的点阵构成。一个字符也就需要16个U8。

一般我们可以输入所需要的字符,在液晶屏上会根据ascii_8x16显示相应的字符。ascii_8x16就是一连串8为数组的组成。

相关的程序:

(1)先定义自己要显示的字符串,也可以是字符,如const unsigned char tab[]="wo shi wuhong sheng";

(2)再在main()函数中调用相应的显示函数

void test(void)

{

LCD_Clear(Green);
ili9320_PutChars(0,0,tab,0xF800,0x1fff); 在第一行显示字符串

}


void ili9320_PutChars(u16 x,u16 y,uc8 *z,u16 charColor,u16bkColor)
{
u16 i=0;
u16 j=0;
u16 w=0;
unsignedchar c=0;
unsignedchar tmp_char=0;
address_set(0,0,239,319);
for (w=0;w<20;w++)
{
c=*z;
z=z++;
for(i=0;i<16;i++)
{
tmp_char=ascii_8x16[((c-0x20)*16)+i];
for (j=0;j<8;j++)
{
if ( (tmp_char >> 7-j)& 0x01 == 0x01)
{
ili9320_SetPoint(x+j,y+i,charColor); //字符颜色(注意此处是给第x+j列,第y+i行对应的点设置颜色)
}
else
{
ili9320_SetPoint(x+j,y+i,bkColor); // 背景颜色/
}
}
}
x=x+8;
}
}


void ili9320_SetPoint(u16 x,u16 y,u16 point)
{
LCD_WriteReg(32, y);
LCD_WriteReg(33, x);
LCD_WriteIndex(34);
LCD_WriteRAM(point);
}

五、显示文字

一般的字模软件产生的都是8bit的数组,所以在参考别人的程序上,将显示文字的程序做了一点小小的改动。

取模软件很多像晓奇工作室,或者其他什么的都可以。

产生的数组如下:

extern const uc16 ASCII_Table[] ={

0x06,0x40,0x38,0x50,0x08,0x48,0x08,0x48,0x08,0x40,0xFF,0xFE,0x08,0x40,0x08,0x48,

0x0E,0x28,0x38,0x30,0xC8,0x20,0x08,0x50,0x09,0x92,0x08,0x0A,0x28,0x06,0x10,0x02,}

显示程序:

void ili9320_PutCharz(u16 x,u16 y,unsigned char z,u16 charColor,u16 bkColor)

{

u16 i=0;

u16 j=0;

u16 m=0;

u16 tmp_char=0;

uc16*hz;

hz=ASCII_Table;

address_set(0,0,239,319);

while(z--)

{

for (i=0;i<16;i++)

{

for(m=0;m<2;m++)

{

tmp_char=*hz;

for(j=0;j<8;j++)

{

if ((tmp_char >> 7-j) &0x01 == 0x01)

{

ili9320_SetPoint(x+j+8*m,y+i,charColor); //字符颜色

}

else

{

ili9320_SetPoint(x+j+8*m,y+i,bkColor); //背景颜色/

}

}

hz=hz++;

}

}

x=x+16;

}

}

六、FSMC

问题:在FSMC的配置中,FSMC的访问模式有四种,请问有人知道这四种模式都有什么区别?,在什么情况下该启用那种模式如:FSMC_AccessMode=FSMC_AccessMode_B;

答:下列内容来自参考手册FSMC章节:

模式A —— SRAM/PSRAM(CRAM)OE翻转

模式A与模式1的区别是NOE的变化和相互独立的读写时序。

模式2/B—— NOR闪存

模式2/B与模式1相比较,不同的是NADV的变化,且在扩展模式下(模式B)读写时序相互独立。(只有当设置了扩展模式时(模式B),FSMC_BWTRx才有效,否则该寄存器的内容不起作用。)

模式C —— NOR闪存- OE翻转

模式C与模式1不同的是,NOE和NADV的翻转变化,以及独立的读写时序。

模式D —— 带地址扩展的异步操作

模式D与模式1不同的是NADV的翻转变化,NOE的翻转出现在NADV翻转之后,并且具有独立的读写时序

复用模式—— 地址/数据复用的NOR闪存异步操作

复用模式与模式D不同的是地址的低16位出现在数据总线上

程序:

voidFSMC_LCD_Init(void)

{

FSMC_NORSRAMInitTypeDefFSMC_NORSRAMInitStructure;

FSMC_NORSRAMTimingInitTypeDefFSMC_TimingInitStructure;//FSMC_TCRx位域

FSMC_TimingInitStructure.FSMC_AddressSetupTime = 0x02; //地址建立时间多少个AHB时钟周期

FSMC_TimingInitStructure.FSMC_AddressHoldTime = 0x00;//地址保持时间

FSMC_TimingInitStructure.FSMC_DataSetupTime = 0x05;//数据建立时间

FSMC_TimingInitStructure.FSMC_BusTurnAroundDuration =0x00;//总线恢复时间

FSMC_TimingInitStructure.FSMC_CLKDivision = 0x00;//时钟分频因子

FSMC_TimingInitStructure.FSMC_DataLatency = 0x00;//数据产生时间 :突发模式下产生第一个数据所需的时钟数目

FSMC_TimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_B;//访问模式BNOR闪存模式

FSMC_NORSRAMInitStructure.FSMC_Bank =FSMC_Bank1_NORSRAM1;//选择Bank1

FSMC_NORSRAMInitStructure.FSMC_DataAddressMux =FSMC_DataAddressMux_Disable;//0:地址/数据不复用

FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_NOR;//存储器类型:NOR闪存

FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth =FSMC_MemoryDataWidth_16b; //存储器数据总线宽度16位

FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;//禁用成组访问模式;这是复位后的默认状态

FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity =FSMC_WaitSignalPolarity_Low;//NWAIT等待信号为低时有效;这是复位后的默认状态

FSMC_NORSRAMInitStructure.FSMC_WrapMode =FSMC_WrapMode_Disable;//不允许直接的非对齐成组操作;这是复位后的默认状态

FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive =FSMC_WaitSignalActive_BeforeWaitState;//NWAIT信号在等待状态前的一个数据周期有效;这是复位后的默认状态

FSMC_NORSRAMInitStructure.FSMC_WriteOperation =FSMC_WriteOperation_Enable;//允许FSMC对存储器的写操作;这是复位后的默认状态

FSMC_NORSRAMInitStructure.FSMC_WaitSignal =FSMC_WaitSignal_Disable;

//禁用NWAIT信号,在设置的闪存保持周期之后不会检测NWAIT信号插入等待状态

FSMC_NORSRAMInitStructure.FSMC_ExtendedMode =FSMC_ExtendedMode_Disable;

//EXTMOD:扩展模式使能0:不使用FSMC_BWTR寄存器,这是复位后的默认状态

FSMC_NORSRAMInitStructure.FSMC_WriteBurst =FSMC_WriteBurst_Disable;

//成组写使能位0:写操作始终处于异步模式

FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct =&FSMC_TimingInitStructure;

FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct =&FSMC_TimingInitStructure;

FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);

FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);

}

七、9999计数

void test(void)
{
vu16 time;
LCD_Clear(White);
LCD_SetTextColor(Blue);
LCD_SetBackColor(White);
address_set(0,0,239,319);
LCD_WriteRAM_Ready();
Delay(0xfffff);
Delay(0xfffff);
ili9320_PutChars(0,0,tab,7,0xF800,0x1fff);
Delay(0xaffff);
while(1)
{
for(time=0;time<10000;time++)
{
Delay(0xaffff);
Delay(0xaffff);
9325TFT320*240触摸屏学习总结
table[0]=time/1000+0x30;
table[1]=time/100+0x30;
table[2]=time/10+0x30;
table[3]=time+0x30;
GPIO_WriteBit(GPIOB,GPIO_Pin_8, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_8)));
ili9320_PutChars(57,0,table,4,0xF800,0x1fff);
}
}
}



  

爱华网本文地址 » http://www.aihuau.com/a/25101017/338818.html

更多阅读

OFFICE办公软件学习总结

通过接近一个星期的学习,慢慢的又恢复了学习的感觉,作为办公软件虽然在大学期间没有经过专门的学习,但还是有所接触,用得最多的还是Word文档,Execl用的是最少的了,因为平时基本没有用到它。说用到Word文档其实基本上也只是粘贴,复制文章以

2014年秋季德江县委党校科干班学习总结

新常态、新思想、新动力圆好德江区域性教育中心梦非常感谢县委组织部和县委党校的关怀,我有幸参加了德江县2014年秋季科干班培训学习。整个培训学习过程中,我以饱满的政治热情、端正的学习态度、严格的组织纪律和良好的学习方式,积极

我的神奇之旅-大道医学理念与实践体验班 学习总结

我对医学一直很感兴趣,希望通过了解和学习身体、疾病等方面的医学知识和内容,可以帮助自己、家人和朋友们拥有健康的身体。为此,我看了不少的书、参加了不少的专家讲座和培训,虽然也收获了一些医学知识和技巧,但是我最大的感受是既没有学

信息技术与课程整合学习总结

本次信息技术与课程整合培训采用远程学习的方式,学习时间比较自由宽松,在学习过程中跟随各模块的学习目标和活动展开学习,为学习提供宽松的环境和自主发挥的空间,在学习过程中不断的计划、不断地修改设计内容,逐步完善探究内容,结合自己的

对初级会计学习很实用的学习总结

在不少会计学员看来,会计课程的学习比较单调,整天都在和会计分录以及公式计算打交道,知识点非常琐碎,一般中有特殊,特殊中还有特殊,苦于没有好的方法去记忆和理解会计核算的规律。应该说“书山有路勤为径,学海无涯苦作舟”,会计学习必须依勤

声明:《9325TFT320*240触摸屏学习总结》为网友旧爱扎心分享!如侵犯到您的合法权益请联系我们删除