1.我先把这个问题简单化了一下。自己先编了程序,让旋转编码器的AB两相输入进launchpad里面,当正转的时候红灯亮,反转时候绿灯亮。但是程序却一直绿灯亮。
2.如何确定编码器的位置?这个一直不会。
程序如下:
#include "msp430g2553.h"
unsigned int counter=0; //编码器脉冲计数
/*******扫描编码器子函数****************************
在编码器引脚A为低电平期间:
编码器引脚B从0到1为正转,编码器引脚B从1到0为反转。
*****************************************************/
void scan_encode(void)
{
static unsigned int Curr_encoder_b; //定义一个变量来储存当前B信号
static unsigned int Last_encoder_b; //定义一个变量来储存上次B脚信号
static unsigned int updata= 0;
P2DIR&=~BIT1;
P2DIR&=~BIT2; //定义p2.1 p2.2为输入口
if((P2IN&BIT1)&&(P2IN&BIT2)) //编码器无转动时退出
{
updata=0;
return ;
}
Last_encoder_b=(P2IN&BIT1); //记录B信号
while(!(P2IN&BIT2)) //等待A由低变高
{
Curr_encoder_b =(P2IN&BIT1); //记录等待期间的B信号(指当前B信号)
updata=1;
}
if(updata)
{
updata = 0 ;
if((Last_encoder_b == 0)&&(Curr_encoder_b== 1)) //B从0到1为正转
{
if(counter == 500)
return;
else
{
counter++; //正转计数加
P1OUT|=BIT0;
}
}
else if((Last_encoder_b == 1)&&(Curr_encoder_b == 0)) //B从1到0为反转
{
if(counter == 0)
return;
else
{
counter--; //反转计数减
P1OUT|=BIT6;
}
}
}
}
int main( void )
{
WDTCTL = WDTPW + WDTHOLD;
P2DIR&=~BIT1;
P2DIR&=~BIT2; //定义p2.1 p2.2为输入口
P1DIR|=BIT0+BIT6;
scan_encode();
}
才上手,希望各位大神指点。谢谢///!!!
此帖出自
小平头技术问答
想一下子看懂别人的程序,猜测程序的意图也不是一件容易的事。
一周热门 更多>