文档库 最新最全的文档下载
当前位置:文档库 › 基于DS1302的实时数字钟设计

基于DS1302的实时数字钟设计

基于DS1302的实时数字钟设计
基于DS1302的实时数字钟设计

基于DS1302的多功能实时数字钟控制

摘要:本系统采用STC89C52 单片机和DS1302 配合,实现实时时间日期和星期的保存和显示。系统中还有一块1602显示屏,用以显示系统中所需的符号和时间日期。另外系统中还装有4个独立式键盘,用于系统操作与控制。并接一个直流蜂呜器和一个交流蜂呜器,用以进行音响提示。DS1302可以实现对系统是的时、分、秒,日期和星期等信息的保存,使系统在掉电的情况下仍然能够准确的保存并运行时间信息。利用单片机的定时器,实现了倒计时和秒表功能的设计。

关键字:单片机;DS1302;数字钟

Based on DS1302 control of multi-purpose real-time digital

clock

Abstract:The system uses the microcontroller and the DS1302 with STC89C52, real-time time date and week of preservation and display. There is also a 1602 display system to display the system date and time required for the symbol. Another system is also equipped with 4 separate keyboard for the system operation and control. And then a DC and an AC buzzer buzzer, used for audio prompts. DS1302 can be achieved on the system is the hours, minutes, seconds, date, and save information such as a week, the system in case of power-down will still be able to save and run-time and accurate information. Use of microcomputer timer, countdown and stopwatch functions to achieve the design.

Key words:Single Chip Microcomputer; DS1302; digital clock

目录

1 绪论 (1)

2 系统方案选择和论证 (1)

2.1 设计要求 (1)

2.2 各模块方案选择和论证 (2)

2.2.1 主控模块的选择说明 (2)

2.2.2 时钟芯片的选择和说明 (3)

2.2.3 显示模块的选择和说明 (5)

2.3 最终选择方案 (7)

3 系统硬件设计及实现 (7)

3.1 单片机外围电路设计 (7)

3.2 DS1302与单片机的接口设计 (8)

3.3 LCD1602与单片机的接口设计 (8)

3.4 按键电路设计 (9)

3.5 闹铃电路设计 (9)

3.6 电源设计 (10)

4 软件设计 (11)

4.1 主程序设计 (11)

4.2 DS1302子程序的设计 (11)

4.4 键盘扫描子程序的设计 (14)

4.5 闹钟子程序的设计 (14)

5 系统调试 (14)

5.1 软件调试 (15)

5.2 硬件调试 (15)

5.2.1 显示电路调试 (16)

5.2.2 DS1302电路调试 (16)

5.2.3 按键电路的调试 (16)

6 总结 (16)

致谢 (18)

参考文献 (19)

附录 (20)

附录一:电路板实物图 (20)

附录二:设计总电路图 (22)

附录三:仿真图 (23)

基于DS1302的多功能实时数字钟控制

***班 ***

指导教师 ***

1 绪论

在实时监控系统的设计中,要对各个控制信号进行实时监控,更重要的是在发生事故的情况下准确记录下故障数据,以便准确分析排除错误。此外,在单片机的应用系统中,常常需要记录实时时间信息并长期保存。比如在采集数据时,对某些重要的信息不仅需要记录其内容,还需要记录下该事件发生的准确时间;又比如,在车站的显示屏上,不仅要显示班车信息,还要显示实时的时间信息,其中包括年、月、日、星期、时间等,此外当系统停电的情况下,时间数据不会丢失。

为了达到上述目的,必不可少的就需要实时时钟的参与和配合。然而,通常用的单片机没有实时时钟部件,如果需要此功能就得使用定时器来实现,而一旦系统掉电时钟就不能运行,这在需要实时时钟的系统中是不允许的,即使使用备用电池,通用单片机系统的较大功耗也坚持不了多久。而采用独立运行的实时时钟,就可避免不少麻烦,同时配合相关软件就可以有效地完成所要达到的目的。

2 系统方案选择和论证

2.1 设计要求

电子时钟主要是利用电子技术将时钟电子化、数字化,拥有时间精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。当今市场上的电子时钟品类繁多,外形小巧别致。也有体型较大的,诸如公共场所的大型电子报时器等。电子时钟首先是数字化了的时间显示或报时器,在此基础上,人们可以根据不同场合的要求,在时钟上加置其他功能,比如定时闹铃,万年历,环境温度、湿度检测,环境空气质量检测,USB扩展口功能等。

. 根据设计要求和结合实际情况,希望达到下面的功能要求:

(1)准确显示时、分、秒、年、月、日、星期等信息,并能断电保存。

(2)液晶显示实时时间信息。

(3)键盘设置时间信息。

(4)多组闹钟设置,并有闹钟提示。

(5)倒计时功能。

(6)秒表。

(7)采用直流供电电源,外部直流供电为主,电池为后备辅助电源,并能自动切换。

2.2 各模块方案选择和论证

2.2.1 主控模块的选择说明

目前在单片机系统中,应用比较广泛的微处理器芯片主要为8XC5X系列单片机。该系列单片机均采用标准MCS-51内核,硬件资源相互兼容,品类齐全,功能完善,性能稳定,体积小,价格低廉,货源充足,调试和编程方便,所以应用极为广泛。

例如比较常用的A T89C2051单片机,带有2KB Flash可编程、可擦除只读存储器(E2PROM)的低压、高性能8位CMOS微型计算机。拥有15条可编程I/O引脚,2个16位定时器/计数器,6个中断源,可编程串行UART通道,并能直接驱动LED输出。

仅仅是为了完成时钟设计,应用AT89C2051单片机完全可以实现。但是本设计中需要更多的I/O引脚,故本设计采用具有32根I/O引脚的STC89C52单片机。

STC89C52单片机是一款低功耗,低电压,高性能CMOS 8位单片机,片内含8KB(可经受1000次擦写周期)的FLASH可编程可反复擦写的只读程序存储器,器件采用CMOS工艺和高密度、非易失性存储器(NURAM)技术制造,其输出引脚和指令系统都与MCS-51兼容。片内的FLASH存储器允许在系统内可改编程序或用常规的非易失性存储器编程器来编程。因此,STC89C52是一种功能强,灵活性高且价格合理的单片机,可方便的应用在各个控制领域[1]。

工作电压: 3.6V - 2.4V, 可低至2.4V - 1.9V

