单片机 N76E003 MCP4017 MCP4018 MCP4019 数字电位器 使用方法 例子 代码

在这里插入图片描述
7位:电阻分辨率-127电阻器(128步) -->W

在这里插入图片描述
在这里插入图片描述


/* -----------------------------------------宏定义-----------------------------------------*/

/* -----------------------------------------头文件-----------------------------------------*/
#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;
                    }

IIC软模拟协议

猜你喜欢

转载自blog.csdn.net/qq_29246181/article/details/105744198