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

2020-01-12 17:15发布

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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
29条回答
hemjidn
1楼-- · 2020-01-13 10:06
路过留个脚印
电平中断()
{
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吃加号
millwood0
2楼-- · 2020-01-13 13:19
 精彩回答 2  元偷偷看……
Ian11122840
3楼-- · 2020-01-13 13:25
我前两天用cpld也做了个编码器,
是用在大型机器上的,要求来回转一个星期都不能丢步!…
看你的程序用着玩还行,可靠性不行啊…
如果要做好要考虑干扰脉冲问题,呵呵
而且每个跳变都要检查到
huangdog
4楼-- · 2020-01-13 14:19
不知LZ这么做,有没有丢步,有没有因为抖动引起的误操作
xiaomage_2000
5楼-- · 2020-01-13 14:56
回复【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线的,线数也不高,就想试试鼠标的这个怎么样。。
rezire199847
6楼-- · 2020-01-13 20:20
话说能够用鼠标的滑轮测轮子的速度吗?

一周热门 更多>