当前位置:   article > 正文

GEC6818开发板——触摸屏

gec6818开发板

一、触摸屏(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的值是什么?

  1. //打开触摸屏
  2. int fd;
  3. fd = open("/dev/input/event0",O_RDWR);//要用系统IO open函数打开硬件设备文件
  4. if(fd < 0)
  5. {
  6. perror("open ts fail");
  7. return 0;
  8. }
  9. //定义一个存储触摸屏信息的结构体,将读取的设备文件信息存储在ts中
  10. struct input_event ts;
  11. while(1)
  12. {
  13. //读触摸屏信息--阻塞函数(点击触摸屏之后才会往下执行)
  14. read(fd,&ts,sizeof(struct input_event));
  15. if(ts.type == EV_ABS &&ts.code == ABS_X)
  16. {
  17. //printf("x=%d ",(int)(ts.value*0.78)); //黑色板x轴的坐标值
  18. printf("x=%d ",ts.value*800/1024); //黑色板x轴的坐标值
  19. //printf("x=%d ",ts.value); //蓝色板x轴的坐标值
  20. }
  21. if(ts.type == EV_ABS &&ts.code == ABS_Y)
  22. {
  23. //printf("y=%d\n",(int)(ts.value*0.8)); //黑色板y轴的坐标值
  24. printf("y=%d\n",ts.value*480/600); //黑色板y轴的坐标值
  25. //printf("y=%d\n",ts.value); //蓝色板y轴的坐标值
  26. }
  27. }
  28. //关闭触摸屏
  29. 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个

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/750023
推荐阅读
相关标签
  

闽ICP备14008679号