首页 » 互联网 » 进修运用 8051 和 DS1307 RTC 模块构建实时时钟_函数_模块

进修运用 8051 和 DS1307 RTC 模块构建实时时钟_函数_模块

落叶飘零 2024-12-30 22:49:01 0

扫一扫用手机浏览

文章目录 [+]

实时时钟模块基本上是一个韶光跟踪设备,它供应当前韶光和日期。
DS3231 IC 附带的 RTC 模块可以设置警报。

DS1307 RTC 模块把稳事变

这里我们利用 I2C 协议(双线协议)带有时钟芯片 DS1307 的 RTC 模块。
该模块供应诸如秒、分钟、小时、星期几、月份日期、月份和年份等详细信息,包括闰年校正。
它可以以 12 小时或 24 小时格式运行。
该模块的电流花费为纳安级。
纵然是 3V 电池也可以为其供电 10 年,保持时钟准确,无需任何外部电源。

进修运用 8051 和 DS1307 RTC 模块构建实时时钟_函数_模块 进修运用 8051 和 DS1307 RTC 模块构建实时时钟_函数_模块 互联网

DS1307 有一个 64 字节的存储区,前 8 个字节保留为 RTC 寄存器区,别的 56 个字节分配为通用 RAM。
有关当前、日期和韶光的详细信息以二进制编码十进制 (BCD) 的形式存储在其寄存器区域中。
该模块利用称为 I2C 的串行通信协议与微掌握器通信。
I2C 总线物理上由 2 条有源线组成。
称为SDA和SCL的电线都是双向的。
SDA 是串行数据线,SCL 是串行时钟线。
连接到总线的每个设备都有自己唯一的设备地址,无论是 MCU 还是 RTC 模块。
这些芯片中的每一个都可以用作吸收器或发射器,详细取决于功能。

进修运用 8051 和 DS1307 RTC 模块构建实时时钟_函数_模块 进修运用 8051 和 DS1307 RTC 模块构建实时时钟_函数_模块 互联网
(图片来自网络侵删)

DS1307 将在通信网络中充当从机,掌握器只能通过启动起始条件和设备地址来访问从机。
我们须要发送寄存器号才能访问里面的值。
8051 的接口是大略的 I2C,SDA 和 SCL 引脚连接到 8051 的任意两个引脚。
在软件方面,我们利用名为“I2C”的用户定义库进行 I2C 通信。
该库许可与 I2C / TWI 设备进行通信。

让我们来看看电路图。
以是下面给出了将RTC模块连接到8051的电路图。

电路图 - RTC 与 8051 的接口

程序/代码解释

利用 8051 的 RTC(实时时钟)程序是用嵌入式 C 编写的(利用 Keil 编译器)。

我们首先在程序中包含“ LCD8bit ”库。
它是一个用户定义的库,用于在 8 位模式下将微掌握器与 LCD 模块连接。
在这个库中,我们包含了一些用于初始化 LCD、发送命令和发送要显示的数据的函数。

连接到 LCD 数据管脚的端口和连接到命令管脚的管脚可以在库本身中配置。
在这里,我们为数据引脚定义了 port0,为命令引脚定义了 P3.5、P3.6 和 P3.7。

这里利用的另一个用户定义库是“ delay ”,它由名为“ Delay_ms() ”和“ Delay_us() ”的函数组成。
Delay_ms(1000) 将停息程序 1000 毫秒(即一秒),当我们须要停息程序几微秒时利用 Delay_us(_) 函数。

在这个项目中,我们紧张关注RTC 模块接口。
如前所述,此处利用名为“ I2C ”的库进行 I2C 通信。
I2CStart () 函数将启动通信。
I2CSend()是用于发送数据的函数,I2Cread()是用于读取寄存器的函数。

在主程序中定义了两个名为“ readAllReg() ”和“ readSecReg() ”的函数,用于从 RTC 模块中读取韶光详细信息。
前者用于读取所有寄存器,后者用于单独读取“第二个”寄存器。

在 DS1307 中,字节存储为二进制编码的十进制。
因此,在将值写入寄存器之前,我们须要将其转换为 BCD(Binary Coded Decimals)。
同样,从寄存器区域读取值后,应将其转换为十进制。
Dec_To_BCD()是用于此的函数。

在从 RTC 模块读取值之前,我们必须立即设置韶光和日期。
用于此的函数是setTime()函数。
我们该当将实际韶光细节作为参数通报。
实际格式类似于setTime(sec,min,hour,dow,dom,month,year); .

在我们的项目中,我们在 24 小时模式下利用 DS1307,然后我们在软件端将其转换为 12 小时模式。
因此,通过setTime()函数通报参数时,韶光详细信息应为 24 小时模式。

把稳:-一次上传程序后,您该当通过注释setTime()函数重新上传代码。
否则,每次重置微掌握器时, setTime()函数都会毁坏当前韶光。

名为displayTime()的函数用于在 LCD 中显示韶光和日期。
在函数内部,它将每隔一秒调用一次“readSecreg()”。
并且“readAllReg()”函数将每分钟调用一次。
一个名为“ a[7] ”的数组在程序开始时全局声明。
“readSecReg()”和“readAllReg()”函数将分别每隔一秒和一分钟定期更新这个数组元素。

想要一起学习单片机的朋友,评论”我要入门“,有惊喜,加入我们,就可以与导师一对一互动,快速发展

标签:

相关文章

易语言制作表格,高效便捷的数据管理利器

随着信息时代的到来,数据管理的重要性日益凸显。作为一款功能强大、易于上手的编程语言,易语言凭借其独特的优势,在数据处理领域发挥着举...

互联网 2025-01-03 阅读0 评论0

易语言取启动,介绍高效编程之路

随着科技的发展,编程已成为现代社会不可或缺的技能之一。易语言作为一种中文编程语言,以其独特的魅力吸引了无数编程爱好者的关注。今天,...

互联网 2025-01-03 阅读0 评论0