9增值alientek应用an atk-7tftlcd模块使用说明_第1页
9增值alientek应用an atk-7tftlcd模块使用说明_第2页
9增值alientek应用an atk-7tftlcd模块使用说明_第3页
9增值alientek应用an atk-7tftlcd模块使用说明_第4页
9增值alientek应用an atk-7tftlcd模块使用说明_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1、AN1304ATK-7TFTLCD电容触摸屏模块使用说AN1304ATK-7TFTLCD电容触摸屏模块使用说24)将教大家如何在ALIENTEKSTM32ATK-7TFTLCD电容触摸屏模块(注意,ALIENTEK MiniSTM32 两款开发板。1ATK-7TFTLCD 4ATK-7 TFTLCD ALIENTEK 7 寸电容触摸屏模块,800*480,16 LCD 8MB 的显85 点同时触摸,ATK-7 TFTLCD5V130mA350mA1.1 模块ATK-7 TFTLCD 2*17 的排针(2.54mm 间距)同外部连接,模块可以与ALIENTEK的STM32ALIENTEKSTM3

2、2开发板上直接测试。ATK-7 TFTLCD 1.1.1 所示: 1.1.1ATK-7TFTLCD 从上表可以看出,LCD 21 IO 4 IO 口驱25 IO 口驱动。1.2LCD控制器接口 1.1.1ATK-7TFTLCD 从上表可以看出,LCD 21 IO 4 IO 口驱25 IO 口驱动。1.2LCD控制器接口时ATK-7 TFTLCD模块自带的LCD1680801 23455V IIC_SCL信号1.2.1 (07RS 的是数据(寄存器值/GRAM 数据。 1.2.2 1.3LCD控制器寄存器1.2.1 (07RS 的是数据(寄存器值/GRAM 数据。 1.2.2 1.3LCD控制器

3、寄存器 0写0读1读1写Y1写X1写1写设置X方向自动返回的坐标,以及页X 方向的结束坐标1写1写1.3.1ATK-7TFTLCD LCD1.3.1CUR_X寄存器(0 x01)CUR_Y寄存器 CUR_YCUR_X 的值确定后,像素点A 的位置便被唯一的确定了,随后的写入的像素数据会被准确的放置在A 点。1.3.2PIXELS 寄存器1.3.1ATK-7TFTLCD LCD1.3.1CUR_X寄存器(0 x01)CUR_Y寄存器 CUR_YCUR_X 的值确定后,像素点A 的位置便被唯一的确定了,随后的写入的像素数据会被准确的放置在A 点。1.3.2PIXELS 寄存器PIXELSCUR_X

4、CUR_Y选中的当前激活点上,如果当前显示页与PIXELS 的数据不会被立即呈现出来。 1.3.3END_X 寄存器 XXEND_X后,便会自动返回 CUR_X Y 所示:1写81写X (400,X (400,200(500,200(400,201(500,201CUR_Y A 100 B 101 C 点,第 200 D 点,依此类推。1020CUR_X100,CUR_Y200,END_X210200 次的像素点读/写操作即可,期间不需要再进行坐标设置操作,所1.3.4PREF 寄存器PREF 寄存器用于设置当前显示页、当前操作页和 TFT HREF其中,BK_PWM用于设置背光信号的占空比,

5、从而调节TFT背光的亮度,取值范围为 063,0代表背光关闭,63代表背光最亮。上电复位后BK_PWM0,也就是背MCU 对BK_PWM 赋以非零值后,背光才能点亮。当前显示页由 CUR_PAGE 指定,表示屏幕上实际显示的显存分页,当前操作页由 OPT_PAGECUR_PAGEOPT_PAGE指向同 CUR_PAGE 切换到OPT_PAGE 后,OPT_PAGE 中数据才会被显示出来。1.3.5MIRROR寄存器MIRROR 位00000MIRRORUD 位用于控制显示画面的垂直翻转,LR UDLR TFT 上的像素点位置与显存中数据地址的映射关系,但不会改变显存中UD LR 所示。 这两个

6、寄存器相互配合,用于完成像素数据的读操作。MIRRORUD 位用于控制显示画面的垂直翻转,LR UDLR TFT 上的像素点位置与显存中数据地址的映射关系,但不会改变显存中UD LR 所示。 这两个寄存器相互配合,用于完成像素数据的读操作。位(b0位)1MCUDATA寄存器即可获得对应点的像素数据,与写像素数据的操作相同,读像素数据的像素点位置也是由当前的 CUR_X 和 1.4LCD控制器使用说经过前面的介绍,我们对ATK-7 TFTLCD模块自带的LCD位00位0011.4.1 1RSTLCD 100ms 1.4.1 1RSTLCD 100ms LCDLCD 驱动器准备好了,可以开始后续的

7、的操作。这里,我们要设置的包括:MIRROR 寄存器、PREF 寄存器、ENDX 寄存器等三个寄MIRROR 0X01。然后,PREF 寄存器设置当前操作页、当前显示页以及背光控制等参数,这里我们默认设0 63ENDXXATK-7TFTLCDLCD800*480,ENDX 799,满足全屏显示的需要。 1.4.2 LCDATK-7TFTLCD模块的画点实现。用模块自带的 LCD 驱动器实现画点也是非常简单,我们只需通过操作三个寄存器,即可实们就可以立马在LCD 上看到这个画出来的点。1.4.3 LCD 驱动器可以实现任意点的读取,方法类似画点操作,不过稍有区别。CUR_XCUR_Y两个寄存器,

8、设置要读取点的坐标。然后,我们读STATE 寄存器(RS=0,等待STATE 寄存器的最低位1,之后,我们读取DATA 寄存器(RS=1,就可以读到指定点的颜色。 这样我们就实现一个点颜色的读取。1.5 电容触摸屏接口说ATK-7TFTLCD模块采用汇顶科技(GOODIX)GT811IC,4 根线与外部连接:CT_RST、CT_INT、CT_SDA、CT_SCL。CT_RSTGT811 GT811GT811 进CT_INTGT811 GT811 有数据可以输出的时候,该引脚会输出脉CPU 可以读取数据了。CT_SDACT_SCL则是GT811CPUIICIIC 600Khz GT8111.5.

9、1 1.5.1CPUGT811CPU 1.5.1CPUGT811CPU 产生一个起始信号(S),然后发送地GT811ACKCPU,CPU216位首寄存器地8 8 8 为要写入到寄存器的数据内容。 可。最后,当写操作完成时,CPU 发送停止信号(E),结束当前的写操作。GT8111.5.2 1.5.2CPUGT811CPU 产生一个起始信号(S),然后发送地GT811ACKCPU,CPU216位首寄存器地同样,GT811 支持连续的读操作,CPU ACK 给 读数据的时候,发送NACK,然后在发送停止信号(E),即可结束当前的读操作。1.5.1GT811GT811CT_RST引脚对GT811GT

10、811进入正常工作模式。然后读取GT811的软件版本信息(0X7170X718实现。(0X2010置信息发送成功后,就完成了对GT811 的初始化。1.5.2GT811G8T11GT811有数据 冲,CPU在检测到脉冲信号后,就可以从GT811 读取当前触摸屏的坐标信息了。GT8 可以看出,CPUCT_INT0X721处开始,连续读 TouchpointFlag寄存器(0X721)tp0tp404的数据是否有效的标志,10,则表示触摸点该数据无效。另外 1.5.3GT811 200ms 内根据环境情况自动获得新的检测基准。完成触摸屏检测的初始化。GT811 实时检测各点数据的变化,对历史数据进

11、行统计分析,由此来修正检测基准。从而降2、硬件200ms 内根据环境情况自动获得新的检测基准。完成触摸屏检测的初始化。GT811 实时检测各点数据的变化,对历史数据进行统计分析,由此来修正检测基准。从而降2、硬件连本实验功能简介:本实验用于测试ATK-7TFTLCD SDPICTURE文件夹,里面放一些图片文件(bmp/jpeg/gif等),然后程序检测 张/WK_UP按键,可以暂停/继续自动播放(DS1用于指示是否处于暂停3,液晶自测试WK_UP4 个测试小项:速度测试/镜像测试/缓存测试/ucGUI 的测试效果,测试结果将显示 1DS0 3 ATK-7TFTLCDALIENTEK2.4/2

12、.8/3.5TFTLCD模块接口一模一样,所以可以直接插在ALIENTEKSTM32开发板上(7寸屏比较大,建议在硬件上,ATK-7TFTLCDSTM32IO口对应关系如下: RST RESETLCD 控制器; NCE 对应PG12 FSMC_NE4;RS PG0 FSMC_A10; WRPD5FSMC_NWE; RD PD4 FSMC_NOE;CLK(CT_SCL)PB1; PEN(CT_INT)PF10; CS(CT_RST)PB2;ALIENTEK 提供的转接板,这样2,如果使用ALIENTEKMiniSTM32V2.0ALIENTEK 提供的转接板,这样2,如果使用ALIENTEKMi

13、niSTM32V2.0MiniPEN Mini 板造成不便,所以大家大可放心去掉它。3、软件实本实验(注:这里仅以战舰板代码为例进行介绍,MiniSTM32 开发板对应代码与之相24 3.1 u16 POINT_COLOR=0 x0000;u16 BACK_COLOR=0 xFFFF; _lcd_devvoidLCD_WR_REG(u16voidLCD_WR_REG(u16/LCD /LCDu16 returnLCD-voidLCD_WriteReg(u8LCD_Reg,u16LCD-LCD_REG=LCD-LCD_RAM=u16LCD_ReadReg(u8LCD-LCD_REG=return

14、LCD-void/LCD写 LCD-LCD_RAMRGB_Code;/写十六位u16LCD_ReadPoint(u16u16LCD_ReadPoint(u16x,u16u16 returnLCD-/LCDvoidLCD_BackLightSet(u8pwm) /扫描方向上,X的终点坐标. void LCD_EndXSet(u16 x)/LCDvoid/X /LCDvoidvoidLCD_SetDisplayLayer(u16 voidLCD_SetOperateLayer(u16 voidLCD_SetOperateLayer(u16 voidLCD_SetCursor(u16Xpos,u16

15、 void LCD_Scan_Dir(u8 dir)case case case case voidLCD_DrawPoint(u16x,u16y)LCD_WriteRAM_Prepare(); /GRAM LCD_WriteRAM_Prepare(); /GRAM voidLCD_Fast_DrawPoint(u16x,u16y,u16 void LCD_Init(void)u16 /FSMCGPIOB-CRL&=0XFFFFFFF0;PB0 /PORTD 复用推挽输出 /PORTG12 复用推挽输出 /bank1有NE14,每一个有一个BCR+TCR/NE4 BTCR6,7/PORTG12

16、 复用推挽输出 /bank1有NE14,每一个有一个BCR+TCR/NE4 BTCR6,7。 /BCR/BTR/地址建立时间(ADDSET)1个 /2 HCLK(HCLK=72M) /BANK1,4 /4+3个/地址建立时间(ADDSET)1个/2个/X/Y; / ILI93xx.c 里面的代码一模一样,blcd.cILI93xx.cILI93xx.c 里面的代码一模一样,blcd.cILI93xx.cblcd.clcd.h,ATK-7 TFTLCD blcd.c 替换掉原ILI93xx.c 即可。 绍,请参考STM32开发指南第十八章)来驱动LCD,这里初始化的步骤,就是按我们 /操作层也为

17、0 /x终点坐标为800 voidLCD_Clear(u16color)u32 u32 totalpoint=lcddev.width; /开始写入GRAM voidLCD_Fill(u16sx,u16sy,u16ex,u16ey,u16u16 u16 xlen=0; /送入LCD LCD_Clear 函数里面,我们就只需要 ATK-7TFTLCD 模块不是很好做竖屏显示(如果一定要做竖屏,只能用坐标变换的办法,不过坐标自增就变成Y 轴自增了blcd.clcd.hALIENTEK开发板标准例程保持最大限度的ctiic.c里面的内容,ctiic.c用于实现和GT811IICvoid/先使能外设I

18、OPORTF时钟 GPIOB-CRL&=0XFFFFFF0F; /PB1 推挽输出/PB1 输出高 GPIOF-CRH&=0XFFFFFF0F; /PF9 推挽输出 /PF9 /IICvoid/sdaCT_IIC_SCL=1;delay_us(1); CT_IIC_SDA=0; /IICvoid CT_IIC_SDA=0;delay_us(1); CT_IIC_SDA=1;u8 u8 u8 u8 /SDAreturn 1;return/ACKvoidCT_IIC_SDA=0;delay_us(1); CT_IIC_SCL=1;delay_us(1); /ACKvoidCT_IIC_SDA=1;

19、delay_us(1); CT_IIC_SCL=1;delay_us(1); /IICvoidCT_IIC_Send_Byte(u8u8GT811IIC GT811IIC 通信的底层操作,包括初始化,收发数据和应答等,GT811IIC通信,这部分代码同STM32开发指南第二十七章的IIC IIC 代码差不多,这里我们就不多介绍了。接着,我们看看gt811.c_m_ctp_devconst u8 GTP_CFG_DATA=0 x12,0 x10,0 x0E,0 x0C,0 x0A,0 x08,0 x06,0 x04,0 x02,0 x00,0 x05,0 x55,0 x15,0 x55,0 x2

20、5,0 x55, CT_IIC_SCL=1;delay_us(1); CT_IIC_SCL=0;/1个字节,ack=1时,发送ACK,ack=0nACK u8 CT_IIC_Read_Byte(unsigned char ack)unsigned char i,receive=0; CT_SDA_IN();/SDA设置为输入 for(i=0;i8;i+ )CT_IIC_SCL=0; delay_us(1); CT_IIC_SCL=1; receive=1; ifack)CT_IIC_NAck();/nACK else CT_IIC_Ack(); /发送ACK return receive;vo

21、idvoid u8GT811_WR_Reg(u16reg,u8*buf,u8u8 u8 ret=0; return ret;/8/8 voidGT811_RD_Reg(u16reg,u8*buf,u8u8 i; /8u8 i; /8 /8); / u8GT811_Send_Cfg(u8*buf,u16u8 ret=0; u8retry=0;returnvoidCT_RST=1;delay_ms(100); /释放复位 u8 u16version=0; u8 temp;/PB2u8 u16version=0; u8 temp;/PB2 /PB2 elsetemp=2; /版本错误 return

22、temp; voidu8buf34;/34 #if/0/1GT811_Init 用于初始化电容触摸屏驱动芯片GT8111.5.1节介绍的一样,这里我们通过调用函数 GT811_Init 用于初始化电容触摸屏驱动芯片GT8111.5.1节介绍的一样,这里我们通过调用函数 参数由触摸屏厂家提供,我们只需要将其发送给GT811 即可完成对触摸屏的配置。GT811_Scan 函数,读取触摸屏的坐标数据了。 /IO#define #define CT_INT/GT811中断引脚 #define CT_CMD_WR#define CT_CMD_RD#define CT_EXCHG_XY/调转XY 坐标#d

23、efine CT_MAX_TOUCH5#define CT_READ_XY_REGctp_dev.y2=480-(u16)buf128)+buf13); /2坐标 ctp_dev.y3=480-(u16)buf178)+buf24); /3坐标 ctp_dev.y4=480-(u16)buf288)+buf29); /4坐标 /0坐标 /触摸点1坐标 /触摸点2坐标 /触摸点3坐标 /触摸点4坐标 GT811 的初始化和触摸屏数据扫描(读取x、y ppr 分别用于保存触摸x、y tpsta 用于保存触摸状态,标记有效触摸点。 void#definetypedef structvoid (*sc

24、an)(void);voidu16 xCT_MAX_TOUCH;/触摸X 坐标 u16 yCT_MAX_TOUCH;/触摸Y 坐标 u8 tpsta;/0:0,0无效;1,0/1:0,1无效;1,1/2:0,2无效;1,2/3:0,3无效;1,3/4:0,4无效;1,4extern_m_ctp_devu8GT811_WR_Reg(u16reg,u8*buf,u8len); /向GT811写入一次数据 u8GT811_WR_Reg(u16reg,u8*buf,u8len); /从GT811读出一次数据 u8GT811_Send_Cfg(u8*buf,u16cfg_len); /向GT811发送配

25、置参数 void GT811_Wakeup_Sleep(void);/唤醒GT811u8 voidvoidgui_draw_hline(u16voidgui_draw_hline(u16x0,u16y0,u16len,u16voidgui_fill_circle(u16x0,u16y0,u16r,u16u32 u32 imax = (u32)r*707)/1000+1; u32sqmax=(u32)r*(u32)r+(u32)r/2; u32 x=r;for (i=1;isqmax)/drawlinesfromifgui_draw_hline(x0-i+1,y0+x,2*(i-1),color

26、); gui_draw_hline (x0-i+1,y0-x,2*(i-1),color);u16my_abs(u16x1,u16if(x1x2)returnx1-x2; else return x2-x1;voidlcd_draw_bline(u16x1,u16y1,u16x2,u16y2,u8size,u16u16 int incx,incy,uRow,uCol;delta_x=x2-x1;计算坐标增量 if(delta_x0)incx=1;u16 int incx,incy,uRow,uCol;delta_x=x2-x1;计算坐标增量 if(delta_x0)incx=1;设置单步方向

27、else if(delta_x=0)incx=0;/垂直线 else incx=-1;delta_x=-delta_x; elseif(delta_y=0)incy=0;/水平线 ifdelta_xdelta_y)distance=delta_x;选取基本增量坐标轴 else distance=delta_y;+ )/xerr+=delta_x ; if(xerrdistance)xerr-=distance;uRow+=incx; if(yerrdistance) yerr-=distance; uCol+=incy;/5constu16 voidu8 u16lastpos52; Show_

28、Str(60,50,lcddev.width,16,1:电容触摸屏测试,16,0); Show_Str(60,70,lcddev.width,16,最大同时触摸点数:5 点,16,0); 幕delay_ms(1500); delay_ms(1500);lastposi0=0XFFFF; /全部设置为非法值 delay_ms(5); /没有按键按下的时候 if(i=20)i=0;delay_ms(5); /没有按键按下的时候 if(i=20)i=0; u16pic_get_tnum(u8*path)u8 u16DIRFILINFOtfileinfo; /临时文件信息 u8 *fn; ); /re

29、turn voidreturn voidu8 DIR u8 u8 *pname; u16totpicnum; u16 curindex; u8 key;u8pause=0; u8 t;u16 u16 Show_Str(60,50,lcddev.width,16,2:图片显示测试,16,0); totpicnum=pic_get_tnum(0:/PICTURE得到总有效文件数 while(totpicnum=NULL)/0Show_Str(60,130,lcddev.width,16,没有图片文件!,16,0); delay_ms(200); ); /Show_Str(60,130,lcddev

30、.width,16,内存分配失败!,16,0); delay_ms(200); res=f_opendir(&picdir,0:/PICTURE打开目录 res=f_opendir(&picdir,0:/PICTURE打开目录 ); /0strcat(char*)pname,(constchar*)fn); ; / elsecurindex=totpicnum-1; elseelsecurindex=totpicnum-1; elseelse/LED1亮u16speed_test_get_rval(u16min,u16u16 t=0Xffff; return t;constu16SPEED_C

31、OLOR_TBL10=RED,GREEN,BLUE,BROWN,GRED,BRRED, voidspeed_test_get_fill_parameter(u16*x,u16*y,u16*width,u16*height,u16u16 /3-1voidu32 pixelcnt=0;u16 /3-1voidu32 pixelcnt=0;u8 *str; Show_Str(60,50,lcddev.width,16,3-1:速度测试,16,0); 上str=mymalloc(SRAMIN,6060/3sprintf(char*)str,LCD速度测试结果:%d 像素/秒,(pixelcnt*100

32、)/speed_run_time); /3-2voidShow_Str(60,50,lcddev.width,16,3-2:镜像测试,16,0); LCD_Scan_Dir(L2R_U2D);delay_ms(1200);delay_ms(1300); LCD_Scan_Dir(R2L_D2U);delay_ms(1200);delay_ms(1300); LCD_Scan_Dir(L2R_U2D);delay_ms(1200);delay_ms(1300); LCD_Scan_Dir(R2L_D2U);delay_ms(1200);delay_ms(1300);/3-3voidu8 i; u

33、8*str;Show_Str(60,70,lcddev.width,16,ATK-7TFTLCD8页LCD缓存,本测8 页缓存,16,0);/60/3-4voidu8 i; u8*str;float bkl=0; Show_Str(60,50,lcddev.width,16,u8 i; u8*str;float bkl=0; Show_Str(60,50,lcddev.width,16,3-4:背光测试,16,0); /60个字节的内存 LCD_BackLightSet(i*8+7); /背光亮度设置 void tftlcd_self_test(void)intu8key; u8 /1/LED /

温馨提示

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

评论

0/150

提交评论