不明白你的程序。我给一个我以前做的程序段(在正式产品中用过的),希望有用。说明:此程序编码器为鼠标滚轮,一旦停止转动则得到一个有效转次数,最高位代表方向。
unsigned char KeyK3Buf; //S3编码器输入缓冲
unsigned char KeyK3Buf_Old; //S3编码器输入缓冲旧值
unsigned char KeyK3Cnt; //S3编码器转次数(最高位为符号位)
unsigned char KeyValidCnt; //S3编码器有效转次数(最高位为符号位)
unsigned char KeyNATC; //键不活动计时器
void KeyScn(void)
{
if(KeyScan) //定期检测,间隔时间决定于滚轮速度
{
KeyScan=0;
KeyK3Buf=KeyK3Buf<<2; //
if(K3A)
{
KeyK3Buf|=0x01;
}
if(K3B)
{
KeyK3Buf|=0x02;
}
if(KeyK3Buf!=KeyK3Buf_Old)
{
KeyNATC=0x00;
switch(KeyK3Buf)
{
case 80:
case 245:
case 175:
case 10:
KeyK3Cnt++;
break;
case 5:
case 95:
case 250:
case 160:
KeyK3Cnt--;
break;
}
}
else
{
if((KeyNATC<255)&&(KeyK3Cnt))
{
KeyNATC++;
}
else
{
KeyValidCnt=KeyK3Cnt;
KeyK3Cnt=0;
}
}
KeyK3Buf_Old=KeyK3Buf;
}
|