#include "ec11.h"
#include "delay.h"
#include "usart.h"
u8 m_recAdjustVolume=60;
static char EC11_A_Last = 0; //定義了兩個變量用來儲蓄上一次調用此方法是編碼開關兩引腳的電平
static char EC11_B_Last = 0;
//引腳初始化
void ec11_gpioInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
//SW
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = ENCODER_SW_PIN;
GPIO_Init(ENCODER_SW_GPIO, &GPIO_InitStructure);
//encoder_enp
GPIO_InitStructure.GPIO_Pin = ENCODER_ENPA_PIN | ENCODER_ENPB_PIN ;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//上拉輸入
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
EC11_A_Last=ENCODER_ENPA_Read;
EC11_B_Last=ENCODER_ENPB_Read;
}
//獲取音量
//INT8U getAdjustVolume(void)
//{
// return m_recAdjustVolume;
//}
/***********************************************************************
函數名稱:void Encoder_EC11_Scan(void) 脈沖信號正轉 A:0 1 1 0 0 A信號突變比B信號突變出現時間早
功 能:編碼器掃描函數 B:0 0 1 1 0
輸入參數:無
輸出參數:無 反轉 A:0 0 1 1 0 B信號突變比A信號突變出現時間早
編寫時間:2019.8.2 B:0 1 1 0 0
編 寫 人:
注 意:保留
***********************************************************************/
void Encoder_EC11_Scan(void)
{
static uint8_t st; //定義了一個變量用來儲蓄以前是否出現了兩個引腳都為高電平的狀態
Delay_ms(1); //延時1ms更準
if (ENCODER_ENPA_Read==1&&ENCODER_ENPB_Read==1) //取同為高點平時的信號
st = 1; //
if(st) //如果st 為1 執行下面的步驟
{
if (ENCODER_ENPA_Read==0&&ENCODER_ENPB_Read==0)//如果當前編碼開關的兩個引腳都為底電平執行下面的步驟 第5次突變同為0結束一次脈沖
{
if(EC11_B_Last) //為高說明編碼開關在向減小的方向轉 當B信號為1時為反轉
{
st = 0;
if(m_recAdjustVolume>0)
{
m_recAdjustVolume--;
}
}
if(EC11_A_Last) //為高說明編碼開關在向加大的方向轉 當A信號為1時為正轉
{
st = 0;
if(m_recAdjustVolume<100)
{
m_recAdjustVolume++;
}
}
//WindowLed_Volume(m_recAdjustVolume);
}
//保存第四次突變的狀態
EC11_A_Last = ENCODER_ENPA_Read; //存儲狀態
EC11_B_Last = ENCODER_ENPB_Read; //存儲狀態
}
}
|