本文参考该博主而写,这位博主大大写的十分详细,大家有兴趣可以去参考
我之所以再 画蛇添足 写这个是因为我想记录一下我作为小白视角如何去使用
很多同学刚开始写的时候,看到pcf8951参数手册一定都是晕的,不知道怎么写,怎么办!其实我也是,我在写这篇文章的时候,依旧搞不清楚!!!但是,这不影响我参加比赛(除非规则改了),正常来说,我们能写出来就行,不用搞原理!!!如果你也是这种心态,那么就继续看下去叭。如果不是,请看上面的博客!!!
强调!有了这篇文章,你不需要再看pcf8951介绍!!!你已经可以进行时间的存放读取数据了!!!
关于这个这个传感器,我们分为两部分进行学习!
注意:DAC部分程序可以实现ADC读取和DAC输出,也就是背DAC就行
ADC部分
(1)写自己驱动
(2)串口验证
DAC部分
(1)写自己驱动
(2)串口验证
ADC部分(不推荐使用)
(1)写自己驱动
这里的驱动也很简单,因为不长,这边建议直接理解背下来!!!
代码已经放在下面!!,我会稍微解释一下,方便你理解记忆!!!
bit b_AdcStart(uchar addr)
{
bit OK = 0;
IIC_Start();
IIC_SendByte(ADCW);
if(!IIC_WaitAck());
{
IIC_SendByte(addr);
if(!IIC_WaitAck());
{
IIC_Stop();
IIC_Start();
IIC_SendByte(ADCR);
if(!IIC_WaitAck())
{
OK = 1;
}
}
}
return OK;
}
通道函数代码解读:
1:定义标志位 ok
2:开始
3:发送ADC写 0x90
4:判断是否响应成功
5:发送 控制的通道数
6:判断是否响应成功
7:停止
8:开始
9:发送ADC读 0x91
10:判断是否响应成功
11 ok=1
12返回结果
现在根据芯片资料对代码分析如上
uchar c_AdcRead()
{
uchar _data;
_data = IIC_RecByte();
IIC_SendAck(0);
return _data;
}
读取函数代码解读:
1:定义接收数据变量
2:读取数据
3:sendack
4:返回结果
(2)串口验证
DAC部分(推荐使用)
写该部分即可完成ADC读取+DAC输出
(1)写自己驱动
void DAC_Init(uchar addr,uchar dat)
{
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(addr);
IIC_WaitAck();
IIC_SendByte(dat);
IIC_WaitAck();
IIC_Start();
IIC_SendByte(0x91);
IIC_WaitAck();
ADC_init_temp=IIC_RecByte();
//其中ADC_init_temp是全局变量
}
DAC函数代码解读:
1.定义返回变量
2:开始
3:发送ADC写 0x90
4:等待
5:发送地址
6:等待
7:发送数据 +9
8:等待
9:开始
10:发送ADC读 0x91
11:等待
12:返回结果
ADC部分读取
注意事项:(1)如果温度值不对,可以在发送数据+9基础上进行修改
(2)DAC代码参考 at24c02写函数
(3)串口验证
这里的话,就是把读取的数据放到串口上进行打印,方便我们在测试的时候用!
通过DA口电压值判断正确