标题: 单片机旋转编码器程序调试问题 [打印本页]

作者: 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