搜索
bottom↓
回复: 29

51单片机检测鼠标滚轮(旋转编码器)成功~采用外部中断模式未添加其他器件

[复制链接]

出0入0汤圆

发表于 2010-11-1 16:54:38 | 显示全部楼层 |阅读模式
RT
接线很简单,公共端接地,其他两个引脚A,B分别接到P3.2和P3.3通过10K电阻上啦,因为这个小编码器中午被我拆开了一次,所以有点不大灵敏,不过调调音量这类的功能应该没问题,回头在对火个废鼠标试试。
只发中断程序吧,显示用的12864
//定义了一个char全局变量b最大计数到255
//AA--P3.2
//BB--P3.3
void ini0() interrupt 0
{
  IE0=0;
  EX0=0;
  delayms(15);
if (AA==0)
  {
   if(BB==0) //如果旋转方向和计数方向相反修改此处
   {
    b++;
    if(b>255){b=0;}
    }
   else  
   {
    b--;
    if(b<0){b=0;}
   }
  }
  EX0=1;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入0汤圆

发表于 2010-11-1 17:01:17 | 显示全部楼层
什么原理呢?有时间研究一下

出0入0汤圆

 楼主| 发表于 2010-11-1 17:02:09 | 显示全部楼层
本人以前一直用汇编,初学C,如有什么语法等问题,还望各路高手指教~用的就是普通鼠标的机械滚轮,应该和阿莫淘金3中那种是一样的,旋转柄是我拆了个电位器自己磨的,将就着用了呵呵

出0入0汤圆

 楼主| 发表于 2010-11-1 17:03:19 | 显示全部楼层
回复【1楼】deiwgah  
什么原理呢?有时间研究一下
-----------------------------------------------------------------------

居然没抢到自己的沙发~~
原理你可搜下本坛的:编码器,高手们介绍的很详细,下班了我就不多说了~~

出0入0汤圆

发表于 2010-11-1 18:15:58 | 显示全部楼层
正好手上有好几个坏鼠标

出0入0汤圆

 楼主| 发表于 2010-11-2 08:25:04 | 显示全部楼层
呵呵,那就拆个试试~我那个程序因为延时15MS所以转的快了会丢脉冲,但延时太少又容易干扰~~

出0入0汤圆

发表于 2010-11-7 07:08:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-7 08:18:56 | 显示全部楼层
路过留个脚印
电平中断()
{
if(A脚)
{
  time=超时值;
  if(方向}方向=1;
  else if(方向==2)if(b<255)b++;
}
if(B脚)
{
  time=超时值;
  if(方向}方向=2;
  else if(方向==1)if(b>)b--;
}
}
main()
{
while(time)
{
   time--;
   延时;
}
方向=0;
}
不知是否uc吃加号

出0入0汤圆

发表于 2010-11-7 08:49:07 | 显示全部楼层
first of all, your solution is wrong: you should never ever use "delay" in an interrupt routine.

2ndly, there are much simpler solutions out there. google "state machine".

出0入0汤圆

发表于 2010-11-7 10:25:26 | 显示全部楼层
我前两天用cpld也做了个编码器,
是用在大型机器上的,要求来回转一个星期都不能丢步!…
看你的程序用着玩还行,可靠性不行啊…
如果要做好要考虑干扰脉冲问题,呵呵
而且每个跳变都要检查到

出0入8汤圆

发表于 2010-11-7 10:34:37 | 显示全部楼层
不知LZ这么做,有没有丢步,有没有因为抖动引起的误操作

出0入0汤圆

 楼主| 发表于 2010-11-12 10:42:53 | 显示全部楼层
回复【8楼】millwood0  
first of all, your solution is wrong: you should never ever use "delay" in an interrupt routine.
2ndly, there are much simpler solutions out there. google "state machine".
-----------------------------------------------------------------------
不懂英文。。。

回复【9楼】Ian11122840  船儿
我前两天用cpld也做了个编码器,
是用在大型机器上的,要求来回转一个星期都不能丢步!…
看你的程序用着玩还行,可靠性不行啊…
如果要做好要考虑干扰脉冲问题,呵呵
而且每个跳变都要检查到
-----------------------------------------------------------------------
回复【10楼】huangdog  
不知lz这么做,有没有丢步,有没有因为抖动引起的误操作
-----------------------------------------------------------------------
呵呵这个就是为了玩的,而且目前刚开始学习C语言(以前全是用汇编)看公司的“海马”车上的收音机音量是这样调的,就想弄个做个音量调节这样的东西,电子市场也没找到那种机械式的编码器(以前阿莫淘金中买过不过我没赶上。。。)好像是20线的,线数也不高,就想试试鼠标的这个怎么样。。

出0入0汤圆

发表于 2010-11-12 15:01:07 | 显示全部楼层
话说能够用鼠标的滑轮测轮子的速度吗?

出0入0汤圆

发表于 2011-4-14 20:55:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-14 22:12:13 | 显示全部楼层
回复【11楼】xiaomage_2000  
-----------------------------------------------------------------------
回复【8楼】millwood0   
first of all, your solution is wrong: you should never ever use "delay" in an interrupt routine.
2ndly, there are much simpler solutions out there. google "state machine".
-----------------------------------------------------------------------

首先,你的方案是错的:绝不应该在中断例程中使用“延时”
其次,在其他地方有许多更简便的方案,请google“状态机”

出0入55汤圆

发表于 2011-4-16 16:04:22 | 显示全部楼层
以前做了一个速度达到了纳秒级的。单片机处理不过来,用了个SPLD在前面判断方向

出0入0汤圆

发表于 2011-5-4 17:47:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-4 20:15:41 | 显示全部楼层
有时间也玩玩

出0入0汤圆

发表于 2011-5-4 20:33:34 | 显示全部楼层
思路不错,有DIY的价值.

出0入0汤圆

发表于 2012-6-6 08:58:01 | 显示全部楼层
滚轮硬件设计上面,最好加上104滤波

出0入0汤圆

发表于 2012-6-6 09:17:48 | 显示全部楼层
滚轮软件上要注意倍频

出0入0汤圆

发表于 2012-6-6 09:33:37 | 显示全部楼层
这种方式在低速应用下是可以,不过也得在硬件上做一消抖电容,要不然整个稳定性在会变差。如果再深入做一个带加速,或一个高精度编码开关时,这些考虑的事更多。所以一个看似简单,做起来也不容易

出0入0汤圆

发表于 2012-6-26 09:50:30 | 显示全部楼层
关注一下,鼠标的滚轮还可以当编码器?

出0入0汤圆

发表于 2012-6-26 10:00:09 | 显示全部楼层
auto01 发表于 2012-6-26 09:50
关注一下,鼠标的滚轮还可以当编码器?


鼠标的滚轮就是编码器,只是精度低了一点而已

出0入0汤圆

发表于 2012-6-26 16:40:00 | 显示全部楼层
Ian11122840 发表于 2010-11-7 10:25
我前两天用cpld也做了个编码器,
是用在大型机器上的,要求来回转一个星期都不能丢步!…
看你的程序用着玩 ...

个人觉得像鼠标的滚轮就是编码器这一类编码器,只是应用在一般的场合,当然不能应用在严格的工业场所,就所电脑鼠标用硬件驱动,对于快速转向就经常出现丢步现象。

其它的精密的编码器我没没用过,就没发言权了。

出0入0汤圆

发表于 2012-6-26 17:41:41 | 显示全部楼层
void CodingSwitchPolling(void)
{
    static unsigned char st,Aold,Bold;
    if(CodingSwitch_A==1&&CodingSwitch_B==1)
         st=1;
         if(st==1)
         {
             if(CodingSwitch_A==0&&CodingSwitch_B==0)   //如果当前编码开关的两个引脚都为底电平执行下面的步骤
            {
                 if(Bold==1)                                  //B为高说明编码开关在向加大的方向转
                         {CW_count++;CW++;st=0;}
                  else if(Aold==1)                   //else不能省! 省了右旋会同时加减
                        {CW_count--;CCW++;st=0;}
            }         
         }
         Aold = CodingSwitch_A;
         Bold = CodingSwitch_B;
}
这个我在用,未使用中断。求批判

出0入0汤圆

发表于 2012-8-23 14:14:25 | 显示全部楼层
这个有点意思,报废鼠标好多个呢,去试试

出0入0汤圆

发表于 2015-5-17 20:21:53 | 显示全部楼层
学习

出0入0汤圆

发表于 2019-11-18 12:05:19 | 显示全部楼层
参考旋转编码器,好贴!

出0入0汤圆

发表于 2019-11-19 16:11:36 | 显示全部楼层
本帖最后由 easier 于 2019-11-19 16:19 编辑

MARK; 填塞
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-28 16:49

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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