RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux下輸入子系統(tǒng)上報觸摸屏坐標(biāo)

嵌入式技術(shù) ? 來源:嵌入式技術(shù) ? 作者:嵌入式技術(shù) ? 2022-09-25 08:56 ? 次閱讀

Linux下輸入子系統(tǒng)上報觸摸屏坐標(biāo)

1.輸入子系統(tǒng)簡介

??在 Linux 中,輸入子系統(tǒng)是由輸入子系統(tǒng)設(shè)備驅(qū)動層、輸入子系統(tǒng)核心層(Input Core)和輸入子系統(tǒng)事件處理層(Event Handler)組成。

pYYBAGMuvISABHEGAAUp7Zj3V_s861.png#pic_center

設(shè)備驅(qū)動層

設(shè)備驅(qū)動層實現(xiàn)對硬件設(shè)備的各個寄存的訪問,將底層硬件對用戶層的響應(yīng)數(shù)據(jù)轉(zhuǎn)換為標(biāo)準(zhǔn)輸入事件,再通過核心層提交給事件處理層。

核心層

核心層是設(shè)備驅(qū)動層和事件處理層的連接橋梁,為設(shè)備驅(qū)動層和事件處理層提供編程接口。

事件處理層

事件處理層則為用戶空間提供統(tǒng)一訪問接口,處理驅(qū)動層提交的數(shù)據(jù),所以這使得我們輸入設(shè)備的驅(qū)動部分不在用關(guān)心對設(shè)備文件的操作,只需要關(guān)心對各硬件寄存器的操作和提交的輸入事件。

2.輸入子系統(tǒng)好處

統(tǒng)一了物理形態(tài)各異的相似的輸入設(shè)備的處理功能。例如,各種鼠標(biāo),不論 PS/2、 USB、還是藍牙,都被同樣處理。輸入子系統(tǒng)常見事件類型為:按鍵事件(如鍵盤)、相對坐標(biāo)事件(如鼠標(biāo))、絕對坐標(biāo)事件(如觸摸屏)。

提供了用于分發(fā)輸入報告給用戶應(yīng)用程序的簡單的事件( event)接口。你的驅(qū)動不必創(chuàng)建、管理/dev節(jié)點以及相關(guān)的訪問方法。因此它能夠很方便的調(diào)用輸入 API 以發(fā)送鼠標(biāo)移動、鍵盤按鍵,或觸摸事件給用戶空間。

抽取出了輸入驅(qū)動的通用部分,簡化了驅(qū)動,并提供了一致性。例如,輸入子系統(tǒng)提供了一個底層驅(qū)動(成為 serio)的集合,支持對串口和鍵盤控制器等硬件輸入的訪問。

3.輸入子系統(tǒng)相關(guān)接口函數(shù)

struct input_dev 結(jié)構(gòu)體
??結(jié)構(gòu)體 input_dev 表示底層硬件設(shè)備,是所有輸入設(shè)備的抽象。驅(qū)動層需要實現(xiàn)對input_dev 結(jié)構(gòu)體的填充。

struct input_dev {
	const char *name; //設(shè)備名字--比如:鍵盤的名字
	const char *phys; //設(shè)備在系統(tǒng)中的路徑。比如:input/key0
	const char *uniq; //唯一ID號
	struct input_id id; //用于匹配事件處理層 handler

	unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)]; 

	unsigned long evbit[BITS_TO_LONGS(EV_CNT)]; //記錄支持的事件
	unsigned long keybit[BITS_TO_LONGS(KEY_CNT)]; //按鍵事件
	unsigned long relbit[BITS_TO_LONGS(REL_CNT)];//相對坐標(biāo)
	unsigned long absbit[BITS_TO_LONGS(ABS_CNT)];//絕對坐標(biāo)
	unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)];
	unsigned long ledbit[BITS_TO_LONGS(LED_CNT)];
	unsigned long sndbit[BITS_TO_LONGS(SND_CNT)];
	unsigned long ffbit[BITS_TO_LONGS(FF_CNT)];
	unsigned long swbit[BITS_TO_LONGS(SW_CNT)];

	unsigned int hint_events_per_packet;

	unsigned int keycodemax;
	unsigned int keycodesize;
	void *keycode;

	int (*setkeycode)(struct input_dev *dev,
			  const struct input_keymap_entry *ke,
			  unsigned int *old_keycode);
	int (*getkeycode)(struct input_dev *dev,
			  struct input_keymap_entry *ke);

	struct ff_device *ff;

	unsigned int repeat_key;
	struct timer_list timer;

	int rep[REP_CNT];

	struct input_mt_slot *mt;
	int mtsize;
	int slot;
	int trkid;

	struct input_absinfo *absinfo;

	unsigned long key[BITS_TO_LONGS(KEY_CNT)];
	unsigned long led[BITS_TO_LONGS(LED_CNT)];
	unsigned long snd[BITS_TO_LONGS(SND_CNT)];
	unsigned long sw[BITS_TO_LONGS(SW_CNT)];
	//文件操作函數(shù) ,可以自行實現(xiàn)
	int (*open)(struct input_dev *dev);
	void (*close)(struct input_dev *dev);
	int (*flush)(struct input_dev *dev, struct file *file);
	int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);

	struct input_handle __rcu *grab;

	spinlock_t event_lock;
	struct mutex mutex;

	unsigned int users;
	bool going_away;

	bool sync;//最后一次同步后沒有新的事件置 1

	struct device dev;

	struct list_head	h_list;
	struct list_head	node;
};

struct input_event 結(jié)構(gòu)體
??該結(jié)構(gòu)體一般在應(yīng)用層調(diào)用,用戶接收事件層上報的數(shù)據(jù)內(nèi)容。

struct input_event {
	struct timeval time; //時間戳
	__u16 type;//事件類型EV_KEY、EV_REL、EV_ABS
	__u16 code;//事件數(shù)據(jù)值,若按鍵事件,則保證按鍵鍵值;若坐標(biāo)信息,則表明為x,y
	__s32 value;//標(biāo)志值,若按鍵,則表示按下還是松開;若坐標(biāo),則表示位具體的坐標(biāo)值
};

動態(tài)分配和釋放inptu_dev結(jié)構(gòu)體函數(shù)

//動態(tài)分配input_dev結(jié)構(gòu)體
struct input_dev *input_allocate_device(void)
//釋放input_dev結(jié)構(gòu)體
void input_free_device(struct input_dev *dev)

注冊和注銷輸入子系統(tǒng)

//注冊輸入子系統(tǒng)
int input_register_device(struct input_dev *dev)
//注銷輸入子系統(tǒng)
void input_free_device(struct input_dev *dev)
形參: input_dev --輸入設(shè)備結(jié)構(gòu)體
返回值: 注冊成功返回0,失敗返回其它值

設(shè)置上報的數(shù)據(jù)內(nèi)容input_set_capability

??input_set_capability函數(shù)用于填充input_dev結(jié)構(gòu)體,設(shè)置要報的數(shù)據(jù)類型和數(shù)據(jù)信息。

void input_set_capability(struct input_dev *dev, unsigned int type,unsigned int code)
形參: dev --input_dev結(jié)構(gòu)體
???type --事件類型EV_KEY、EV_REL、EV_ABS
???code --要上報的具體值
例:input_set_capability(dev,EV_KEY,KEY_A);//上報按鍵事件,上報的鍵值為’A’

設(shè)置上報的數(shù)據(jù)內(nèi)容__set_bit

??通過設(shè)置位的函數(shù)實現(xiàn)inptu_dev結(jié)構(gòu)體填充,input_set_capability函數(shù)的內(nèi)部就是通過調(diào)用__set_bit函數(shù)來實現(xiàn)的。

inline void __set_bit(int nr, volatile unsigned long *addr)
形參: nr–要上報的具體值
???addr --設(shè)置的地址
上報按鍵事件例:
? __set_bit(EV_KEY,dev->evbit);//設(shè)置事件屬性為按鍵事件
? __set_bit(KEY_A,dev->keybit);//設(shè)置上報的鍵值
設(shè)置重復(fù)上報例:__set_bit(EV_REP,dev->evbit);

設(shè)置上報的值的范圍input_set_abs_params

