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条回答
大斧
1楼-- · 2020-01-15 19:06
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;
}
这个我在用,未使用中断。求批判
tuowai
2楼-- · 2020-01-16 00:55
这个有点意思,报废鼠标好多个呢,去试试
lcmdw
3楼-- · 2020-01-16 02:54
学习
eddia2012
4楼-- · 2020-01-16 08:50
 精彩回答 2  元偷偷看……
easier
5楼-- · 2020-01-16 09:56
本帖最后由 easier 于 2019-11-19 16:19 编辑

MARK; 填塞

一周热门 更多>