锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

【正点原子Linux连载】第二十八章 多点电容触摸屏实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V...

时间:2022-09-29 14:00:01 电容触屏的平板屏幕裂了怎么办电容145v电容触摸屏

1)实验平台:正原子阿尔法Linux开发板
2)平台采购地址:https://item.taobao.com/item.htm?id=603672744434
2)全套实验源码 手册 视频下载地址:http://www.openedv.com/thread-300792-1-1.html
3)正点原子Linux感兴趣的学生可以加入小组讨论:935446741
4)关注正点原子微信官方账号,获取最新信息更新
在这里插入图片描述

第二十八章 多点电容触摸屏实验

随着智能手机的发展,电容式触摸屏也发展迅速。与电阻触摸屏相比,电容触摸屏有许多优点,如支持多点触摸,无需按压,只需轻轻触摸即可反应。ALIENTEK的三款RGB LCD本章支持多点电容触摸屏幕ATK7016这款RGB LCD以屏幕为例,解释如何驱动电容触摸屏,并获得相应的触摸坐标值。 

28.1 多点电容触摸简介
触摸屏已经存在很久了。一开始是电阻触摸屏。电阻触摸屏只能单点触摸,广泛应用于以往的学习机和功能机时代。苹果于2007年1月9日发布了划时代的第一代Iphone,也就是Iphone 2G,Iphone 2G多点电容电容触摸屏,当时的手机基本上使用电阻触摸屏。电容式触摸屏卓越的触摸质量和手感瞬间征服了消费者,给手机触摸屏带来了巨大的变化。后面的新手机也采用了多点电容式触摸屏。和电阻触摸屏相比,电容触摸屏最大的优点是支持多点触摸(后面的电阻屏也支持多点触摸,但是为时已晚),电容屏只需要手指轻触即可,而电阻屏是需要手指给予一定的压力才有反应,而且电容屏不需要校准。如今,多点电容触摸屏已广泛应用于手机、平板电脑、电脑、广告机等领域。如果要开发人机交互设备,基本上不可能绕过多点电容触摸屏。因此,本章将学习如何使用多点触摸屏,如何获得多点触摸值。我们不研究电容屏幕的物理原理。毕竟,我们不开发电容屏幕,而是电容屏幕的用户。我们只需要注意如何使用电容屏幕,如何获得更多的触摸坐标值。ALIENTEK的三款RGB LCD屏幕支持5点电容触摸屏,本章我们也使用ATK-以7016为例,解释如何使用多点电容触摸屏。
ATK-其实这个屏幕是7016的原因TFT LCD 联合触摸屏。底下是LCD面板,上面是触摸面板,两个包装在一起变成了带有触摸屏的LCD屏幕。电容式触摸屏也需要驱动IC的,驱动IC一般提供一个I2C接口给主控制器,主控制器可以通过I2C接口读取驱动器IC触摸坐标数据。ATK-7016、ATK-7084这两个屏幕的触摸控制IC是FT5426,ATK-4342使用的驱动IC是GT9147。触摸这三个电容屏IC都是I2C接口的使用方法基本相同。
FT5426这款驱动IC采用15*28驱动结构,即15个感应通道,28个驱动通道,最多支持5点电容触摸。ATK-7016电容触摸屏有4个部分IO连接主控制器:SCL、SDA、RST和INT,SCL和SDA是I2C引脚,RST是复位引脚,INT中断引脚。一般通过INT引脚通知主控制器按下触点,然后在INT在中断服务函数中读取触摸数据。也可以不使用中断功能,通过轮询不断查询是否有触轮询。本章实验采用中断获取触摸数据。
和所有的I2C器件一样,FT5426还通过读写寄存器完成初始化和触摸坐标数据读取,I.MX6U的I2C我们的主要工作是读写FT5426的寄存器。FT5426的I2C设备地址为0X38,FT5426有很多寄存器,本章只用到其中一部分,如表28.1.1.1所示:
寄存器地址 位 寄存器功能 描述
0X00 [6:4] 模式寄存器 设置FT5426工作模式:
正常模式:正常模式。
001:系统信息模式
100:测试模式。
0X02 [3:0] 接触状态寄存器 记录多少个触摸点,
有效值为1~5。
0X03 [7:6] 第一个触摸点X坐标高数据 事件标志:
00:按下。
01:抬起
10:接触
11:保留
[3:0] X轴坐值高4位。
0X04 [7:0] 第一个触摸点X坐标低数据 X轴坐值低8位
0X05 [7:4] 第一个触摸点Y坐标高数据 触摸点的ID。
[3:0] Y轴坐标高4位
0X06 [7:0] 第一个触摸点Y坐标低数据 Y轴坐标低8位
0X09 [7:6] 第二个触摸点X坐标高数据 与寄存器0X03含义相同。
[3:0]
0X0A [7:0] 第二个触摸点X坐标低位数据 与寄存器0X04含义相同。
0X0B [7:4] 第二个触摸点Y坐标高数据 与寄存器0X05含义相同。
[3:0]
0X0C [7:0] 第二个触摸点Y坐标低数据 与寄存器0X06含义相同
0X0F [7:6] 第三个触摸点X坐标高数据 与寄存器0X03含义相同。
[3:0]
0X10 [7:0] 第三个触摸点X坐标低数据 与寄存器0X04含义相同。
0X11 [7:4] 第三个触摸点Y坐标高数据 与寄存器0X05含义相同。
[3:0]
0X12 [7:0] 第三个触摸点Y坐标低数据 与寄存器0X06含义相同
0X15 [7:6] 第四个触摸点X坐标高数据 与寄存器0X03含义相同。
[3:0]
0X16 [7:0] 第四个触摸点X坐标低数据 与寄存器0X04含义相同。
0X17 [7:4] 第四个触摸点Y坐标高数据 与寄存器0X05含义相同。
[3:0]
0X18 [7:0] 第四个触摸点Y坐标低数据 与寄存器0X06含义相同
0X1B [7:6] 第五个触摸点X坐标高数据 与寄存器0X03含义相同。
[3:0]
0X1C [7:0] 第五个触摸点X坐标低数据 与寄存器0X04含义相同。
0X1D [7:4] 第五个触摸点Y坐标高数据 与寄存器0X05含义相同。
[3:0]
0X1E [7:0] 第五个触摸点Y坐标低数据 与寄存器0X06含义相同
0XA1 [7:0] 版本寄存器 版本高字节
0XA2 [7:0] 版本低字节
0XA4 [7:0] 中断模式寄存器 设置中断模式:
0:轮询模式
1:触发模式
表28.1.1.1 FT5426使用的寄存器表
表28.1.1.1是我们将在本章实验中使用的寄存器。关于触摸屏和FT5426知识到此为止。
28.2 硬件原理分析
本试验使用的资源如下:
①、指示灯LED0。
②、 RGB LCD屏幕。
③、触摸屏
④、串口
触摸屏是和RGB LCD屏幕在一起,所以触摸屏也在RGB LCD连接在接口上I.MX6U-ALPHA开发板底板上的原理图如图28所示.2.1所示:

