当前位置:首页 > 单片机 > 单片机
[导读] STM32开发板电容触摸屏驱动,单点有效头文件touch.h:u8 ft5x0x_read_data(void);void ft5x0x_i2c_init(void);struct _ts_event{ u16 x1; u16 y1; u16 x2; u16 y2; u16 x3; u16 y3; u16 x4; u16 y4; u1

STM32开发板电容触摸屏驱动,单点有效

头文件touch.h:

u8 ft5x0x_read_data(void);

void ft5x0x_i2c_init(void);

struct _ts_event

{

u16 x1;

u16 y1;

u16 x2;

u16 y2;

u16 x3;

u16 y3;

u16 x4;

u16 y4;

u16 x5;

u16 y5;

u8 touch_point;

};

extern struct _ts_event ts_event;

源文件cap_touch.c

#include

#include "lcd.h"

#include "delay.h"

#include "stdlib.h"

#include "gui.h"

#include "myiic.h"

#include "touch.h"

struct _ts_event ts_event;

u8 ft5x0x_i2c_txdata(u8 *txdata, u8 length)

{

u8 ret =0;

int i;

IIC_Start();

//发送写命令

IIC_Send_Byte(0x74);

IIC_Wait_Ack();

//开始发送数据

for(i=0;i

{

IIC_Send_Byte(txdata[i]);//发送数据

IIC_Wait_Ack();

}

IIC_Stop();//产生一个停止条件

delay_ms(10);

return ret;

}

u8 ft5x0x_i2c_rxdata(u8 *rxdata, u8 length)

{

u8 ret;

u8 *rxdatatmp = rxdata;

IIC_Start();

//发送读命令

IIC_Send_Byte(0x75);

IIC_Wait_Ack();

// IIC_Start();

//进入接收模式

for(ret=0;ret

{

rxdatatmp[ret]=IIC_Read_Byte(1);

}

IIC_Stop();//产生一个停止条件

return ret;

}

u8 ft5x0x_read_data(void)

{

u8 buf[32] = {0};

u8 ret = 0;

#ifdef CONFIG_FT5X0X_MULTITOUCH

ret = ft5x0x_i2c_rxdata(buf, 26);

#else

ret = ft5x0x_i2c_rxdata(buf, 7);

#endif

/*

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

{

printf("buf[%d]=%drn",i,buf[i]);

}

*/

ts_event.touch_point = buf[2] & 0xf;// 000 0111

if (ts_event.touch_point == 0) {

return 0;

}

#ifdef CONFIG_FT5X0X_MULTITOUCH

switch (ts_event.touch_point) {

case 5:

ts_event.x5 = (s16)(buf[0x1b] & 0x0F)<<8 | (s16)buf[0x1c];

ts_event.y5 = (s16)(buf[0x1d] & 0x0F)<<8 | (s16)buf[0x1e];

case 4:

ts_event.x4 = (s16)(buf[0x15] & 0x0F)<<8 | (s16)buf[0x16];

ts_event.y4 = (s16)(buf[0x17] & 0x0F)<<8 | (s16)buf[0x18];

case 3:

ts_event.x3 = (s16)(buf[0x0f] & 0x0F)<<8 | (s16)buf[0x10];

ts_event.y3 = (s16)(buf[0x11] & 0x0F)<<8 | (s16)buf[0x12];

case 2:

ts_event.x2 = (s16)(buf[9] & 0x0F)<<8 | (s16)buf[10];

ts_event.y2 = (s16)(buf[11] & 0x0F)<<8 | (s16)buf[12];

case 1:

ts_event.x1 = (s16)(buf[3] & 0x0F)<<8 | (s16)buf[4];

ts_event.y1 = (s16)(buf[5] & 0x0F)<<8 | (s16)buf[6];

break;

default:

return 0;

}

#else

if (ts_event.touch_point == 1)

{

//读出的数据位480*800

ts_event.x1 = (s16)(buf[3] & 0x0F)<<8 | (s16)buf[4];

ts_event.y1 = (s16)(buf[5] & 0x0F)<<8 | (s16)buf[6];

//转换成320*480

ts_event.x1 = ts_event.x1*320/480;

ts_event.y1 = ts_event.y1*480/800;

ret = 1;

}

else

{

ts_event.x1 = 0xFFFF;

ts_event.y1 = 0xFFFF;

ret = 0;

}

#endif

if (ts_event.touch_point == 1)

printf("%d (%d, %d)rn", ts_event.touch_point, ts_event.x1, ts_event.y1);

return ret;

}

void ft5x0x_i2c_reset(void)

{

GPIOE->ODR&=~(1<<4); //PE.4输出高

delay_ms(6); //手册上说至少要5ms复位时间

GPIOE->ODR|=1<<4; //PE.4输出高

}

void ft5x0x_i2c_init(void)

{

GPIOE->CRL&=0XFFF0FFFF;

GPIOE->CRL|=0X00030000;//PE.4推挽输出

GPIOE->ODR|=1<<4; //PE.4输出高

IIC_Init();

delay_ms(1);

ft5x0x_i2c_reset();

ts_event.x1 = 0xFFFF;

ts_event.y1 = 0xFFFF;

}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

以下内容中,小编将对通过电路图分析输入滤波电容可能引起的问题,希望本文能帮您增进对输入滤波电容的了解,和小编一起来看看吧。

关键字: 电容 滤波电容

变压器的一次和二次绕组的极性相反,这大概也是Flyback名字的由来:a.当开关管导通时,变压器原边电感电流开始上升,此时由于次级同名端的关系,输出二极管截止,变压器储存能量,负载由输出电容提供能量。

关键字: 变压器 电容 开关电源

精心选择如钽电容这样的无源元件,可以提升便携式设备内充电器控制和储能系统的整体性能。

关键字: 钽电容 电容 储能系统

电源往往是我们在电路设计过程中最容易忽略的环节。作为一款优秀的设计,电源设计应当是很重要的,它很大程度影响了整个系统的性能和成本。电源设计中的电容使用,往往又是电源设计中最容易被忽略的地方。

关键字: 电源设计 电容

e络盟向客户供应广泛的TDK电子元件,适用于电动自行车

关键字: 电动自行车 传感器 电容

近期,运动与控制技术的先行者——派克汉尼汾公司宣布推出一款功能强大的测量设备Service Master COMPACT,为行走机械和工业液压应用提供实时监测和诊断服务。产品采用坚固的IP65防护级外壳及耐油性橡胶保护层...

关键字: 触摸屏 触感键盘 传感器

复位电路是一种用来使电路恢复到起始状态的电路设备,它的操作原理与计算器有着异曲同工之妙,只是启动原理和手段有所不同。复位电路,就是利用它把电路恢复到起始状态

关键字: 复位电路 电容 电源

电动机作为现代工业与生活的重要动力源,广泛应用于各个领域。然而,在电动机的运行过程中,电容烧毁的问题时常发生,给生产和生活带来诸多不便。那么,电动机为何偏爱“烧电容”呢?本文将从电容的作用、烧毁原因以及预防措施等方面进行...

关键字: 电动机 电容

在这篇文章中,小编将为大家带来电容的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: 电容 去耦 滤波
关闭
关闭