鼠标滚轮/编码器检测- wheel/encoder detect for mouse

wheel/encoder原理

鼠标滚轮wheel/encoder 原理图

wheel/encoder示波器实测波形

实测波形

wheel/encoder单片机检测固件

struct wheel_STR
{
unsigned char same_status_HL; //two state: all high (=1) or low (=2)
unsigned char diff_status; //two state: z1-high,z2-low (=1);z1_low,z2-high (=2);
signed char value;
};
struct wheel_STR wheel;

/*
scan in main loop
*/
void scan_wheel(void)
{
unsigned char z1,z2;

z1 =HAL_GPIO_ReadPin(WHEEL_Z1_PORT, WHEEL_Z1_PIN);//read_wheel_IO1();
z2 =HAL_GPIO_ReadPin(WHEEL_Z2_PORT, WHEEL_Z2_PIN);//read_wheel_IO2();

if(z1 != z2){   //diff
		wheel.diff_status =(z1)?2:1;	
}
else{ //same
    if(z1){
		if(wheel.same_status_HL==2){
			if(wheel.diff_status==1) wheel.value++;
			else if(wheel.diff_status==2) wheel.value--;
		}
		wheel.same_status_HL =1;    //all high
    }
    else{
       if(wheel.same_status_HL==1){
			if(wheel.diff_status==1) wheel.value--;
			else if(wheel.diff_status==2) wheel.value++;
       }
       wheel.same_status_HL =2;    //all low 
    }
    wheel.diff_status =0;   //clear change flag!
}

}

/*
get the wheel vaule
*/
signed char get_wheel_value(void)
{
signed char tmp;
tmp = wheel.value;
wheel.value=0; //clear the value!
return tmp;
}

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值