自己寫的旋轉編碼器C語言代碼,對變量num數值進行調整,正轉加,逆轉減,按下歸0。
對于快速、慢速旋轉準確率都很高。
通用性好,有的旋轉編碼器是要轉兩格才調整一個數值的,這個代碼通用。
代碼里面的c與c1比較是防止因漏碼而卡死,c1選的80000是對1T單片機的,如果用12T的就改為10000。如果要以非常慢的速度旋轉,可以在這個基礎上再把c1加大。
單片機源程序如下:
- /* K1、K2、K3分別接旋轉編碼器的CLK、DT、SW,正時針、逆時針調整旋轉編碼器分別增、減
- */
- #include <stc15.h>
- sbit K1=P3^2; // K1、K2、K3分別接旋轉編碼器的CLK、DT、SW
- sbit K2=P3^3;
- sbit K3=P3^4;
- unsigned long c,c1;
- unsigned int num; //定義變量類型
- bit d;
- void main()
- {
- c1=80000;
- num=100;
-
- while (1)
- {
- if(K1&&K2)
- {
- c=0; //對c和d賦初值
- d=1;
- }
- if(!K1&&K2&&d) //首先判斷是否符合正轉第一特征碼,如不符合則立即進行反轉判斷
- {
- while (K2&&d) //等待第二特征碼出現,如超過預設時限則直接退出,進行下一次判斷
- { //每循環一次,c值加1,加至c1則超過預設時限,給d賦值0,退出
- c++;
- if(c>c1)
- d=0;
- }
- if (!K1&&!K2&&d) //判斷是否符合正轉第二特征碼
- {
- while (!K1&&d)
- {
- c++;
- if(c>c1)
- d=0;
- }
- if (K1&&!K2&&d) //判斷是否符合正轉第三特征碼
- {
- num++;
- }
- while (!K2&&d) //等待正轉第三特征碼結束
- {
- c++;
- if(c>c1)
- d=0;
- }
- }
- }
-
- if(K1&&!K2&&d) //判斷是否符合反轉第一特征碼
- {
- while (K1&&d)
- {
- c++;
- if(c>c1)
- d=0;
- }
- if (!K1&&!K2&&d)
- {
- while (!K2&&d)
- {
- c++;
- if(c>c1)
- d=0;
- }
- if (!K1&&K2&&d)
- {
- num--;
- while (!K1&&d)
- {
- c++;
- if(c>c1)
- d=0;
- }
- }
- }
- }
-
- if(!K3)
- {
- num=0;
- }
-
- }
- }
復制代碼
所有資料51hei提供下載:
旋轉編碼器.rar
(30.82 KB, 下載次數: 354)
2019-3-19 10:51 上傳
點擊文件名下載附件
5 下載積分: 黑幣 -5
|