??input_set_abs_params函數(shù)用于設(shè)置上報的數(shù)值的取值范圍。

上報數(shù)據(jù)到事件處理層

//上報按鍵事件鍵值,如鍵盤
inline void input_report_key(struct input_dev *dev, unsigned int code, int value);
//上報相對事件坐標(biāo)值,如鼠標(biāo)
inline void input_report_rel(struct input_dev *dev, unsigned int code, int value);
//上報絕對事件坐標(biāo)值,如觸摸屏
inline void input_report_abs(struct input_dev *dev, unsigned int code, int value);
形參: dev --input_dev結(jié)構(gòu)體
??? code --事件數(shù)據(jù)值,若按鍵事件,則保證按鍵鍵值;若坐標(biāo)信息,則表明為x,y
??? value --標(biāo)志值,若按鍵,則表示按下還是松開;若坐標(biāo),則表示位具體的坐標(biāo)值

?這幾個函數(shù)完成數(shù)據(jù)上報內(nèi)部靠input_event函數(shù)實現(xiàn)。

事件同步input_mt_sync

void input_mt_sync(struct input_dev *dev)
形參: dev --input_dev結(jié)構(gòu)體

??在完成數(shù)據(jù)上報后一定要調(diào)用事件同步函數(shù)。

4.輸入子系統(tǒng)上報觸摸屏坐標(biāo)示例

硬件平臺:tiny4412
開發(fā)平臺:ubuntu18.04
交叉編譯器:arm-linux-gcc
內(nèi)核:linux3.5
觸摸屏驅(qū)動IC:ft5X06

ft5x06驅(qū)動示例參考:Linux下IIC子系統(tǒng)和觸摸屏驅(qū)動

輸入子系統(tǒng)注冊上報數(shù)據(jù)示例

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include 
#include 
#include 
static struct work_struct touch_work;
static struct i2c_client *touch_client;
static struct input_dev *touch_dev=NULL;
/*工作處理函數(shù)*/
static void touch_work_func(struct work_struct *work)
{
	u8 touch_buff[7];
	int x,y;
	int num;
	i2c_smbus_read_i2c_block_data(touch_client,0, 7,touch_buff);
	num=touch_buff[2]&0xf;//觸控點個數(shù)
	x=((touch_buff[3]&0xf)<<8)|touch_buff[4];
	y=((touch_buff[5]&0xf)<<8)|touch_buff[6];
	//printk("(x,y)=%d,%dtnum=%dn",x,y,num);
	if(num)
	{
		 input_report_abs(touch_dev,ABS_X,x);//上報x坐標(biāo)
		 input_report_abs(touch_dev,ABS_Y,y);//上報x坐標(biāo)
		 input_report_abs(touch_dev,ABS_PRESSURE,1);//壓力值,1表示按下
		 input_report_key(touch_dev,BTN_TOUCH,1);//按下
	}
	else
	{
		input_report_abs(touch_dev,ABS_PRESSURE,0);//壓力值,0表示松開
		input_report_key(touch_dev,BTN_TOUCH,0);//釋放
	}
	input_sync(touch_dev);//同步
}
/*中斷處理函數(shù)*/
static irqreturn_t touch_irq_work(int irq, void *dev)
{
	schedule_work(&touch_work);//調(diào)度工作
	return IRQ_HANDLED;
}

