此程序可用在任何单片机上
不占用硬件中断口
/************************编码器变量*******************************/ bit Encoder_A_Old,Encoder_B_Old,BMQ_R_AH,BMQ_R_BH,BMQ_R_AL,BMQ_R_BL,BMQ_L_AH; bit BMQ_L_BH,BMQ_L_AL,BMQ_L_BL,Encoder_Add,Encoder_Rec,Encoder_A_Now,Encoder_B_Now; bit BMQ_IO_A_SATTE,BMQ_IO_B_SATTE; unsigned char Twice_Effective,Twice_Effective1; /************************编码器变量*******************************/ /***********************以下程序放定时中断***********************************/ if(FLAG_BMQ_1MS) //1MS扫描一次 { FLAG_BMQ_1MS=0; /******************************编码器检测驱动************************************/ Encoder_A_Now=BMQ_A_IO; //IO端口 Encoder_B_Now=BMQ_B_IO; //IO端口 if (Encoder_A_Old==0&&Encoder_A_Now==1) { if (Encoder_B_Now==1) { BMQ_L_AH=1; } else { BMQ_R_AH=1; } } if (Encoder_B_Old==0&&Encoder_B_Now==1) { if (Encoder_A_Now==1) { BMQ_R_BH=1; } else { BMQ_L_BH=1; } } if (Encoder_A_Old==1&&Encoder_A_Now==0) { if (Encoder_B_Now==1) { BMQ_R_AL=1; } else { BMQ_L_AL=1; } } if (Encoder_B_Old==1&&Encoder_B_Now==0) { if (Encoder_A_Now==1) { BMQ_L_BL=1; } else { BMQ_R_BL=1; } } Encoder_Add=Encoder_Rec=0; if (BMQ_R_AH==1&&BMQ_R_BH==1) { Encoder_Add=1; } if (BMQ_R_AL==1&&BMQ_R_BL==1) { Encoder_Add=1; } if (BMQ_L_AH==1&&BMQ_L_BH==1) { Encoder_Rec=1; } if (BMQ_L_AL==1&&BMQ_L_BL==1) { Encoder_Rec=1; } if (Encoder_Add) { BMQ_R_AH=0; BMQ_R_BH=0; BMQ_R_AL=0; BMQ_R_BL=0; BMQ_L_AH=0; BMQ_L_BH=0; BMQ_L_AL=0; BMQ_L_BL=0; Twice_Effective++; Twice_Effective1=0; if(Twice_Effective>=2) { Twice_Effective=0; // //向右转 //自己加上自己的程序 } } if (Encoder_Rec) { BMQ_R_AH=0; BMQ_R_BH=0; BMQ_R_AL=0; BMQ_R_BL=0; BMQ_L_AH=0; BMQ_L_BH=0; BMQ_L_AL=0; BMQ_L_BL=0; Twice_Effective1++; Twice_Effective=0; if(Twice_Effective1>=2) { Twice_Effective1=0; //向左转 //自己加上自己的程序 } } Encoder_A_Old=BMQ_A_IO; //IO端口 Encoder_B_Old=BMQ_B_IO; //IO端口 /******************************编码器驱动END************************************/ }