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;
}