旋转编码开关用法 |
|
By:陈浩 |
|
|
|
|
具有左转,右转,按下三个功能。4、5脚是中间按下去的开关接线 1
2 3脚一般是中间2脚接地,1、3脚上拉电阻后,当左转、右转旋纽时,在1、3脚就有脉冲信号输出了。这是标准资料:
在单片机编程时,左转和右转的判别是难点,用示波器观察这种开关左转和右转时两个输出脚的信号有个相位差,见下图:
CW direction 顺时针方向
程序:
/**********************************************************
扫描编码开关子函数 by陈
正转(时钟方向)
11
10
00
01
11 //开始第二角度
10
……
反转(时钟反方向)
11
01
00
10
11 //开始第二角度
01
……
程序从00开始
如果还是00则等待如果在延时这么长时间0ffff*yans(1)还是00 则返回 (如果转的速度非常快,则可使减小;相反亦然)
如果收到01则正转加1返回
如果收到10则反转减1返回
如果收到11则错误 返回 11为静止时状态, 00状态下必须经过01(正转)或10(反转)状态后,才能到11状态
**********************************************************/
unsigned char DUAJ()
{
unsigned int i;
static bitsszt=AX; //SS状态
// while(1)
// {
if(BMA==0&&BMB==0) //收到0 0 后开始判断
{
for(i=0;i<0xfff0;i++)
{
if(BMA==AX&&BMB==AX) //状态未变,等待
yans(1);
elseif(BMA==AX&&BMB==TQ) //正转
return0xbf;
elseif(BMA==TQ&&BMB==AX) //反转
return0xdf;
if(BMA==TQ&&BMB==TQ) //错误
return0xff;
}
}
elseif(AX==BMC)
return0xef;
// elseif(0==FUNC)
// return0x1f;
elseif(sszt==SS)
{
sszt=~sszt;
return0x7f;
}
// else
return0xff;
// kmg();
// }
}
unsigned char capd(unsigned char jz) //0短按 1长按 2更长按返回的值越大,按的越长。
{
unsigned int i;
for(i=0;i<60000;i++)
{
yans(20);
if(DUAJ()!=jz) //短按就返回0
return(unsigned char)(i/250);
}
return 0xff;
}