旋转编码器(滚轮)数据采集

 

#define VOLUME_ADD 0x01
#define VOLUME_SUB 0x02

idata unsigned char gVolumeFlag = 0;
idata unsigned char diff_status = 0;
idata unsigned char same_statue = 0;
idata char value = 0;
idata char lastvalue = 0;
void ScanWheel(void)
{
P3DIR |= B00001100; //P23/P33 设置为输入
P3UPL |= B11000000; //P23/P33 设置为上拉
P3AN &= B11110011;

if(P32 != P33)
{
diff_status = (P32) ? 2:1;
}
else
{
if (P32)
{
if(same_statue == 2)
{
if(diff_status == 1) value++;
else if(diff_status == 2) value--;
}
same_statue = 1;
}
else
{
if(same_statue == 1)
{
if(diff_status == 1) value--;
else if(diff_status == 2) value++;
}
same_statue = 2;
}
if(value < -120) {
value = 120;
}
if(value > 120) {
value = 120;
}
diff_status = 0;
}
if ((value > lastvalue) && (P32) && (P33)) {
gVolumeFlag = VOLUME_ADD;
lastvalue = value;
} else if ((value < lastvalue) && (P32) && (P33)) {
gVolumeFlag = VOLUME_SUB;
lastvalue = value;
}
}

 

posted @ 2023-12-28 15:04  阡陌奈何  阅读(21)  评论(0)    收藏  举报