我用C语言写了个旋转编码开关的程序,运行起来有点问题啊!
在我的程序思路里面,当是顺时针转的时候应当给变量加1的,逆时针转的时候应当减1的。但出现的问题是逆时针能正常减1,但顺时针就不能正常加1了,就是顺时针转的反而减了一下,与我要的效果刚好相反。
各位高人:出现这种现象是什么回事呢?
程序我写得很乱,所以就没贴出来~~~~
附图是编码开关输出的波形图,可以看出任何方向的旋转发生时,A或者B的波形都是在另一方电平稳定的时候转换电平,不知道你的单片机是否支持电平变化中断。
下边是我用PIC单片机的编码开关检测中断处理程序,希望能对你有参考。
if(RAIE&&RAIF) //中断标志检测
{
unsigned char port_temp1,port_temp2;
port_temp1=PORTA; //读取端口参数
port_temp2=PORTC;
if(port_temp2&0x04)
{ //检测其中一个端口的值
if(port_temp1&0x10) //检测另外端口的值
{key_flags|=0x30;} //顺时针旋转
else
{key_flags|=0x10;} //逆时针旋转
}
else
{;} //非正常波形,不做操作
asm("movf _PORTA,w"); // 清除中断标志
RAIF=0;
}