自己写的旋转编码器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)
|