基于51单片机的日历时钟显示系统设计学士学位论文 联系客服

发布时间 : 星期二 文章基于51单片机的日历时钟显示系统设计学士学位论文更新完毕开始阅读149a4416b94ae45c3b3567ec102de2bd9705de56

说明:

① 数据都以BCD码形式表示。

② 小时寄存器的D7位为12小时/24小时制的选择位,当为1时选12小时制,当为0时选24小时制,D5位为1是上午,D5位为0是下午,D4为小时的十位。

③ 秒寄存器中的CH位为时钟暂停位,当为1时,时钟暂停,为0时,时钟开始启动。

④ 写保护寄存器中的WP为写保护位,当WP=1时,写保护,当WP=0时未写保护,当对日历、时钟寄存器或片内RAM进行写时WP应清零,当对日历、时钟寄存器或片内RAM读时WP一般置1。

⑤ 慢充电寄存器的TCS位为控制慢充电的选择,当它为1010时才能使慢充电工作。DS为01选择一个二极管,DS为10选择二个二极管,DS为11或00充电器被禁止。与TCS无关。RS用于选择连接在Vcc2与Vcc1之间的电阻,RS为00,充电器被禁止,与TCS无关。 (3) DS1302的输入输出过程

数据输入输出(I/O)在控制指令字输入后的下一个SCLK的时钟的上升沿时数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0开始到高位7。时序图如4-3所示:

图5 读出DS1302数据

图6 写DS1302控制字节

图4-3 DS1302读、写时序图

DS1302通过RST引脚驱动输入输出过程,当RST置高电平启动输入输出过程,在SCLK时钟的控制下,首先把控制命令字写入DS1302的控制寄存器,其次根据写入的控制命令字,依次读写内部寄存器或片内RAM单元的数据,对于日历、时钟寄存器,根据控制命令字,一次可以读写一个日历、时钟寄存器,也可以一次读写8个字节,对所有的日历、时钟寄存器,写的控制命令字为0BEH,读的控制命令字为0BFH;对于片内RAM单元,根据控制命令字,一次可读写一个字节,一次也可读写31个字节。当数据读写完后,RST变为低电平结束输入输出过程。无论是命令字还是数据,一个字节传送时都是低位在前,高位在后,每一位的读写发生在时钟的上升沿。

DS1302时钟模块软件设计具体可以包括三个模块:写入数据模块、读出数据模块、初始化事件模块,每个模块有可以包含几个子函数,具体DS1302程序流程图如图4-4所示。

17

开始 变量初始化 使DS1302不具备写保护 复位端产生一个高电平 复位端产生一个高电平 写DS1302地址 写DS1302地址 延时一段时间 延时一段时间 向该地址写数据 地址增加 1 地址加 将该地址的数据读出 Y 数据写完了吗 ? 数据读完了吗 ? Y N 结束 N 图4-4 DS1302流程图

根据本人在调试中遇到的问题,特作如下说明:

DS1302 与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位MSB(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5~D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入), D0=1,指定读操作(输出)。

在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。

DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM寄存器,在此方式下可一次性读、写所有的RAM的31个字节。

要特别说明的是备用电源B1,可以用电池或者超级电容器(0.1F以上)。虽然DS1302在主电源掉电后的耗电很小,但是,如果要长时间保证时钟正常,最好选用小型充电电池。可以用老式电脑主板上的3.6V充电电池。如果断电时间较短(几小时或几天)时,就可以用漏电较小的普通电解电容器代替。100 μF就可以保证1小时的正常走时。DS1302在第一次加电后,必须进行初始化操作。初始化后就可以按正常方法调整时间。 (4) 结论

DS1302 存在时钟精度不高,易受环境影响,出现时钟混乱等缺点。DS1302可以用

18

于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析及对异常数据出现的原因的查找具有重要意义。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片DS1302,则能很好地解决这个问题。

4.2.2 LCD1602显示子模块的设计

(1) LCD1602各寄存器介绍

字符型液晶显示模块内部控制器主要由指令寄存器IR、数据寄存器DR、忙标示BF、地址计数器AC、DDROM、CGRAM、及时序发生电路组成。

① 输入输出寄存器:本单元为LCD的大门,所有数据和控制信号都需通过本单元才得以进出LCD。

② 指令寄存器:本寄存器(IR)为8位,其功能是存放微控制器所送入的指令、DDRAM、或CGRAM的地址。

③ 指令译码器:本寄存器是将指令寄存器里的指令译码,以获得所要操作DDRAM或CGRAM的地址。

④ 数据寄存器:本寄存器(DR)连接LCD内部数据总线,DDRAM或CGRAM的数据存取都通过本寄存器。

⑤ 地址计数器:本寄存器(AC)连接内部的地址总线,DDRAM或CGRAM的操作都需通过本计数器提供的地址来寻址。

⑥ 忙碌标志:本标志(BF)用以表示当时LCD的状态,若BF=1,则表示处于忙碌状态无发接受外部指令或数据;若BF=0,则可接受外部指令或数据。

⑦ 显示数据存储器:本存储器(DDRAM)存储所要显示的数据。实际上本存储器里存放的是要显示数据的ASCII码,再以ASCII码为地址,到CGRAM里找到该字节型的现实编码。

(2) 基本操作时序 ① 读操作时序

② 写操作时序

19

对以上时序图的说明如下:

读状态:输入:RS=0,RW=1,E=1 输出:D0-D7为状态字 写指令:输入:RS=0,RW=0,D0~D7为指令码,E高脉冲 输出:无

读数据:输入:RS=0,RW=1,E=1 输出:D0-D7为数据 写数据:输入:RS=1,RW=0,D0~D7为数据,E高脉冲 输出:无

(3) LCD1602指令说明

LCD控制器HD44780内有多个寄存器,通过RS和R/W引脚共同决定选择哪一个寄存器,选择情况如下表所示:

RS00110101R/W寄存器及操作指令寄存器写入忙标志和地址计数器读出数据寄存器写入数据寄存器读出 LCD1602液晶模块内部的控制器共有11条控制指令,它们的格式和功能如下表所示:

序号123456指令RS清显示0光标返回0置输入模式0显示开/关控制0光标或字符移位0置功能0置字符发生存储器地70址8置数据存储器地址09读忙标志或地址1写数据到CGRAM或101DDRAM11从CGRAM或DDRAM读数1R/W00000000001D70000000D6000000D5000001D4D3D2D1D0000010001*001I/DS01DCB1S/CR/L**DLNF**1字符发生存储器地址1显示数据存储器地址BF计数器地址要写的数据内容读出的数据内容 它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)

20