完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1)实验平台:正点原子Linux开发板 2)摘自《正点原子I.MX6U嵌入式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采用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所示: 表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,unsignedchar*buf); 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:%#Xrn", ((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,unsignedchar*buf) 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{ 182unsignedchar*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; 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上的触摸点坐标数据就会相应的变化。 |
|
相关推荐
|
|
753 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
2714 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1368 浏览 0 评论
1955 浏览 0 评论
1523 浏览 0 评论
75000 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 13:45 , Processed in 0.627637 second(s), Total 63, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号