本模块是上电可擦除EEPROM,用于存储需要的数据。与上一节使用的底层代码相同,运用同一个总线,其操做顺序与PCF8591除第二步几乎完全一样。相同部分具体可看:蓝桥杯单片机模块代码(PCF8591)(代码+注释)_tuygre的博客-CSDN博客_pcf8591是什么芯片

AT24C02可以存储2048个位,也就是256个字节。

本单片机使用的是AT24C02,在比赛单片机中,A0A1A2都接地(图A3为A2)。所以在初始化后,写入1010 0000(0xa0)代表下一步为写,写入1010 0001(0xa1)代表下一步为读。

下面为main.c:

#include "STC15F2K60S2.H"
#include "iic.h"
#include "stdio.h"typedef unsigned char u8;
typedef unsigned int u16;u8 org[9],tran[9],wei,num;void close()
{P0=0;P2=P2&0X1F|0XA0;P2=P2&0X1F;P0=0XFF;P2=P2&0X1F|0X80;P2=P2&0X1F;
}void open()
{EA=1;ET0=1;
}void Timer0Init(void)
{AUXR |= 0x80;     TMOD &= 0xF0;      TL0 = 0x20;        TH0 = 0xD1;        TF0 = 0;       TR0 = 1;
}void translate(u8 org[],u8 tran[])
{u8 k,j,mid;for(j=0,k=0;j<8;j++,k++){switch(org[k]){case '0': mid = 0xc0; break;case '1': mid = 0xf9; break;  case '2': mid = 0xa4; break;  case '3': mid = 0xb0; break;  case '4': mid = 0x99; break;  case '5': mid = 0x92; break;  case '6': mid = 0x82; break;  case '7': mid = 0xf8; break;  case '8': mid = 0x80; break;  case '9': mid = 0x90; break;case '-':  mid = 0xbf; break;     default: mid = 0xff;}if(org[k+1]=='.'){mid=mid&0x7f;k++;}tran[j]=mid;}
}void display(u8 tran[],u8 wei)
{P0=0XFF;P2=P2&0X1F|0XE0; P2&=0X1F;P0=1<<wei;P2=P2&0X1F|0XC0;P2=P2&0X1F;P0=tran[wei];P2=P2&0X1F|0XE0;P2=P2&0X1F;
}void atw(u8 on)
{IIC_Start();/*初始化*/IIC_SendByte(0xa0);/*写*/IIC_WaitAck();IIC_SendByte(0);/*表示地址*/IIC_WaitAck();IIC_SendByte(on);/*写入数据*/IIC_WaitAck();IIC_Stop();
}u8 atr()
{u8 result;IIC_Start();IIC_SendByte(0xa0);IIC_WaitAck();IIC_SendByte(0);IIC_WaitAck();IIC_Start();IIC_SendByte(0xa1);/*读*/IIC_WaitAck();result=IIC_RecByte();IIC_SendAck(1);/*结束接受*/IIC_Stop();return result;
}void main()
{close();Timer0Init();open();num=atr()+1;/*先加1,保证第一次开机显示1*/atw(num);while(1){translate(org,tran);sprintf(org,"     %3u",(u16)num);/*记录开机次数*/}
}void stop0() interrupt 1
{display(tran,wei);if(++wei==8) wei=0;
}

不难发现和数码管章节代码差距最大的内容为atw和atr函数,我们将其单独提取出来:

void atw(u8 on)
{IIC_Start();/*初始化*/IIC_SendByte(0xa0);/*写*/IIC_WaitAck();IIC_SendByte(0);/*表示地址*/IIC_WaitAck();IIC_SendByte(on);/*写入数据*/IIC_WaitAck();IIC_Stop();
}u8 atr()
{u8 result;IIC_Start();IIC_SendByte(0xa0);IIC_WaitAck();IIC_SendByte(0);IIC_WaitAck();IIC_Start();IIC_SendByte(0xa1);/*读*/IIC_WaitAck();result=IIC_RecByte();IIC_SendAck(1);/*结束接受*/IIC_Stop();return result;
}

上述代码表示的仅仅是其中的一种读写方式,只能一个一个字节读和写:

并且由于书写的代码只需要存储一个数据,所以地址作者都直接限制了0。(当然地址你可以直接设置一个新的参数,代表地址,这并不是什么大问题),下面介绍常用的另外一种:

也就是说我们可以八个字节一起写,八个字节一起读。这个常用于数组。

将读和写的部分替换、其余部分基于此改变即可即可:(左读右写)

注:pucbuf为指针,指向数组第一个地址,加1代表指向数组下一个部分,C语言基础知识,文末上传课件,本处不做过多解释。 读时IIC_SendAck为0代表读取结束,1代表读取完毕,前文已经讲过。

官方提供的原理图,用户手册等下载地址如下:

链接:https://pan.baidu.com/s/1y8lRYHxLKojL4_r0PZPYRw 
提取码:19so

c语言数组:

链接:https://pan.baidu.com/s/1BgttowHe6UgIhXq1A_Y9Pw 
提取码:lyr4

注释无法插入图片,相关信息读者自己在文件夹中寻找。

