【51单片机系列】DS1302时钟模块扩展实验之与EEPROM结合使用只进行一次初始化工作

本文是关于时钟芯片DS1302的扩展实验。

文章目录

本实验实现的目的:利用AT24C02掉电不丢失的功能,存储数据用来辨别DS1302时钟是否已经初始化,如果初始化就不执行DS1302初始化函数。

一、实验分析

从实验目的分析,当系统第一次运行时,执行DS1302函数,并将一个数据写入到AT24C02的某个地址中;当系统再次运行时,首先将数据从AT24C02的地址中读出来,判断是否已经写入,如果已经写入,则不执行DS1302初始化。

这里设置AT24C02的0x00地址的数据判断是否进行初始化,如果0x00地址的数据是0xff,则初始化,如果是1,则不执行初始化。

整个系统用到的资源有:

  • DS1302时钟芯片;
  • 数码管,用来显示时间;
  • AT24C02,用来记录是否已经初始化;

二、proteus仿真原理图

proteus中仿真原理图如下。P3.4~P3.6口控制时钟模块的复位、时钟和输入/输出端口;P0口通过74HC245控制数码管的段选,P2.2 ~ P2.3通过74HC138译码器控制数码管的位选;P2.1控制EEPROM的SCL时钟端口,P2.0控制EEPROM的SDA数据端口。

三、软件设计及结果

本实验需要导入i2c模块,在主函数中,先读取AT24C02的0x00地址的数据,如果读出的数据是0,则进行初始化,并且将数据1写入到AT24C02的0x00地址;如果读出的数据是1,则不进行初始化,直接运行下面的程序。

主函数如下:

c 复制代码
void main()
{
	u8 dat;
	dat=AT24C02Read(EN_INIT_ADDR);  // 先读取EEPROM中0x00地址的数据
	if(0xff==dat)  // 如果读出的数据是0xff表示DS1302还没有进行过初始化
	{
		AT24C02Write(EN_INIT_ADDR, 0x01);  // 将EEPROM的0x00地址写入数据0x01,然后进行初始化
		DS1302Init();
	}
	while(1)
	{
		DataPros();
		DigDisplay();
	}
}

仿真结果,第一次运行时按照初始化设定的时间运行;第二次运行时按照当前时间运行。

相关推荐
HPT_Lt17 分钟前
ZCC70X带看门狗功能的电压复位芯片,替代TPS3832
嵌入式硬件
LCG米8 小时前
STM32串口接收卡死根因排查:ORE溢出标志陷阱、错误标志清除顺序与中断恢复实测
stm32·单片机·嵌入式硬件·串口·嵌入式
创界工坊工作室10 小时前
38-基于单片机的老人健康监测系统
单片机·嵌入式硬件·51单片机·proteus
三佛科技-1341638421212 小时前
20W~200W副边反馈SSR隔离方案HN1562+碳化硅MOS(含光耦817,431)
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
恒锐丰科技林技术员13 小时前
EG2103 高压 MOS/IGBT 驱动芯片解析:半桥驱动的高性价比之选
经验分享·嵌入式硬件·硬件工程
_Ningye15 小时前
STM32 — 11.5 硬件SPI读写W25Q64
stm32·单片机·嵌入式硬件
inrichtt15 小时前
第九课时:STM32 SPI实战:按键消抖与FLASH断电保护
stm32·单片机·嵌入式硬件
优信电子16 小时前
STM32 驱动 SHT35 温湿度传感器:从 I²C 通信到 CRC 校验的完整实战
单片机·嵌入式
尼喃17 小时前
两节两串锂电池保护板原理图+充电电路二合一电路图
嵌入式硬件
深圳市恒锐丰科技杨生18 小时前
SS6208L 12V 集成 MOS 半桥功率芯片|LeadPower 率能半导体
嵌入式硬件·硬件工程