前两节介绍了时钟芯片DS1302的时间寄存器读写地址、单字节读写时序以及细流充电等,好玩的单片机——如何使用时钟芯片DS1302(二)。这一节我们就具体在proteus中做一个电子表(DS1302的RST引脚,SCLK引脚和IO引脚最好接上拉电阻到5V),代码用的是DS1302的单字节读写操作,爆发模式burst以后再讲,用LCD1602液晶屏显示,最终效果如下图,其中第一行显示日期年月日和星期,第二行显示时间时分秒。因为这个程序相比之前的要复杂一些,因此下文截图讲下DS1302对应的单字节读写代码,完整的程序如有需要可以留言邮箱。

单片机怎么做时钟(好玩的单片机怎样做一个电子时钟)(1)

先简单的回顾下DS1302单字节读写操作的时序,其中单字节写操作时序如下。首先说明一点,SCLK引脚电平拉低和RST引脚电平拉高放在另外一个函数Reset()中,在完整的单字节读写操作函数中会调用。

概括起来三点:RST电平需要一直拉高;SCLK上升沿时IO引脚上的某一位写入DS1302;一个字节从低位开始依次写入,完整的一个写操作是先写地址,再写数据。

根据上图的单字节写时序,编写的C代码如下,其中Data是我们需要写入的内容(地址或者数据)。有一点大家要注意,SCLK上电平为低时,IO引脚才能做好准备,当SCLK一拉高(也就是形成一个上升沿),IO引脚上的某一位就写入DS1302了;写入之后SCLK再次拉低,使得下一位能做好准备,如此反复就把一个字节的8位从低位到高位依次写入了。

单片机怎么做时钟(好玩的单片机怎样做一个电子时钟)(2)

单字节读操作时序如下图,读操作顾名思义就是要读取某寄存器的数据,那么我们首先得知道这个寄存器的地址,因此单字节读操作其实就是先写地址,再读取该地址上的数据。

单片机怎么做时钟(好玩的单片机怎样做一个电子时钟)(3)

重点要理解“读”这部分,首先RST高电平有效;其次SCLK下降沿时DS1302就把某寄存器的某位数据放到IO引脚上,这个时候我们只需要在程序中把这一位赋值给定义好的变量即可。因为“读”是SCLK下降沿有效,也就是说SCLK高电平时我们要做好准备。Data就是读取出来的字节。

单片机怎么做时钟(好玩的单片机怎样做一个电子时钟)(4)

这两个函数是最基本也是最重要的函数,完整的单字节写操作函数就是调用两次Write_Byte(unsigned char)即可,先写入地址再写入数据;而完整的单字节读操作函数就是先调用Write_Byte(unsigned char)写入地址,再读取该地址上的数据赋值给声明定义好的变量即可。

单片机怎么做时钟(好玩的单片机怎样做一个电子时钟)(5)

,