蓝桥杯单片机模块代码(AT24C02)(代码+注释)
本模块是上电可擦除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)(代码+注释)相关推荐
- [蓝桥杯单片机]模块学习—中断系统
前一段时间的文章已经跟各位一起刷了一部分的客观题了 接下来将会跟大家一起从官方提供的原理图和芯片手册出发 练习每个模块的程序编写 因为我学习采用的是模块化编程的思路,函数的定义分散在不同的文件中,所以 ...
- PCF8591详解(蓝桥杯单片机模块(IIC总线))
文章目录 概述 特性 总体 框图 引脚 功能描述 寻址 控制字节 D/A转换 D/A转换过程 A/D转换 A/D转换过程 蓝桥杯部分 原理图部分 AD部分 DA部分 结束 概述 PCF8591是一款单 ...
- 蓝桥杯单片机模块代码(DS1302时钟芯片)(代码+注释)
最近两天做项目耽误了,现在继续补 引脚图: 单片机内部连接方式 : 官方提供底层代码,弄懂原理即可: #include <reg52.h> #include <intrins.h&g ...
- AT24C02详解(蓝桥杯单片机模块(IIC总线))
文章目录 特性 描述 引脚描述: 存储组织: 设备操作(IIC) 设备地址 写操作 字节写: 页写入: 确认轮询: 读操作 确认轮询: 当前地址读取: 任意地址读: 连续顺序读: 蓝桥杯部分 特性 2 ...
- DS1302详解(蓝桥杯单片机模块)
文章目录 特性 详细描述 命令字节 CE 数据输入 数据输出 突发模态 时钟\日期 时钟停止标志 写保护 时钟\日期突发模式 RAM突发模式 数据传输 蓝桥杯部分 输出 特性 实时时钟计算秒.分.小时 ...
- 蓝桥杯单片机stc15f2k60s2 中断函数代码模板注释
用到哪些寄存器? 中断使能寄存器// EA=1(总使能开),ET0=1(T0中断允许) 定时器/计数器控制寄 ...
- 蓝桥杯单片机第十四届省赛题目和程序答案
目录 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. ...
- [蓝桥杯单片机] - 蓝桥杯单片机CT107D竞赛板各模块代码分析
蓝桥杯笔记 "免责声明" ( •̀ ω •́ )✧ 代码未全部验证,也许存在BUG,如发现错误欢迎指正,不愿意指正那就当作没看见也行 所有说明文字仅代表笔者个人想法 修正日志 从2 ...
- 蓝桥杯单片机DS18B20代码注释及部分时序图
蓝桥杯单片机蓝桥杯单片机DS18B20代码注释及部分时序图 #include<STC15F2K60S2.H> #include<intrins.h>#define uchar ...
最新文章
- java io流顶层_Java中的IO流(一)
- ccf a类期刊_喜报:我院2篇学生论文被CCFA类会议AAAI(2020)接收
- Files.newDirectoryStream扫描/过滤目录文件
- PyTorch | torch.tensor使用方法,如何使用torch.tensor
- 泰语7个元音变形_泰语发音规则
- 7天内新闻前加 new
- 三、漏洞编号为CVE-2017-7494的复现(永恒之蓝)(Linux)(Ubuntu16.04.4)
- Android基本UI控件(一)
- 【GRNN情绪识别】基于GRNN神经网络的情绪识别算法matlab仿真
- 万维钢:我怎样管理信息
- 电脑(win 10)更新后部分软件打不开、无法使用
- Unity HDRP中解决抗锯齿问题
- 4G图传数传一体机GSLINK实测20180930
- idea 使用debug模式自动编译的设置
- linux网络与防火墙
- 黑客术语大全及其解释
- 10G光模块系列:10G 80公里(KM)光模块有哪些-易飞扬
- MIMIC III数据集详细介绍
- 《构建之法》第一次作业
- 论文投稿指南——收藏|SCI写作投稿发表全流程
热门文章
- 13.Redis系列之布隆过滤器
- 最简单的屏幕OCR文字识别
- 毕设项目——智慧小区系统(Java Spring Boot+Vue ElementUI)
- (十二)Flax Engine游戏引擎物理引擎 physics
- Jenkins——如何快速搭建一个简单的基于 Jenkins 的持续集成环境
- html仿微信拆红包效果旋转,利用React加CSS3实现微信拆红包动画效果实例(代码)...
- Java基础篇之什么是BufferedReader
- Delphi 对Txt文件的操作
- Python项目体系练习500例(附源代码),练完可就业
- [训练报错]cuDNN error: CUDNN_STATUS_NOT_SUPPORTED. This error may appear if you passed