51单片机-AT24CXX存储器工作原理

1、AT24CXX存储器工作原理

1.1、特点:

  • 与400KHz,I2C总线兼容
  • 1.8到6.0伏工作电压范围
  • 低功耗CMOS技术
  • 写保护功能当WP为高电平时进入写保护状态
  • 页写缓冲器
  • 自定时擦写周期
  • 100万次编程/擦除周期
  • 可保存数据100年
  • 8脚DIP SOIC或TSSOP封装
  • 温度范围商业级和工业级

1.2、概述

CAT24WC01/02/04/08/16是一个1K/2K/4K/8K/16K位串行CMOS,EEPROM内部含有128/256/512/1024/2048个8位字节CATALYST公司的先进CMOS技术实质上减少了器件的功耗,CAT24WC01有一个8字节页写缓冲器CAT24WC02/04/08/16有一个16字节页写缓冲器,该器件通过I2C总线接口进行操作有一个专门的写保护功能。

 

 总线时序

 

1.3、驱动程序编写

//<main.c>#include "reg52.h"
#include "i2c.h"typedef unsigned int u16;
typedef unsigned char u8;//使用单片机上四个独立按键
sbit k1=P3^1; //保存显示的数据
sbit k2=P3^0; //读取上次保存的数据
sbit k3=P3^2; //对显示的数据进行累加
sbit k4=P3^1; //清零// 38译码器
sbit LBA=P2^2;
sbit LBB=P2^3;
sbit LBC=P2^4;u8 num=0,
disp[4]; //4位数码管显示// 发生字码:code关键词,保持变量到flash里面,如果没有code保持在data里面
u8 code  smgduan[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(u16 i)
{while(i--)
}void Keypros()
{if(k1=0){delay(1000); //按键消抖if(k1==0){At24c02Write(1,num);}while(!k1); //判断按键是否松开}if(k2=0){delay(1000); //按键消抖if(k2==0){num = At24c02read(1);}while(!k2); //判断按键是否松开}if(k3=0){delay(1000); //按键消抖if(k3==0){num++;if(num>255) num=0;}while(!k3); //判断按键是否松开}if(k4=0){delay(1000); //按键消抖if(k4==0){num=0;}while(!k4); //判断按键是否松开}
}void datapros()
{disp[0]=smgduan[num/1000]; //因为数码管四位,所以最高显示9999disp[1]=smgduan[num%1000/100]; //取百位disp[2]=smgduan[num%1000%100/10];disp[3]=smgduan[num%1000%100%10];
}void Digplsplay()
{u8 i;for(i=0;i<4;i++){switch(i){case 0:LSA = 0;LSB = 0;LSC = 0;break;case 1:LSA = 1;LSB = 0;LSC = 0;break;case 2:LSA = 0;LSB = 1;LSC = 0;break;case 3:LSA = 0;LSB = 0;LSC = 1;break;}P0=disp[3-i];delay(100);p0=0x00;}
}void main()
{while(1){Keypros();datapros();Digplsplay();}
}
//<i2c.h>#ifndef _I2C_H
#define _I2C_H#include <reg52.h>sbit SCL=p2^1;
sbit SDA=P2^0;void At24c02Write(unsigned char addr,unsigned char dat);
unsigned char At24c02Read(unsigned char addr);#endif
//<i2c.c>文件#include "i2c.h"/**
编写单片机时序,单片机小精灵工具生成
12MHZ晶振,延迟10us
*/
void Delay10us(void)
{unsigned char a,b;for(b=1;b>0;b--)for(a=2;a>0;a--)
}//起始信号S
void I2cStart()
{SDA=1;Delay10us();SCL=1;Delay10us();SDA=0;Delay10us();SCL=0;Delay10us();
}//终止信号
void I2cStop()
{SDA=0;Delay10us();SCL=1;Delay10us();SDA=1;Delay10us();
}//发送字节,一个个发送,先发送高位后发送地位,应答 “0”
unsigned char I2cSendByte(unsigned char dat)
{unsigned char a=0,b;for(a=0;a<8;a++){SDA=dat>>7;  //传送最高位dat=dat<<1;  //右移一位,次高位变成最高位Delay10us(); //延迟10us//SCL为低电平可以变化,为高电平保持稳定SCL=1; //移位的数据就会保持稳定Delay10us();SCL=0; //数据可以改变Delay10us();    }//将数据线和时钟线释放出来SDA=1;Delay10us();    SCL=1;while(SDA) //如果从机对主机发送的字节产生应答SDA会变成 0{//发送失败SDA始终为高电平b++ //设置个等待时间if(b>200){ //至少200us,1条指令1usSCL=0;Delay10us();return 0; }}//产生应答 SCL=0拉低SCL=0;Delay10us();  return 1;
}/**
接收数据
*/
unsigned char I2cReadByte()
{unsigned char a=0,dat=0;SDA=1;  //拉高SDA使处于空闲状态Delay10us();for(a=0;a<0;a++){SCL=1;Delay10us();dat<<=1;  // dat=0 00  01  10dat|=SDA; //    01     11   把SDA的值给datDelay10us();SCL=0;Delay10us();}return dat;
}/**针对AT24C02的读写函数S-器件地址+0 A  写入首地址 A Data1 A  .....  Data0  A  P*/void At24c02Write(unsigned char addr,unsigned char dat){ I2cStart(); //起始信号I2cSendByte(0xa0); //器件地址I2cSendByte(addr); // 首地址I2cSendByte(dat); // 发送数据I2cStop(); //停止
}unsigned char At24c02Read(unsigned char addr)
{unsigned char num;I2cStart(); //起始信号I2cSendByte(0xa0); //器件地址I2cSendByte(addr); // 首地址//在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读/写方向位正好反相I2cStart(); //起始信号I2cSendByte(0xa1); //器件地址num=I2cReadByte();I2cStop();return num;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/23783.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux网络 网络层

IP 协议 协议头格式 4 位版本号(version): 指定 IP 协议的版本, 对于 IPv4 来说, 就是 4. 4 位头部长度(header length): IP 头部的长度是多少个 32bit, 也就是 4 字节&#xff0c;4bit 表示最大的数字是 15, 因此 IP 头部最大长度是 60 字节. 8 位服务类型(Type Of Service):…

Unity百游修炼(1)——FootBall详细制作全流程

一、引言 游玩测试&#xff1a; Football 游玩测试 1.项目背景与动机 背景&#xff1a;在学习 Unity 的过程中&#xff0c;希望通过实际项目来巩固所学知识&#xff0c;同时出于对休闲小游戏的喜爱&#xff0c;决定开发一款简单有趣的小游戏加深自己的所学知识点。 动机&#…

C语言(13)------------>do-while循环

1.do-while循环的语法 我们知道C语言有三大结构&#xff0c;顺序、选择、循环。我们可以使用while循环、for循环、do-while循环实现循环结构。之前的博客中提及到了前两者的技术实现。可以参考&#xff1a; C语言&#xff08;11&#xff09;-------------&#xff1e;while循…

【1】VS Code 新建上位机项目---C#基础语法

VS Code 新建上位机项目---C#基础语法 1 基本概念1.1 准备工具1.2 新建项目2 C#编程基础2.1 命名空间和类2.2 数据类型2.3 控制台输入输出2.3.1 输入输出: write 与 read2.3.2 格式化 : string.Foramt() 与 $2.3.3 赋值与运算2.4 类型转换2.4.1 数值类型之间的转换:(int)2.4…

SQL:DQL数据查询语言以及系统函数(oracle)

SQL Structured Query Language&#xff0c;结构化查询语言, 是一种用于管理和操作关系数据库的标准编程语言。 sql的分类 DQL&#xff08;Data Query Language&#xff09;&#xff1a;数据查询语言 DDL&#xff08;Data Definition Language&#xff09;&#xff1a;数据…

从单片机的启动说起一个单片机到点灯发生了什么下——使用GPIO点一个灯

目录 前言 HAL库对GPIO的抽象 核心分析&#xff1a;HAL_GPIO_Init 前言 我们终于到达了熟悉的地方&#xff0c;对GPIO的初始化。经过漫长的铺垫&#xff0c;我们终于历经千辛万苦&#xff0c;来到了这里。关于GPIO的八种模式等更加详细的细节&#xff0c;由于只是点个灯&am…

提效10倍:基于Paimon+Dolphin湖仓一体新架构在阿里妈妈品牌业务探索实践

1. 业务背景 阿里妈妈品牌广告数据包括投放引擎、下发、曝光、点击等日志&#xff0c;面向运筹调控、算法特征、分析报表、诊断监控等应用场景&#xff0c;进行了品牌数仓能力建设。随着业务发展&#xff0c;基于Lambda架构的数仓开发模式&#xff0c;缺陷日益突出&#xff1a;…

一文详解U盘启动UEFI/Legacy方式以及GPT/MBR关系

对于装系统的老手而说一直想研究一下装系统的原理&#xff0c;以及面对一些问题时的解决思路&#xff0c;故对以前的方法进行原理上的解释&#xff0c;主要想理解其底层原理。 引导模式 MBR分区可以同时支持UEFI和Legacy引导&#xff0c;我们可以看一下微pe制作的启动盘&#…

基于Docker的前端环境管理:从开发环境到生产部署的实现方案

# 基于Docker的前端环境管理&#xff1a;从开发环境到生产部署的实现方案 简介及前端开发环境挑战 简介 是一种容器化平台&#xff0c;可以将应用程序及其依赖项打包为一个容器&#xff0c;提供一种轻量级、可移植的环境。它能够简化开发、部署和运维的流程&#xff0c;提高…

连锁管理系统的五大核心设计及 PHP 源码分享

在当今竞争激烈的连锁商业领域&#xff0c;高效的管理系统是企业脱颖而出的关键。商淘云连锁管理系统凭借其卓越的功能和灵活的架构&#xff0c;为连锁企业提供了强大的运营支持。在这里详细介绍其五大核心设计&#xff0c;并分享相关的 PHP 源码示例。 一、总部进销存管理 &a…

C语言基本知识------指针(4)

1. 回调函数是什么&#xff1f; 回调函数就是⼀个通过函数指针调用的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另⼀个函数&#xff0c;当这个指针被⽤来调⽤其所指向的函数 时&#xff0c;被调⽤的函数就是回调函数。 void qsort(void base,//指针…

MTK-Android13-包安装器PackageInstaller 静默安装实现

目的 我们最终是为了搞明白安装的整个流程。一方面通过安卓系统自带的包安装器来了解PMS 安装流程&#xff1b;另一方面熟悉框架层Framework 针对Android apk 安装流程。 前两篇文章分析了PackagerInstaller 安装流程。 Android13-包安装器PackageInstaller-之apk安装跳转 An…

qt-C++笔记之创建和初始化 `QGraphicsScene` 和 `QGraphicsView` 并关联视图和场景的方法

qt-C++笔记之创建和初始化 QGraphicsScene 和 QGraphicsView 并关联视图和场景的方法 code review! 参考笔记 1.qt-C++笔记之创建和初始化 QGraphicsScene 和 QGraphicsView 并关联视图和场景的方法 2.qt-C++笔记之QGraphicsScene和 QGraphicsView中setScene、通过scene得到vie…

《一起打怪兽吧》——自制一款Python小游戏

《一起消灭怪兽吧》——在深夜的屏幕前&#xff0c;你是指引光明的勇者。键盘化作利剑&#xff0c;用方向键在像素战场游走&#xff0c;发射吧&#xff0c;每次击杀都有代码绽放的烟火。这款由Python与Pygame铸就的小游戏&#xff0c;让0与1的世界生长出童真的浪漫。 文章目录…

IDEA中查询Maven项目的依赖树

在Maven项目中&#xff0c;查看项目的依赖树是一个常见的需求&#xff0c;特别是当你需要了解项目中直接或间接依赖了哪些库及其版本时。你可以通过命令行使用Maven的dependency:tree插件来做到这一点。这个命令会列出项目中所有依赖的树状结构。 打开idea项目的终端&#xff…

Maven——Maven开发经验总结(1)

摘要 本文总结了 Maven 开发中的多个关键经验&#xff0c;包括如何根据版本号决定推送到 releases 或 snapshots 仓库&#xff0c;如何在构建过程中跳过测试&#xff0c;父项目如何控制子项目依赖版本&#xff0c;父项目依赖是否能传递到子项目&#xff0c;如何跳过 Maven dep…

05. Springboot admin集成Actuator(一)

目录 1、前言 2、Actuator监控端点 2.1、健康检查 2.2、信息端点 2.3、环境信息 2.4、度量指标 2.5、日志文件查看 2.6、追踪信息 2.7、Beans信息 2.8、Mappings信息 3、快速使用 2.1、添加依赖 2.2、添加配置文件 2.3、启动程序 4、自定义端点Endpoint 5、自定…

【GESP】C++二级模拟 luogu-b3995, [GESP 二级模拟] 小洛的田字矩阵

GESP二级模拟题&#xff0c;多层循环、分支语句练习&#xff0c;难度★✮☆☆☆。 题目题解详见&#xff1a;https://www.coderli.com/gesp-2-luogu-b3995/ 【GESP】C二级模拟 luogu-b3995, [GESP 二级模拟] 小洛的田字矩阵 | OneCoderGESP二级模拟题&#xff0c;多层循环、分…

uniapp在app下使用mqtt协议!!!支持vue3

什么&#xff1f;打包空白&#xff1f;分享一下我的解决方法&#xff01; 第一步 找大师算过了&#xff0c;装4.1版本运气好&#xff01; 所以根目录执行命令… npm install mqtt4.1.0第二步 自己封装一个mqtt文件方便后期开坛做法&#xff01; // utils/mqtt.js import mqt…

C++程序员内功修炼——Linux C/C++编程技术汇总

在软件开发的宏大版图中&#xff0c;C 语言宛如一座巍峨的高山&#xff0c;吸引着无数开发者攀登探索。而 Linux 操作系统&#xff0c;以其开源、稳定、高效的特性&#xff0c;成为了众多开发者钟爱的开发平台。将 C 与 Linux 相结合&#xff0c;就如同为开发者配备了一把无坚不…