电容触摸 单片机IO处理 电容触摸屏读取按键 方法 触摸处理芯片 方案宁波北仑恒晶电子科技有限公司.doc_第1页
电容触摸 单片机IO处理 电容触摸屏读取按键 方法 触摸处理芯片 方案宁波北仑恒晶电子科技有限公司.doc_第2页
电容触摸 单片机IO处理 电容触摸屏读取按键 方法 触摸处理芯片 方案宁波北仑恒晶电子科技有限公司.doc_第3页
电容触摸 单片机IO处理 电容触摸屏读取按键 方法 触摸处理芯片 方案宁波北仑恒晶电子科技有限公司.doc_第4页
电容触摸 单片机IO处理 电容触摸屏读取按键 方法 触摸处理芯片 方案宁波北仑恒晶电子科技有限公司.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

原理说明:通过检测感应按键PAD的电容量变化来判断是否有触摸动作。当手指触摸PAD时,电容量增加,充放电时间变长。本方案中利用M48的个双向IO口实现了个触摸按键,而且所用原器件最少。其中的电阻是消除干扰用的,如果采用软件算法,用数字滤波来消除干扰,这个电阻也可以省略。这样就只需要只的充放电电阻()就可以了。最基本的按键单元是两个PAD分别接M48的两个IO引脚,两个引脚之间用一个的电阻相连。如图:PB1(PAD1) O-/1M/-O (PAD2) PB2有种方法检测PAD1的电容量变化:方法:检测PAD1的充电时间()初始化PB1输出低电平,PB2输出高电平,这时PAD1上的电量被放掉,PB1为低电平;()设置PB1高阻输入,同时记时,使能PB1引脚电平变化中断。这时PB2输出的高电平通过的电阻对PAD1充电;()充电到PAD1电平到MOS高电平的最低值时,PB1引脚电平变化中断,在中断里记下充电时间。方法:检测PAD1的放电时间()初始化PB1输出高电平,PB2输出低电平,这时PAD1充电,PB1为高电平;()设置PB1高阻输入,同时记时,使能PB1引脚电平变化中断。这时PAD1通过的电阻对PB2(地)放电;()放电到PAD1电平到MOS低电平的最高值时,PB1引脚电平变化中断,在中断里记下放电时间。方法:检测PAD1的充放电时间()初始化PB1输出低电平,PB2输出高电平,这时PAD1上的电量被放掉,PB1为低电平;()设置PB1高阻输入,同时记时,使能PB1引脚电平变化中断。这时PB2输出的高电平通过的电阻对PAD1充电;()充电到PAD1电平到MOS高电平的最低值时,PB1引脚电平变化中断。在中断里设置PB2输出低电平,这时PAD1通过的电阻对PB2放电;()放电到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 #include #define PSCLPC5/LED+#define PSDAPC4/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 K21=0,11,10,9,8,13,12,5,4,14,15,2,3,16,6,0,1,7,17,18,19;void led(unsigned char on_off)if(on_off)PORTC &= BIT(PSDA);else PORTC |= BIT(PSDA);void key_tst_prep(unsigned char k)PORTB = 0xFF;DDRB= 0x00;PORTC |= 0x6F;DDRC= 0x30;PORTD = 0xFF;DDRD= 0x00;PCMSK0 = 0x00; /pin change mask 0 PCMSK1 = 0x00; /pin change mask 1 PCMSK2 = 0x00; /pin change mask 2PCIFR = 0x07; /clear pin change flag2.0PCICR = 0x07; /pin change enable if(k8)PORTB &= (1k);DDRB |= (1k);else if(k12)k-=8;PORTC &= (1k);DDRC |= (1k);else if(k20)k-=12;PORTD &= (1k);DDRD |= (1k);void key_tst_start(unsigned char k)PCIFR = 0x07; /clear pin change flag2.0if(k8)PCMSK0 = (1k); /pin change mask 0 DDRB &= (1k);else if(k12)k-=8;PCMSK1 = (1k); /pin change mask 1 DDRC &= (1k);else if(k20)k-=12;PCMSK2 = (1k); /pin change mask 2 DDRD &= (1DKEYNUM) KFKEYNUM=on;else KFKEYNUM=off;for(i=1;i19) KEYNUM = 1;/TIMER0 initialize - prescale:1/ WGM: Normal/ desired value: 0.125uSec/ actual value:0.125uSec (0.0%)void timer0_init(void)TCCR0B = 0x00; /stopTCNT0 = 0xFF; /set countTCCR0A = 0x00; TCCR0B = 0x02; /start timerTIMSK0 = 0x00; /timer 0 interrupt sources/TIMER2 initialize - prescale:32/ WGM: Normal/ desired value: 1mSec/ actual value:1.000mSec (0.0%)void timer2_init(void)TCCR2B = 0x00; /stopASSR= 0x00; /set async modeTCNT2 = 0x00; /setupOCR2A = 0x83;TCCR2A = 0x00; TCCR2B = 0x02; /start TIMSK2 = 0x03; /timer 2 interrupt sources#pragma interrupt_handler timer2_compa_isr:iv_TIM2_COMPAvoid timer2_compa_isr(void)key_tst_start(KKEYNUM);#pragma interrupt_handler timer2_ovf_isr:iv_TIM2_OVFvoid timer2_ovf_isr(void)/TCNT2 = 0x06; /reload counter valuekey_tst_prep(KKEYNUM);/TWI initialize/ bit rate:1void twi_init(void)TWCR= 0X00; /disable twiTWBR= 0x01; /set bit rateTWSR= 0x01; /set prescaleTWAR= 0x00; /set slave addressTWCR= 0x44; /enable twi/call this routine to initialize all peripheralsvoid init_devices(void)/stop errant interrupts until set upCLI(); /disable all interruptskey_tst_prep(KKEYNUM);timer0_init();timer2_init();/twi_init();MCUCR = 0x00;EICRA = 0x00; /extended ext intsEIMSK = 0x00;PRR = 0x0F; /power controllerSEI(); /re-enable interrupts/all peripherals are now initialized/void main(void)init_devices();有不明白的地方可以随时咨询我:欢迎致电研发部经理:代品川QQ:350998385地址:宁波北仑恒晶电子科技有限公司电话真业网址:浙江宁波北仑恒晶电子科技有限公司专业为客人定制各种电容式触控液晶TN、HTN、LCD液晶屏、LCD液晶显示屏,LCD液晶显示器,笔段式液晶、IC邦定加工等业务,现有8台510邦定机,两条LCD前后段生产线;工厂在深圳、潮州、惠州、江西,工厂现在员人3000余人,占地面积45000平方米,LCD生产线能完成从前段的投料到后段切割、灌晶、电检、丝印、贴片、装脚等工艺操作。LCD交货周期: 客户提供详细LCD资料=3天出图纸(客户确认)=15天交样品(客户确认)=20天出货(不装金属脚)/25天出货(装金属脚)产品服务类型:1.产品主要技术参数1)触控类型:电容式触控1)外型尺寸:285345mm以下;2)导电玻璃厚度:0.4、0.55、0.7、1.1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论