找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1589|回复: 3
打印 上一主题 下一主题
收起左侧

单片机旋转编码器程序调试问题

[复制链接]
跳转到指定楼层
楼主
ID:232366 发表于 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;
                }
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:8222 发表于 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;
                }
回复

使用道具 举报

板凳
ID:213173 发表于 2021-12-31 20:51 | 只看该作者
如果按编码器的一个脉冲算1,用整数计算较好。char型变量范围127~-128,int型变量范围32767~-32768。数码管显示时在相应的位加小数点即可。
回复

使用道具 举报

地板
ID:844772 发表于 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;
                }
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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