/** * @brief: 触摸按键扫描 * @param: tp:0,屏幕坐标;1,物理坐标(校准等特殊场合用) * @retval:当前触屏状态, 0,触屏无触摸;1,触屏有触摸 */ u8 TP_Scan(u8 tp) { if(PEN==0)//有按键按下 { if(tp)TP_Read_XY2(&tp_dev.x,&tp_dev.y);//读取物理坐标 else if(TP_Read_XY2(&tp_dev.x,&tp_dev.y))//读取屏幕坐标 { tp_dev.x=tp_dev.xfac*tp_dev.x+tp_dev.xoff;//将结果转换为屏幕坐标 tp_dev.y=tp_dev.yfac*tp_dev.y+tp_dev.yoff; } if((tp_dev.sta&TP_PRES_DOWN)==0)//之前没有被按下 { tp_dev.sta=TP_PRES_DOWN|TP_CATH_PRES;//按键按下 tp_dev.x0=tp_dev.x;//记录第一次按下时的坐标 tp_dev.y0=tp_dev.y; } }else { if(tp_dev.sta&TP_PRES_DOWN)//之前是被按下的 { tp_dev.sta&=~(1<<7);//标记按键松开 }else//之前就没有被按下 { tp_dev.x0=0; tp_dev.y0=0; tp_dev.x=0xffff; tp_dev.y=0xffff; } } return tp_dev.sta&TP_PRES_DOWN;//返回当前的触屏状态 }
u8 TP_Scan(u8 tp) { static unsigned short x,y; static struct file *fd = NULL; static int flag = 0; gui_msg_l0 touch_msg; if(fd == NULL) fd = open("/dev/queuel0.d",__FS_OPEN_EXISTING | __FS_WRITE); if(flag) { touch_msg.x_pos = 25; touch_msg.y_pos = 25; touch_msg.event_type = onfocus; write(fd,(const char *)&touch_msg,sizeof(touch_msg)); }else { touch_msg.x_pos = 25; touch_msg.y_pos = 25; touch_msg.event_type = losefocus; write(fd,(const char *)&touch_msg,sizeof(touch_msg)); } flag ^= 1; if(PEN==0)//有按键按下 { TP_Read_XY2(&x,&y);//读取物理坐标 } return 0; }
int GUI_TOUCH_X_MeasureY(void) { u16 x,y; TP_Read_XY2(&x,&y); //TP_Scan(0); return y; }
unsigned char Convert_Pos(void) { unsigned char l=0; if(TP_Read_XY2(&tp_pixad.x,&tp_pixad.y)==1) { l=1; tp_pixlcd.x=tp_pixad.x>chx?((unsigned long)tp_pixad.x-chx)*1000/vx:(chx-(unsigned long)tp_pixad.x)*1000/vx; tp_pixlcd.y=tp_pixad.y>chy?((unsigned long)tp_pixad.y-chy)*1000/vy:(chy-(unsigned long)tp_pixad.y)*1000/vy; } return l; }
void Get_Click(u16 *x,u16 *y) { TP_Read_XY2(x,y); //TP_Draw_Big_Point(*x=*x/Touch_X,*y=*y/Touch_Y,Red); *x=*x/14.03-14.85;*y=*y/10.81-17.52; }