当前位置: 首页 > news >正文

STC89C52单片机学习——第28节: [12-2] AT24C02数据存储秒表(定时器扫描按键数码管)

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做!

本文写于:2025.03.20

51单片机学习——第28节: [12-2] AT24C02数据存储&秒表(定时器扫描按键数码管)

  • 前言
  • 开发板说明
  • 引用
  • 解答和科普
  • 一、编写AT24C02的读写函数
  • 二、加入延迟函数实现LED闪烁
  • 问题
  • 总结

前言

   本次笔记是用来记录我的学习过程,同时把我需要的困难和思考记下来,有助于我的学习,同时也作为一种习惯,可以督促我学习,是一个激励自己的过程,让我们开始51单片机的学习之路。
   欢迎大家给我提意见,能给我的嵌入式之旅提供方向和路线,现在作为小白,我就先学习51单片机了,就跟着B站上的江协科技开始学习了.
   在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容,因为我之前有一个开发板,我大概率会用我的板子模仿着来做.让我们一起加油!
   另外为了增强我的学习效果:每次笔记把我不知道或者问题在后面提出来,再下一篇开头作为解答!

开发板说明

   本人采用的是慧净的开发板,因为这个板子是我N年前就买的板子,索性就拿来用了。不再另外购买视频中的普中开发板了。
   原理图如下
在这里插入图片描述
视频中的都用这个开发板来实现,如果有资源就利用起来。
仔细看了看:开发板的晶振为:11.0592Mhz;12Mhz晶振是用来给CH340G芯片外置晶振;

下图是实物图
在这里插入图片描述

引用

51单片机入门教程-2020版 程序全程纯手打 从零开始入门
还参考了下图中的书籍:
手把手教你学51单片机(C语言版)
在这里插入图片描述
STC89C52手册
在这里插入图片描述

解答和科普

一、编写AT24C02的读写函数

1.I2C的拼图
在main函数中调出来,AT.C就不用调出来I2C了。
在这里插入图片描述
在这里插入图片描述

位声明:

sbit I2C_SCL =P1^7;
sbit I2C_SDA=P1^2;

1.1起始拼图
在这里插入图片描述

void I2C_Start(void)
{I2C_SDA=1;I2C_SCL=1;I2C_SDA=0;I2C_SCL=0;}

1.2终止拼图
在这里插入图片描述

void I2C_Stop(void)
{I2C_SDA=0;I2C_SCL=1;I2C_SDA=1;
}

1.3发送一个字节
在这里插入图片描述

