标题:
好用的旋转编码器单片机代码分享
[打印本页]
作者:
客来宝
时间:
2019-3-19 10:51
标题:
好用的旋转编码器单片机代码分享
自己写的旋转编码器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
作者:
myd
时间:
2019-7-20 11:05
正需要这个来参考学习。谢谢。
作者:
dlwater
时间:
2019-9-24 13:16
谢谢分享,刚好需要这个程序。
作者:
liu198601
时间:
2019-10-1 08:01
感谢分享
作者:
saixun
时间:
2019-10-8 17:21
正需要这个来参考学习。谢谢。
作者:
lixiaofei
时间:
2020-3-6 15:28
谢谢分享
作者:
lixiaofei
时间:
2020-3-6 15:29
谢谢分享,看一下
作者:
wsh791
时间:
2020-3-7 06:30
谢谢分享
作者:
bg4rfb
时间:
2020-3-7 17:03
感谢分享!
作者:
jameshhb
时间:
2020-3-11 16:10
用的是51单片机吗?
作者:
xiejp03
时间:
2020-4-12 20:51
谢谢奉献分享~
作者:
客来宝
时间:
2021-2-9 23:50
好久没来论坛了
作者:
cdiyy
时间:
2021-3-19 08:59
感谢分享,正在学习中
作者:
kkk2003
时间:
2021-5-30 20:26
目前还用不到,先看看
作者:
myhj
时间:
2024-6-29 09:55
这个程序真的不错,快调慢调都很准确。
作者:
piscest_x
时间:
2024-11-4 09:59
myhj 发表于 2024-6-29 09:55
这个程序真的不错,快调慢调都很准确。
我的快调不是每次都识别
作者:
w645053932
时间:
2025-1-16 12:24
谢谢分享,刚好需要这个程序。
作者:
w645053932
时间:
2025-1-16 12:25
两个以上编码器
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1