|
发表于 2020-4-30 09:53:58
|
显示全部楼层
我给一个做货的程序给你,我直接复制出来的.
你放在100uS的中断里面运行.
KeySpinData2这个变量的bit7表示方向,bit0-6表示当前旋转的值.
- //=============================================================================//旋转编码器读取2
- void KeyScan2(void)
- {
- static unsigned char UpState,OkState,Count;
- unsigned char State,Flag;
-
- State=0;
- Flag=0;
- if(KEY_A2==0) State |=0x02;
- if(KEY_B2==0) State |=0x01;
-
- if(UpState != State){
- UpState =State;
- Count=0;
- }
- else{
- if(Count<1){
- Count++;
- }
- else{
- if(OkState !=State){
- if(OkState==0){
- if(State==0x01){
- Flag=1;
- }
- if(State==0x02){
- Flag=2;
- }
- }
- else if(OkState==3){
- if(State==0x02){
- Flag=1;
- }
- if(State==0x01){
- Flag=2;
- }
- }
-
- if(Flag==1){ //++
- if(KeySpinData2 &0x80){
- if((KeySpinData2 &0x7F) <0x7F) KeySpinData2++;
- }
- else{
- KeySpinData2=1;
- }
- KeySpinData2 |=0x80;
- }
- else if(Flag==2){ //--
- if(KeySpinData2 &0x80){
- KeySpinData2=1;
- }
- else{
- if((KeySpinData2 &0x7F) <0x7F) KeySpinData2++;
- }
- KeySpinData2 &=0x7F;
- }
- }
- OkState =State;
- }
- }
- }
复制代码 |
|