I/O 口:P0,P1,P2,P3 口可以承受5V 输入。P0 口不要接到5V 系统,只能接3.3V

系统,如果接5V系统要接上拉电阻。

A/D 转换在P1 口, P1.0 - P1.7 八路。

图1 STC89C52管脚图

2.2.2 时钟芯片的选择和说明

在电子时钟设计中,常用的实时时钟芯片有DS12887、DS1216、DS1643、DS1302。每种芯片的主要时钟功能基本相同,只是在引脚数量、备用电池的安装方式、计时精度和扩展功能等方面略有不同。DS12887与DS1216芯片都有内嵌式锂电池作为备用电池;X1203引脚少,没有嵌入式锂电池,跟DS1302芯片功能相似,只是相比较之下,X1203与STC89C52搭配使用时占用I/O口较多。DS1643为带有全功能实时时钟的8K×8非易失性SRAM,集成了非易失性SRAM、实时时钟、晶振、电源掉电控制电路和锂电池电源,BCD码表示的年、月、日、星期、时、分、秒,带闰年补偿。同样,DS1643拥有28只管脚,硬件

连接起来占用微处理器I/O口较多,不方便系统功能拓展和维护。故而从性价比和货源上考虑,本设计采用实时时钟日历芯片DS1302。

2.2.2.1 DS1302简介

DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟日历芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小于31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。有主电源和备份电源双引脚,而且备份电源可由大容量电容(>1F)来替代。需要强调的是,DS1302需要使用32.768KHz的晶振[2]。

2.2.2.2 DS1302管脚说明

图2 DS1302芯片引脚图

表1 DS1302引脚功能说明

引脚号名称功能

1 V CC1备份电源输入

2 X1 32.768KHz晶振输入

3 X2 32.768KHz晶振输出

4 GND 地

5 RST 控制移位寄存器/复位

6 I/O 数据输入/输出

7 SCLK 串行时钟

8 V CC2主电源输入

2.2.2.3 DS1302读写和控制说明

DS1302的数据读写方式有两种,一种是单字节操作方式,一种是多字节操作方式。每次仅写入或读出一个字节数据称为单字节操作,每次对时钟/日历的8字节或31字节RAM进行全体写入或读出的操作,称其为多字节操作方式。当以多字节方式写时钟寄存器时,必须按数据传送的次序依次写入8个寄存器。但

是,当以多字节方式写RAM时,不必写所有31字节。不管是否写了全部31字节,所写的每一个字节都将传送至RAM。

为了启动数据的传输,CE引脚信号应由低变高,当把CE驱动至逻辑1的状态时,SCLK必须为逻辑0,数据在SCLK的上升沿串行输入。无论是读周期还是写周期,也无论送方式是单字节传送还是多字节传送,都要通过控制字指定40字节中的哪个将被访问。在开始8个时钟周期把命令字(具有地址和控制信息的8位数据)装入移位寄存器之后,另外的时钟在读操作时输出数据,在写操作时输入数据,所有的数据在时钟的下降沿变化。所有写入或读出操作都是先向芯片发送一个命令字节。对于单字节操作,包括命令字节在内,每次为2个字节,需要16个时钟;对于时钟/日历多字节模式操作,每次为7个字节,需要72个时钟;而对于RAM多字节模式操作,每次则为32字节,需要多达256个时钟[3]。

2.2.3 显示模块的选择和说明

本实验中要显示的信息比较多,选择数码管显示的话需要的数码管数量将会很多,将是线路复杂,PCB布线混乱,因此选择LCD1602作为显示模块。

2.2.

3.1 LCD1602引脚定义

表2 LCD1602引脚功能

引脚编号引脚符号功能规格

1 VSS(输入) 接地,0V

2 Vdd(输入) 接电源,5V±5%

3 V0(输入) 反视度调整,使用可变电阻调节,可改变对比度

4 RS(输入) 寄存器选择。1:选择资料寄存器,0:选择指令寄存器

5 W

R/(输入) 读写选择,1:读;0:写

6 E(输入) 使能选择。1:LCD可读写。0:LCD不可读写

7 DB0 数据端口的第0位

8 DB1 数据端口的第1位

9 DB2 数据端口的第2位

10 DB3 数据端口的第3位

11 DB4 数据端口的第4位

12 DB5 数据端口的第5位

13 DB6 数据端口的第6位

14 DB7 数据端口的第7位

15 Vdd(输入) 背光电源正极,5V±5%

16 VSS(输入) 背光电源负极,0V

2.2.

3.2 指令表

表3 LCD1602指令表

指令RS RW D7D6D5D4D3D2D1D0 1清屏0 0 0 0 0 0 0 0 0 1 2光标返回0 0 0 0 0 0 0 0 1 * 3输入模式0 0 0 0 0 0 0 1 I/D S 4显示控制0 0 0 0 0 0 1 D C B 5光标/字符移位0 0 0 0 0 1 S/C R/L * * 6功能0 0 0 0 1 DL N F * * 7置字符发生器地址0 0 0 1 字符发生存贮器地址

8置数据存贮器地址0 0 1 显示数据存贮器地址

9读忙标志和地址0 1 BF 计数器地址

10写数据到指令7.8所设地

1 0 要写的数据

11从指令7.8所设的地址读

数据

1 1 读出的数据

指令1:清显示,光标复位到地址00H位置。

指令2:光标复位,光标返回到地址00H。

指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移,S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。

指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。

指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。R/L,高向左,低向右。

指令6:功能设置命令DL:高电平时为8位总线,低电平时为4位总线N:低电平时为单行显示,高电

平时双行显示F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。(有些模块是DL:高电平时为8位总线,低电平时为4位总线)

指令7:字符发生器RAM地址设置,地址:字符地址*8+字符行数。(将一个字符分成5*8点阵,一次写入一行,8行就组成一个字符)

指令8:置显示地址,第一行为:80H——8FH,第二行为:C0H——CFH。

指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。

指令10:写数据。

指令11:读数据。[4]

2.3 最终选择方案

经过方案比较和论证,选择STC89C52作为主控芯片,时钟芯片选择DS1302,显示模块用LCD1602,用四个独立式键盘。最后选择的方案如下图所示:

图3 系统框图

3 系统硬件设计及实现

该设计的硬件电路由主控部分(单片机STC89C52)、计时部分(实时时钟芯片DS1302)、显示部分(LCE1602)、按键部分(独立式键盘)、音响部分(直流蜂鸣器)5个部分组成。各部分之间相互协作,构成一个统一的有机整体,实现数字时钟的功能。各部分的硬件电路设计如下:

