- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)