理论教育 DS1302与LPC2138的ARM嵌入式系统应用

DS1302与LPC2138的ARM嵌入式系统应用

时间:2023-11-03 理论教育 版权反馈
【摘要】:DS1302与CPU之间通过I/O线传送同步串行数据,SCLK为串行通信时的位同步时钟,一个SCLK脉冲传送一位数据。表5-13 DS1302内部寄存器地址与内容例5-5 图5-14所示为LPC2138与DS1302实现的万年历电路。DS1302采用外部3.3V电源供电,LPC2138的引脚P1.28、P1.29、P1.30分别连到DS1302的RST、SCLK、I/O端,LPC2138的引脚P1.16、P1.17、P1.18分别连接“设置”、“增大”、“减小”按钮,用于对万年历进行设置和调整。

DS1302与LPC2138的ARM嵌入式系统应用

DS1302是一种串行接口实时时钟芯片,芯片内部具有可编程日历时钟和31个字节的静态RAM,日历时钟可自动进行闰年补偿,计时准确,接口简单,使用方便,工作电压范围宽(2.5~5.5V),功耗低,芯片自身还具有对备份电池进行涓流充电功能,可有效延长备份电池的使用寿命。DS1302采用8脚DIP封装,其引脚排列如图5-11所示,各引脚功能如下:

Vcc1,Vcc2:电源输入。

GND:地。

X1,X2:外接32.768kHz石英晶振输入。978-7-111-44508-1-Chapter05-79.jpg:复位端。I/O:数据输入/输出端。SCLK:串行时钟输入。

978-7-111-44508-1-Chapter05-80.jpg

图5-11 DS1302的引脚排列

DS1302芯片的X1和X2端外接32.768kHz的石英晶振,Vcc1和Vcc2是电源引脚,单电源供电时接Vcc1脚,双电源供电时主电源接Vcc2,备份电池接Vcc1,如果采用可充电镉镍电池,可启用内部涓流充电器在主电压正常时向电池充电,以延长电池使用时间。备份电池也可用1μF以上的超容量电容代替,需要注意,备份电池电压应略低于主电源工作电压。

数据传送是以CPU为主控芯片进行的,每次传送时由CPU向DS1302写入一个命令字节开始。命令字节的格式如下:

978-7-111-44508-1-Chapter05-81.jpg

命令字节的最高位必须为1,RAM/CK位为DS1302片内RAM/时钟选择位,RAM/CK=1选择RAM操作,RAM/CK=0选择时钟操作。RD/W位为读写控制位;RD/W=1为读操作,表示DS1302接收完命令字节后,按指定的选择对象及寄存器(或RAM)地址,读取数据并通过IO线传送给CPU,RD/W=0为写操作,表示DS1302接收完命令字节后,紧跟着再接收来自于CPU的数据字节,并写入到DS1302相应的寄存器或RAM单元中。A4~A0为片内日历时钟寄存器或RAM的地址选择位。

DS1302与CPU之间通过I/O线传送同步串行数据,SCLK为串行通信时的位同步时钟,一个SCLK脉冲传送一位数据。每次数据传送时都以字节为单位,低位在前,高位在后,传送一个字节需要8个SCLK脉冲。数据传送可以单字节方式或多字节突发方式进行。

数据单字节方式传送时序如图5-12所示,在RST=1期间,CPU先向DS1302发送一个命令字节,紧接着发送一个字节的数据,DS1302在接收到命令字节后自动将数据写入指定的片内地址或从该地址读取数据。

978-7-111-44508-1-Chapter05-82.jpg

图5-12 数据单字节方式传送时序

数据多字节突发方式传送时序如图5-13所示,RST=1期间,若CPU向DS1302发送的命令字节中A0~A4全为1,则DS1302在接收到这个字节命令后,可以一次进行8个字节日历时钟数据或是31个片内RAM单元数据的读写操作。

978-7-111-44508-1-Chapter05-83.jpg

图5-13 数据多字节突发方式传送时序

从以上时序可知,单字节方式传送一次数据需要16个SCLK脉冲,多字节方式传送一次数据,在对日历时钟进行读写时需要72个SCLK脉冲,而在对片内RAM单元读写时则最多需要256个SCLK脉冲。单字节操作方式可保证数据传送时的安全性和可靠性,多字节操作方式则可提高数据传送速度,两种方式可视需要灵活选用。DS1302的外接晶振推荐采用32.768kHz,电容推荐值为6pF,由于晶振频率较低,也可以不接电容,对计时精度影响不大。

DS1302共有12个寄存器,其中7个寄存器与日历时钟有关,存放的数据为BCD码格式,日历、时钟寄存器地址及其内容如表5-13所列。秒寄存器的第7位为时钟暂停控制位,该位为1时,暂停时钟振荡器,DS1302进入低功耗状态,该位为0时,启动时钟。时寄存器的第7位为12或24小时方式选择,该位为1时,选择12小时方式,该位为0时,选择24小时方式。在12小时方式下,时寄存器的第5位为AM/PM选择,该位为1时,选择PM,该位为0时,选择AM。在24小时方式下,时寄存器的第5位为第2个小时位(20~23)。

表5-13 DS1302内部寄存器地址与内容

978-7-111-44508-1-Chapter05-84.jpg

例5-5 图5-14所示为LPC2138与DS1302实现的万年历电路。DS1302采用外部3.3V电源供电,LPC2138的引脚P1.28、P1.29、P1.30分别连到DS1302的RST、SCLK、I/O端,LPC2138的引脚P1.16、P1.17、P1.18分别连接“设置”、“增大”、“减小”按钮,用于对万年历进行设置和调整。万年历的显示部分采用12864点阵图型液晶显示模块,显示信息包括公历和农历。

978-7-111-44508-1-Chapter05-85.jpg(www.daowen.com)

图5-14 LPC2138与DS1302实现的万年历电路

本例中DS1302驱动程序包括在DS1302.C模块中,具体如下:

978-7-111-44508-1-Chapter05-86.jpg

978-7-111-44508-1-Chapter05-87.jpg

978-7-111-44508-1-Chapter05-88.jpg

978-7-111-44508-1-Chapter05-89.jpg

进入主程序后首先调用DS1302初始化子程序进行引脚配置,接着进行日期初始化和12864LCD图形初始化,初始化完成之后,进入循环,在循环中完成获取DS1302当前时间、LCD屏幕上显示万年历、按键扫描和时间设置等工作。

主程序文件main.c如下:

978-7-111-44508-1-Chapter05-90.jpg

978-7-111-44508-1-Chapter05-91.jpg

978-7-111-44508-1-Chapter05-92.jpg

978-7-111-44508-1-Chapter05-93.jpg

978-7-111-44508-1-Chapter05-94.jpg

978-7-111-44508-1-Chapter05-95.jpg

978-7-111-44508-1-Chapter05-96.jpg

本例中还包括年历转换模块lunar.c,负责完成公历与农历之间的转换。农历中采用天干地支纪年法,十天干与数字的对应关系如下:

甲、乙、丙、丁、戊、己、庚、辛、壬、癸

4、5、6、7、8、9、0、1、2、3

十二地支与数字的对应关系如下:

子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥

4、5、6、7、8、9、10、11、0、1、2、3

天干地支纪年法是天干在前,地支在后,代表天干的数字为公历年分的最后一位数字。计算地支时用年份数除以12,后面的余数就代表某个地支,例如,2010年最后一位数字是0,对应的天干为庚,2010除以12,余数为6,对应的地支为寅,所以2010年为庚寅年。限于篇幅这里不再列出年历转换模块lunar.c清单,读者可以从本书附带的光盘中找到该模块程序。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