图28.2.1 触摸屏原理图
从图28.2.1.触摸屏连接I.MX6U的I2C2,INT引脚连接着I.MX6U的GPIO1_IO9,RST引脚连接着I.MX6U的SNVS_TAMPER9.在本章实验中,中断读取触摸点数量和触摸点坐标数据,并在本章实验中显示LCD上。
28.3 编写实验程序
本实验对应的例程路径为:开发板光盘-> 1、裸机例程-> 19_touchscreen。
本章实验在上一章例程的基础上完成,工程名称变更为touchscreen”,然后在bsp文件夹创建名称为文件夹touchscreen文件bsp/ touchscreen中新建bsp_ft5xx6.c和bsp_ft5xx6.h这两个文件,在bsp_ft5xx6.h输入以下内容:

示例代码28.3.1 bsp_ft5xx6.h文件代码 1  #ifndef _FT5XX6_H 2  #define _FT5XX6_H 3  /*************************************************************** 4 Copyright ? zuozhongkai Co., Ltd. 1998-2019. All rights reserved. 5 文件名 : bsp_ft5xx6.h 6 作者 : 左忠凯 7 版本 : V1.0 8 描述 : 触摸屏驱动头文件,触摸芯片为FT5xx6, 9 包括FT5426和FT5406。 10 其他 : 无 11 论坛 : www.openedv.com 12 日志 : 初版V1.0 2019/1/21 左忠凯创建 13 ***************************************************************/ 14 #include "imx6ul.h" 15 #include "bsp_gpio.h"
16 
17 /* 宏定义 */
18 #define FT5426_ADDR             	0X38	/* FT5426设备地址 */
19 
20 #define FT5426_DEVICE_MODE      	0X00  	/* 模式寄存器 */
21 #define FT5426_IDGLIB_VERSION   	0XA1  	/* 固件版本寄存器 */
22 #define FT5426_IDG_MODE         	0XA4   	/* 中断模式 */
23 #define FT5426_TD_STATUS        	0X02   	/* 触摸状态寄存器 */
24 #define FT5426_TOUCH1_XH        	0X03   	/* 触摸点坐标寄存器, 25 * 一个触摸点用4个寄存器*/
26                                       
27 #define FT5426_XYCOORDREG_NUM  	30      /* 触摸点坐标寄存器数量 */
28 #define FT5426_INIT_FINISHED   	1       /* 触摸屏初始化完成 */
29 #define FT5426_INIT_NOTFINISHED	0       /* 触摸屏初始化未完成 */
30 
31 #define FT5426_TOUCH_EVENT_DOWN			0x00	/* 按下 */
32 #define FT5426_TOUCH_EVENT_UP   			0x01   	/* 释放 */
33 #define FT5426_TOUCH_EVENT_ON   			0x02   	/* 接触 */
34 #define FT5426_TOUCH_EVENT_RESERVED  	0x03   	/* 没有事件 */
35 
36 /* 触摸屏结构体 */
37 struct ft5426_dev_struc
38 { 
           
39  unsigned char initfalg;     	/* 触摸屏初始化状态 */
40  unsigned char intflag;      	/* 标记中断有没有发生 */
41  unsigned char point_num;    	/* 触摸点 */
42  unsigned short x[5];        	/* X轴坐标 */
43  unsigned short y[5];        	/* Y轴坐标 */
44 };
45 
46 extern struct ft5426_dev_struc ft5426_dev;
47 
48 /* 函数声明 */
49 void ft5426_init(void);
50 
51 void gpio1_io9_irqhandler(void);
52 unsigned char ft5426_write_byte(unsigned char addr,
unsigned char reg, 
unsigned char data);
53 unsigned char ft5426_read_byte(unsigned char addr,
unsigned char reg);
54 void ft5426_read_len(unsigned char addr,unsigned char reg,
unsigned char len,unsigned char *buf);
55 void ft5426_read_tpnum(void);
56 void ft5426_read_tpcoord(void);
57 #endif
文件bsp_ft5xx6.h文件中先是定义了FT5426的设备地址、寄存器地址和一些触摸点状态宏,然后在第37行定义了一个结构体ft5426_dev_struc,此结构体用来保存触摸信息,最后就是一些函数声明。接下来在bsp_ft5xx6.c中输入如下所示内容:

