现正在做一个键盘,有一系列按键和四个旋转编码器。当其中任意一个编码器处于旋转的临界状态时,其余的按键和编码器都不能正常工作了。我采用的是查询方式来做的。其中一个编码器的处理程序如下: void judge_D1B(void) { delay(12); if((D1_A==0)&&(D1_B==1)) { timer_flag=0; num_timer=0; TR0=1; //启动定时器0 while((D1_A==0)&&(timer_flag==0)) ; TR0=0; if(timer_flag==1)return; delay(12); if(D1_A==1&&D1_B==1) { timer_flag=0; num_timer=0; TR0=1; //启动定时器0 while((D1_A==1)&&(timer_flag==0)) ; TR0=0; if(timer_flag==1) return; P1=0x23; delay(12); P1=0x80; } } }
void timer0(void) interrupt 1 using 1 { TH0=-(46080/256); TL0=-(46080%256); num_timer++; if(num_timer==8) { num_timer=0; timer_flag=1; } }
在主程序里面检测编码器的状态if((D1_A==0)&&(D1_B==1)),如果该条件成立则执行上面的编码器处理程序。临界状态就是指编码器停留在((D1_A==0)&&(D1_B==1))这个状态上。还请各位指点下,谢谢!!! |