以下是我之前采用拿來主義得到的,只對判斷后執行部分稍作修改,應用還不錯。
/************************參數設置***************************/
void canshu() //EC11旋轉編碼器一定位一脈沖
{
static bit LastA = 0; //EC11旋轉編碼器的A引腳上一次的狀態
static bit LastB = 0; //EC11旋轉編碼器的B引腳上一次的狀態
if(KA != LastA) //判斷EC11旋轉編碼器A引腳是否等于上一次的狀態
{
if(KA == 0) //EC11旋轉編碼器旋轉后,判斷KA是否是低電平狀態
{
if(KB) //判斷KB引腳當前狀態,高電平則為正轉
{num++;}
else
{num--;}
}
LastA = KA; //更新編碼器上一個狀態暫存變量
LastB = KB; //更新編碼器上一個狀態暫存變量
}
}
現在看來LsaB變量似乎沒有用,有空了去掉它試試。對于正反向不同的EC11,我是通過調換num變量的加減方向來解決的。 |