24c02存储器(iic通信协议)

2kbit 的eeprom存储器

设备地址:0xA1是读操作 0xA0是写操作

写操作:需要写入地址和数据,地址用来存放你这个数据放到哪里的

eeprom有页写操作:24c02中有页写缓冲器,一次性可以写入8个字节,然后由缓冲器再次写入到eeprom中去,值的注意的是,每接收完一个数据后,地址会进行自动加1

写字节:参数有地址 和数据

iic初始化

iic写入设备的的地址

等待应答

iic写入要存储的数据的内存地址

等待应答

iic写入数据

等待应答

iic终止信号

读字节:读取地址,返回类型为 char型

首先进行伪写操作让从机产生应答

iic初始化

iic写入设备地址

等待应答

iic写入字节地址

等待应答

iic初始化

iic写入要读取设备数据的控制命令字

等待应答

创建变量接收 iic上返回的数据

产生非应答信号

iic终止信号

返回变量

读写数据函数:

创建变量接收地址的值,

对值进行操作,然后重新写入到eeprom中去

24c02存储器(iic通信协议)

 

#include <STC15F2K60S2.H>
#include "iic.h"

unsigned char dat_1=0;
unsigned char dat_2=0;
unsigned char dat_3=0;
unsigned char stat=0;
code SMG_NoDot[18] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
     0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,
     0xbf,0x7f};
void select138(unsigned char n)
{
	switch(n)
	{
		case 4:
			P2=(0x1f&P2)|0x80;
		break;
		case 5:
			P2=(0x1f&P2)|0xa0;
		break;
		case 6:
			P2=(0x1f&P2)|0xc0;
		break;
		case 7:
			P2=(0x1f&P2)|0xe0;
		break;
		case 0:
			P2=(0x1f&P2)|0x00;
		break;
	
	}
}
void smgshow_bite(unsigned char date,unsigned char pos)
{ 	
	select138(6);
	P0=0x01<<pos;
	select138(7);
	P0=date;

}
void smgshowall()
{ 	
	select138(6);
	P0=0xff;
	select138(7);
	P0=0xff;

}

void delay_smg(unsigned int i)
{
	while(i--);
}

void  write(unsigned char dat ,unsigned char addr)
{
	IIC_Start(); 
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(addr);
	IIC_WaitAck();
	IIC_SendByte(dat);
	IIC_WaitAck();
	IIC_Stop();
}
unsigned char  read(unsigned char addr)
{
	unsigned char tmp;
	IIC_Start(); 
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(addr);
	IIC_WaitAck();
	
	
	
	IIC_Start(); 
	IIC_SendByte(0xa1);
	IIC_WaitAck();
	tmp= IIC_RecByte();
	IIC_WaitAck();
	IIC_SendAck(1);
	IIC_Stop();
	return tmp;
	
	
}

void write_read()
{
	 dat_1= read(0x01);
	 dat_2= read(0x03);
	 dat_3= read(0x05);
	 
	 dat_1= dat_1+1;
	 dat_2= dat_2+2;
	 dat_3= dat_3+3;
	 
	 
	 if(dat_1>10)
	 {
		dat_1=0;
	 }
	 
	 if(dat_2>30)
	 {
		dat_2=0;
	 }
	 
	 if(dat_3>50)
	 {
		dat_3=0;
	 }
	 write(dat_1,0x01);
	 delay_smg(500);
	 write(dat_1,0x03);
	 delay_smg(500);
	 write(dat_1,0x05);
	 delay_smg(500);
	 
}

void showsmg()
{
	smgshow_bite(SMG_NoDot[dat_1/10],0);
	delay_smg(500);
	smgshow_bite(SMG_NoDot[dat_1%10],1);
	delay_smg(500);
	smgshow_bite(SMG_NoDot[16],2);
	delay_smg(500);
	smgshow_bite(SMG_NoDot[dat_2/10],3);
	delay_smg(500);
	smgshow_bite(SMG_NoDot[dat_2%10],4);
	delay_smg(500);
	smgshow_bite(SMG_NoDot[16],5);
	delay_smg(500);
	smgshow_bite(SMG_NoDot[dat_3/10],6);
	delay_smg(500);
	smgshow_bite(SMG_NoDot[dat_3%10],7);
	delay_smg(500);
	smgshowall();
}

void main()
{
	 write_read();
	while(1)
	{
		showsmg();
	}
}

上一篇:[NOIP模拟46]鼠树


下一篇:麦森数