天天看點

[單片機][N76E003][MCP4017][MCP4018][MCP4019] 數字電位器 使用方法 例子 代碼

[單片機][N76E003][MCP4017][MCP4018][MCP4019] 數字電位器 使用方法 例子 代碼

7位:電阻分辨率-127電阻器(128步) -->W

[單片機][N76E003][MCP4017][MCP4018][MCP4019] 數字電位器 使用方法 例子 代碼
[單片機][N76E003][MCP4017][MCP4018][MCP4019] 數字電位器 使用方法 例子 代碼
/* -----------------------------------------宏定義-----------------------------------------*/

/* -----------------------------------------頭檔案-----------------------------------------*/
#include "main.h"

/* -----------------------------------------結構體定義-------------------------------------*/

/* -----------------------------------------全局變量定義-----------------------------------*/
code IIC_TYPE MCP4017 = {2, 0x5E};
/* -----------------------------------------應用程式---------------------------------------*/
void MCP4017_Init(void)
{
    IIC_Init();          // I2C初始化
}

/*********************************************
函數名:MCP4017_Write_DATA
功  能:寫 位址 資料
形  參:addr 位址   dat 資料
傳回值:
備  注:
作  者:薛建強
時  間:2020/03/19
**********************************************/
void MCP4017_Write_DATA(const uint8_t addr, const uint8_t DATA)
{
    IIC_Start();                 // 啟動
    IIC_WriteByte(MCP4017.ADDR); // 裝置位址
    IIC_Wait_ACK();              // 等待資料響應
//    IIC_WriteByte(addr);         // 發送寄存器位址
//    IIC_Wait_ACK();              // 等待資料響應
    IIC_WriteByte(DATA);         // 發送資料
    IIC_Wait_ACK();              // 等待資料響應
    IIC_Stop();                  // 停止
}
/*********************************************
函數名:PAJ7620U2_Read_DATA
功  能:讀位址資料
形  參:addr--寄存器位址
傳回值:
備  注:
作  者:薛建強
時  間:2020/03/19
**********************************************/
uint8_t MCP4017_Read_DATA(const uint8_t addr)
{
    uint8_t GET_DATA = 0;
//    IIC_Start();                     // 啟動
//    IIC_WriteByte(MCP4017.ADDR);     // 發送位址
//    IIC_Wait_ACK();                  // 等待資料響應
//    IIC_WriteByte(addr);             // 發送位址
//    IIC_Wait_ACK();                  // 等待資料響應

    IIC_Start();                     // 啟動
    IIC_WriteByte(MCP4017.ADDR | 1); // 發送位址
    IIC_Wait_ACK();                  // 等待資料響應

    GET_DATA = IIC_ReadByte();       // 擷取資料
    IIC_Wait_ACK();                  // 等待資料響應

    IIC_Stop();                      // 停止
    return GET_DATA;
}      
#ifndef _MCP4017_H
#define _MCP4017_H
/* -----------------------------------------宏定義-----------------------------------------*/

/* -----------------------------------------頭檔案-----------------------------------------*/
#include "main.h"

/* -----------------------------------------結構體定義-------------------------------------*/

/* -----------------------------------------全局變量定義-----------------------------------*/

/* -----------------------------------------應用程式---------------------------------------*/
void MCP4017_Write_DATA(const uint8_t addr, const uint8_t DATA);
void MCP4017_Init(void);
uint8_t MCP4017_Read_DATA(const uint8_t addr);
#endif      
xdata uint8_t MCP_VAL_Old = 0, MCP_VAL_New = 0;
xdata uint8_t MCP_VAL_Req = 0;
MCP4017_Init();
    for (;;)
    {
        if (MCP_VAL_Old != MCP_VAL_New)
        {
            MCP4017_Write_DATA(0, MCP_VAL_New);
            os_wait(K_IVL, 50, 0);//50ms
            MCP_VAL_Req = MCP4017_Read_DATA(0);
            if (MCP_VAL_Req == MCP_VAL_New)
            {
                MCP_VAL_Old = MCP_VAL_New;
            }
        }

        os_wait(K_IVL, 50, 0);//50ms
    }


單擊按鍵:
                    if (MCP_VAL_New < 130 && ++MCP_VAL_New > 127) MCP_VAL_New = 0;
                    if (MCP_VAL_New >= 127)
                    {
                        MCP_VAL_New = 0;
                    }