欢迎来到天天文库
浏览记录
ID:38897210
大小:258.00 KB
页数:26页
时间:2019-06-21
《PIC单片机按键检测单双击、长短按识别》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、硬件PIC16F883芯片,10个按键,4位数码管。【芯片引脚】 【数码管连接】PORTC连接数码管的8段LED,PORTA<3:0>连接数码管的4个共阴极(控制选通位)。【按键连接】 按键扫描程序在上一篇博文里面有说明,现在还是使用上面的扫面方式(代码都是一样的)。用记录按键按下和弹起的时间判断是不是长按和双击。TMR1设置,1:4分频、1:8预分频,计数周期为8uS。TMR1溢出一次时间为0.524288Skeypress记录TMR1溢出的次数。keypress大于等于2就跳出检测,认为他是长按(时间为1.048576S)。keypr
2、ess<1且keyrelease<1,再次按下的keypress<1就认为是双击。如下图:KP按键按下,KR按键弹起。【实现代码】?1234567891011121314151617181920212223242526272829#include __CONFIG _CONFIG1,_LVP_OFF&_FCMEN_ON&_IESO_OFF&_BOR_OFF&_CPD_OFF&_CP_OFF&_MCLRE_ON&_PWRTE_ON&_WDT_OFF&_INTRC_OSC_NOCLKOUT __CONFIG
3、 _CONFIG2,_WRT_OFF&_BOR21V udata_shr counterres1;计数个位 counter0res1;计数十位 counter1res1;扫描按键变量 counter2res1;延时程序微调参数 key_stateres1;按键状态 keynumres1;按键标号 swapres1;确认按键转换值 keypressres13031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
4、keypressbakres1 keyreleaseres1 LED1res1 LED2res1 LED3res1 LED4res1 UDATA counter3res1 counter4res1 signres1 resetcode0x0000 pageselstart gotostart ;int_vectorcode0x0004 code start bankselANSEL;设置PORTA为数字模式 clrfANSEL bankselANSELH;设置PORTB为数字模式 clrfANSELH747576777
5、8798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 bankselTRISB;设置PORTB为输入模式 movlwb'11111111' movwfTRISB bankselWPUB;设置PORTB弱上拉 movlwb'11111111' movwfWPUB bankselOPTION_REG movlwb'01000101';TMR064分频 movwfOPTION_REG bankselT1C
6、ON movlwb'10010001';打开TMR1,设置1:8预分频,内部时钟源1:4分频 movwfT1CON bankselTRISA;设置PORTA<3:0>为输出,接数码管的共阴极 movlwb'11110000' movwfTRISA bankselPORTA clrfPORTA bankselTRISC movlwb'00000000';设置PORTC为输出,接8段数码管 movwfTRISC clrfcounter1 118119120121122123124125126127128129130131132133134
7、135136137138139140141142143144145146147148149150151152153154155156157158159160161 loop movlwHIGHTable1 movwfPCLATH movfcounter1,0 callTable1 bankselTRISB movwfTRISB movfcounter1,0 callTable1 bankselPORTB movwfPORTB movfPORTB,0 movwfkey_state movlwb'11001000' iorwfkey_stat
8、e,1 movfcounter1,0 callTable1 xorwfkey_state,0 movwfswap comfswap,1 incfszswap,11621631641651
此文档下载收益归作者所有