#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; //存储状态
}
}
|