void I2C_SendByte(unsigned char Byte)	
{unsigned char i;for(i=0;i<8;i++){I2C_SDA=Byte&(0x80>>i);		//把数据放在线上I2C_SCL=1;I2C_SCL=0;			//看时序是否满足能够承受的时间是多少}
}

1.4接受一个字节

在这里插入图片描述

unsigned char I2C_ReceiveByte(void)	
{unsigned char i,Byte=0x00;I2C_SDA=1;					//释放总线for(i=0;i<8;i++){I2C_SCL=1;if(I2C_SDA){Byte|=(0x80>>i);}I2C_SCL=0;}return Byte;
}

1.5主机的发送应答
在这里插入图片描述
这里相当于主机写:

void I2C_SendAck(unsigned char AckBit)
{I2C_SDA=AckBit;I2C_SCL=1;I2C_SCL=0;
}

1.6 从机的接收应答
这里是从机写,反过来就是主机读
在这里插入图片描述

unsigned char I2C_ReceiveAck(void)
{unsigned char AckBit=0;I2C_SDA=1;I2C_SCL=1;AckBit=I2C_SDA;			//高电平读取I2C_SCL=0;return AckBit;
}

2.AT24C02 的数据帧

先宏定义一个地址:W

#define AT24C02_ADDRESS   0xA0

地址:R

AT24C02_ADDRESS|0x01

2.1字节写
在这里插入图片描述

#define AT24C02_ADDRESS   0xA0/*** @brief    AT24C02向指定地址写入一个字节数据* @param    WordAddress:字地址 范围0-255,Data要写入的数据* @retval   无*/
void AT24C02_WriteByte(unsigned char WordAddress,Data)
{I2C_Start();I2C_SendByte(AT24C02_ADDRESS);I2C_ReceiveAck();	//先不处理I2C_SendByte(WordAddress);I2C_ReceiveAck();I2C_SendByte(Data);I2C_ReceiveAck();I2C_Stop();
}

2.2 随机读
在这里插入图片描述

/*** @brief    AT24C02从指定地址读出一个字节数据* @param   WordAddress:要读出的字地址和写入的地址一样* @retval 	读出的字节数据*/unsigned char  AT24C02_ReadByte(unsigned char WordAddress)
{unsigned char Data;I2C_Start();I2C_SendByte(AT24C02_ADDRESS);I2C_ReceiveAck();I2C_SendByte(WordAddress);I2C_ReceiveAck();I2C_Start();I2C_SendByte(AT24C02_ADDRESS|0x01);I2C_ReceiveAck();Data=I2C_ReceiveByte();I2C_SendAck(1);I2C_Stop();return Data;
}

3、写入数据测试
在这里插入图片描述

#include <REGX52.H>
#include "Key.h"
#include "LCD1602.h"
#include "AT24C02.h"
#include "Delay.H"unsigned char Data;
void main(void)
{LCD_Init();LCD_ShowString(1,1,"HELLO");AT24C02_WriteByte(1,66);Delay(5);Data=AT24C02_ReadByte(1);LCD_ShowNum(2,1,Data,2);while(1){}
}

测试现象
在这里插入图片描述
先写后读,掉电不丢失。在这里插入图片描述
AT24C02按键控制

#include <REGX52.H>
#include "Key.h"
#include "LCD1602.h"
#include "AT24C02.h"
#include "Delay.H"
#include "Init.h"unsigned char KeyNum;
unsigned int Num;
void main(void)
{LCD_Init();LCD_ShowNum(1,1,Num,5);Nixietube_OFF();DianZhengGuan();while(1){KeyNum=Key();if(KeyNum==1){Num++;LCD_ShowNum(1,1,Num,5);}if(KeyNum==2){Num--;LCD_ShowNum(1,1,Num,5);}if(KeyNum==3){AT24C02_WriteByte(0,Num%256);Delay(5);AT24C02_WriteByte(1,Num/256);Delay(5);LCD_ShowString(2,1,"Write  OK");Delay(1000);LCD_ShowString(2,1,"         ");}if(KeyNum==4){Num=AT24C02_ReadByte(0);Num|=AT24C02_ReadByte(1)<<8;		LCD_ShowNum(1,1,Num,5);LCD_ShowString(2,1,"Read   OK");Delay(1000);LCD_ShowString(2,1,"         ");}}}

实现现象

AT24C02存储数据(按键控制)

二、加入延迟函数实现LED闪烁

问题

总结

本节课主要学


http://www.mrgr.cn/news/95241.html

相关文章:

  • 算法模型从入门到起飞系列——广度优先遍历(BFS)
  • 【Linux内核系列】:动静态库详解
  • 数据结构-----队列
  • 2025 使用docker部署ubuntu24容器并且需要ubuntu24容器能通过ssh登录SSH 登录的Ubuntu24容器
  • java常用数据转换
  • 蓝桥真题讲解
  • 【C#】CS学习之Modbus通讯
  • 24. 状态模式
  • Vulnhub-wordpress通关攻略
  • 蓝桥杯 之 暴力回溯
  • 切线、斜率、梯度和导数以及其关系
  • css-grid布局
  • 限幅滤波法对数据进行滤波优化
  • Vulnhub-dedecms织梦通关攻略
  • 【C++网络编程】第2篇:简单的TCP服务器与客户端
  • CIR-Net:用于 RGB-D 显著性目标检测的跨模态交互与优化(问题)
  • vmware下linux无法上网解决方法
  • 啃书—以国产化光耦ORPC-847芯片手册为例
  • 字节大模型面经
  • 单片机flash存储也做磨损均衡