赞
踩
一、触摸屏(touch screen =TS)
1.分类
电阻触摸屏:压力感应 x+ x- y+ y-
电容触摸屏:电压感应 vcc gnd int(中断) rst(复位) scl(i2c的时钟) sda(i2c的数据)
2.触摸屏的文件路径名
/dev/input/event0
3.触摸屏有哪些信息
1)需要读取触摸屏的设备文件信息
2)设备文件信息包含3个信息 type\code\value
4.设备文件信息
gec@ubuntu:/mnt/hgfs/GZ2264/6_文件IO/05/code/zuoye$ vi /usr/include/linux/input.h
23 struct input_event {
24 struct timeval time;
25 __u16 type;
26 __u16 code;
27 __s32 value;
28 };
说明(头文件的使用方法):
gec@ubuntu:/mnt/hgfs/GZ2264/6_文件IO/06/code$ ls /usr/include/stdio.h
/usr/include/stdio.h ----->#include <stdio.h>
gec@ubuntu:/mnt/hgfs/GZ2264/6_文件IO/06/code$ ls /usr/include/linux/input.h
/usr/include/linux/input.h ----->#include <linux/input.h>
5.怎样读取触摸屏的设备文件
struct input_event ts;
read(fd,&ts,sizeof(struct input_event));
练习1:
通过指针传参来取值---指针的高级用法1
int get_value(int *x,int *y)
{
*x = 100;
*y = 250;
return 0;//不用通过返回值就可以从子函数中取值
}
int main()
{
int num1=0,num2=0; //注意这里不要定义成int *num1与int *num2
get_value(&num1,&num2);
printf("num1=%d num2=%d\n",num1,num2);
return 0;
}
6.分析触摸屏读取的type\code\value的值
练习2:(代码要在开发板上面执行)
1)读取一遍 type\code\value的值是什么?
- //打开触摸屏
- int fd;
- fd = open("/dev/input/event0",O_RDWR);//要用系统IO open函数打开硬件设备文件
- if(fd < 0)
- {
- perror("open ts fail");
- return 0;
- }
-
- //定义一个存储触摸屏信息的结构体,将读取的设备文件信息存储在ts中
- struct input_event ts;
-
- while(1)
- {
- //读触摸屏信息--阻塞函数(点击触摸屏之后才会往下执行)
- read(fd,&ts,sizeof(struct input_event));
- if(ts.type == EV_ABS &&ts.code == ABS_X)
- {
- //printf("x=%d ",(int)(ts.value*0.78)); //黑色板x轴的坐标值
- printf("x=%d ",ts.value*800/1024); //黑色板x轴的坐标值
- //printf("x=%d ",ts.value); //蓝色板x轴的坐标值
- }
- if(ts.type == EV_ABS &&ts.code == ABS_Y)
- {
- //printf("y=%d\n",(int)(ts.value*0.8)); //黑色板y轴的坐标值
- printf("y=%d\n",ts.value*480/600); //黑色板y轴的坐标值
- //printf("y=%d\n",ts.value); //蓝色板y轴的坐标值
- }
- }
-
- //关闭触摸屏
- close(fd);
2)死循环读取type\code\value的值是什么,观察规律?
ts.type=3
ts.code=0
ts.value=493 //触摸屏x轴的坐标
ts.type=3
ts.code=1
ts.value=286 //触摸屏y轴的坐标
ts.type=1
ts.code=330
ts.value=1 //按键按下去
ts.type=1
ts.code=330
ts.value=0 //按键松手后
说明:
黑色的板触摸屏分辨率:1024*460;如果是这种,它的分辨率和LCD不一致,需要软件转换
蓝色的板触摸屏分辨率:800*480;如果是这种,它的分辨率和LCD一致,不需要软件转换
7.如何获取触摸屏里面的x轴和y轴的值
//读触摸屏信息--阻塞函数(点击触摸屏之后才会往下执行)
read(fd,&ts,sizeof(struct input_event));
if(ts.type == 3 &&ts.code == 0)
printf("x=%d ",ts.value); //x轴的坐标值
if(ts.type == 3 &&ts.code == 1)
printf("y=%d\n",ts.value); //y轴的坐标值
练习3:用代码分别获取触摸屏5个点的坐标(4个边角点和1个
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。