1. 定义方法
a.定义起始信号
b.定义终止信号
c.定义单片机写入函数
d.定义单片机读出函数
e.写入到指定元器件
f.从指定元器件读出
g.写一个头文件作为中转
h.写一个主函数实现对写入读出的调用
2. 定义起始信号
a.SDA 高电平延时
b.SCL高电平延时
c.SDA低电平延时
d.SCL低电平延时
SDA = 1; Delay10us(); SCL = 1; Delay10us(); SDA = 0; Delay10us(); SCL = 0; Delay10us();
3. 终止信号
a.SDA低电平延时
b.SCL高电平延时
c.SDA高电平延时
SDA = 0; Delay10us(); SCL = 1; Delay10us(); SDA = 1; Delay10us();
4. 单片机写入函数
a.定义函数需要返回值,需要一个8位形式参数
b.for循环8次,每次发送一个数据,通过数据左移右移实现,每次写入SDA后要把SCL电平拉低
c.循环完成后拉高SDA延时后拉高SCL让SDA保持不变
d.while(SDA)循环等待元器件应答,应答后SDA会被拉低跳出循环
e.返回值
unsigned char sendaddr(unsigned char dat) { unsigned char a=0,b=0; for(a=0;a<8;a++) { SDA=dat>>7; dat<<=1; Delay10us(); SCL = 1; Delay10us(); SCL = 0; Delay10us(); } SDA = 1; Delay10us(); SCL = 1; while(SDA) { b++; if(b>200) { SCL = 0; Delay10us(); return 0; } } SCL = 0; Delay10us(); return 1; }
5. 单片机读出函数
a.定义函数需要返回值不需要形式参数
b.定义变量作为容器接收数据
c.for循环8次,先拉高电平保持SDA稳定,num<<=1,num|=SDA 拉低电平
e.返回num
unsigned char reader() { unsigned char a,num; num = 0; //SDA = 1; Delay10us(); for(a=0;a<8;a++) { SCL = 1; Delay10us(); num<<=1; num|=SDA; Delay10us(); SCL=0; Delay10us(); } return num; }
6. 写入元器件函数
a.定义函数不需要返回值,需要两个形式参数
b.起始信号>>写入函数(元器件地址0)>>写入函数(元器件首地址)>>写入函数(写入值)>>终止信号
void A204write(unsigned char addr,unsigned char dat) { start(); sendaddr(0xa0); sendaddr(addr); sendaddr(dat); stop(); }
7. 从元器件读出函数
a.定义带返回值的函数不需要形式参数
b.起始信号>>写入函数(元器件地址0)>>写入函数(元器件首地址)>>起始信号>>写入函数(元器件地址1)>>接收SDA的值>>终止信号
c.返回值
unsigned char A204read(unsigned char addr) { unsigned char num; start(); sendaddr(0xa0); sendaddr(addr); start(); sendaddr(0xa1); num = reader(); stop(); return num; }