实时时钟模块基本上是一个韶光跟踪设备,它供应当前韶光和日期。DS3231 IC 附带的 RTC 模块可以设置警报。
DS1307 RTC 模块把稳事变这里我们利用 I2C 协议(双线协议)带有时钟芯片 DS1307 的 RTC 模块。该模块供应诸如秒、分钟、小时、星期几、月份日期、月份和年份等详细信息,包括闰年校正。它可以以 12 小时或 24 小时格式运行。该模块的电流花费为纳安级。纵然是 3V 电池也可以为其供电 10 年,保持时钟准确,无需任何外部电源。
DS1307 有一个 64 字节的存储区,前 8 个字节保留为 RTC 寄存器区,别的 56 个字节分配为通用 RAM。有关当前、日期和韶光的详细信息以二进制编码十进制 (BCD) 的形式存储在其寄存器区域中。该模块利用称为 I2C 的串行通信协议与微掌握器通信。I2C 总线物理上由 2 条有源线组成。称为SDA和SCL的电线都是双向的。SDA 是串行数据线,SCL 是串行时钟线。连接到总线的每个设备都有自己唯一的设备地址,无论是 MCU 还是 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()”函数将分别每隔一秒和一分钟定期更新这个数组元素。
想要一起学习单片机的朋友,评论”我要入门“,有惊喜,加入我们,就可以与导师一对一互动,快速发展