鼠标滚轮/编码器检测- 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值