3.1 单片机外围电路设计

单片机STC89C52作为主控芯片,控制整个电路的运行。单片机外围需要一个复位电路,复位电路的功能是:系统上电时提供复位信号,直至系统电源稳定后,撤消复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。该设计采用含有二极管的复位电路,复位电路可以有效的解决电源毛刺和电源缓慢下降(电池电压不足)等引起的问题,在电源电压瞬间下降时可以使电容迅速放电,一定宽度的电源毛刺也可令系统可靠复位。复位电路的设计图如图4示:

RST

图4 复位电路设计图

3.2 DS1302与单片机的接口设计

时钟芯片DS1302与单片机STC89C52的接口是由3条线来完成的,单片机STC89C52的P1.6与时钟芯片的数据传输端相连,P1.5用来作为DS1302输入时钟SCLK控制端,P1.7控制DS1302的复位输入端。DS1302的第8管脚与一个独立电池连接,2、3管脚接标准32.768KHz石英晶振。DS1302与单片机的接口电路如图5所示:

图5 DS1302与单片机的连接

3.3 LCD1602与单片机的接口设计

液晶显示器LCD1602与单片机STC89C52的接口由一组8位数据传输线和3跟控制线完成。LCD1602的RS、RW、E分别由单片机的P1.2、P1.1、P1.0来控制,数据输入口DB0~DB7由P0.0~P0.7传输数据,因为是接在P0口,所以要接上拉电阻。LCD1602与单片机的接口电路如图6所示:

图6 LCD1602与单片机的连接

3.4 按键电路设计

本设计中使用的按键不多,只用到四个按键即可完成所需要的功能,因此用四个独立式按键来完成。S4、S3、S2、S1分别与P2.0、P2.1、P2.2、P2.3连接,具体功能有:S4主功能选择;S3光标移位/开闹钟;S2数值加/关闹钟;S1秒表/倒计时。具体电路图如图7所示:

图7 按键电路

3.5 闹铃电路设计

闹铃音乐可以直接采用蜂鸣器闹铃,如当前时刻与闹铃时间相同,单片机向

蜂鸣器送出高电平,蜂鸣器发声。采用蜂鸣器闹铃结构简单,控制方便,但是发出的闹铃声音单一。闹铃的音乐不是本设计中的重点,故采用最简单的方法,占用单片机一根I/O口P1.3,中间用PNP型三极管S9012连接P1.3和蜂鸣器。当P1.3引脚为低电平时,S9012的发射极和集电极导通,使蜂鸣器发声。当响铃标志位为“1”时,P2.0送一定频率脉冲,使蜂鸣器发出声音[5]。如图8所示:

图8 闹铃电路

3.6 电源设计

时钟芯片DS1302有很宽的工作电压范围,其工作电压为2.5~5.5V。单片机STC89C52的工作电压范围相对较窄,为4.0~5.5V,所以本设计中,利用USB给电路提供+5V电压,由于USB供电可能不稳定,所以加一个滤波稳压电容,使电路的工作保持很高的可靠性。在电路中接入一个发光二极管作为指示灯,可以很方便地指示电源与电路是否接通。该设计的电源部分如图9所示:

图9 电源电路

4 软件设计

4.1 主程序设计

第一次上电,系统先进行初始化,单片机依次开始调用键盘扫描子程序、DS1302子程序、闹铃子程序,经过延时,返回程序开头循环运行。

图10 主程序流程图

4.2 DS1302子程序的设计

单片机STC89C52对时钟芯片DS1302的控制需要通过程序驱动来实现,程序主要完成两个方面的任务:①利用单片机实现对DS1302寄存器的地址定义和控制字的写入,②实现对DS1302的数据读取。

初始化DS1302要求RST为低电平,SCLK为低电平。RST被设置为高电平就启动了一个数据传送的过程。SCLK的16个方波完成一次数据传送,前8个方波用于输入命令字节,后8个方波用于数据的输出或数据的输入。在SCLK

的上升沿,I/O 线上的数据被送入DS1302;在SCLK 的下降沿,DS1302输出数据在I/O 线上。写和读各需要一个程序,写DS1302程序流程图如图11.1所示,读DS1302程序流程图[6]如图11.2所示。

图11.1 写DS1302流程图 图11.2 读DS1302流程图 程序主要实现对DS1302写保护、充电,对年、月、日、时、分、秒等寄存器的读写操作。在读写操作子程序中都执行了关中断指令,因为在串行通信时对时序要求比较高,而且在此是用I/O 口软件模拟串行时钟脉冲,所以在通信过程中最好保证传输的连续性,不要允许中断。其流程图如图12。 启动 读数据字节一位 复位端变高启动一次数据传送工作 结束

SCLK 发脉冲 复位端变低 SCLK 发脉冲 写命令字节一位 够8次吗? 够8次吗? N Y Y N 启动 写数据字节一位 复位端变高启动一次数据传送工作 结束 SCLK 发脉冲 复位端变低 SCLK 发脉冲

写命令字节一位 够8次吗?

够8次吗? N Y Y N

开始

初始化

写入时钟初值

开始计时

读出数据

返回

图12 实时时钟日历子程序流程图

DS1302每次上电时自动处于暂停状态,必须把秒寄存器的位7置位0,时钟才开始计时。如果DS1302一直没有掉电,则不存在此问题。

在进行写操作时,需要先解除写保护寄存器的“禁止”状态。当用多字节模式进行操作时,必须写够8字节[7]。

4.3 LCD显示子程序的设计

程序主要实现对信息的显示,包括年、月、日、星期和时间等信息,在这里要注意它的读写控制指令。其流程图如图13所示。

图13 显示子程序流程图

4.4 键盘扫描子程序的设计

单片机对键盘扫描的方法有随机扫描方式、定时扫描方式和中断扫描方式。

在随机扫描方式中,CPU完成某特定任务后,即执行键盘扫描程序,以确定键盘有无按键输入,然后根据按键功能转去执行相应的操作。在执行键盘按键规定的功能中不理睬键盘输入。

定时扫描方式与随机扫描方式基本相同,只是利用CPU内的定时中断,每隔一定时间扫描有无按键被按下,键盘反应速度较快,在处理按键功能过程中,可以通过键盘命令进行干预,如取消、暂停等操作。