南京信息工程大学本科学生学习笔记,供大家参考。

如有错误,联系QQ3182097183。

蓝桥杯单片机模块代码(AT24C02)(代码+注释)相关推荐

  1. [蓝桥杯单片机]模块学习—中断系统

    前一段时间的文章已经跟各位一起刷了一部分的客观题了 接下来将会跟大家一起从官方提供的原理图和芯片手册出发 练习每个模块的程序编写 因为我学习采用的是模块化编程的思路,函数的定义分散在不同的文件中,所以 ...

  2. PCF8591详解(蓝桥杯单片机模块(IIC总线))

    文章目录 概述 特性 总体 框图 引脚 功能描述 寻址 控制字节 D/A转换 D/A转换过程 A/D转换 A/D转换过程 蓝桥杯部分 原理图部分 AD部分 DA部分 结束 概述 PCF8591是一款单 ...

  3. 蓝桥杯单片机模块代码(DS1302时钟芯片)(代码+注释)

    最近两天做项目耽误了,现在继续补 引脚图: 单片机内部连接方式 : 官方提供底层代码,弄懂原理即可: #include <reg52.h> #include <intrins.h&g ...

  4. AT24C02详解(蓝桥杯单片机模块(IIC总线))

    文章目录 特性 描述 引脚描述: 存储组织: 设备操作(IIC) 设备地址 写操作 字节写: 页写入: 确认轮询: 读操作 确认轮询: 当前地址读取: 任意地址读: 连续顺序读: 蓝桥杯部分 特性 2 ...

  5. DS1302详解(蓝桥杯单片机模块)

    文章目录 特性 详细描述 命令字节 CE 数据输入 数据输出 突发模态 时钟\日期 时钟停止标志 写保护 时钟\日期突发模式 RAM突发模式 数据传输 蓝桥杯部分 输出 特性 实时时钟计算秒.分.小时 ...

  6. 蓝桥杯单片机stc15f2k60s2 中断函数代码模板注释

    用到哪些寄存器? 中断使能寄存器//                                              EA=1(总使能开),ET0=1(T0中断允许)  定时器/计数器控制寄 ...

  7. 蓝桥杯单片机第十四届省赛题目和程序答案

    目录 1.前言 2.题目 3.程序架构 3.1 display.c 3.2 ds1302.c 3.3 iic.c 3.4 onewire.c 3.5 main.c 主函数文件 3.6 环境配置 4. ...

  8. [蓝桥杯单片机] - 蓝桥杯单片机CT107D竞赛板各模块代码分析

    蓝桥杯笔记 "免责声明" ( •̀ ω •́ )✧ 代码未全部验证,也许存在BUG,如发现错误欢迎指正,不愿意指正那就当作没看见也行 所有说明文字仅代表笔者个人想法 修正日志 从2 ...

  9. 蓝桥杯单片机DS18B20代码注释及部分时序图

    蓝桥杯单片机蓝桥杯单片机DS18B20代码注释及部分时序图 #include<STC15F2K60S2.H> #include<intrins.h>#define uchar ...

最新文章

  1. java io流顶层_Java中的IO流(一)
  2. ccf a类期刊_喜报:我院2篇学生论文被CCFA类会议AAAI(2020)接收
  3. Files.newDirectoryStream扫描/过滤目录文件
  4. PyTorch | torch.tensor使用方法,如何使用torch.tensor
  5. 泰语7个元音变形_泰语发音规则
  6. 7天内新闻前加 new
  7. 三、漏洞编号为CVE-2017-7494的复现(永恒之蓝)(Linux)(Ubuntu16.04.4)
  8. Android基本UI控件(一)
  9. 【GRNN情绪识别】基于GRNN神经网络的情绪识别算法matlab仿真
  10. 万维钢:我怎样管理信息
  11. 电脑(win 10)更新后部分软件打不开、无法使用
  12. Unity HDRP中解决抗锯齿问题
  13. 4G图传数传一体机GSLINK实测20180930
  14. idea 使用debug模式自动编译的设置
  15. linux网络与防火墙
  16. 黑客术语大全及其解释
  17. 10G光模块系列:10G 80公里(KM)光模块有哪些-易飞扬
  18. MIMIC III数据集详细介绍
  19. 《构建之法》第一次作业
  20. 论文投稿指南——收藏|SCI写作投稿发表全流程

热门文章

  1. 13.Redis系列之布隆过滤器
  2. 最简单的屏幕OCR文字识别
  3. 毕设项目——智慧小区系统(Java Spring Boot+Vue ElementUI)
  4. (十二)Flax Engine游戏引擎物理引擎 physics
  5. Jenkins——如何快速搭建一个简单的基于 Jenkins 的持续集成环境
  6. html仿微信拆红包效果旋转,利用React加CSS3实现微信拆红包动画效果实例(代码)...
  7. Java基础篇之什么是BufferedReader
  8. Delphi 对Txt文件的操作
  9. Python项目体系练习500例(附源代码),练完可就业
  10. [训练报错]cuDNN error: CUDNN_STATUS_NOT_SUPPORTED. This error may appear if you passed