鼠标滚轮检测固件-2009亲测ok
wheel/encoder原理wheel/encoder示波器实测波形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){ //diffwheel.diff_status =(z1)?2:1;}else{ //sameif(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;
}