首页 > 其他分享 >单片机 N76E003 EC12 编码器

单片机 N76E003 EC12 编码器

时间:2022-10-31 19:32:17浏览次数:56  
标签:编码器 old && Val EC 单片机 N76E003 return


sbit EC_B = P0 ^ 0;   // 编码器 P0.0 端口
sbit EC_A = P1 ^ 3; // 编码器 P1.3 端口
static uint8_t EC_A_Val = 0, EC_B_Val = 0;
static uint8_t EC_A_old = 0, EC_B_old = 0;
/*********************************************
函数名:EncoderReading
功 能:读取编码器数据
形 参:
返回值:0--无动作 1--正转 2--反转
备 注:
作 者:薛建强
时 间:2019/06/11
**********************************************/
uint8_t EncoderReading(void)
{
/*捕获一次*/
EC_A_Val = EC_A;
EC_B_Val = EC_B;
/*************EC_B上升沿*******************/
if (EC_A_Val == EC_A_old && EC_B_Val > EC_B_old)
{
/*重新给旧值赋值*/
EC_B_old = EC_B_Val;
EC_A_old = EC_A_Val;
if (EC_A_Val == 0) //反转
{
return 2;
}
}
/*************EC_B下升沿*******************/
if (EC_A_Val == EC_A_old && EC_B_Val < EC_B_old)
{
/*重新给旧值赋值*/
EC_B_old = EC_B_Val;
EC_A_old = EC_A_Val;
if (EC_A_Val == 1) //反转
{
return 2;
}
}
/*************EC_A上升沿*******************/
if (EC_B_Val == EC_B_old && EC_A_Val > EC_A_old)
{
/*重新给旧值赋值*/
EC_B_old = EC_B_Val;
EC_A_old = EC_A_Val;
if (EC_B_Val == 0) //正转
{
return 1;
}
}
/*************EC_A下升沿*******************/
if (EC_B_Val == EC_B_old && EC_A_Val < EC_A_old)
{
/*重新给旧值赋值*/
EC_B_old = EC_B_Val;
EC_A_old = EC_A_Val;
if (EC_B_Val == 1) //正转
{
return 1;
}
}
return 0;
}
使用方式:
KEY_state = EncoderReading(); //编码器调光度
switch (KEY_state)
{
case 1://正转
break;
case 2://反转
break;
}


标签:编码器,old,&&,Val,EC,单片机,N76E003,return
From: https://blog.51cto.com/xuejianqiang/5810955

相关文章