触摸屏获取坐标

触摸屏获取坐标
1)触摸屏代码的思路
    第一步:打开触摸屏的驱动("/dev/input/event0")
    第二步:读取触摸屏的坐标
    第三步:关闭触摸屏
    
2)输入子系统模型(了解原理即可,等你学习驱动的时候再深入掌握)
    概念:linux把所有输入类型设备(键盘,鼠标,触摸屏)的驱动统一成了一个模型--》输入子系统模型
    linux为了统一,就搞出了输入子系统模型这个概念,所有的人开发linux上键盘,鼠标,触摸屏的驱动都必须按照输入子系统模型规定好的参数,变量去写代码
    linux提供的跟输入子系统模型有关的头文件
    /usr/include/linux/input.h
    输入子系统模型中的重要结构体
    struct input_event
    {
        type; //表示事件类型  EV_KEY 键盘的驱动   EV_ABS 触摸屏的驱动
        code; //表示按键的键值,x,y坐标  ABS_X    ABS_Y
        value; //表示坐标值
    }
    
3)开发板触摸屏的坐标跟液晶屏的分辨率不一致
    液晶屏的分辨率:800*480
    开发板的触摸屏坐标:1024*600
    把获取的坐标(x,y)
    //x=x/1024*800; y=y/600*480;    //由于整形/整形得不到分数,只会得到(0,0)
    x=x*800/1024; y=y*480/600;        //先乘后除

 

#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/input.h>


int t_x,t_y;//保存获取的屏幕坐标(x,y)

//读取屏幕坐标(x,y)
int get_ts()
{
	struct input_event ts;

	//打开触摸屏驱动
	int fd_ts=open("/dev/input/event0",O_RDWR);
	if(-1==fd_ts)
	{
		perror("open ts failed\n");
		return -1;
	}
	while(1)
	{	//循环读取文件
		read(fd_ts,&ts,sizeof(ts));
		if(ts.type==EV_ABS)//是触摸屏驱动
		{
			if(ts.code==ABS_X)//x坐标
				t_x=ts.value;
			if(ts.code==ABS_Y)//y坐标
				t_y=ts.value;
		}
		//ts.type=EV_KEY--》开关, 按下时ts.value=1;抬手时ts.value=0
		if(ts.type==EV_KEY && ts.code==BTN_TOUCH && ts.value==0)
			break;
	}
	//关闭文件
	close(fd_ts);
}


int main(int argc,char **argv)
{
	while(1)
	{
		get_ts();
		printf("(%d,%d)\n",t_x,t_y);
	}
	
	return 0;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值