ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-02-01 21:33:12  阅读:208  来源: 互联网

标签:P2 delay 24c02 通信协议 dat iic smg 500


2kbit 的eeprom存储器

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

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

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

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

iic初始化

iic写入设备的的地址

等待应答

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

等待应答

iic写入数据

等待应答

iic终止信号

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

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

iic初始化

iic写入设备地址

等待应答

iic写入字节地址

等待应答

iic初始化

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

等待应答

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

产生非应答信号

iic终止信号

返回变量

读写数据函数:

创建变量接收地址的值,

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

 

#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();
	}
}

标签:P2,delay,24c02,通信协议,dat,iic,smg,500
来源: https://blog.csdn.net/w396255075/article/details/122765857

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有