前两种扫描方式均会占用CPU大量时间。不管有没有键入操作,CPU总要在一定的时间内进行扫描,这对于单片机控制系统是很不利的[8]。

由于本设计中STC89C52单片机在系统中的主要任务是接受DS1302的数据并送出显示,完成时钟/日历校对和日期显示控制。单片机完全有能力完成以上工作,所以采用随机扫描键盘方式,系统也能够正常运行。

单片机扫描完键盘,得到键值,并根据键值转入执行对应任务,以实现按键功能。如果没有按键按下,则程序扫描到Key=FFH,将键值Key清零,返回主程序。

4.5 闹钟子程序的设计

闹铃子程序最主要的任务是不断用时钟分(min)与时(hour)同设定的闹铃分(clk_min)与闹铃时(clk_hour)比较,只要满足min等于clk_min、hour等于clk_hour,响铃启动1分钟。

5 系统调试

调试工作分硬件调试和软件调试两部分,调试方法介绍如下:

首先,硬件调试主要是先搭建硬件平台,然后利用万用表等工具对电路检查,最后应用程序进行功能调试。硬件调试比较费时,需要细心和耐心,也需要熟练掌握电路原理。

然后,可以直接应用一些编辑或仿真软件进行软件调试,比如单片机C51编辑软件Keil。该软件提供了一个集成开发环境uVision,它包括C编辑器、宏

编辑器、连接器、库管理和一个功能强大的仿真调试器。通过编译、运行,可以检查程序错误。但应用此方法,仍需要十分了解所使用元器件的工作方式和管脚连接方式。在软件调试过程中要仔细耐心,即便是多写或少些一两个字符,都无法编译成功。而有时往往在Keil中编译、运行无错,但烧录到单片机中运行起来就会出错,很可能是编程时管脚或时序编辑得不对。

还有一种方式,即应用仿真软件搭建电路的软件平台,再导入程序进行仿真调试。如果电路出错,可以在计算机上方便的修改电路,程序出错可以重新编辑程序,这种方法节时、省力,经济、方便。笔者应用的仿真软件为Proteus。

总之,调试过程是一个软硬件相结合调试的过程,硬件电路是基础,软件是检测硬件电路和实现其功能的关键[9]。

5.1 软件调试

软件调试相对比较简单,但是要掌握仿真软件的用法,首先在仿真软件(Proteus)上建立仿真模型(电路图),然后用Keil C编程序和Proteus进行联机仿真调试,分别对显示、按键、时钟等各个部分进行调试,检测电路原理图的正确与否。

5.2 硬件调试

单片机基础电路包括电源、单片机、外部时钟震荡电路、复位电路和外部接口电路。调试过程需要注意以下几点:

(1). 检查电源是否完好。

(2). 单片机电源要连接正确,并且保证AT89C51的31号引脚接高电平。AT89C51的31号引脚是外部程序存储器选择信号端,当该引脚为高电平时,单片机会一直从片内程序存储器内取指令。

(3). 如果使用P0口做I/O口,要接上拉电阻。

(4). 使用万用表排查电路中是否存在断路或者短路情况。笔者在制作外部接口电路时使用的是排针,焊接时容易出现管脚之间短路,所以在上电以前必须先排查电路。

(5). 编辑一个简单程序,上电运行,检查单片机是否正常工作,复位电路是否正确。

5.2.1 显示电路调试

由于显示电路中连线比较多,所以应该先使用万用表排除电路中是否存在断路或者短路情况,可别是插针部分,此外特别注意LCD1602的三个控制管脚P1.0、P1.1、P1.2是否与单片机连接上了。然后编写简单的显示程序运行,检查电路是否正常。

5.2.2 DS1302电路调试

该电路包含DS1302芯片、主电源、备用电源、晶振等部分。在与单片机连接的过程中需要注意以下几点:

(1) 清楚DS1302与单片机连接的管脚。本设计定义为:DS1302的SCLK连接P1.5,I/O连接P1.6,RST连接P1.7。

(2) 注意电源正负极连接。

(3) DS1302接32.768KHz的晶振。该晶振体型比较小,在焊接时要小心,注意不要将晶振引脚弄断。同时也要尽量使晶振离DS1302的X1、X2引脚近距离焊接。

(4) 编写DS1302的时钟/日历程序,只要求能够正确显示时间。烧录进单片机,检查电路电源正负极连接是否正确,检查无误后可以上电检查[10]。

5.2.3 按键电路的调试

按键电路比较简单,故调试起来也很容易。如果确保按键焊接正确的情况下,编写一个简单的按键程序和显示程序一起就可以检测其正确性了。

6 总结

过去人们应用时钟仅仅是为了明确当前时间。随着生产力的发展,社会的进步,生产生活对时钟的需求越来越大,对时钟的体型、功能的要求也各有不同。所以多功能电子时钟在今后的应用也会越来越广泛。

基于单片机实现电子时钟,仅仅是众多方法之一。并且市场上的实时时钟日历芯片品类繁多,IC化的传感器各种各样,显示方式也愈趋于人性化。所以多功能电子时钟有多种实现方案,能够实现的功能也很多,笔者已经通过仿真和调试,实现了时间日历显示和校对、闹铃等功能。本文采用51单片机C语言进行

编程,当然也可以应用汇编语言编程。由于本人能力有限,提供的程序还可以进一步优化,并且还可以根据需求为电子时钟增设新功能。

致谢

致谢

本设计是在***和***老师的悉心指导下顺利的完成。从设计的选题,相关资料的查寻,到论文的撰写这一整个过程中,两位老师以其广博的知识、丰富的经验、清晰的思路,自始至终给我以指导,使我能够顺利完成设计,他严谨的治学态度,精益求精的工作作风和孜孜不倦的求学精神令我受益匪浅。在此设计完成之际,对***老师和***老师表示衷心的感谢!

ds1302时钟程序详解-ds1302程序流程图(C程序)

ds1302时钟程序详解,ds1302程序流程图(C程序) ds1302时钟程序详解 DS1302 的控制字如图2所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始 输出。 2.3 数据输入输出(I/O) 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从 低位0位到高位7。 2.4 DS1302的寄存器 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日 历、时间寄存器及其控制字见表1。 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RA M的31个字节,命令控制字为FEH(写)、FFH(读)。

ds1302程序流程图 3.2 DS1302实时时间流程 图4示出DS1302的实时时间流程。根据此流程框图,不难采集实时时间。下面结合流程图对DS1302的基 本操作进行编程:

