电容触摸 单片机IO处理 电容触摸屏读取按键 方法 触摸处理芯片 方案宁波北仑恒晶电子科技有限公司.doc

电容触摸 单片机IO处理 电容触摸屏读取按键 方法 触摸处理芯片 方案宁波北仑恒晶电子科技有限公司.doc

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
电容触摸 单片机IO处理 电容触摸屏读取按键 方法 触摸处理芯片 方案宁波北仑恒晶电子科技有限公司

原理说明:  通过检测感应按键PAD的电容量变化来判断是否有触摸动作。当手指触摸PAD时,电容量增加,充放电时间变长。   本方案中利用M48的20个双向IO口实现了20个触摸按键,而且所用原器件最少。其中R1~R20的10K电阻是消除干扰用的,如果采用软件算法,用数字滤波来消除干扰,这20个电阻也可以省略。这样就只需要10只1M的充放电电阻(R21~R30)就可以了。   最基本的按键单元是两个PAD分别接M48的两个IO引脚,两个引脚之间用一个1M的电阻相连。如图:      PB1(PAD1) O------/\/\/1M\/\/\------O (PAD2) PB2   有3种方法检测PAD1的电容量变化: 方法1:检测PAD1的充电时间   (1)初始化PB1输出低电平,PB2输出高电平,这时PAD1上的电量被放掉,PB1为低电平;   (2)设置PB1高阻输入,同时记时,使能PB1引脚电平变化中断。这时PB2输出的高电平通过1M的电阻对PAD1充电;   (3)充电到PAD1电平到MOS高电平的最低值时,PB1引脚电平变化中断,在中断里记下充电时间。 方法2:检测PAD1的放电时间   (1)初始化PB1输出高电平,PB2输出低电平,这时PAD1充电,PB1为高电平;   (2)设置PB1高阻输入,同时记时,使能PB1引脚电平变化中断。这时PAD1通过1M的电阻对PB2(地)放电;   (3)放电到PAD1电平到MOS低电平的最高值时,PB1引脚电平变化中断,在中断里记下放电时间。 方法3:检测PAD1的充放电时间   (1)初始化PB1输出低电平,PB2输出高电平,这时PAD1上的电量被放掉,PB1为低电平;   (2)设置PB1高阻输入,同时记时,使能PB1引脚电平变化中断。这时PB2输出的高电平通过1M的电阻对PAD1充电;   (3)充电到PAD1电平到MOS高电平的最低值时,PB1引脚电平变化中断。在中断里设置PB2输出低电平,这时PAD1通过1M的电阻对PB2放电;   (4)放电到PAD1电平到MOS低电平的最高值时,PB1引脚电平变化中断。在中断里记下充放电的总时间。   多次测量取滑动平均值(可以去掉最大、最小值后取平均值)来消除干扰。      定时检测PAD1的充放电时间t0,t1,t2......tk,tk+1,所有数据的平均值作为参考值,最近几次采样值的平均值作为当前值,用来判断充放电时间的增减。当充放电时间的增量超过一个设定的门限值时就认为有按键动作。修改这个门限值可以改变按键的灵敏度。   一个按键的检测过程就是这样的。其它按键同理。   检测到按键后,通过I2C接口发送按键码。测试视频里只用了一个LED来指示按键动作,有键按下灯亮,按键释放灯灭。 源程序: //ICC-AVR application builder : 2011/12/1 20:30:09 // Target : m48 // Crystal: 8.0000Mhz #include iom48v.h #include macros.h #define PSCL??PC5??//LED+ #define PSDA??PC4??//LED- //? ?按键编号 引脚编号 #define P01? ?PC3??// 11 #define P02? ?PC2??// 10 #define P03? ?PC1??//??9 #define P04? ?PC0??//??8 #define P05? ?PD1??// 13 #define P06? ?PD0??// 12 #define P07? ?PB5??//??5??//SCK #define P08? ?PB4??//??4??//MISO #define P09? ?PD2??// 14 #define P10? ?PD3??// 15 #define P11? ?PB2??//??2 #define P12? ?PB3??//??3??//MOSI #define P13? ?PD4??// 16 #define P14? ?PB6??//??6 #define P15? ?PB0??//??0 #define P16? ?PB1??//??1 #define P17? ?PB7??//??7 #define P18? ?PD5??// 17 #define P19? ?PD6??// 18 #define P20? ?PD7??// 19 #define on? ? 1 #define off? ?0 //引脚编号=K[按键编号] unsigned char K[21]={0,11,10,9,8,13,12,5,4,14,15,2,3

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档