示例代码28.3.2 bsp_ft5xx6.c文件代码

/*************************************************************** Copyright © zuozhongkai Co., Ltd. 1998-2019. All rights reserved. 文件名 : bsp_ft5xx6.c 作者 : 左忠凯 版本 : V1.0 描述 : 触摸屏驱动文件,触摸芯片为FT5xx6, 包括FT5426和FT5406。 其他 : 无 论坛 : www.openedv.com 日志 : 初版V1.0 2019/1/21 左忠凯创建 ***************************************************************/
1   #include "bsp_ft5xx6.h"
2   #include "bsp_i2c.h"
3   #include "bsp_int.h"
4   #include "bsp_delay.h"
5   #include "stdio.h"
6   
7   struct ft5426_dev_struc ft5426_dev;
8   
9   /* 10 * @description : 初始化触摸屏,其实就是初始化FT5426 11 * @param : 无 12 * @return : 无 13 */
14  void ft5426_init(void)
15  { 
       
16      unsigned char reg_value[2];
17  
18      ft5426_dev.initfalg = FT5426_INIT_NOTFINISHED;
19  
20      /* 1、初始化IIC2 IO 21 * I2C2_SCL -> UART5_TXD 22 * I2C2_SDA -> UART5_RXD 23 */
24      IOMUXC_SetPinMux(IOMUXC_UART5_TX_DATA_I2C2_SCL, 1);
25      IOMUXC_SetPinMux(IOMUXC_UART5_RX_DATA_I2C2_SDA, 1);
26      IOMUXC_SetPinConfig(IOMUXC_UART5_TX_DATA_I2C2_SCL, 0x70B0);
27      IOMUXC_SetPinConfig(IOMUXC_UART5_RX_DATA_I2C2_SDA, 0X70B0);
28      
29      /* 2、初始化触摸屏中断IO和复位IO */
30      gpio_pin_config_t ctintpin_config;
31      IOMUXC_SetPinMux(IOMUXC_GPIO1_IO09_GPIO1_IO09,0); 
32      IOMUXC_SetPinMux(IOMUXC_SNVS_SNVS_TAMPER9_GPIO5_IO09,0);
33      IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO09_GPIO1_IO09,0xF080);
34      IOMUXC_SetPinConfig(IOMUXC_SNVS_SNVS_TAMPER9_GPIO5_IO09,0X10B0);
35  
36      /* 中断IO初始化 */
37      ctintpin_config.direction = kGPIO_DigitalInput;
38      ctintpin_config.interruptMode = kGPIO_IntRisingOrFallingEdge;
39      gpio_init(GPIO1, 9, &ctintpin_config);
40  
41      GIC_EnableIRQ(GPIO1_Combined_0_15_IRQn); /* 使能GIC中对应的中断 */
42      system_register_irqhandler(GPIO1_Combined_0_15_IRQn, 
(system_irq_handler_t)gpio1_io9_irqhandler, 
NULL); /* 注册中断服务函数 */
43      gpio_enableint(GPIO1, 9);  /* 使能GPIO1_IO09的中断功能 */
44  
45      /* 复位IO初始化 */
46      ctintpin_config.direction=kGPIO_DigitalOutput;  
47      ctintpin_config.interruptMode=kGPIO_NoIntmode;  
48      ctintpin_config.outputLogic=1;                     
49      gpio_init(GPIO5, 9, &ctintpin_config); 
50  
51      /* 3、初始化I2C */
52      i2c_init(I2C2); 
53  
54      /* 4、初始化FT5426 */
55      gpio_pinwrite(GPIO5, 9, 0); 	/* 复位FT5426 */
56      delayms(20);
57      gpio_pinwrite(GPIO5, 9, 1); 	/* 停止复位FT5426 */
58      delayms(20);
59      ft5426_write_byte(FT5426_ADDR, FT5426_DEVICE_MODE, 0);
60      ft5426_write_byte(FT5426_ADDR, FT5426_IDG_MODE, 1);     
61      ft5426_read_len(FT5426_ADDR, FT5426_IDGLIB_VERSION, 2,
reg_value);
62      printf("Touch Frimware Version:%#X\r\n", 
((unsigned short)reg_value[0] << 8) + reg_value[1]);
63      ft5426_dev.initfalg = FT5426_INIT_FINISHED; /* 标记初始化完成 */
64      ft5426_dev.intflag = 0;
65  }
66  
67  /* 68 * @description : GPIO1_IO9最终的中断处理函数 69 * @param : 无 70 * @return : 无 71 */
72  void gpio1_io9_irqhandler(void)
73  { 
        
74      if(ft5426_dev.initfalg == FT5426_INIT_FINISHED)
75      { 
       
76          //ft5426_dev.intflag = 1;
77          ft5426_read_tpcoord();
78      }
79      gpio_clearintflags(GPIO1, 9); /* 清除中断标志位 */
80  }
81  
82  /* 83 * @description : 向FT5426写入数据 84 * @param – addr : 设备地址 85 * @param - reg : 要写入的寄存器 86 * @param – data : 要写入的数据 87 * @return : 操作结果 88 */
89  unsigned char ft5426_write_byte(unsigned char addr,
unsigned char reg, 
unsigned char data)
90  { 
       
91      unsigned char status=0;
92      unsigned char writedata=data;
93      struct i2c_transfer masterXfer;
94      
95      /* 配置I2C xfer结构体 */
96      masterXfer.slaveAddress = addr;   		/* 设备地址 */
97      masterXfer.direction = kI2C_Write;  	/* 写入数据 */
98      masterXfer.subaddress = reg;   			/* 要写入的寄存器地址 */
99      masterXfer.subaddressSize = 1;			/* 地址长度一个字节 */
100     masterXfer.data = &writedata;  			/* 要写入的数据 */
101     masterXfer.dataSize = 1;       			/* 写入数据长度1个字节 */
102 
103     if(i2c_master_transfer(I2C2, &masterXfer))
104         status=1;
105         
106     return status;
107 }
108 
109 /* 110 * @description : 从FT5426读取一个字节的数据 111 * @param – addr : 设备地址 112 * @param - reg : 要读取的寄存器 113 * @return : 读取到的数据。 114 */
115 unsigned char ft5426_read_byte(unsigned char addr,
unsigned char reg)
116 { 
       
117     unsigned char val=0;
118     
119     struct i2c_transfer masterXfer; 
120     masterXfer.slaveAddress = addr;     	/* 设备地址 */
121     masterXfer.direction = kI2C_Read;  		/* 读取数据 */
122     masterXfer.subaddress = reg;          	/* 要读取的寄存器地址 */
123     masterXfer.subaddressSize = 1;       	/* 地址长度一个字节 */
124     masterXfer.data = &val;                 	/* 接收数据缓冲区 */
125     masterXfer.dataSize = 1;                	/* 读取数据长度1个字节 */
126     i2c_master_transfer(I2C2, &masterXfer);
127     return val;
128 }
129 
130 /* 131 * @description : 从FT5429读取多个字节的数据 132 * @param – addr : 设备地址 133 * @param - reg : 要读取的开始寄存器地址 134 * @param - len : 要读取的数据长度. 135 * @param - buf : 读取到的数据缓冲区 136 * @return : 无 137 */
138 void ft426_read_len(unsigned char addr,unsigned char reg,
unsigned char len,unsigned char *buf)
139 { 
          
140     struct i2c_transfer masterXfer; 
141     
142     masterXfer.slaveAddress = addr;    		/* 设备地址 */
143     masterXfer.direction = kI2C_Read;    	/* 读取数据 */
144     masterXfer.subaddress = reg;          	/* 要读取的寄存器地址 */
145     masterXfer.subaddressSize = 1;       	/* 地址长度一个字节 */
146     masterXfer.data = buf;                 	/* 接收数据缓冲区 */
147     masterXfer.dataSize = len;             	/* 读取数据长度 */
148     i2c_master_transfer(I2C2, &masterXfer);
149 } 
150 
151 /* 152 * @description : 读取当前触摸点个数 153 * @param : 无 154 * @return : 无 155 */
156 void ft5426_read_tpnum(void)
157 { 
       
158     ft5426_dev.point_num = ft5426_read_byte(FT5426_ADDR, 
FT5426_TD_STATUS);
159 }
160 
161 /* 162 * @description : 读取当前所有触摸点的坐标 163 * @param : 无 164 * @return : 无 165 */
166 void ft5426_read_tpcoord(void)
167 { 
       
168     unsigned char i = 0;
169     unsigned char type = 0;
170     //unsigned char id = 0;
171     unsigned char pointbuf[FT5426_XYCOORDREG_NUM];
172     
173     ft5426_dev.point_num = ft5426_read_byte(FT5426_ADDR, 
FT5426_TD_STATUS);
174 
175     /* 176 * 从寄存器FT5426_TOUCH1_XH开始,连续读取30个寄存器的值, 177 * 这30个寄存器保存着5个点的触摸值,每个点占用6个寄存器。 178 */
179     ft5426_read_len(FT5426_ADDR, FT5426_TOUCH1_XH, 
FT5426_XYCOORDREG_NUM, pointbuf);
180     for(i = 0; i < ft5426_dev.point_num ; i++)
181     { 
       
182         unsigned char *buf = &pointbuf[i * 6];

183         ft5426_dev.x[i] = ((buf[2] << 8) | buf[3]) & 0x0fff;
184         ft5426_dev.y[i] = ((buf[0] << 8) | buf[1]) & 0x0fff;
185         type = buf[0] >> 6; /* 获取触摸类型 */
186         //id = (buf[2] >> 4) & 0x0f;
187         if(type == FT5426_TOUCH_EVENT_DOWN || type == 
FT5426_TOUCH_EVENT_ON )/* 按下 */
188         { 
       
189         
190         } else  { 
          /* 释放 */    
191             
192         }
193     }   
194 }
文件bsp_ft5xx6.c中有7个函数,我们依次来看一下这7个函数。第1个是函数ft5426_init,此函数是ft5426的初始化函数,此函数先初始化FT5426所使用的I2C2接口引脚、复位引脚和中断引脚。接下来使能了FT5426所使用的中断,并且注册了中断处理函数,最后初始化了I2C2和FT5426。第2个函数是gpio1_io9_irqhandler,这个是FT5426的中断引脚中断处理函数,在此函数中会读取FT5426内部的触摸数据。第3和第4个函数分别为ft5426_write_byte和ft5426_read_byte,函数ft5426_write_byte用于向FT5426的寄存器写入指定的值,函数ft5426_read_byte用于读取FT5426指定寄存器的值。第5个函数是ft5426_read_len,此函数也是从FT5426的指定寄存器读取数据,但是此函数是读取数个连续的寄存器。第6个函数是ft5426_read_tpnum,此函数用于获取FT5426当前有几个触摸点有效,也就是触摸点个数。最后一个函数是ft5426_read_tpcoord,此函数就是读取FT5426各个触摸点坐标值的。
最后在main.c中输入如下内容:

