首页 » 互联网 » 「正点原子Linux连载」连载第二十八章多点电容触摸屏实验_触摸屏_存放器

「正点原子Linux连载」连载第二十八章多点电容触摸屏实验_触摸屏_存放器

落叶飘零 2025-01-19 20:46:45 0

扫一扫用手机浏览

文章目录 [+]

2)摘自《正点原子I.MX6U嵌入式Linux驱动开拓指南》

关注官方微旗子暗记"大众号,获取更多资料:正点原子

「正点原子Linux连载」连载第二十八章多点电容触摸屏实验_触摸屏_存放器 互联网

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

随着智好手机的发展,电容触摸屏也得到了飞速的发展。
比较电阻触摸屏,电容触摸屏有很多的上风,比如支持多点触控、不须要按压,只须要轻轻触摸就有反应。
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采取1528的驱动构造,也便是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所示:

表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的SNVS_TAMPER9,RST引脚连接着I.MX6U的GPIO1_IO9。
在本章实验中利用中断办法读取触摸点个数和触摸点坐标数据,并且将其显示在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/ 触摸屏构造体 /

37struct ft5426_dev_struc

38{

39unsignedchar initfalg; / 触摸屏初始化状态 /

40unsignedchar intflag; / 标记中断有没有发生 /

41unsignedchar point_num; / 触摸点 /

42unsignedshort x[5]; / X轴坐标 /

43unsignedshort y[5]; / Y轴坐标 /

44};

45

46externstruct ft5426_dev_struc ft5426_dev;

47

48/ 函数声明 /

49voidft5426_init(void);

50

51void gpio1_io9_irqhandler(void);

52unsignedchar ft5426_write_byte(unsignedchar addr,

unsignedchar reg,

unsignedchar data);

53unsignedchar ft5426_read_byte(unsignedchar addr,

unsignedchar reg);

54void ft5426_read_len(unsignedchar addr,unsignedchar reg,

unsignedchar len,unsignedcharbuf);

55void ft5426_read_tpnum(void);

56void 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

7struct ft5426_dev_struc ft5426_dev;

8

9/

10 @description : 初始化触摸屏,实在便是初始化FT5426

11 @param : 无

12 @return : 无

13 /

14void ft5426_init(void)

