找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3038|回复: 1
打印 上一主题 下一主题
收起左侧

单片机控制EC11旋钮函数,亲测有效

[复制链接]
跳转到指定楼层
楼主
ID:664827 发表于 2019-12-16 09:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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; //存储状态
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-12-16 12:23 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表