上星期跑书店买了匠人手记,看了按键相关的内容,自己试着写了个小程序,判断一个按键是短击还是长击,但得不到我想要的结果,望各位指点下,问题出在哪,程序如下
#include <pic.h>
unsigned char Key_count; unsigned char Delay10mS; #define Long_Click_DL 50 //0.5S
bit B_Long_Click_Flag; bit B_Short_Click_Flag;
void Reg_Init(void) { T1CKPS1=0; T1CKPS0=0; TMR1CS=0; TMR1IF=0; TMR1IE=1; PEIE=1; GIE=1; TMR1H=0xd8; TMR1L=0xf0; TMR1ON=1; }
void Port_Init(void) { TRISC=0x00; PORTC=0x00; TRISB=0xff; RBPU=0; }
void Variable_Init(void) { Delay10mS=0; Key_count=0; B_Long_Click_Flag=0; B_Short_Click_Flag=0; } void interrupt ISR(void) { if(TMR1IF) { TMR1IF=0; TMR1H=0xd8; TMR1L=0xf0;//10mS Delay10mS++; if(RB1==0) { Key_count++; if(Key_count>Long_Click_DL) //是否为长击 { Key_count=0; B_Long_Click_Flag=1; } else { B_Long_Click_Flag=0; } }
if((RB1)&&(Key_count>Delay10mS)&&(Key_count<Long_Click_DL)) //是否为短击 { Key_count=0; B_Short_Click_Flag=1; } else { Key_count=0; } } }
void main()
{ Reg_Init(); Port_Init(); Variable_Init(); while(1) { if(B_Long_Click_Flag) { PORTC=0xf0; } if(B_Short_Click_Flag) { PORTC=0xaa; } } }
|