static int ft5x06_probe(struct i2c_client *client, const struct i2c_device_id *id)//資源匹配函數(shù)
{
	int ret; 
	printk("資源匹配成功n");
	printk("name=%staddr=%#xtirq=%dn",client->name,client->addr,client->irq);
	touch_client=client;

	/*動態(tài)分配input_dev結(jié)構(gòu)體*/
	touch_dev=input_allocate_device();
	if(!touch_dev)return -1;//動態(tài)分配失敗

	/*設(shè)置要上報的數(shù)據(jù)內(nèi)容*/
	input_set_capability(touch_dev,EV_ABS,ABS_X);//上報x坐標(biāo)
	input_set_capability(touch_dev,EV_ABS,ABS_Y);//上報x坐標(biāo)
	input_set_capability(touch_dev,EV_ABS,ABS_PRESSURE);//壓力值
	input_set_capability(touch_dev,EV_KEY,BTN_TOUCH);//觸摸屏點擊事件
	/*設(shè)置xy取值范圍*/
	input_set_abs_params(touch_dev,ABS_X,0,800,0,0);//設(shè)置x坐標(biāo)范圍
	input_set_abs_params(touch_dev,ABS_Y,0,480,0,0);//設(shè)置y坐標(biāo)范圍
	input_set_abs_params(touch_dev,ABS_PRESSURE,0,1,0,0);//設(shè)置壓力值

	/*注冊輸入子系統(tǒng)*/
	ret=input_register_device(touch_dev);
	if(ret)return ret;//注冊輸入子系統(tǒng)設(shè)備失敗
	/*1.初始化工作*/
	INIT_WORK(&touch_work, touch_work_func);
	/*注冊中斷*/
	ret=request_irq(client->irq,touch_irq_work,IRQF_TRIGGER_RISING|IRQF_TRIGGER_FALLING,"ft5x06",NULL);
	if(ret)
	{
		printk("中斷注冊失敗n");
		return -1;
	}

	return 0;
}
static int ft5x06_remove(struct i2c_client *client)//資源釋放函數(shù)
{
	printk("IIC驅(qū)動程資源釋放成功n");
	free_irq(client->irq,NULL);//注銷中斷
	/*注銷輸入子系統(tǒng)設(shè)備*/
	input_unregister_device(touch_dev);
	/*釋放input_dev結(jié)構(gòu)體*/
	input_free_device(touch_dev);
	return 0;
}
//資源匹配結(jié)構(gòu)體
static struct i2c_device_id id_table[]=
{
		{"touch_ft5x06",0},
			{},
};
static struct i2c_driver ft5x06_drv=
{
	.probe=ft5x06_probe,
	.remove=ft5x06_remove,
	.driver=
	{
		.name="touch_drv",
	},
	.id_table=id_table,//資源匹配結(jié)構(gòu)體
};

static int __init wbyq_ft5x06_drv_init(void)
{
	i2c_add_driver(&ft5x06_drv); 
	return 0;
	
}
/*驅(qū)動釋放*/
static void __exit wbyq_ft5x06_drv_cleanup(void)
{
	i2c_del_driver(&ft5x06_drv);
    printk("IIC驅(qū)動層注銷成功n");
}
module_init(wbyq_ft5x06_drv_init);//驅(qū)動入口函數(shù)
module_exit(wbyq_ft5x06_drv_cleanup);//驅(qū)動出口函數(shù)

MODULE_LICENSE("GPL");//驅(qū)動注冊協(xié)議
MODULE_AUTHOR("it_ashui");
MODULE_DESCRIPTION("Exynos4 ft5x06_drv Driver");

應(yīng)用層讀取觸摸屏坐標(biāo)示例

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
static unsigned char *lcd_p=NULL;//屏幕緩存地址
static unsigned char *gbk_addr=NULL;//屏幕緩存地址
static struct fb_fix_screeninfo fb_fix;//固定參數(shù)結(jié)構(gòu)體
static struct fb_var_screeninfo fb_var;//可變參數(shù)結(jié)構(gòu)體
extern const unsigned char ascii_32_16[][32*16/8];//逐列式,高位在前

/*LCD畫點函數(shù)*/
static inline void LCD_DrawPoint(int x,int y,int c)
{
	//獲取要繪制的點的地址
	unsigned int *p= (unsigned int *)(lcd_p+y*fb_fix.line_length+x*fb_var.bits_per_pixel/8);
	*p=c;//寫入顏色值
}

