找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3709|回復(fù): 1
收起左側(cè)

單片機(jī)控制EC11旋鈕函數(shù),親測(cè)有效

[復(fù)制鏈接]
ID:664827 發(fā)表于 2019-12-16 09:31 | 顯示全部樓層 |閱讀模式
#include "ec11.h"
#include "delay.h"
#include "usart.h"

u8 m_recAdjustVolume=60;
static char EC11_A_Last = 0; //定義了兩個(gè)變量用來(lái)儲(chǔ)蓄上一次調(diào)用此方法是編碼開(kāi)關(guān)兩引腳的電平
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;
//}

/***********************************************************************
函數(shù)名稱:void Encoder_EC11_Scan(void)                     脈沖信號(hào)正轉(zhuǎn)    A:0 1 1 0 0      A信號(hào)突變比B信號(hào)突變出現(xiàn)時(shí)間早
功    能:編碼器掃描函數(shù)                                                                                                   B:0 0 1 1 0
輸入?yún)?shù):無(wú)                                                                                                                                                                                                                              
輸出參數(shù):無(wú)                                                                                                           反轉(zhuǎn)    A:0 0 1 1 0      B信號(hào)突變比A信號(hào)突變出現(xiàn)時(shí)間早
編寫(xiě)時(shí)間:2019.8.2                                                                                             B:0 1 1 0 0     
編 寫(xiě) 人:
注    意:保留
***********************************************************************/
void Encoder_EC11_Scan(void)         
{
        static uint8_t st; //定義了一個(gè)變量用來(lái)儲(chǔ)蓄以前是否出現(xiàn)了兩個(gè)引腳都為高電平的狀態(tài)
        Delay_ms(1);      //延時(shí)1ms更準(zhǔn)  
        if (ENCODER_ENPA_Read==1&&ENCODER_ENPB_Read==1)   //取同為高點(diǎn)平時(shí)的信號(hào)
                        st = 1; //
        if(st) //如果st 為1 執(zhí)行下面的步驟
        {
                if (ENCODER_ENPA_Read==0&&ENCODER_ENPB_Read==0)//如果當(dāng)前編碼開(kāi)關(guān)的兩個(gè)引腳都為底電平執(zhí)行下面的步驟    第5次突變同為0結(jié)束一次脈沖
                {
                        if(EC11_B_Last) //為高說(shuō)明編碼開(kāi)關(guān)在向減小的方向轉(zhuǎn)               當(dāng)B信號(hào)為1時(shí)為反轉(zhuǎn)
                        {
                                st = 0;
                                if(m_recAdjustVolume>0)
                                {
                                        m_recAdjustVolume--;
                                }
                        }
                        if(EC11_A_Last) //為高說(shuō)明編碼開(kāi)關(guān)在向加大的方向轉(zhuǎn)               當(dāng)A信號(hào)為1時(shí)為正轉(zhuǎn)
                        {
                                st = 0;
                                if(m_recAdjustVolume<100)
                                {
                                        m_recAdjustVolume++;
                                }
                        }
                        //WindowLed_Volume(m_recAdjustVolume);                        
                }
                //保存第四次突變的狀態(tài)
                EC11_A_Last = ENCODER_ENPA_Read; //存儲(chǔ)狀態(tài)   
                EC11_B_Last = ENCODER_ENPB_Read; //存儲(chǔ)狀態(tài)
        }
}

回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2019-12-16 12:23 | 顯示全部樓層
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說(shuō)明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表