精华内容
下载资源
问答
  • Touchkit触摸屏驱动刚从网上找到,支持USB驱动,有在嵌入式开发中移植成功的,请回复点赞最好,这款驱动能帮你解决各种触摸屏隐藏的问题,让你使用起来更加的方便快捷,前人栽树,后人好乘凉呀。需要的朋友赶紧下载...
  • 苹果Mac Os X系统上的触摸屏驱动,支持四线电阻屏。
  • 7 英寸 TFT电容式触摸屏显示器概述: 电容式触摸显示屏通常提供比传统电阻式触摸显示屏更高的质量和更好的用户体验。此参考设计显示了如何将电容式触摸显示屏连接到 Sitara AM437x 处理器。显示屏具有一个通过其 I2C ...
  • 行业分类-设备装置-具有触摸屏的电泳显示器以及驱动触摸屏的方法.zip
  • VGA工控板——PLC驱动液晶显示器触摸屏pdf,VGA工控板——PLC驱动液晶显示器触摸屏:VGA工控板——PLC驱动液晶显示器触摸屏。支持的PLC有(三菱FX系列,三菱Q系列,西门子S7-200系列, 西门子S7-300系列,台达,...
  • 单片机驱动8至52寸液晶显示器触摸屏,界面实现“0”代码、“0”编程、如"制作PPT
  • 触摸屏驱动

    千次阅读 2018-12-24 11:31:06
     现在我们想写一个基于Linux系统的触摸屏驱动程序,先把程序的步骤写出来: 触摸屏的使用过程: 1、按下,产生中断 2、在中断程序里,启动ADC转换x,y坐标 3、ADC结束,产生ADC中断 4、在ADC中...

    前言

           之前有篇文章简单介绍过触摸屏的工作原理,可以参考一下:电阻触摸屏原理简述。测出某个点的电压值后,我们就可以通过启动ADC模块,将电压转换为X,Y坐标了。

           现在我们想写一个基于Linux系统的触摸屏驱动程序,先把程序的步骤写出来:

    触摸屏的使用过程:
    1、按下,产生中断
    2、在中断程序里,启动ADC转换x,y坐标
    3、ADC结束,产生ADC中断
    4、在ADC中断处理函数里,上报(input_event),启动定时器
    5、定时器时间到,又回到第二步(处理长按和滑动)
    6、松开

    后面就会按照上面的步骤写出我们的驱动程序。

    正文

    先贴出写好的代码,再做解释

    #include <linux/module.h>
    #include <linux/version.h>
    
    #include <linux/init.h>
    #include <linux/fs.h>
    #include <linux/interrupt.h>
    #include <linux/irq.h>
    #include <linux/sched.h>
    #include <linux/pm.h>
    #include <linux/sysctl.h>
    #include <linux/proc_fs.h>
    #include <linux/delay.h>
    #include <linux/platform_device.h>
    #include <linux/input.h>
    #include <linux/irq.h>
    #include <linux/gpio_keys.h>
    #include <asm/io.h>
    #include <asm/arch/regs-gpio.h>
    #include <asm/gpio.h>
    
    /*
    触摸屏的使用过程:
    1、按下,产生中断
    2、在中断程序里,启动ADC转换x,y坐标
    3、ADC结束,产生ADC中断
    4、在ADC中断处理函数里,上报(input_event),启动定时器
    5、定时器时间到,又回到第二步(处理长按和滑动)
    6、松开
    */
    
    static struct input_dev *s3c_ts_dev;
    struct s3c_ts_regs {
    	unsigned long adccon;
    	unsigned long adctsc;
    	unsigned long adcdly;
    	unsigned long adcdat0;
    	unsigned long adcdat1;
    	unsigned long adcupdn;
    };
    
    static volatile struct s3c_ts_regs *s3c_ts_regs;
    static struct timer_list ts_timer;
    
    static enter_wait_pen_down_mode()
    {
    	/* 进入等待触摸笔按下的模式 */
    	s3c_ts_regs->adctsc = 0xd3;
    }
    
    static enter_wait_pen_up_mode()
    {
    	/* 进入等待触摸笔松开的模式 */
    	s3c_ts_regs->adctsc = 0x1d3;
    }
    
    static void enter_measure_xy_mode(void)
    {
    	/* 进入XY坐标的测量模式 */
    	s3c_ts_regs->adctsc = (1<<2) | (1<<3);
    }
    
    static start_adc()
    {
    	/* 启动ADC进行电压测量 */
    	s3c_ts_regs->adccon |= (1<<0);
    }
    
    static irqreturn_t pen_down_up_irq(int irq, void *dev_id)
    {
    	/* 进入处理触摸笔松开或按下的中断 */
    	if (s3c_ts_regs->adcdat0 & (1<<15)) {
    		//printk("pen up\n");
    		input_report_key(s3c_ts_dev, BTN_TOUCH, 0);
     		input_report_abs(s3c_ts_dev, ABS_PRESSURE, 0);
    		input_sync(&s3c_ts_dev);
    		enter_wait_pen_down_mode();
    	} else {
    		//printk("pen down\n");
    		//enter_wait_pen_up_mode();
    		enter_measure_xy_mode();
    		start_adc();/*成功启动后,会进入中断模式,也就是调用adc_irq函数*/
    	}
    	return IRQ_HANDLED;
    }
    
    static int s3c_filter_ts(int x[], int y[])
    {
    #define DEVIATION 10
    	int avr_x, avr_y;
    	int det_x, det_y;
    	
    	avr_x = (x[0] + x[1])/2;
    	avr_y = (y[0] + y[1])/2;
    
    	det_x = (avr_x > x[2])?(avr_x - x[2]):(x[2] - avr_x);
    	det_y = (avr_y > y[2])?(avr_y - y[2]):(y[2] - avr_y);
    	if (det_x > DEVIATION || det_y > DEVIATION)
    		return 0;
    
    	avr_x = (x[1] + x[2])/2;
    	avr_y = (y[1] + y[2])/2;
    
    	det_x = (avr_x > x[3])?(avr_x - x[3]):(x[3] - avr_x);
    	det_y = (avr_y > y[3])?(avr_y - y[3]):(y[3] - avr_y);
    	if (det_x > DEVIATION || det_y > DEVIATION)
    		return 0;
    	return 1;
    }
    
    static irqreturn_t adc_irq(int irq, void *dev_id)
    {
    	/* 进入ADC测量的中断模式 */
    	static int x[4], y[4];
    	int adcdata0, adcdata1;
    	int avg_x, avg_y;
    	static int cnt = 0;
    
    	/* 优化措施2:
    	  *当松开时,不进行测量,并抛弃这个按键值,
    	  *因为测量过程中就松开,测出来的是不准确的
            */
        adcdata0 = s3c_ts_regs->adcdat0;/*读取X坐标的值*/
    	adcdata1 = s3c_ts_regs->adcdat1;/*读取Y坐标的值*/
    
    	if (s3c_ts_regs->adcdat0 & (1<<15)) {
    		/* 已经松开了 */
    		cnt  = 0;
    		input_report_key(s3c_ts_dev, BTN_TOUCH, 0);
     		input_report_abs(s3c_ts_dev, ABS_PRESSURE, 0);
    		input_sync(&s3c_ts_dev);
    		enter_wait_pen_down_mode();
    	} else {
    		/*优化措施3:
    		  *取多次读取结果的平均值
    		  */
    		x[cnt] = adcdata0 & 0x3ff;
    		y[cnt] = adcdata1 & 0x3ff;
    		cnt++;
    		if (4 == cnt) {
    			/*优化措施4:
    			  *读取到四次值后,如果读取到的值
    			  *和它前面两次的平均值的差值大于某个值,
    			  *我们就认为这次的读取不精确,从头
    			  *再读取
    			  */
    			if (s3c_filter_ts(x, y)) {
    				avg_x = (x[0]+x[1]+x[2]+x[3])/4;
    				avg_y = (y[0]+y[1]+y[2]+y[3])/4;
    				//printk("adc_irq x = %d, y = %d\n", avg_x, avg_y);
    				input_report_abs(s3c_ts_dev, ABS_X, avg_x);
    				input_report_abs(s3c_ts_dev, ABS_Y, avg_y);
    
    				input_report_key(s3c_ts_dev, BTN_TOUCH, 1);
     				input_report_abs(s3c_ts_dev, ABS_PRESSURE, 1);
    				input_sync(&s3c_ts_dev);
    			}
    			cnt = 0;
    			enter_wait_pen_up_mode();
    			/*10ms后再启动定时器*/
    			mod_timer(&ts_timer, jiffies + HZ/100);
    		} else {
    			enter_measure_xy_mode();
    			start_adc();
    		}
    	}
    	return IRQ_HANDLED;
    }
    
    static void s3c_ts_timer_function(unsigned long data)
    {
    	if (s3c_ts_regs->adcdat0 & (1<<15)) {
    		/*松开的情况*/
    		input_report_key(s3c_ts_dev, BTN_TOUCH, 0);
     		input_report_abs(s3c_ts_dev, ABS_PRESSURE, 0);
    		input_sync(&s3c_ts_dev);
    		enter_wait_pen_down_mode();
    	} else {
    		/* 如果是按下的情况 */
    		enter_measure_xy_mode();
    		start_adc();
    	}
    }
    
    static int s3c_ts_init(void)
    {
    	int err;
    	static struct clk *s3c_ts_clk;
    	
    	/* 1. 分配input_dev结构体 */
    	s3c_ts_dev = input_allocate_device();
    	if (NULL == s3c_ts_dev) {
    		printk("allocate input device failed\n");
    		err = -ENOMEM;
    		goto err1;
    	}
    	/* 2. 设置 */
    	/* 2.1 能产生这类事件中的哪一类事件 */
    	set_bit(EV_KEY, s3c_ts_dev->evbit);
    	set_bit(EV_ABS, s3c_ts_dev->evbit);
    	set_bit(EV_SYN, s3c_ts_dev->evbit);
    
    	/* 2.2 设置产生这类事件中的哪些事件 */
    	set_bit(BTN_TOUCH, s3c_ts_dev->keybit);
    	input_set_abs_params(s3c_ts_dev, ABS_X, 0, 0x3FF, 0, 0);
    	input_set_abs_params(s3c_ts_dev, ABS_Y, 0, 0x3FF, 0, 0);
    	input_set_abs_params(s3c_ts_dev, ABS_PRESSURE, 0, 1, 0, 0);
    	
    	/* 3. 注册 */
    	err = input_register_device(s3c_ts_dev);
    	if (err) {
    		printk("input register device fail\n");
    		goto err2;
    	}
    	
    	/* 4. 硬件操作 */
    	/* 4.1 使能时钟(CLKCON[15]),使ADC模块能工作 */
    	s3c_ts_clk = clk_get(NULL, "adc"); /* 这个是设置adc模块 */
    	if (!s3c_ts_clk) {
    		printk(KERN_ERR "failed to get adc clock source\n");
    		return -ENOENT;
    	}
    	clk_enable(s3c_ts_clk);
    
    	/* 4.2  设置S3C2440的ADC/TS寄存器*/
    	s3c_ts_regs = ioremap(0x58000000, sizeof(struct s3c_ts_regs));
    	printk("&s3c_ts_regs = 0x%x, &s3c_ts_regs->adctsc = 0x%x\n", s3c_ts_regs, &s3c_ts_regs->adctsc);
    	/*
    	  *ADCCON:
    	  *bit[14] : 1-A/D converter prescaler enable
    	  *bit[13:6] : A/D converter prescaler value
    	  *			  49, ADCCLK = PCLK/(49+1) = 50MHz/(49+1)=1MHz
    	  *bit[0] : A/D conversion starts by enable.先设置为0
    	  */
    	s3c_ts_regs->adccon = (1<<14) | (49<<6);
    
    	if (request_irq(IRQ_TC, pen_down_up_irq, IRQF_SAMPLE_RANDOM, "ts_pen", NULL)
    		|| request_irq(IRQ_ADC, adc_irq, IRQF_SAMPLE_RANDOM,"adc", NULL)) {
    		printk("request_irq failed!\n");
    		goto err3;
    	}
    	/* 
    	  *优化措施1: 延时一段时间后再进行ADC测量,
    	  *避免电压还没稳定就测量,造成结果不准确
    	  */
    	s3c_ts_regs->adcdly = 0xffff; //延时设为最大值
    
    	/*优化措施5:
    	  *启动定时器,处理滑动或长按的情况
    	  */
    	init_timer(&ts_timer);
    	ts_timer.function = s3c_ts_timer_function; /*定时器到时间后执行这个函数*/
    	add_timer(&ts_timer);
    
    	enter_wait_pen_down_mode();
    	return 0;
    err3:
    	iounmap(s3c_ts_regs);
    err2:
    	input_unregister_device(s3c_ts_dev);
    err1:
    	input_free_device(s3c_ts_dev);
    }
    
    static void s3c_ts_exit(void)
    {
    	disable_irq(IRQ_TC);
    	disable_irq(IRQ_ADC);
    	free_irq(IRQ_TC, NULL);
    	free_irq(IRQ_ADC, NULL);
    	iounmap(s3c_ts_regs);
    	input_unregister_device(s3c_ts_dev);
    	input_free_device(s3c_ts_dev);
    	del_timer(&ts_timer);
    }
    
    module_init(s3c_ts_init);
    module_exit(s3c_ts_exit);
    MODULE_LICENSE("GPL");
    
    
    /*
    hexdump /dev/event0的打印值如下:
                           秒           微妙 type  code       value
     0000000 17a1 0000 a51c 000e 0003 0000 0176 0000
     0000010 17a1 0000 a528 000e 0003 0001 00d3 0000
     0000020 17a1 0000 a52e 000e 0001 014a 0001 0000
     0000030 17a1 0000 a530 000e 0003 0018 0001 0000
     0000040 17a1 0000 e308 000e 0003 0000 0175 0000
     0000050 17a1 0000 e31f 000e 0003 0001 00d5 0000
     0000060 17a2 0000 042c 0000 0001 014a 0000 0000
     0000070 17a2 0000 043a 0000 0003 0018 0000 0000
     */
    

    1、

          我们先看一下入口的init函数。我们是利用了input子系统来分发产生的触摸屏事件,input子系统在我前面的文章也介绍过(input子系统的架构分析及应用)。input子系统的书写步骤主要有3步:

    (1)分配一个input_dev结构体:input_allocate_device

    (2)设置产生哪一类事件:set_bit()。我们这里是设置为按键类,绝对位移和同步类事件

    (3)设置产生的按键类型:这里用到了input_set_abs_params()函数,可以设置绝对位移事件中X和Y中的最大最小值,以及压力值等等的一些参数。

    (4)最后就是注册已经设置好的input_dev结构体

    2、

    接下来是硬件相关的操作,其实也就是要使用触摸屏,所必须的寄存器设置。

    (1)我们这款S3C2440芯片的ADC模块默认是开机不工作的,所以要使用它就必须在初始化的时候开启

    s3c_ts_clk = clk_get(NULL, "adc"); /* 这个是设置adc模块 */
    clk_enable(s3c_ts_clk);

    (2)

           要记住一点就是,Linux系统并没有自动帮我们对外设的寄存器的地址进行映射,需要我们手动ioremap一下。这样才能对寄存器进行设置。因为我们的寄存器地址都是连续的,所以可以一次性进行映射。

    struct s3c_ts_regs {
    	unsigned long adccon; //0x58000000
    	unsigned long adctsc;
    	unsigned long adcdly;
    	unsigned long adcdat0;
    	unsigned long adcdat1;
    	unsigned long adcupdn;
    };
    
    ...
    
    s3c_ts_regs = ioremap(0x58000000, sizeof(struct s3c_ts_regs));

    (3)

    我们这里的大部分寄存器都使用默认值,但是这里的配置寄存器ADCCON需要设置一下,使得开启了分频并且分频系数为49

    /*
    	  *ADCCON:
    	  *bit[14] : 1-A/D converter prescaler enable
    	  *bit[13:6] : A/D converter prescaler value
    	  *			  49, ADCCLK = PCLK/(49+1) = 50MHz/(49+1)=1MHz
    	  *bit[0] : A/D conversion starts by enable.先设置为0
    	  */
    	s3c_ts_regs->adccon = (1<<14) | (49<<6);

    3、

           然后就是注册中断函数了,这里我们注册了两个中断处理函数。一个是用来处理触摸屏的中断事件,另一个是处理ADC中断事件。这里的中断号我是参考了代码中已有的:drivers/input/touchscreen/s3c2410_ts.c。

    4、

    先略过一些优化的代码,看一下下面的这个函数。

    enter_wait_pen_down_mode();

           我们在init初始化阶段的最后调用这个函数,并且设置adctsc寄存器为0xd3,是为了使触摸屏进入等待按下的状态,这是芯片手册中说明的,我们不用过于纠结:

     5、

           初始化的动作都做完了,触摸屏就静静的等待按下的事件了。假设此时触摸屏检测到按下的事件,就会触发调用我们的pen_down_up_irq中断函数。

    static irqreturn_t pen_down_up_irq(int irq, void *dev_id)
    {
    	/* 进入处理触摸笔松开或按下的中断 */
    	if (s3c_ts_regs->adcdat0 & (1<<15)) {
    		//printk("pen up\n");
    		input_report_key(s3c_ts_dev, BTN_TOUCH, 0);
     		input_report_abs(s3c_ts_dev, ABS_PRESSURE, 0);
    		input_sync(&s3c_ts_dev);
    		enter_wait_pen_down_mode();
    	} else {
    		//printk("pen down\n");
    		//enter_wait_pen_up_mode();
    		enter_measure_xy_mode();
    		start_adc();/*成功启动后,会进入中断模式,也就是调用adc_irq函数*/
    	}
    	return IRQ_HANDLED;
    }

            我们可以看到函数比较简单,通过读取寄存器adcdat0的第16位的值来判断按下还是松开。

           如果是0,我们就进入X和Y坐标的测量;如果是1,证明是松开了触摸屏,我们就上报上次读取到的数据,并再次进入等待触摸屏按下的状态。 

           假如检测到的是按下触摸屏的状态,那么就会调用enter_measure_xy_mode()函数,进行X、Y坐标的测量。下面图14.5是等待状态的等效电路图,

    下面的两个图分别是测量X和Y坐标的等效电路图:

           我们可以看到此时都是断开了S5的上拉电阻,所以我们enter_measure_xy_mode()函数中也将ADC控制寄存器ADCTSC的下面两位设置为1,使其上面电阻断开,并且进入自动测量XY坐标的模式。

     然后就是调用start_adc()函数,启动ADC,并进入ADC中断处理函数adc_irq()。

    6、

           现在我们看一下ADC中断处理函数adc_irq()。其实如果我们先忽略优化措施部分的代码,是可以写的很简单的。芯片已经提供了寄存器adcdat0和adcdat1给我们直接读取X和Y坐标的值,我们只用负责上报从寄存器读取到的坐标值就可以了。

    延伸

           上面写到的流程,已经是一个比较完整的触摸屏驱动程序的流程了。但是如果想有更精确的、更友好的触摸体验,我们还必须加上一些优化的措施,也就是我代码中提到的“优化措施1~5“。

    1、

           优化措施1比较简单,我们只是简单的设置adcdly寄存器为最大值。这个寄存器的含义就是什么时候才开始ADC的测量

    2、

           优化措施2是在开始ADC测量前,我们先检查一下触摸屏是按下还是松开的状态。如果是松开的话,我们是直接上报坐标值0的,因为ADC测量的过程是需要时间的,如果在测量过程中就松开了,此时测量出的结果可能是不精确的,所以我们在上报坐标值前有一个判断时候按下触摸屏的动作。

    3、

           优化措施3的原理也很简单,取多次的坐标值取平均值,可以使结果更加接近精确值,比如我们代码中取4次坐标值的平均值

    4、

           优化措施4的原理也非常简单,我们在读取到的坐标值的时候,有可能会出现某一次的误差比较大,所以我们这里加了一个过滤函数s3c_filter_ts(),如果读取到某次的坐标值误差比较大,我们直接从头来。

    5、

           现在我们重点来讲一下优化措施5。我们一开始写的驱动程序是不支持长按和滑动屏幕的,所以我们在代码中加入了定时器。定时器的用途很广泛,而且我们也不陌生,在我们的文章:input子系统的架构分析及应用中,曾经也使用过定时器来防止按键抖动。

            这里我们看一下怎么使用定时器来支持长按和滑动。定时器的引入也是有固定的套路的:

    /*1、定义一个定时器*/
    static struct timer_list ts_timer;
    
    /*2、初始化定时器*/
    init_timer(&ts_timer);
    
    /*3、定义定时器到时间后调用的函数*/
    ts_timer.function = s3c_ts_timer_function;
    
    /*4、将我们定义的定时器加入调用的队列*/
    add_timer(&ts_timer);
    
    /*5、延长定时器倒计时时间,10ms后再结束*/
    mod_timer(&ts_timer, jiffies + HZ/100);

           我们这里重点看一下定时器的第5步的使用,在我们的驱动程序中,我们将mod_timer()放到了ADC测量结束上报坐标值之后,并且规定10ms后我们就调用定时器函数s3c_ts_timer_function(),判断如果还是按下的状态的话,再次进入XY坐标的测量并启动ADC转换,直到判断到是松开的状态,我们上报坐标0值并进入等待按下的状态。

    结语

           使用命令hexdump /dev/event0,调试我们的驱动程序,可以看到下面的打印,如果调试过类似的驱动程序的朋友应该不会陌生。

                 秒        微妙  type  code   value
     0000000 17a1 0000 a51c 000e 0003 0000 0176 0000
     0000010 17a1 0000 a528 000e 0003 0001 00d3 0000
     0000020 17a1 0000 a52e 000e 0001 014a 0001 0000
     0000030 17a1 0000 a530 000e 0003 0018 0001 0000
     0000040 17a1 0000 e308 000e 0003 0000 0175 0000
     0000050 17a1 0000 e31f 000e 0003 0001 00d5 0000
     0000060 17a2 0000 042c 0000 0001 014a 0000 0000
     0000070 17a2 0000 043a 0000 0003 0018 0000 0000

            写到这里,触摸屏驱动程序就算写完了。很多的细节方面可能对于不同的芯片会有所差异,但是思路和一些套路都是大同小异的,我们只需要借鉴这部分的就可以了。

    展开全文
  • 触摸屏显示器

    2021-07-22 03:34:35
    触摸屏显示器(Touch Screen)可以让使用者只要用手指轻轻地碰计算机显示屏上的图符或文字就能实现对主机操作,这样摆脱了键盘和鼠标操作,使人机交互更为直截了当。主要应用于公共场所大厅信息查询、领导办公、电子...

    触摸屏显示器(Touch Screen)可以让使用者只要用手指轻轻地碰计算机显示屏上的图符或文字就能实现对主机操作,这样摆脱了键盘和鼠标操作,使人机交互更为直截了当。主要应用于公共场所大厅信息查询、领导办公、电子游戏、点歌点菜、多媒体教学、机票/火车票预售等。产品主要分为电容式触控屏、电阻式触控屏和表面声波触摸屏三类。

    中文名

    触摸屏显示器

    外文名

    Touch Screen分    类

    技    术

    压感技术

    触摸屏显示器分类

    编辑

    语音

    触摸屏根据所用的介质以及工作原理,可分为电阻式、电容式、红外线式和表面声波式、光学等多种。

    触摸屏显示器技术

    编辑

    语音

    触摸屏显示器技术是一种新型的人机交互输入方式,与传统的键盘和鼠标输入方式相比,触摸屏输入更直观。为满足市场客户的需求,已经开发出多点触摸屏显示器,配合识别软件,触摸屏还可以实现手写输入。触摸屏由安装在显示器屏幕前面的检测部件和触摸屏控制器组成。当手指或其它物体触摸安装在显示器前端的触摸屏时,所触摸的位置由触摸屏控制器检测,并通过接口(如RS—232串行口)送到主机。

    触摸屏显示器触摸功能

    多功能智能板与计算机、投影机共同组成大型触摸屏,将计算机的屏幕通过投影机投影到智能板上,以教鞭或手指代替鼠标在智能板上操作计算机, 控制Windows或Macintosh及其应用软件。

    触摸屏显示器声波触摸屏

    表面声波触摸屏的触摸屏部分只是一块透明的强化玻璃,因此可以做成平面,柱面或球面,而且在触摸屏的表面也不需要加特殊的涂层。该种触摸屏的角上装有超声波换能器,能在发送一种高频声波跨越屏幕表面。当手指或其它能够吸收或阻挡声波能量的物体触摸屏幕时,途经手指部位的声波能量被部分吸收,根据接受器信号变化可以确定坐标位置。同其他类型的触摸屏相比,表面声波触摸屏不受温度、湿度等环境因素影响,分辨率高;透光率好,能保持清晰透亮的图像质量;反应速度快;有第三轴(即压力轴)响应,所以应用日益广泛。

    触摸屏显示器类型

    编辑

    语音

    上述触摸屏根据所用的介质以及工作原理,可分为电阻式、电容感应式、红外线式和表面声波式四种。触摸屏从低档向高档逐步升级和发展:从电阻式、红外线式走向电容感应式和表面声波式。

    触摸屏显示器电容触摸

    电容式触摸屏把透明的金属层涂在玻璃板上作为导电体,在触摸屏四边有狭长的电极,在导电体内形成一个低电压交流电场。当手指触摸在金属层上时,当有导电物体触碰时,就会改变触点的电容,四边电极发出的电流会流向触点,控制器通过电流可以确定触摸的位置信息。由于电容随温度、湿度或接地情况的不同而变化,故其稳定性较差,往往会产生漂移现象。

    触摸屏显示器电阻触摸

    电阻式触摸屏基本上是薄膜加上玻璃的结构,当触摸时,薄膜下层的ITO会接触到玻璃上层的ITO,经由感应器传出一个讯息,再从控制器送到计算机端,藉由驱动程序转化到屏幕上的X、Y值,而完成点选的动作,并呈现在屏幕上。

    触摸屏显示器技术相关

    编辑

    语音

    触摸屏显示器压感技术

    在智能板内外表面的阻尼材料之间存在一层空气层,当有压力压迫板面使某点接触时,智能板就可辨识该点的位置,从而完成操作。

    触摸屏显示器感应力度

    是触控屏灵敏度的表现,指的是触控屏对外界力度能产生正确反应的范围。

    触摸屏显示器红外线触屏

    红外线触摸屏在屏幕周边成对安装红外线发射器和红外线接受器,接受器接受发射器发射的红外线,形成红外线矩阵。当手指按在屏幕上时,手指阻挡了红外线,这样在X、Y两个方向接受信息送给主机。

    触摸屏显示器矩阵切换器

    将多路输入信号任意选择一路或多路分别输出给一路或多路显示设备。

    触摸屏显示器坐标系统

    触摸屏是绝对坐标系统,要选哪就直接点哪,与鼠标这类相对定位系统的本质区别是一次到位的直观性。绝对坐标系统的特点是,每一次定位坐标与上一次定位坐标没有关系,触摸屏在物理上是一套独立的坐标定位系统,每次触摸的数据通过校准转为屏幕上的坐标,这样,就要求触摸屏这套坐标不管在什么情况下,同一点的输出数据是稳定的,如果不稳定,那么这触摸屏就不能保证绝对坐标定位。

    触摸屏显示器莫式硬度系数

    是衡量触控屏表面硬度的参数。

    触摸屏显示器屏幕类型

    触摸屏的屏幕类型主要有平面、球面、柱面、液晶四种类型。

    触摸屏显示器透光率

    它直接影响到触摸屏的视觉效果。很多触摸屏是多层的复合薄膜,仅用透明一点来概括它的视觉效果是不够的,它至少应该包括四个特性:透明度、色彩失真度、反光性和清晰度,当然还能再分,比如反光程度包括镜面反光程度和衍射反光程度,只不过触摸屏表面衍射反光还没有达到CD盘的程度,对用户而言,这四个特性已经基本够了。

    触摸屏显示器发展情况

    编辑

    语音

    触摸屏显示器前景

    随着智能机以及平板电脑的市场地位不断上升,触摸屏行业被带动成为朝阳行业,但伴随进入市场的企业越来越多,整个行业竞争日渐加剧,利润空间不断被压缩,触摸屏股市更是动荡不安,不过受到低端智能机市场火热状况的带动,未来市场仍存在利好机会[1]

    触摸屏显示器发展形势

    触摸屏市场发展初期,由于利润丰厚,我国企业纷纷跟进生产,但随着生产企业的不断增多,当前我国市场存在触摸屏产能扩张过快,相关触摸屏企业竞争剧烈,致使市场利润持续下降,市场整合已经避无可避,就现在触摸屏市场走低局势来看,短期内触摸屏股市尽管走低,但受市场影响仍有交易性机会,不过长期发展形势仍受新兴消费电子产品市场的壮大影响。

    参考资料

    1.

    中国触摸屏行业市场调查及发展趋势预测

    .51报告在线[引用日期2012-10-12]

    展开全文
  • 唯拓触摸屏驱动

    2017-10-23 13:50:59
    唯拓触摸屏跟其他触摸屏不一样,他是4根触控线连接一个模拟输入控制器,再连接USB接口,winXP安装完只看到输入设备,没有触控驱动提示,必须安装完这个驱动才能激活触控功能。
  • 触摸屏显示器触摸屏显示器是什么 触摸屏显示器怎么样触摸屏显示器是什么触摸屏显示器 ( Touch Screen )可以让使用者只要用手指轻轻地碰计算机显示屏上的图符或文字就能实现对主机操作,这样摆脱了键盘和鼠标操作...

    【触摸屏显示器】触摸屏显示器是什么 触摸屏显示器怎么样

    触摸屏显示器是什么

    触摸屏显示器 ( Touch Screen )可以让使用者只要用手指轻轻地碰计算机显示屏上的图符或文字就能实现对主机操作,这样摆脱了键盘和鼠标操作,使人机交互更为直截了当。主要应用于公共场所大厅信息查询、领导办公、电子游戏、点歌点菜、多媒体教学、机票 / 火车票预售等。产品主要分为电容式触控屏、电阻式触控屏和表面声波触摸屏三类。

    10137694_15431017770_600x400_thumb.jpg

    触摸屏显示器分类

    触摸屏根据所用的介质以及工作原理,可分为电阻式、电容式、红外线式和表面声波式多种。

    触摸屏显示器技术

    触摸屏显示器技术是一种新型的人机交互输入方式,与传统的键盘和鼠标输入方式相比,触摸屏输入更直观。配合识别软件,触摸屏还可以实现手写输入。触摸屏由安装在显示器屏幕前面的检测部件和触摸屏控制器组成。当手指或其它物体触摸安装在显示器前端的触摸屏时,所触摸的位置由触摸屏控制器检测,并通过接口(如 RS — 232 串行口)送到主机。

    触摸屏显示器怎么样

    大型触摸屏功能

    多功能智能板与计算机、投影机共同组成大型触摸屏,将计算机的屏幕通过投影机投影到智能板上,以教鞭或手指代替鼠标在智能板上操作计算机, 控制 Windows 或 Macintosh 及其应用软件。

    表面声波触摸屏

    表面声波触摸屏的触摸屏部分只是一块透明的强化玻璃,因此可以做成平面,柱面或球面,而且在触摸屏的表面也不需要加特殊的涂层。该种触摸屏的角上装有超声波换能器,能在发送一种高频声波跨越屏幕表面。当手指或其它能够吸收或阻挡声波能量的物体触摸屏幕时,途经手指部位的声波能量被部分吸收,根据接受器信号变化可以确定坐标位置。同其他类型的触摸屏相比,表面声波触摸屏不受温度、湿度等环境因素影响,分辨率高;透光率好,能保持清晰透亮的图像质量;反应速度快;有第三轴(即压力轴)响应,所以应用日益广泛。

    触控屏显示器类型

    触摸屏根据所用的介质以及工作原理,可分为电阻式、电容感应式、红外线式和表面声波式四种。触摸屏从低档向高档逐步升级和发展:从电阻式、红外线式走向电容感应式和表面声波式。

    电容式触摸屏

    电容式触摸屏把透明的金属层涂在玻璃板上作为导电体,在触摸屏四边有狭长的电极,在导电体内形成一个低电压交流电场。当手指触摸在金属层上时,当有导电物体触碰时,就会改变触点的电容,四边电极发出的电流会流向触点,控制器通过电流可以确定触摸的位置信息。由于电容随温度、湿度或接地情况的不同而变化,故其稳定性较差,往往会产生漂移现象。

    电阻式触摸屏

    电阻式触摸屏基本上是薄膜加上玻璃的结构,当触摸时,薄膜下层的 ITO 会接触到玻璃上层的 ITO ,经由感应器传出一个讯息,再从控制器送到计算机端,藉由驱动程序转化到屏幕上的 X 、 Y 值,而完成点选的动作,并呈现在屏幕上。

    电阻式压感技术

    在智能板内外表面的阻尼材料之间存在一层空气层,当有压力压迫板面使某点接触时,智能板就可辨识该点的位置,从而完成操作。

    感应力度 是触控屏灵敏度的表现,指的是触控屏对外界力度能产生正确反应的范围。

    红外线触摸屏

    红外线触摸屏在屏幕周边成对安装红外线发射器和红外线接受器,接受器接受发射器发射的红外线,形成红外线矩阵。当手指按在屏幕上时,手指阻挡了红外线,这样在 X 、 Y 两个方向接受信息送给主机。

    矩阵切换器

    将多路输入信号任意选择一路或多路分别输出给一路或多路显示设备。

    绝对坐标系统

    触摸屏是绝对坐标系统,要选哪就直接点哪,与鼠标这类相对定位系统的本质区别是一次到位的直观性。绝对坐标系统的特点是,每一次定位坐标与上一次定位坐标没有关系,触摸屏在物理上是一套独立的坐标定位系统,每次触摸的数据通过校准转为屏幕上的坐标,这样,就要求触摸屏这套坐标不管在什么情况下,同一点的输出数据是稳定的,如果不稳定,那么这触摸屏就不能保证绝对坐标定位。

    莫式硬度系数

    是衡量触控屏表面硬度的参数。

    屏幕类型

    目前触摸屏的屏幕类型主要有平面、球面、柱面、液晶四种类型。

    透光率

    它直接影响到触摸屏的视觉效果。很多 触摸屏 是多层的复合薄膜,仅用透明一点来概括它的视觉效果是不够的,它至少应该包括四个特性:透明度、色彩失真度、反光性和清晰度,当然还能再分,比如反光程度包括镜面反光程度和衍射反光程度,只不过触摸屏表面衍射反光还没有达到 CD 盘的程度,对用户而言,这四个特性已经基本够了。

    展开全文
  • 触摸屏驱动 直接安装

    2010-11-19 16:19:29
    显示器触摸屏驱动,直接安装就能使用,可取代鼠标操作
  • 提供一个简单的基于触摸驱动事件的 GUI 界面。 后者应该是基于带有XPT2046触摸控制器的SSD1963控制器。 此类显示器可在电子商店和 eBay 上购买。 该软件基于 Robert Hammelrath 的 TFT 和触摸控制器驱动程序。 它...
  • ELO 触摸屏驱动

    2018-06-01 10:45:00
    Elo TouchSystems是全球触摸技术的领导者,开发、生产和销售全套触摸屏和触摸显示器产品。Elo可提供最完整的触摸屏技术,CRT触摸显示器和LCD触摸显示器,并精心设计每一件产品,以满足不同应用的需求,如工业、医疗...
  • 如何在Ubuntu Linux系统中触摸屏简单使用和配置方法。如果你装的是 Ubuntu 发行版,那么基本上你的 X 的配置文件 (xorg.conf) 里面已经设置好了相关的驱动,是默认设置,你只需要添加些相关的参数就 ok 了。下面是 ...

    如何在Ubuntu Linux系统中触摸屏简单使用和配置方法。如果你装的是 Ubuntu 发行版,那么基本上你的 X 的配置文件 (xorg.conf) 里面已经设置好了相关的驱动,是默认设置,你只需要添加些相关的参数就 ok 了。下面是 Ubuntu 默认的触摸板的配置: 7 Q6 }- D9 |2 W# K5 o

    4 \0 Z/ h+ [: d9 U) _

    Section "InputDevice"

    ) x) k* ]* `5 Y1 M3 A7 r( B$ R; E3 M' T

    Identifier "Synaptics Touchpad" % G$ i3 W; v, z

    ; G( R+ @7 V3 _% c2 [9 a; e1 G+ xDriver "synaptics"

    7 ^& P& g( B  E% |* a4 d& [- @; Q) J  F2 y% {

    Option "SendCoreEvents" "true"

    8 k7 F# E7 x$ c' E) V# X

    % [6 I6 v/ g; q. A+ C' ^1 r1 AOption "Device" "/dev/psaux"

    # b) I4 G: ]6 z* G- ~2 G

    3 [, d' b' ^" r% TOption "Protocol" "auto-dev" 9 f# ^4 H7 |3 B1 @' e  c- z

    , n* z. |9 E0 j9 eOption "HorizScrollDelta" "0"

    & Y* |( I3 F% v5 k

    @, z4 V, A1 KEndSection - I. u/ ]1 J/ s

    ) Y8 m+ _3 c5 ^. ~1 w' b1 v6 O! R; c$ c3 F  F9 X

    先让我们来使我们之后的修改不需要重启 X 就能生效,在上面的里面添加:

    5 i2 u- J" W! Z7 f' ^/ l% ^) e( `* I4 N4 x) [! H

    " c$ Z. {) d% B9 _0 i

    Option "SHMConfig" "on" 0 U& w% v6 \0 C

    / N5 ]8 `' O3 ?3 m1 `

    & W5 t$ O- L3 w& l3 m然后重启一下 X,这样你就可以动态的通过 synclient 命令来修改你的触摸板的参数,当然也有 Gui 的程序,比如 qsynaptics。看你习惯吧,推荐用 synclient,只有命令行才最强大,不是么,哈。比如 synclient Var1=value1 Var2=value2 ….

    9 y4 c( K1 e& l# H, T! w4 W

    2 q/ A) K. b* E1 M; U

    # M6 \5 r. w. Y  R# {. c& w8 N( A2 P3 s因为各位的显示器的分辨率都不一样,所以默认的设置可能会让你觉得使用触摸板移动指针太慢了,没关系,let’s correct this: * c' R* |! E7 E/ f, ?' M' R

    3 {9 O( Q8 M4 N" q4 @7 j: h# F+ y0 |$ f# L: \

    Option "MinSpeed" "0.9" ! o0 X, d" c3 v0 @

    E$ o: G+ t1 }' a% n

    Option "MaxSpeed" "1.5"

    8 n. a9 j  K! d! u

    * Y  C, F; E2 W) E. ~) ZOption "AccelFactor" "0.0750" . Q. y9 Q- d0 C* r' {! H4 K1 @

    ) p$ f) K! A: x; a1 ]& v

    4 n, p, U( h" f: e

    这是我的设置,我的分辨率是 1920 x 1200, 所以你们酌情修改,一般来讲 MinSpeed 0.5、MaxSpeed 0.9、AccelFactor 0.0350就OK了。

    2 W8 ~, M1 k& q% i+ Z9 L6 v

    ; ~- f+ x. B; j# ?8 b* P

    , b7 Y/ k& M+ q' S很多电脑上面的触摸板下面只有两个 Pads, 没有中键这怎么办?ok,这么办:

    $ h- `$ ]9 V1 M" A0 W. d  a5 J( |

    2 G6 V* N' x& \- L* w0 Q7 [

    Option "RBCornerButton" "3" # z9 h. ^& c, Y$ Z  Q# ^1 n* M

    9 J) P% X+ u3 S9 B% B, W( l7 t! P) G

    ! |/ b- ^; A$ e9 |( H6 x

    现在你点击你的触摸板的右上角就是中键了,帅吧。一般触摸板的右下角是右键,右上角是中键,然后右面边缘是上下 scroll, 下面边缘是左右 scroll,这些是默认设置,可以通过 synclient -l 来查看你机器上面的默认设置。

    2 v7 G/ H) C4 X* \$ r4 C( {: S8 u3 P$ x  q$ ~$ S$ S

    ) W- ?! F+ M# J) q, e2 S7 Y2 g) \1 D如果上面的一些和边边角角有关的设置不起作用的话,肯定是默认的 edge 的设置不对,你可以设置一下 LeftEdge,RightEdge,TopEdge,BottomEdge 来适应你的需要。

    5 a& a% C  [+ }% {: z4 q

    v% I2 C, Z9 _) ^# ?2 T( A

    8 }- Q+ W7 T% n8 `4 @如果你的触摸板支持多点的话,你也可以设置成类似 MacBook 那样用两只手指 scroll 哦。

    7 s7 n; u; c- U% o& t' u

    # {$ r! ?$ U: O, ~" v+ A7 J4 Z  {; r  i

    最后再推荐一个小程序,可以模拟测试你的输入设备的行为,xev。

    & L: T* x6 e: t; R7 m4 u" g% T( ?8 F4 N* Z. h: T

    # Y# u9 O% s" ^: B4 T, ^

    还有很多微调的参数,man synaptics 自己去研究吧。

    * v; ~8 W+ @# C: M" G5 x

    / I6 W5 T2 V: o; g; u

    0 q2 C. \* t- P1 h- v# g* C; |

    1 j: R% c8 y$ V$ j2 b

    2 X8 ^. l/ r7 ^- U! S1 A

    展开全文
  • 关于触摸屏触摸驱动安装步骤

    千次阅读 2018-11-15 22:54:04
    触摸屏驱动步骤 1.得到s3c_ts.ko文件 拷到work/nfs_root/first_fs文件系统里 进入menuconfig里把触摸屏触摸驱动设置为空 Location: ...
  • LINUX设备驱动触摸屏
  • 2021-2027全球与中国触摸屏液晶显示器市场现状及未来发展趋势 【报告篇幅】:125 【报告图表数】:158 2020年,全球触摸屏液晶显示器市场规模达到了xx亿元,预计2026年将达到xx亿元,年复合增长率(CAGR)为xx%...
  • 一台主机拖二个触摸屏显示器 需要的硬件支持:高端显卡,Buddy控制台
  • VGA工控板——PLC驱动液晶显示器触摸屏。支持的PLC有(三菱FX系列,三菱Q系列,西门子S7-200系列, 西门子S7-300系列,台达,欧姆龙,松下等主流PLC)
  • viewsonic显示器全套驱动程序forXP/Win7/Win10,viewsplit工具,触摸屏升级固件。
  • 选择一台主机有并口的电脑,接线如下图,触摸屏接上12V电源,图中刷写工具接12V电源 二.安装并口驱动,如下图,安装完后电脑会重启 三.运行升级升序,选择驱动板程序,HEX文件,点击闪电标志的图标,即开始下载。...
  • 博主最近准备基于Dragonboaard 410c做几个智能产品,需要用到显示器触摸屏,但在官网搜了一下,发现都没有与开发板配套的显示器触摸屏,没办法,只能去万能的淘宝上看有没适合的了。 淘宝上搜了一圈,最终选择...
  • 电阻触摸屏的主要部分是一块与显示器表面非常配合的电阻薄膜屏,这是一种多层的复合薄膜,它以一层玻璃或硬塑料平板作为基层,表面涂有一层透明氧化金属(透明的导电电阻)导电层,上面再盖有一层外表面硬化处理、光滑...
  • 布拉本达触摸屏维修:上电黑屏、 花屏、暗屏、蓝屏、白屏、闪屏、碎屏,无背光、背光暗、对比度低、有背光无字符,上电无反应、上电烧保险,不能正常开机、进入不了系统,触摸无反应、触摸响应慢、触摸偏移、 触摸...
  • 树莓派3.5寸触摸屏驱动及切换操作 驱动获取: https://github.com/waveshare/LCD-show.git 驱动安装: 把驱动解压到树莓派内 cd LCD-show/ sudo chmod +x LCD35-show sudo ./LCD35-show 然后重启一下就行了 切换...
  • 一、触摸屏概述触摸屏作为一种输入设备,是目前最简单、方便、自然的一种人机交互方式。按照触摸屏的工作原理和传输信息的介质,可以将触摸屏分为四种:电阻式、电容感应式、红外线式和表面声波式。每一种触摸屏都有...
  • 一、电容式触摸屏检测原理 基本原理是利用充电时间检测电容大小,从而通过检测出电容值的变化来获知触摸信号。电容屏的最上层是玻璃(不会像电阻屏那样形变),核心层部分也是由ITO材料构成的,这些导电材料在屏幕里...
  • 这里主要说触摸屏的工作原理,以及对上述驱动程序代码的简单分析。分析中参考了网上的很多资料。感谢原作者的无私奉献,因为涉及多篇,在此就没有注出原作的链接。本文分为三个部分,第一部分讲叙硬件知识,包括触摸...
  • 2011年9月(上)基于嵌入式linux 的触摸屏驱动设计吴振英(苏州工业职业技术学院,江苏苏州215004)[摘要]随着信息技术的飞快发展,嵌入式系统越来越广泛的应用到航空航天、通讯设备等许多领域。触摸屏由于轻便灵活、...
  • 显示和触摸驱动程序 显示控制器和触摸驱动程序可以直接与一起。 要了解有关在LittlevGL中使用驱动程序的更多信息,请访问“ 。... 如果您在LittlevGL中使用了新的显示器触摸驱动程序,请与他人共享!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,583
精华内容 1,833
关键字:

触摸屏显示器驱动