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软模拟协议