15{

16unsignedchar 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_IO18的中断功能 /

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",

((unsignedshort)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 /

72void gpio1_io9_irqhandler(void)

73{

74if(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 /

89unsignedchar ft5426_write_byte(unsignedchar addr,

unsignedchar reg,

unsignedchar data)

90{

91unsignedchar status=0;

92unsignedchar writedata=data;

93struct 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

103if(i2c_master_transfer(I2C2,&masterXfer))

104 status=1;

105

106return status;

107}

108

109/

110 @description : 从FT5426读取一个字节的数据

111 @param – addr : 设备地址

112 @param - reg : 要读取的寄存器

113 @return : 读取到的数据。

114 /

115unsignedchar ft5426_read_byte(unsignedchar addr,

unsignedchar reg)

116{

117unsignedchar val=0;

118

119struct 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);

127return val;

128}

129

130/

131 @description : 从FT5429读取多个字节的数据

132 @param – addr : 设备地址

133 @param - reg : 要读取的开始寄存器地址

134 @param - len : 要读取的数据长度.

135 @param - buf : 读取到的数据缓冲区

136 @return : 无

137 /

138void ft426_read_len(unsignedchar addr,unsignedchar reg,

unsignedchar len,unsignedcharbuf)

139{

140struct 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; / 读取数据长度1个字节 /

148 i2c_master_transfer(I2C2,&masterXfer);

149}

150

151/

152 @description : 读取当前触摸点个数

153 @param : 无

154 @return : 无

155 /

156void 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 /

166void ft5426_read_tpcoord(void)

167{

168unsignedchar i =0;

169unsignedchar type =0;

170//unsigned char id = 0;

171unsignedchar 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);

180for(i =0; i < ft5426_dev.point_num ; i++)

181{

182unsignedcharbuf =&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;

187if(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 /

19void 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 /

39int main(void)

40{

41unsignedchar i =0;

42 unsignedchar 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,16,16,(char)"Point0 X:");

62 lcd_show_string(50,150,200,16,16,(char)"Point0 Y:");

63 lcd_show_string(50,170,200,16,16,(char)"Point1 X:");

64 lcd_show_string(50,190,200,16,16,(char)"Point1 Y:");

65 lcd_show_string(50,210,200,16,16,(char)"Point2 X:");

66 lcd_show_string(50,230,200,16,16,(char)"Point2 Y:");

67 lcd_show_string(50,250,200,16,16,(char)"Point3 X:");

68 lcd_show_string(50,270,200,16,16,(char)"Point3 Y:");

69 lcd_show_string(50,290,200,16,16,(char)"Point4 X:");

70 lcd_show_string(50,310,200,16,16,(char)"Point4 Y:");

71 tftlcd_dev.forecolor = LCD_BLUE;

72 while(1)

73 {

74 lcd_shownum(50+72,110, ft5426_dev.point_num ,1,16);

75 lcd_shownum(50+72,130, ft5426_dev.x[0],5,16);

76 lcd_shownum(50+72,150, ft5426_dev.y[0],5,16);

77 lcd_shownum(50+72,170, ft5426_dev.x[1],5,16);

78 lcd_shownum(50+72,190, ft5426_dev.y[1],5,16);

79 lcd_shownum(50+72,210, ft5426_dev.x[2],5,16);

80 lcd_shownum(50+72,230, ft5426_dev.y[2],5,16);

81 lcd_shownum(50+72,250, ft5426_dev.x[3],5,16);

82 lcd_shownum(50+72,270, ft5426_dev.y[3],5,16);

83 lcd_shownum(50+72,290, ft5426_dev.x[4],5,16);

84 lcd_shownum(50+72,310, ft5426_dev.y[4],5,16);

85

86 delayms(10);

87 i++;

88

89 if(i ==50)

90 {

91 i =0;

92 state =!state;

93 led_switch(LED0,state);

94 }

95 }

96 return0;

97}

文件main.c只第53行调用函数ft5426_init初始化触摸屏,也便是FT5426这个触摸驱动IC。
末了在main函数的while循环中不断的显示获取到的触摸点数以及对应的触摸坐标值。
由于本章实验我们采取中断办法读取FT5426的触摸数据,因此main函数中并没有读取FT5426的操作,只是显示触摸值。
本章实验程序编写就到这里,接下来便是编译、下载和验证。

28.4编译下载验证28.4.1 编写Makefile和链接脚本

修正Makefile中的TARGET为touchscreen,然后在INCDIRS和SRCDIRS中加入“bsp/touchscreen”,修正后的Makefile如下:

示例代码28.4.1.1 Makefile文件代码

1 CROSS_COMPILE ?= arm-linux-gnueabihf-

2 TARGET ?= touchscreen

3

4/ 省略掉其它代码...... /

5

6 INCDIRS := imx6ul \

7 stdio/include \

8 bsp/clk \

9 bsp/led \

10 bsp/delay \

11 bsp/beep \

12 bsp/gpio \

13 bsp/key \

14 bsp/exit \

15 bsp/int \

16 bsp/epittimer \

17 bsp/keyfilter \

18 bsp/uart \

19 bsp/lcd \

20 bsp/rtc \

21 bsp/i2c \

22 bsp/ap3216c \

23 bsp/spi \

24 bsp/icm20608 \

25 bsp/touchscreen

26

27 SRCDIRS := project \

28 stdio/lib \

29 bsp/clk \

30 bsp/led \

31 bsp/delay \

32 bsp/beep \

33 bsp/gpio \

34 bsp/key \

35 bsp/exit \

36 bsp/int \

37 bsp/epittimer \

38 bsp/keyfilter \

39 bsp/uart \

40 bsp/lcd \

41 bsp/rtc \

42 bsp/i2c \

43 bsp/ap3216c \

44 bsp/spi \

45 bsp/icm20608 \

46 bsp/touchscreen

47

48/ 省略掉其它代码...... /

49

50 clean:

51 rm -rf $(TARGET).elf $(TARGET).dis $(TARGET).bin $(COBJS)$(SOBJS)

第2行修正变量TARGET为“touchscreen”,也便是目标名称为“touchscreen”。

第25行在变量INCDIRS中添加触摸屏的驱动头文件(.h)路径。

第46行在变量SRCDIRS中添加触摸屏的驱动文件(.c)路径。

链接脚本保持不变。

28.4.2编译下载

利用Make命令编译代码,编译成功往后利用软件imxdownload将编译完成的touchscreen.bin文件下载到SD卡中,命令如下:

chmod 777 imxdownload //给予imxdownload可实行权限,一次即可

./imxdownload touchscreen.bin /dev/sdd //烧写到SD卡中

烧写成功往后将SD卡插到开拓板的SD卡槽中,然后复位开拓板。
默认情形下LCD界面如图28.4.2.1所示:

图28.4.2.1默认LCD显示

当我们用手指触摸屏幕的时候就会在LCD上显示出当前的触摸点和对应的触摸值,如图28.4.2.2所示:

图28.4.2.2

图28.4.2.2中有5个触摸点,每个触摸点的坐标全部显示到了LCD屏幕上。
如果移动手指的话LCD上的触摸点坐标数据就会相应的变革。

标签:

相关文章