按键是接:RB3'4'5 ;没键为高,按下去 为0
void keyScan(void)
{
char i;
uint8 m;
uint8 R0 = 0;
TRISB=0x38; //xls 2012-11-26 增加复位键RB5
R0 = PORTB; //RB3,RB4,RB5按键读取
R0 &=0x38; //保留键值
R0 = ~R0; //正逻辑
/*以下是RC滤波处理,R0,R1對應於KEY1,KEY2的BUF*/
datakey.allkey = (R0>>3);//将读到的键值移至最右端 比如当前在RB1 顾右移一位 如果为RB4 R3则右移3位
for (i=0;i<3;i++)//这里根据有几个独立按键进行设置 只有一个按键时则i=1,三个则i=3
{
s_kcap[i]=((s_kcap[i]<<3)-s_kcap[i]+(datakey.allkey&0x01)<<4+4)>>3; //rc滤波及4舍5入
datakey.allkey>>=1;
if (s_kcap[i]>12)
{
datakey.allkey|=0x80;
}
}
m=datakey.allkey;
datakey.allkey=(datalastkey.allkey^datakey.allkey) &datalastkey.allkey;//後沿處理
datalastkey.allkey=m;
//datakey.allkey=(datalastkey.allkey^datakey.allkey)&datakey.allkey; //前沿處理
//datalastkey.allkey=m;
}
|