蓝桥杯-单片机设计与开发-AT24C02模块


一、AT24C02外设简介与代码编写

AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位字节。该模块具有掉电存储功能,是蓝桥杯单片机比赛中常见考点。

//at24c02模块写操作
void write_24c(unsigned char addr,dat)
{
   
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(addr);
	IIC_WaitAck();
	IIC_SendByte(dat);
	IIC_WaitAck();
	IIC_Stop();	
}
//at24c02模块读操作
unsigned char read_24c(unsigned char addr)
{
   
	unsigned char temp;
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(addr);
	IIC_WaitAck();
	
	IIC_Start();
	IIC_SendByte(0xa1);
	IIC_WaitAck();
	temp=IIC_RecByte();
	IIC_SendAck(1);
	IIC_Stop();
	
	return temp;
}

经验之谈

AT24C02模块每一个地址只能写入0~256位,所以长数据需要进行拆分为两位数据分别储存,但是在对AT24C02模块进行连续读写时经常会发现数据错误现象,经过排查实验最终发现:AT24C02可以进行连续不间断的读数据操作,但是连续写操作中必须加入延时(鄙人最终采用的是3毫秒的延时,再无数据错误现象)或者在连续的写操作中穿插其他语句以达到延时的目的

二、示例代码

首先将 IIC 总线的底层驱动代码文件正确移植到工程中,在 CT107D 单片机综合训练平台上根据题目描述实现其要求的功能。

1.基础读写操作

系统上电后,从 24C04 存储器的 0x01、0x03 和 0x05这三个地址单元读取数据。
1.将 0x01 单元读出的数据进行加 1 操作,如果计算结果大于 10,复位为 0,然后将这个结果写回 0x01 单元。
2.将 0x03 单元读出的数据进行加 2 操作,如果计算结果大于 20,复位为 0,然后将这个结果写回 0x03 单元。
3.将 0x05 单元读出的数据进行加 3 操作,如果计算结果大于 30,复位为 0,然后将这个结果写回 0x05 单元。
4.将三个单元的当前数据从左到右依次显示在数码管上,各个数字之间用“-”分隔。

//需要在IIC.H中加入AT24C02的读写代码
#include "stc15f2k60s2.h"
#include "iic.h"
#define uchar unsigned char
#define uint unsigned int

uchar code leddata[]={
   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};

uchar dat1,dat2,dat3;

void display();
void keydown();


void delay_ms(uint xx)
{
   
	uint i,j;
	for(i=0;i<xx;i++)
	for(j=0;j<900;j++);
}
<
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值