标题:
单片机旋转编码器程序调试问题
[打印本页]
作者:
SHANWAZI
时间:
2021-12-31 15:07
标题:
单片机旋转编码器程序调试问题
论坛的各位老铁你们好!!!向你们请教几个问题。
uint8 integer=0;//整数
uint8 decimals=0;//小数
是这样的我搞了一个旋转编码器 想法是这样的:就是说使用4数码管来显示旋转编码器的值分为整数位和小数位,编码器控制decimals小数变量加加和减减实现目的是小数每加到99,integer整数步进加1。搞来搞来整数怎么也加不上去 小数减也减不回来。思路倒是有小数每到99整数加1 小数往回减99整数减1在程序上怎么也写不出来实现不出来看来我还是道行潜了,所以来请教请教论坛的老铁们,感激不尽!!
下面这函数是我的旋转编码器的一个服务函数:
void ROTARY_ROTARY_Service()//旋转编码器服务函数放到主循环里循环调用
{
static xdata uint8 Count=0;
Count++;
if(Count>=250)
{
Count=0;
switch(Read_ROTATE_Data)
{
case(1)://左转
decimals--;
if(decimals>=99)
{
decimals=99;
}
Read_ROTATE_Data=0;
break;
case(2)://右转
decimals++;
if(decimals>=99)
{
decimals=0;
}
Read_ROTATE_Data=0;
break;
default:break;
}
}
}
作者:
温xyz
时间:
2021-12-31 18:46
switch(Read_ROTATE_Data)
{
case(1)://左转
decimals++;
if(decimals>=99)
{
decimals=99;
}
Read_ROTATE_Data=0;
break;
case(2)://右转
decimals--;
if(decimals<=0)
{
decimals=0;
}
Read_ROTATE_Data=0;
break;
default:break;
}
作者:
wulin
时间:
2021-12-31 20:51
如果按编码器的一个脉冲算1,用整数计算较好。char型变量范围127~-128,int型变量范围32767~-32768。数码管显示时在相应的位加小数点即可。
作者:
glinfei
时间:
2022-1-1 18:26
我也觉得小数在显示时考虑就行,不用分开计算,不过你要分开计算小数,可以试试下面改法。
case(1)://左转
if(decimals=0)
{ if (integer>0)
{integer--;
decimals=99;
}
}else
decimals--;
Read_ROTATE_Data=0;
break;
case(2)://右转
if(decimals=99)
{ integer++;
decimals=0;
}else decimals++;
Read_ROTATE_Data=0;
break;
default:break;
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1