PCF8691
原理图
1、PCF8591 是一个单片集成、单独供电、8-bit CMOS数据获取器件。
2、AIN0、AIN1、AIN2、AIN3为模拟输入端
3、AOUT为模拟输出端
4、EXT为低电平时使用内部时钟,为高电平时使用外部时钟
5、A0、A1、A2为地址引脚
6、OCS、VREF、AGND照着接相应电平就行
控制字节
在CT107D开发板上通道1连接光明电阻,通道3连接电位器
这两个通道可以直接用
代码部分
IIC
iic.c
#include "iic.h"
//总线启动条件
void IIC_Start(void)
{
SDA = 1;
SCL = 1;
somenop;
SDA = 0;
somenop;
SCL = 0;
}
//总线停止条件
void IIC_Stop(void)
{
SDA = 0;
SCL = 1;
somenop;
SDA = 1;
}
//应答位控制
void IIC_Ack(unsigned char ackbit)
{
if(ackbit)
{
SDA = 0;
}
else
{
SDA = 1;
}
somenop;
SCL = 1;
somenop;
SCL = 0;
SDA = 1;
somenop;
}
//等待应答
bit IIC_WaitAck(void)
{
SDA = 1;
somenop;
SCL = 1;
somenop;
if(SDA)
{
SCL = 0;
IIC_Stop();
return 0;
}
else
{
SCL = 0;
return 1;
}
}
//通过I2C总线发送数据
void IIC_SendByte(unsigned char byt)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(byt&0x80)
{
SDA = 1;
}
else
{
SDA = 0;
}
somenop;
SCL = 1;
byt <<= 1;
somenop;
SCL = 0;
}
}
//从I2C总线上接收数据
unsigned char IIC_RecByte(void)
{
unsigned char da;
unsigned char i;
for(i=0;i<8;i++)
{
SCL = 1;
somenop;
da <<= 1;
if(SDA)
da |= 0x01;
SCL = 0;
somenop;
}
return da;
}
在开发板原理图上IIC连接的是P20与P21
iic.h
#ifndef _IIC_H
#define _IIC_H
#include "reg52.h"
#include "intrins.h"
#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();}
#define SlaveAddrW 0xA0
#define SlaveAddrR 0xA1
//总线引脚定义
sbit SDA = P2^1; /* 数据线 */
sbit SCL = P2^0; /* 时钟线 */
//函数声明
void IIC_Start(void);
void IIC_Stop(void);
void IIC_Ack(unsigned char ackbit);
void IIC_SendByte(unsigned char byt);
bit IIC_WaitAck(void);
unsigned char IIC_RecByte(void);
#endif
PCF8951
PCF8991.c(这里我们用通道1来检测光敏电阻的电压值)
#include "pcf8951.h"
unsigned char Pcf8591_Init()
{
static unsigned char ad_value = 0;
IIC_Start();//打开iic
IIC_SendByte(0x90);//器件寻址,方向上是写(写命令)
IIC_WaitAck();
IIC_SendByte(0x41);//允许DAC ADC通道1
IIC_WaitAck();
IIC_Start();
IIC_SendByte(0x91);
IIC_WaitAck();
ad_value = IIC_RecByte();
IIC_Ack(1);
IIC_Stop();
return ad_value;
}
pcf8951.h
#ifndef __PCF8951_H__
#define __PCF8951_H__
#include "reg52.h"
#include "iic.h"
unsigned char Pcf8591_Init();
#endif
在main函数里调用pcf8951读取相应的ad值就好了
版权声明:本文为CSDN博主「<Proton>」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_51116533/article/details/122409358
PCF8691
原理图
1、PCF8591 是一个单片集成、单独供电、8-bit CMOS数据获取器件。
2、AIN0、AIN1、AIN2、AIN3为模拟输入端
3、AOUT为模拟输出端
4、EXT为低电平时使用内部时钟,为高电平时使用外部时钟
5、A0、A1、A2为地址引脚
6、OCS、VREF、AGND照着接相应电平就行
控制字节
在CT107D开发板上通道1连接光明电阻,通道3连接电位器
这两个通道可以直接用
代码部分
IIC
iic.c
#include "iic.h"
//总线启动条件
void IIC_Start(void)
{
SDA = 1;
SCL = 1;
somenop;
SDA = 0;
somenop;
SCL = 0;
}
//总线停止条件
void IIC_Stop(void)
{
SDA = 0;
SCL = 1;
somenop;
SDA = 1;
}
//应答位控制
void IIC_Ack(unsigned char ackbit)
{
if(ackbit)
{
SDA = 0;
}
else
{
SDA = 1;
}
somenop;
SCL = 1;
somenop;
SCL = 0;
SDA = 1;
somenop;
}
//等待应答
bit IIC_WaitAck(void)
{
SDA = 1;
somenop;
SCL = 1;
somenop;
if(SDA)
{
SCL = 0;
IIC_Stop();
return 0;
}
else
{
SCL = 0;
return 1;
}
}
//通过I2C总线发送数据
void IIC_SendByte(unsigned char byt)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(byt&0x80)
{
SDA = 1;
}
else
{
SDA = 0;
}
somenop;
SCL = 1;
byt <<= 1;
somenop;
SCL = 0;
}
}
//从I2C总线上接收数据
unsigned char IIC_RecByte(void)
{
unsigned char da;
unsigned char i;
for(i=0;i<8;i++)
{
SCL = 1;
somenop;
da <<= 1;
if(SDA)
da |= 0x01;
SCL = 0;
somenop;
}
return da;
}
在开发板原理图上IIC连接的是P20与P21
iic.h
#ifndef _IIC_H
#define _IIC_H
#include "reg52.h"
#include "intrins.h"
#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();}
#define SlaveAddrW 0xA0
#define SlaveAddrR 0xA1
//总线引脚定义
sbit SDA = P2^1; /* 数据线 */
sbit SCL = P2^0; /* 时钟线 */
//函数声明
void IIC_Start(void);
void IIC_Stop(void);
void IIC_Ack(unsigned char ackbit);
void IIC_SendByte(unsigned char byt);
bit IIC_WaitAck(void);
unsigned char IIC_RecByte(void);
#endif
PCF8951
PCF8991.c(这里我们用通道1来检测光敏电阻的电压值)
#include "pcf8951.h"
unsigned char Pcf8591_Init()
{
static unsigned char ad_value = 0;
IIC_Start();//打开iic
IIC_SendByte(0x90);//器件寻址,方向上是写(写命令)
IIC_WaitAck();
IIC_SendByte(0x41);//允许DAC ADC通道1
IIC_WaitAck();
IIC_Start();
IIC_SendByte(0x91);
IIC_WaitAck();
ad_value = IIC_RecByte();
IIC_Ack(1);
IIC_Stop();
return ad_value;
}
pcf8951.h
#ifndef __PCF8951_H__
#define __PCF8951_H__
#include "reg52.h"
#include "iic.h"
unsigned char Pcf8591_Init();
#endif
在main函数里调用pcf8951读取相应的ad值就好了
版权声明:本文为CSDN博主「<Proton>」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_51116533/article/details/122409358
暂无评论