基于DS1302的数码管显示数字钟

单片机原理课程设计 课题名称:基于DS1302的数码管显示数字钟 专业班级:电子信息工程 学生学号: 学生姓名: 指导教师: 设计时间:2010年6月21日--2010年6月25日

目录 摘要........................................................................................................................................................................ 1 设计任务和要求............................................................................................................................................ 2 方案论证........................................................................................................................................................ 3 系统硬件设计................................................................................................................................................ 3.1 系统总原理图 ................................................................................................................................ 3.2 元器件清单...................................................................................................................................... 3.3 PCB板图....................................................................................................................................... 3.4 Proteus仿真图 ............................................................................................................................... 3.5 分电路图及原理说明................................................................................................................... 3.5.1 主控部分(单片机MCS-51).............................................................................. 3.5.2 计时部分(实时时钟芯片DS1302).................................................................. 3.5.3 显示部分(共阳极数码管)................................................................................ 3.5.4 调时部分(按键)................................................................................................ 4系统软件设计................................................................................................................................................ 4.1 程序流程图..................................................................................................................................... 4.2 程序源代码........................................................................................................................................ 5心得体会........................................................................................................................................................ 6参考文献........................................................................................................................................................ 7结束语............................................................................................................................................................

DS1302时钟芯片读写详解

DS1302时钟芯片读写详解 2008-09-26 13:07 /*DS1302读写程序(C51)*/ sbit DS13CLK =P1^5; /*DS1302的SCLK脚脉冲*/ sbit DS13IO =P1^6; /*DS1302的IO脚数据*/ sbit DS13CS =P1^7; /*DS1302的RST脚片选*/ /*向DS1302写一个字节*/ void _wds13byte(uchar _code) { uchar i; DS13CLK =0; DS13CLK =0; for(i=0;i<8;i++) { if(_code&0x01) DS13IO =1; else DS13IO =0; DS13CLK =1; DS13CLK =1; DS13CLK =0; DS13CLK =0; _code =_code >> 1; } } /*从DS1302读一个字节*/ uchar _rds13byte(void) { uchar i,_code; _code=0; DS13CLK =0; DS13CLK =0; DS13IO =1; for(i=0;i<8;i++) { _code =_code >>1; if(DS13IO) _code =_code|0x80; DS13CLK =1; DS13CLK =1; DS13CLK =0; DS13CLK =0; } return _code; } /*读功能_code读功能命令*/ uchar readds1302(uchar _code)

{ DS13CS =0; /*关闭DS1302*/ DS13CLK =0; DS13CLK =0; DS13CS =1; /*使能DS1302*/ _wds13byte(_code); /*读代码*/ _code=_rds13byte(); /*返回读取数字*/ DS13CLK =1; DS13CS =0; /*关闭DS1302*/ return _code; } /*写功能fp写的地址,_code写的内容*/ void writeds1302(uchar fp,uchar _code) { DS13CS =0; /*关闭DS1302*/ DS13CLK =0; DS13CLK =0; DS13CS =1; /*使能DS1302*/ _wds13byte(fp); /*写控制命令*/ _wds13byte(_code); /*写入数据*/ DS13CLK=1; DS13CS =0; /*关闭DS1302*/ } /*******DS1302设置快速充电***************/ void ds13_charg(void) { writeds1302(0x8e,0x00); /*解除写保护*/ writeds1302(0x90,0xa5); /*单二极管2K电阻充电*/ writeds1302(0x8e,0x80); /*置位写保护*/ } ;;;DS1302读写程序(汇编);;; ;******************************************************************* **/ T_CLK Bit P1.5 ;实时时钟时钟线引脚 T_IO Bit P1.6 ;实时时钟数据线引脚 T_RST Bit P1.7 ;实时时钟复位线引脚 ;********************************************************** ;子程序名:Set1302 ;功能:设置DS1302 初始时间,并启动计时。 ;说明: ;调用:RTInputByte ;入口参数:初始时间在:Second,Minute,Hour,Day,Month,Week.YearL(地址连续) ;出口参数:无 ;影响资源:A B R0 R1 R4 R7

DS1302时钟芯片的原理与应用

DS1302 时钟芯片的原理与应用 1 写保护寄存器操作 当写保护寄存器的最高位为0 时,允许数据写入寄存器,写保护寄存器可以通过命令字节8E 8F 来规定禁止写入/读出。写保护位不能在多字节传送模式下写入Write_Enable: MOV Command,#8Eh ;命令字节为8E MOV ByteCnt,#1 ;单字节传送模式 MOV R0,#XmtDat 数据地址覆给R0 MOV XmtDat,#00h 数据内容为0 写入允许 ACALL Send_Byte 调用写入数据子程序 RET 返回调用本子程序处 当写保护寄存器的最高位为1 时禁止数据写入寄存器 Write_Disable: MOV Command,#8Eh ;命令字节为8E MOV ByteCnt,#1 ;单字节传送模式 MOV R0,#XmtDat 数据地址覆给R0 MOV XmtDat,#80h 数据内容为80h 禁止写入 ACALL Send_Byte 调用写入数据子程序 RET 返回调用本子程序处 以上程序调用了基本数据发送(Send_Byte)模块及一些内存单元定义, 其源程序清单在附录中给出下面 的程序亦使用了这个模块 2 时钟停止位操作 当把秒寄存器的第7 位时钟停止位设置为0 时起动时钟开始 Osc_Enable: MOV Command,#80h ; 命令字节为80 MOV ByteCnt,#1 ; 单字节传送模式 MOV R0,#XmtDat 数据地址覆给R0 MOV XmtDat,#00h 数据内容为0 振荡器工作允许 ACALL Send_Byte 调用写入数据子程序 RET 返回调用本子程序处 当把秒寄存器的第7 位时钟停止位设置为1 时,时钟振荡器停止DS1320 进入低功耗方式 Osc_Disable: MOV Command,#80h ;命令字节为80 MOV ByteCnt,#1 ;单字节传送模式 MOV R0,#XmtDat 数据地址覆给R0 MOV XmtDat,#80h 数据内容为80h 振荡器停止 ACALL Send_Byte 调用写入数据子程序 RET 返回调用本子程序处 3. 多字节传送方式

DS1302时序和C语言程序