示例代码28.3.3 main.c文件代码

/************************************************************** Copyright © zuozhongkai Co., Ltd. 1998-2019. All rights reserved. 文件名 : main.c 作者 : 左忠凯 版本 : V1.0 描述 : I.MX6U开发板裸机实验20 触摸屏实验 其他 : I.MX6U-ALPHAL推荐使用正点原子-7寸LCD,此款LCD支持5点电容触摸, 本节我们就来学习如何驱动LCD上的5点电容触摸屏。 论坛 : www.openedv.com 日志 : 初版V1.0 2019/1/21 左忠凯创建 **************************************************************/
1  #include "bsp_clk.h"
2  #include "bsp_delay.h"
3  #include "bsp_led.h"
4  #include "bsp_beep.h"
5  #include "bsp_key.h"
6  #include "bsp_int.h"
7  #include "bsp_uart.h"
8  #include "bsp_lcd.h"
9  #include "bsp_lcdapi.h"
10 #include "bsp_rtc.h"
11 #include "bsp_ft5xx6.h"
12 #include "stdio.h"
13 
14 /* 15 * @description : 使能I.MX6U的硬件NEON和FPU 16 * @param : 无 17 * @return : 无 18 */
19  void imx6ul_hardfpu_enable(void)
20 { 
       
21  	uint32_t cpacr;
22  	uint32_t fpexc;
23 
24  	/* 使能NEON和FPU */
25  	cpacr = __get_CPACR();
26  	cpacr = (cpacr & ~(CPACR_ASEDIS_Msk | CPACR_D32DIS_Msk))
27        	 	|  (3UL << CPACR_cp10_Pos) | (3UL << CPACR_cp11_Pos);
28  	__set_CPACR(cpacr);
29  	fpexc = __get_FPEXC();
30  	fpexc |= 0x40000000UL;  
31  	__set_FPEXC(fpexc);
32 }
33 
34 /* 35 * @description : main函数 36 * @param : 无 37 * @return : 无 38 */
39 int main(void)
40 { 
       
41      unsigned char i = 0;
42  	unsigned char state = OFF;
43 
44  	imx6ul_hardfpu_enable();  	/* 使能I.MX6U的硬件浮点 */
45  	int_init();               	/* 初始化中断(一定要最先调用!) */
46  	imx6u_clkinit();         	/* 初始化系统时钟 */
47  	delay_init();            	/* 初始化延时 */
48  	clk_enable();            	/* 使能所有的时钟 */
49  	led_init();               	/* 初始化led */
50  	beep_init();              	/* 初始化beep */
51  	uart_init();              	/* 初始化串口,波特率115200 */
52  	lcd_init();               	/* 初始化LCD */      
53  	ft5426_init();           	/* 初始化触摸屏 */ 
54  
55  	tftlcd_dev.forecolor = LCD_RED;
56  	lcd_show_string(50, 10, 400, 24, 24, 
(char*)"ALPHA-IMX6U TOUCH SCREEN TEST");  
57  	lcd_show_string(50, 40, 200, 16, 16, 
(char*)"TOUCH SCREEN TEST");  
58  	lcd_show_string(50, 60, 200, 16, 16, (char*)"ATOM@ALIENTEK");  
59  	lcd_show_string(50, 80, 200, 16, 16, (char*)"2019/3/27");  
60  	lcd_show_string(50, 110, 400, 16, 16,   (char*)"TP Num :");  
61  	lcd_show_string(50, 130, 200 
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章