初级会员
- 积分
- 90
- 金钱
- 90
- 注册时间
- 2014-4-22
- 在线时间
- 0 小时
|
楼主 |
发表于 2014-6-30 09:52:11
|
显示全部楼层
//////////////////////////////////////////////////////////////////////////////////
//电阻屏电容屏共用驱动
//触摸按键扫描
//mode:该参数仅适用于电阻触摸屏;0,屏幕坐标;1,物理坐标(校准等特殊场合用)
//返回值:0,没有任何触摸;1,有触摸(正在被触摸).
u8 TP_Scan(u8 mode)
{
u8 buf[34];//一次读取34字节
if(tp_dev.tpsta)//有触摸按下
{
GT811_RD_Reg(CTP_READ_XY_REG,buf,34); //一次读取34个字节
tp_dev.tpsta&=0X60; //清除最低5位和最高位
tp_dev.tpsta|=buf[0]&0X1F; //触摸点标记位
if((tp_dev.tpsta&0X1F)==0)return 0; //没有任何触摸有效点
#if CTP_SWAP_XY==1 //调转XY
tp_dev.y[0]=480-(((u16)buf[2]<<8)+buf[3]); //触摸点0坐标
tp_dev.x[0]=((u16)buf[4]<<8)+buf[5];
tp_dev.ppr[0]=buf[6];
tp_dev.y[1]=480-(((u16)buf[7]<<8)+buf[8]); //触摸点1坐标
tp_dev.x[1]=((u16)buf[9]<<8)+buf[10];
tp_dev.ppr[1]=buf[11];
tp_dev.y[2]=480-(((u16)buf[12]<<8)+buf[13]);//触摸点2坐标
tp_dev.x[2]=((u16)buf[14]<<8)+buf[15];
tp_dev.ppr[2]=buf[16];
tp_dev.y[3]=480-(((u16)buf[17]<<8)+buf[24]);//触摸点3坐标
tp_dev.x[3]=((u16)buf[25]<<8)+buf[26];
tp_dev.ppr[3]=buf[27];
tp_dev.y[4]=480-(((u16)buf[28]<<8)+buf[29]);//触摸点4坐标
tp_dev.x[4]=((u16)buf[30]<<8)+buf[31];
tp_dev.ppr[4]=buf[32];
#else
tp_dev.y[0]=((u16)buf[2]<<8)+buf[3]; //触摸点0坐标
tp_dev.x[0]=800-(((u16)buf[4]<<8)+buf[5]);
tp_dev.ppr[0]=buf[6];
tp_dev.y[1]=((u16)buf[7]<<8)+buf[8]; //触摸点1坐标
tp_dev.x[1]=800-(((u16)buf[9]<<8)+buf[10]);
tp_dev.ppr[1]=buf[11];
tp_dev.y[2]=((u16)buf[12]<<8)+buf[13]; //触摸点2坐标
tp_dev.x[2]=800-(((u16)buf[14]<<8)+buf[15]);
tp_dev.ppr[2]=buf[16];
tp_dev.y[3]=((u16)buf[17]<<8)+buf[24]; //触摸点3坐标
tp_dev.x[3]=800-(((u16)buf[25]<<8)+buf[26]);
tp_dev.ppr[3]=buf[27];
tp_dev.y[4]=((u16)buf[28]<<8)+buf[29]; //触摸点4坐标
tp_dev.x[4]=800-(((u16)buf[30]<<8)+buf[31]);
tp_dev.ppr[4]=buf[32];
#endif
if((tp_dev.tpsta&TP_PRES_DOWN)==0) //之前没有被按下
{
tp_dev.tpsta|=TP_PRES_DOWN|TP_CATH_PRES;//按键按下
tp_dev.x0=tp_dev.x[0];//记录第一次按下时的坐标
tp_dev.y0=tp_dev.y[0];
}
}else if(tp_dev.tpsta&TP_PRES_DOWN) //之前是被按下的
{
tp_dev.tpsta&=~TP_PRES_DOWN; //标记按键松开
}
LED0(OFF);
return tp_dev.tpsta&TP_PRES_DOWN; //返回当前的触屏状态
}
scan函数里面有LED0(OFF); |
|