1 DS130 2 简介: DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配如图1所示及内部结构如图2所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。 图1 DS1302的外部引脚分配 图2 DS1302的内部结构 各引脚的功能为: Vcc1:主电源;Vcc2:备份电源。当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2< Vcc1时,由Vcc1向DS1302供电。 SCLK:串行时钟,输入; I/O:三线接口时的双向数据线; CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。 DS1302有下列几组寄存器: ①DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h~8Dh,写时80h~8Ch),存放的数据格式为BCD码形式,如图3所示。

图 3 DS1302有关日历、时间的寄存器 小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是,当为1时,表示PM。在24小时模式时,位5是第二个10小时位。 秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。 控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。在任何的对时钟和RAM 的写操作之前,WP位必须为0。当WP位为1时,写保护位防止对任一寄存器的写操作。 ②DS1302有关RAM的地址 DS1302中附加31字节静态RAM的地址如图4所示。 图4 ③DS1302的工作模式寄存器 所谓突发模式是指一次传送多个字节的时钟信号和RAM数据。突发模式寄存器如图5所示。 图5 ④此外,DS1302还有充电寄存器等。 2 读写时序说明 DS1302是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。 要想与DS1302通信,首先要先了解DS1302的控制字。DS1302的控制字如图6。 图6 控制字(即地址及命令字节) 控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。

ds1302时钟程序详解经典

dsl302时钟程序详解经典 dsl302时钟程序详解 DS1302的控制字如图2所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始 2.3数据输入输出(I/O) 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0 位到高位7o 2.4 DS1302的寄存器 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位 为BCD码形式,其日历、 时间寄存器及其控制字见表1。

? I日历?別间襦存祁及凡担制孑 fir* 野擅"itwtr 収他总cn - T ?fsy网 移 e S』3 2 1 0 林斶 son8!ll00-59 f.H IUSVX SIX X2H S3II oum(1Mh、 MH K4H851101 \2A12 24? 10 IIH HK MhH M7II01 -2S.2V, W-Jl ?o imiAre 8SH WII03 - !2(11) 0 IUM MOYI1I AAII8HH ni(i II ? 0 0h\V 8LH Mill OQ ? 9910YLAH 此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器 及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为COH, FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 dsl302程序流程图

ds1302时钟程序详解 含电路图 源程序 注释

以下资料摘自电子发烧友网感谢作者,版权归网站所有,资料仅供参考 ds1302时钟程序详解 DS1302 的控制字如图2所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。 2.3 数据输入输出(I/O) 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。 2.4 DS1302的寄存器 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表1。

此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 ds1302程序流程图

3.2 DS1302实时时间流程 图4示出DS1302的实时时间流程。根据此流程框图,不难采集实时时间。下面结合流程图对DS1302的基本操作进行编程:

DS1302实时时钟模块,1602显示

/*******************说明:************************** 将实时时钟数据通过LCD1602显示 -------------------------------------------------- 基于51单片机 **************************************************/ #include #include #define uchar unsigned char #define uint unsignedint uchardis_time_buf[16]={0}; //LCD1602引脚定义 //采用8位并行方式,DB0~DB7连接至LCDDATA0~LCDDATA7 sbit RS=P2^0; sbit RW=P2^1; sbit CS=P2^2; #define LCDDATA P0 //DS1302引脚定义 sbit RST=P1^3; sbit IO=P1^2; sbit SCK=P1^1; //DS1302地址定义 #define ds1302_sec_add 0x80 //秒数据地址 #define ds1302_min_add 0x82 //分数据地址 #define ds1302_hr_add 0x84 //时数据地址 #define ds1302_date_add 0x86 //日数据地址 #define ds1302_month_add 0x88 //月数据地址 #define ds1302_day_add 0x8a //星期数据地址 #define ds1302_year_add 0x8c //年数据地址 #define ds1302_control_add 0x8e //控制数据地址 #define ds1302_charger_add 0x90 #define ds1302_clkburst_add 0xbe //初始时间定义 uchartime_buf[8] = {0x20,0x10,0x06,0x01,0x23,0x59,0x55,0x02};//初始时间2010年6月1号23点59分55秒星期二 //功能:延时1毫秒 //入口参数:x //出口参数:无 //说明:当晶振为12M时,j<112;当晶振为11.0592M时,j<122 voidDelay_xms(uint x) { uinti,j; for(i=0;i

51单片机DS1302日历时钟程序

51 单片机ds1302 时钟芯片 #define uint unsigned int #define uchar unsigned char sbit lcdrs = P1^0; sbit lcdrw = P1^1; sbit lcden = P1^2; sbit key0 = P2^0;//功能键,选择时分秒 sbit key1 = P2^1;//加1键 sbit key2 = P2^2;//减1键 sbit key4 = P2^4; sbit clk_1302 = P1^5; //1302芯片位定义sbit io_1302 = P1^6; sbit rst_1302 = P1^7; uchar bdata dat; sbit dat0 = dat^0; sbit dat7 = dat^7; uchar key0_count;//按键0被按的次数(0~3) uchar flag; char hour,minute,second; uchar table_date[] = "2009-4-12 Mon"; uchar table_time[] = "00:00:00"; /****** 函数申明********/ void write_cmd_1602(uchar cmd); void write_data_1602(uchar dat); void write_add(uchar add,uchar dat); void init1602(); void delay(uint z); uchar reverse(uchar c); void keyscan(); void init(); void RTC_initial (); void wr_1302(uchar wr_data); uchar rd_1302(void); uchar uc_R1302(uchar ucAddr); void v_W1302(uchar ucAddr, uchar ucDa); 主程序 #include

51单片机可调的ds1302时钟程序

