找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14153|回复: 13
收起左侧

好用的旋转编码器单片机代码分享

  [复制链接]
ID:470490 发表于 2019-3-19 10:51 | 显示全部楼层 |阅读模式
自己写的旋转编码器C语言代码,对变量num数值进行调整,正转加,逆转减,按下归0。
对于快速、慢速旋转准确率都很高。
通用性好,有的旋转编码器是要转两格才调整一个数值的,这个代码通用。
代码里面的c与c1比较是防止因漏码而卡死,c1选的80000是对1T单片机的,如果用12T的就改为10000。如果要以非常慢的速度旋转,可以在这个基础上再把c1加大。

单片机源程序如下:
  1. /*     K1、K2、K3分别接旋转编码器的CLK、DT、SW,正时针、逆时针调整旋转编码器分别增、减
  2. */

  3. #include <stc15.h>
  4. sbit K1=P3^2;     // K1、K2、K3分别接旋转编码器的CLK、DT、SW
  5. sbit K2=P3^3;
  6. sbit K3=P3^4;

  7.     unsigned  long c,c1;
  8.                 unsigned  int num;         //定义变量类型
  9.           bit d;

  10. void main()
  11. {
  12.    c1=80000;
  13.         num=100;
  14.        
  15.   while (1)
  16.         {
  17.                 if(K1&&K2)
  18.         {               
  19.         c=0;                  //对c和d赋初值
  20.         d=1;
  21.         }

  22.           if(!K1&&K2&&d)          //首先判断是否符合正转第一特征码,如不符合则立即进行反转判断
  23.          {
  24.           while (K2&&d)           //等待第二特征码出现,如超过预设时限则直接退出,进行下一次判断
  25.           {                                   //每循环一次,c值加1,加至c1则超过预设时限,给d赋值0,退出
  26.           c++;
  27.           if(c>c1)
  28.           d=0;
  29.           }
  30.           if (!K1&&!K2&&d)                 //判断是否符合正转第二特征码
  31.           {
  32.            while (!K1&&d)
  33.            {
  34.           c++;
  35.           if(c>c1)
  36.           d=0;
  37.           }
  38.        if (K1&&!K2&&d)                   //判断是否符合正转第三特征码
  39.            {
  40.                           num++;
  41.                                  }
  42.         while (!K2&&d)           //等待正转第三特征码结束
  43.            {
  44.           c++;
  45.           if(c>c1)
  46.           d=0;
  47.           }                 
  48.                 }
  49.     }
  50.        
  51.                  if(K1&&!K2&&d)           //判断是否符合反转第一特征码
  52.          {
  53.           while (K1&&d)
  54.            {
  55.           c++;
  56.           if(c>c1)
  57.           d=0;
  58.           }
  59.           if (!K1&&!K2&&d)
  60.           {
  61.            while (!K2&&d)
  62.             {
  63.           c++;
  64.           if(c>c1)
  65.           d=0;
  66.           }
  67.        if (!K1&&K2&&d)
  68.            {
  69.                 num--;
  70.                           while (!K1&&d)
  71.                   {
  72.           c++;
  73.           if(c>c1)
  74.           d=0;
  75.           }         
  76.                 }
  77.     }
  78.                 }
  79.                        
  80.                 if(!K3)
  81.                  {
  82.                  num=0;
  83.                   }
  84.                                   
  85.                         }
  86.                   }
复制代码

所有资料51hei提供下载:
旋转编码器.rar (30.82 KB, 下载次数: 314)

评分

参与人数 2黑币 +80 收起 理由
世纪21电源 + 30
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:558833 发表于 2019-7-20 11:05 | 显示全部楼层
正需要这个来参考学习。谢谢。
回复

使用道具 举报

ID:135805 发表于 2019-9-24 13:16 | 显示全部楼层
谢谢分享,刚好需要这个程序。
回复

使用道具 举报

ID:599538 发表于 2019-10-1 08:01 来自手机 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:620617 发表于 2019-10-8 17:21 | 显示全部楼层
正需要这个来参考学习。谢谢。
回复

使用道具 举报

ID:190720 发表于 2020-3-6 15:28 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:190720 发表于 2020-3-6 15:29 | 显示全部楼层
谢谢分享,看一下
回复

使用道具 举报

ID:686739 发表于 2020-3-7 06:30 来自手机 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:106422 发表于 2020-3-7 17:03 | 显示全部楼层
感谢分享!
回复

使用道具 举报

ID:706421 发表于 2020-3-11 16:10 | 显示全部楼层
用的是51单片机吗?
回复

使用道具 举报

ID:145036 发表于 2020-4-12 20:51 | 显示全部楼层
谢谢奉献分享~
回复

使用道具 举报

ID:470490 发表于 2021-2-9 23:50 来自手机 | 显示全部楼层
好久没来论坛了
回复

使用道具 举报

ID:607312 发表于 2021-3-19 08:59 | 显示全部楼层
感谢分享,正在学习中
回复

使用道具 举报

ID:413769 发表于 2021-5-30 20:26 | 显示全部楼层
目前还用不到,先看看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表