注意事项
连续写
在连续写at24c02时记得在后面延时5ms
如果不是连续写的话,可以不用在写的后面加delay5ms
w_at24(0x55,v);Delay5ms(); w_at24(0x56,pinlv/100);Delay5ms(); w_at24(0x57,pinlv%100);Delay5ms(); w_at24(0x58,temp/100);Delay5ms(); w_at24(0x59,temp%100);Delay5ms(); //写的后面要delay5没事,才能写进去
连续读
无论是否是连续读,都在要在读取at24c02中数据前delay5ms
flag_onece = 0;
Delay5ms(); //刚刚没写这个,读出的数据re_v是255
re_v = r_at24(0x55);
Delay5ms();
re_pinlv = r_at24(0x56);
re_pinlv = re_pinlv*100;
Delay5ms();
re_temp = r_at24(0x58)*100+r_at24(0x59);
数据手册
第一个字节
第二个发送的字节
若为DA转化(数模转化):即写出电压值,由单片机输出,可以由万用表(红表笔接板子最右边的D/A管脚,黑表笔接GND)测的输出电压。
然后我们由下图来了解如何写DA转化代码:
s: 即start
ADDRESS: 即器件地址(0表示为写)
A:表示等待回应
CONTROL BYTE: 表示控制字(第二个发送的字节)
A:表示等待回应
DATE BYTE: 表示写入的电压值(注意如果写入255,其实结果是5v,以此来换算)
A:表示等待回应
s: stop
void WriteADC(unsigned char temp)
{
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(0x40); //D/A的控制字节
IIC_WaitAck();
IIC_SendByte(temp);
IIC_WaitAck();
IIC_Stop();
}
AD转化则和上述方法一样,不过要注意一点,我们仍然要先写再读,这样才知道单片机控制字节(作用是输出电压or读取光敏值or读取电压值)
代码:
unsigned char ReadDAC(unsigned char channel )
{
unsigned char dat;
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(channel);
IIC_WaitAck();
IIC_Stop();
IIC_Start();
IIC_SendByte(0x91);
IIC_WaitAck();
dat = IIC_RecByte();
IIC_Stop();
return dat;
}
在写第七套国赛题时,不知道为什么read_pcf时,放的位置不同,有的读不出来。