#include #include #define uchar unsigned char #define uint unsigned int uchar count_10ms; //定义10ms计数器 sbit K1 = P3^7; //定义K1键 sbit K2 = P3^4; //定义K2键 sbit K3 = P3^5; //定义K3键 sbit K4 = P3^6; //P1^3定义K4键 sbit K5 = P3^3; sbit BEEP=P2^2; //定义蜂鸣器 sbit reset = P1^6; //P2^5; sbit sclk = P1^7; //P2^6; sbit io = P2^6; //P2^7; sbit LCD_RS=P1^0; sbit LCD_RW=P1^1 ; sbit LCD_EN=P1^2; bit K1_FLAG=0; //定义按键标志位,当按下K1键时,该位置1,K1键未按下时,该位为0。 uchar disp_buf[16] ={0x00}; //定义显示缓冲区 uchar time_buf[7] ={0,0,0x12,0,0,0,0}; //DS1302时间缓冲区,存放秒、分、时、日、月、星期、年 uchar temp [2]={0}; //用来存放设置时的小时、分钟的中间值 uint m=0,n=0,r=0; /********以下是函数声明********/ void Delay_ms(uint xms) ; bit lcd_busy(); void lcd_wcmd(uchar cmd); void lcd_wdat(uchar dat) ; void lcd_clr() ; void lcd_init() ; void write_byte(uchar inbyte); //写一字节数据函数声明 uchar read_byte(); //读一字节数据函数声明 void write_ds1302(uchar cmd,uchar indata); //写DS1302函数声明 uchar read_ds1302(uchar addr); //读DS1302函数声明 void set_ds1302(uchar addr,uchar *p,uchar n); //设置DS1302初始时间函数声明 void get_ds1302(uchar addr,uchar *p,uchar n); //读当前时间函数声明 void init_ds1302(); //DS1302初始化函数声明 /********以下是延时函数********/ void Delay_ms(uint xms) { uint i,j;

基于DS1302的实时时钟设计报告

课程设计 设计题目:基于DS1302的实时时钟设计 学生姓名:黄景军指导教师:高峰 二级学院:龙蟠学院专业:电气工程及其自动化 班级:M11电气工程及其自动化学号: 1121109023

摘要 近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用。本设计采用实时时钟芯片DS1302,基于AT89C51单片机的设计制作了具有红外遥控、LED显示、可设定时的电子时钟,达到制作的目的,并用protuse和medwin进行模拟实验。本报告中主要介绍了系统的硬件设计和软件设计,并用八位共阳极LED数码管,采用查询法查键实现。 关键词:单片机DS1302 AT89C51 共阳极LED数码显示器

目录 设计任务及主要技术指标和要求 (3) 1.1 设计任务 (3) 1.2 主要技术指标和要求 (3) 二、引言 (3) 三、核心芯片简介 (4) 3.1 DS1302简介 (5) 3.1.1 DS1302引脚功能与内部结构 (5) 3.1.2 DS1302的寄存器 (5) 3.2 AT89C52简介 (6) 四、方案设计和论证 (6) 五、软硬件设计 (7) 5.1硬件电路设计 (7) 5.2软件实现 (8) 5.2.1主程序 (8) 5.2.2时钟读出程序设计 (12) 5.2.3时钟调整程序设计 (13) 六、系统调试 (13) 七、总结 (14) 八、参考文献 (14)

一、设计任务及主要技术指标和要求 1.1 设计任务: 用DS1302时钟芯片设计实时时钟。 1.2 主要技术指标和要求: (1)通过程序直接对实时时钟时间进行设置,启动时钟运行。用8位数码管显示。 (2)通过按钮对实时时钟时间进行设置,使时钟能正常运行。 (3)其他发挥功能。 二、引言 从古代的滴漏更鼓到近代的机械钟,从电子表到目前的数字时钟,为了准确的测量和记录时间,人们一直在努力改进着计时工具。钟表的数字化,大力推动了计时的精确性和可靠性。在单片机构成的装置中,实时时钟是必不可少的部件。目前常用的实时时钟,很多采用单片机的中断服务来实现,这种方式一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且某些测控系统可能不允许;有的则使用并行接口的时钟芯片,如MC146818、DS12887等,它们虽然能满足单片机系统对实时时钟的要求,但是这些芯片与单片机接口复杂,占用地址、数据总线多,芯片体积大,占用空间多,给其它设计带来诸多不便。本设计选取串行接口时钟芯片DS1302与单片机同步通信构成数字时钟电路。其简单的三线接口能为单片机节省大量资源,DS1302的后背电源及对后背电源进行涓细电流充电的能力保证电路断电后仍能保存时间和数据信 息等。这些优点解决了目前常用的实时时钟所无法解决的问题。该时钟电路强大的功能和优越的性能,在很多领域的应用中,尤其是某些自动化控制、长时间无人看守的测控系统等对时钟精确性和可靠性有较高要求的场合,具有很高的使用价值。

51单片机+带字库液晶12864+DS1302数字时钟C源程序(无按键修改功能)

51单片机+带字库液晶12864+DS1302数字时钟C源程序(无按键修改功能)过两天的搜索与调试,在别人程序的基础上,不断修改,终于调试成功了这个程序。目前还不能修改时间与日期,只是以预定时间以始。 适用于开发板:51单片机(AT89S52)+带字库液晶12864(ST7920)+DS1302(实时时钟) 实现功能:简单,数字时钟+日期(以后会不断完美)。 C语言源程序如下: #include #include #define uchar unsigned char #define uint unsigned int /*DS1302 端口设置 */ sbit SCK=P3^6; //DS1302时钟 sbit SDA=P3^4; //DS1302 IO sbit RST = P3^5; // DS1302复位 bit ReadRTC_Flag; //读DS1302全局变量 /* 12864端口定义*/ #define LCD_data P0 //带字库液晶12864数据口 sbit LCD_RS = P2^4; //寄存器选择输入 sbit LCD_RW = P2^5; //液晶读/写控制 sbit LCD_EN = P2^6; //液晶使能控制 sbit PSB=P2^1; //并口控制 sbit RES=P2^3; uchar code dis1[] = {" 电子设计天地"}; //液晶显示的汉字 uchar code dis2[] = {"有志者,事竟成!"}; uchar code dis4[] = {'0','1','2','3','4','5','6','7','8','9'}; unsigned char temp; #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; void lcd_pos(uchar X,uchar Y); //确定显示位置 unsigned char l_tmpdate[7]={0,7,16,19,10,1,9};//秒分时日月周年 09-10-19 16:07:00 code unsigned char write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分时日

ds1302时钟原理介绍

早就已经不在学校了,可是前几天突然有老童学问我有没有保存这方面的资料,赶紧翻了一下我的电脑,呵呵,还是找到了一些资料,顺便共享出来,有需要的同学们拿走后留个言吧——可以的话。最后感谢无名的原作者。 DS1302的特点 DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配如图1所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。 各引脚的功能 Vcc1:主电源;Vcc2:备份电源。当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2< Vcc1时,由Vcc1向DS1302供电。SCLK:串行时钟,输入;I/O:三线接口时的双向数据线;CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。 DS1302的几组寄存器以及有关RAM的地址

