先上代碼為敬
- if(!PinA && PinA_O && PinB) {
- Now++;
- }PinA_O = PinA;
- if(!PinB && PinB_O && PinA) {
- Now--;
- }PinB_O = PinB;
復制代碼 只有六行代碼就能用EC11對Now進行加減操作
為什么這樣寫呢?
上時序圖
順時針轉:
順時針轉
逆時針轉:
我們看到,當順時針轉時
Pin A會早于Pin B 轉低電平,反之亦然
代碼解讀:
!PinA && PinA_O && PinB//當Pin A 為低電平而之前為高電平(即下降沿)并且Pin B為高電平
這一句就捕捉到順時針轉時序圖中箭指著的那一剎那的情況
于是Now加1
!PinB && PinB_O && PinA//當Pin B 為低電平而之前為高電平(即下降沿)并且Pin A為高電平
這一句就捕捉到逆時針轉時序圖中箭指著的那一剎那的情況
于是Now減1
如果編碼器不加電容消抖
就用軟件消抖
- if(ScanCount++ > 50) { //其數值按單片機速度加減
- ScanCount = 0;
- if(PinA && !PinA_O && PinB) {
- Now++;
- }PinA_O = PinA;
- if(PinB && !PinB_O && PinA) {
- Now--;
- }PinB_O = PinB;
- Now>9? Now = 0:_nop_();
- Now<0? Now = 9:_nop_();
- }
復制代碼 現附上小應用實例一則
基如STC15F104E的EC11軟串口六位密碼檢查程序
如發現順逆時針相反,對調PinA/PinB 定義腳即可
上圖.c文件51hei下載:
Encoder3_PW_Lock.zip
(1.7 KB, 下載次數: 467)
2021-7-2 18:51 上傳
點擊文件名下載附件
C 文件
|