/*
顯示漢字
x,y  --要顯示的位置
size  --字體大小
font --要顯示的漢字
c -- 顏色值
*/
static void LCD_DisplayFont(int x,int y,int size,char *font,int c)
{
	u8 *p=NULL;
	u8 H,L;
	u32 addr=0;//漢字偏移地址
	u16 font_size=size*size/8;//漢字點陣大小(寬度保證為8的倍數(shù))
	H=*font;//漢字高字節(jié)
	L=*(font+1);//漢字的低字節(jié)
	if(L<0x7F)L-=0x40;
	else L-=0x41;
	H-=0x81;
	addr=(190*H+L)*font_size;//漢字所在點陣中的偏移地址
	p=malloc(font_size);
	if(p==NULL)
	{
		printf("申請空間失敗rn");
		return ;
	}
	memcpy(p,gbk_addr+addr,font_size);//讀取點陣碼數(shù)據(jù)	
	int i,j;
	int x0=x;
	unsigned char tmep;
	for(i=0;i=size)
		{
			x0=x;
			y++;
		}
	}
}
/*
顯示字符
x,y  --要顯示的位置
h,w -- 字符高和寬
cha --要顯示的字符
c -- 顏色值
取模走向:逐列式,高位在前
*/
static void LCD_DisplayCha(int x,int y,int h,int w,char cha,int c)
{
	int i,j;
	int y0=y;
	u8 temp;
	for(i=0;i*size>8;j++)"> 

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 觸摸屏
    +關(guān)注

    關(guān)注

    42

    文章

    2301

    瀏覽量

    116115
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11292

    瀏覽量

    209318
  • 子系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    109

    瀏覽量

    12392
收藏 人收藏

    評論

    相關(guān)推薦

    ARM觸摸屏驅(qū)動系統(tǒng)設(shè)計

    介紹了基于飛思卡爾芯片i.MX27 和嵌入式linux 系統(tǒng)觸摸屏硬件的連接設(shè)計和軟件的驅(qū)動設(shè)計.
    發(fā)表于 05-02 10:56 ?2728次閱讀

    STM32 SPI驅(qū)動觸摸屏(XPT2046)(上)

    觸摸屏又稱觸控面板,它是一種把觸摸位置轉(zhuǎn)化成坐標(biāo)數(shù)據(jù)的輸入設(shè)備觸摸屏可以分為電阻式觸摸屏和電容式
    發(fā)表于 07-22 15:01 ?5406次閱讀
    STM32 SPI驅(qū)動<b class='flag-5'>觸摸屏</b>(XPT2046)(上)

    基于觸摸屏驅(qū)動的Linux內(nèi)核輸入子系統(tǒng)研究

    基于觸摸屏驅(qū)動的 Linux 內(nèi)核輸入子系統(tǒng)研究華明, 徐造林( 東南大學(xué) 計算機科學(xué)與工程學(xué)院, 江蘇 南京 210 096)摘要: Li nux 是目前最為優(yōu)秀的開源
    發(fā)表于 03-20 16:04

    嵌入式Linux觸摸屏在漆包線檢測系統(tǒng)中的應(yīng)用

    本文針對嵌入式Linux觸摸屏在漆包線檢測系統(tǒng)中的應(yīng)用,介紹了本系統(tǒng)觸摸屏的具體接口電路,嵌入式Lin
    發(fā)表于 07-27 15:47 ?29次下載

    基于MeeGo的電容式觸摸屏驅(qū)動設(shè)計

    本文基于Nokia和Intel公司合作開發(fā)的開源操作系統(tǒng)MeeGo,采用基于內(nèi)核對象的Linux輸入子系統(tǒng)來設(shè)計觸摸屏的驅(qū)動。該方案極大地方
    發(fā)表于 05-25 10:55 ?1378次閱讀
    基于MeeGo的電容式<b class='flag-5'>觸摸屏</b>驅(qū)動設(shè)計

    51單片機系統(tǒng)中的觸摸屏坐標(biāo)算法

    本文提出了一種在51單片機系統(tǒng)中的觸摸屏坐標(biāo)算法。
    發(fā)表于 03-24 15:49 ?1次下載

    Linux觸摸屏驅(qū)動

    對于觸摸屏驅(qū)動,我們主要需要掌握觸摸屏驅(qū)動代碼和應(yīng)用層測試代碼。下面講的是基于Mini2440的觸摸屏驅(qū)動,現(xiàn)在的驅(qū)動我們都將設(shè)備和驅(qū)動分離,掛在平臺設(shè)備總線上,讓設(shè)備和驅(qū)動去匹配。
    發(fā)表于 04-26 14:45 ?2520次閱讀

    Android的觸摸屏進行校準(zhǔn)的方法詳細(xì)說明

    知道通常驅(qū)動是把采集到的原始坐標(biāo)(A/D值),直接通過input系統(tǒng)上報。對于12位的 A/D,觸摸屏的范圍是:0~0xFFF。在驅(qū)動中表示如下:
    發(fā)表于 08-12 17:33 ?1次下載
    Android的<b class='flag-5'>觸摸屏</b>進行校準(zhǔn)的方法詳細(xì)說明

    英創(chuàng)信息技術(shù)EM9280 Linux觸摸屏應(yīng)用開發(fā)簡介

    提供對于4線制電阻式觸摸屏的支持,在定制的Linux內(nèi)核中已完全實現(xiàn)了該觸摸屏的驅(qū)動支持。 在EM9280中,觸摸屏作為輸入設(shè)備其設(shè)備文件為
    的頭像 發(fā)表于 01-16 09:39 ?1912次閱讀
    英創(chuàng)信息技術(shù)EM9280 <b class='flag-5'>Linux</b><b class='flag-5'>觸摸屏</b>應(yīng)用開發(fā)簡介

    硬件開發(fā)技術(shù)之觸摸屏的詳細(xì)介紹

    觸摸屏又稱觸控面板,它是一種把觸摸位置轉(zhuǎn)化成坐標(biāo)數(shù)據(jù)的輸入設(shè)備,根據(jù)觸摸屏的檢測原理,主要分為電阻式觸摸
    發(fā)表于 01-08 11:33 ?2958次閱讀
    硬件開發(fā)技術(shù)之<b class='flag-5'>觸摸屏</b>的詳細(xì)介紹

    AD7877輸入觸摸屏控制器Linux驅(qū)動

    AD7877輸入觸摸屏控制器Linux驅(qū)動
    發(fā)表于 04-20 14:25 ?2次下載
    AD7877<b class='flag-5'>輸入</b><b class='flag-5'>觸摸屏</b>控制器<b class='flag-5'>Linux</b>驅(qū)動

    AD7873輸入觸摸屏迪吉蒂澤Linux Driver

    AD7873輸入觸摸屏迪吉蒂澤Linux Driver
    發(fā)表于 04-21 19:34 ?5次下載
    AD7873<b class='flag-5'>輸入</b><b class='flag-5'>觸摸屏</b>迪吉蒂澤<b class='flag-5'>Linux</b> Driver

    嵌入式linux應(yīng)用層讀取觸摸屏坐標(biāo)簡單示例

    嵌入式linux應(yīng)用層讀取觸摸屏簡單示例linux下面觸摸屏讀取方法就是讀取/dev/input/event*事件1、檢查event編號hexdump /dev/input/event
    發(fā)表于 11-01 17:38 ?17次下載
    嵌入式<b class='flag-5'>linux</b>應(yīng)用層讀取<b class='flag-5'>觸摸屏</b><b class='flag-5'>坐標(biāo)</b>簡單示例

    stm32 USB HID多點觸摸屏上報安卓觸摸信號

    關(guān)于stm32USB HID觸摸屏前面的內(nèi)容大家可以參考我之前寫的兩個博客,是一步一步過渡過來的!使用stm32配置自定義的HID設(shè)備stm32 USB HID單點觸摸屏上報安卓觸摸
    發(fā)表于 12-28 19:53 ?17次下載
    stm32 USB HID多點<b class='flag-5'>觸摸屏</b><b class='flag-5'>上報</b>安卓<b class='flag-5'>觸摸</b>信號

    電容觸摸屏原理 電容觸摸屏和電阻觸摸屏有什么區(qū)別

    電容觸摸屏和電阻觸摸屏是兩種常見的觸摸屏技術(shù),它們在原理、結(jié)構(gòu)和應(yīng)用方面都有很大的區(qū)別。下面將詳細(xì)介紹電容觸摸屏的原理、結(jié)構(gòu)和特點,并與電阻觸摸屏
    的頭像 發(fā)表于 01-22 16:13 ?4487次閱讀
    RM新时代网站-首页