(1)DS1302有关日历、时间的寄存器 DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h~8Dh,写时80h~8Ch),存放的数据格式为BCD码形式,如图3所示。 (2)小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是,当为1时,表示PM。在24小时模式时、位5是第二个10小时位。 (3)秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。当该位置为1时,时钟振荡器止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。(4)控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。在任何的对时钟和RAM的写操作之前,WP位必须为0。当WP位为1时,写保护位防止对任一寄存器的写操作。 (5)DS1302中附加31字节静态RAM的地址如图4所示。 (6)DS1302的工作模式寄存器 所谓突发模式是指一次传送多个字节的时钟信号和RAM数据。突发模式寄存器如图5所示

ds1302的12864液晶按键可调显示实时时钟程序

一.绪言 1.在信息显示技术中,人们发现了信息数字化的重要作用和意义。数字化的信息更加准确,同一性,更易传输和识别。很多信息可以直接由数字表示,从而数字化信息显示又成为信息显示的又一个重要内容。又从数字化显示发展到字符显示,它把人类特有的语言文字用于显示,这种显示与数字显示合在一起用途更广用量更大。在这同时,人们还希望用图形和图像进行显示,且显示的内容为五彩缤纷,并且可以实时活动和具有三维立体效果。这些在二十世纪尾声时都已经陆续实现。LCD的计算机器,半导体发光数码管显示(LED)的汽车计价器,商场的大屏幕广告。这零零总总的各类显示正为你做着各种各样的服务,相信在不久的将来显示技术的发展将会为人类做出更大的贡献。 Ds1302时钟芯片现在流行的串行时钟电路很多,如DS1302、 DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用。本文介绍的实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通3 2.768kHz晶振。(一)设计任务 本课题采用ds1302的时钟芯片为主要的的设计来源,采用显示是1cd1602的图形点阵液晶显示。,

(二)提出方案及方案论证 在设计中,我主要是考虑ds1302的时间显示问题,因为网上也有ds1302的读写和显示程序,但是至于怎样才能显示详细信息,我提出了两个方案,一个是LCD1602来显示,一个是LCD12864,其中1602是个字符型的点阵,而1CD12864是个图形的点阵,相比之下12864能够更好显示数据,而CPU都采用89C52的单片机 (三)原理说明:原理其实很简单,LCD12864的各种指令先进行宏定义和ds1302的读写指令也进行宏定义,从ds1302的读出数据显示在lcd上 (二)程序流程图

电子万年历设计(基于AT89C51单片机和DS1302时钟芯片)1

随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。 二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用(电子万年历),使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨跃性的进步…… 我国生产的电子万年历有很多种,总体上来说以研究多功能电子万年历为主,使万年历除了原有的显示时间,日期等基本功能外,还具有闹铃,报警等功能。商家生产的电子万年历更从质量,价格,实用上考虑,不断的改进电子万年历的设计,使其更加的具有市场。 本设计为软件,硬件相结合的一组设计。在软件设计过程中,应对硬件部分有相关了解,这样有助于对设计题目的更深了解,有助于软件设计。基本的要了解一些主要器件的基本功能和作用。 除了采用集成化的时钟芯片外,还有采用MCU的方案,利用AT89系列单片微机制成万年历电路,采用软件和硬件结合的方法,控制LED数码管输出,分别用来显示年、月、日、时、分、秒,其最大特点是:硬件电路简单,安装方便易于实现,软件设计独特,可靠。AT89C51是由ATMEL 公司推出的一种小型单片机。95年出现在中国市场。其主要特点为采用Flash存贮器技术,降低了制造成本,其软件、硬件与MCS-51完全兼容,可以很快被中国广大用户接受。 本文介绍了基于AT89C51单片机设计的电子万年历。 首先我们在绪论中简单介绍了单片机的发展与其在中低端领域中的优

以DS1302实时时钟芯片及液晶显示屏CD1602为基础设计的电子钟

电子系统设计实验报告 实验目的: 1、能够以DS1302实时时钟芯片和液晶显示屏CD1602为基础设计一款电子钟 2、熟悉DS1302芯片的工作过程 3、熟悉CD1602芯片的工作过程 4、可以进行必要的扩展,如用第三DS18B20新品进行温度采集和显示 5、熟悉掌握51的c程序的编写 6、掌握用Proteus进行系统设计仿真验证 实验仪器、仪表目录 1、DS1302实时时钟芯片1片 2、LCD1602液晶显示屏1个, 3、80C52芯片1片 5、DS18B20芯片一片 6、晶振、电容、电阻、开关各若干等 7、proteus仿真软件 8、Keil C51、PC机 实验设计任务 以DS1302实时时钟芯片和液晶显示屏LCD1602为基础设计一个电子钟,要求:时间和日期可调整,按键采用3个按键;至少在Proteus上调试通过。扩展:闹钟和重要日期提醒功能(增加蜂鸣器),闹铃音乐功能 实验步骤 1、打开Keil软件,新建一个工程文件,选择好芯片,并记得在“Options for Target 1”的Output 选项中,将Create HEX Fil选项勾起来。 2、将编写的程序保存成“.C”的形式 3、编译保存好的C文件,并根据提示修改程序中的错误,直到编译成功为止 4、打开proteus软件,画出实验电路图 5、在89C52中,载入原来已生成的HEX文档

6、按下运行键,对Proteus进行软件仿真,观察运行结果 原理、结果及分析 一、设计方案原理与设计特点分析 电子钟总的设计模块: 各个模块电路原理分析: 1、DS1302时钟采集模块: 1.1电路原理图: 1.2 DS1302分析: 首先DS1302是DALLAS公司推出的涓流充电时钟芯片。内含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作。 DS1302芯片广脚介绍:X1、X2为32.768KHz晶振管脚。GND 为地。RST复位脚。I/O 数据输入/输出引脚。SCLK串行时钟。Vcc1,Vcc2电源供电管脚。与单片机连接的信号线为:DS1302_SCLK 接P1^6; 实时时钟时钟线引脚 DS1302_IO 接P1^7; 实时时钟数据线引脚 DS1302_RST 接P1^5; 实时时钟复位线引脚 特别注意DS1302芯片在读取或写入数据时,都是一位一位传送的,并且每传送一位,SCLK信号线要有一个负跳变。即单片机对SCLK咬先送高电平,再送低电平。数据时通过IO进行传送的。 1.3数据处理子程序流程图

相关文档
相关文档 最新文档