1307芯片做时钟实验程序

合集下载

DS1307中文

DS1307中文

DS130764 X 8 串行实时时钟特点:●可对秒,分,小时,每月的天数,月份,每周的天数进行记数.并具有闰年补偿功能,纪年上限2100.●56字节非失性RAM●两线串行接口●可编程方波输出●自动掉电检测和切换电路●在电池备份模式下,功耗小于500nA●工业级的工作温度: -40℃到+80℃●8脚DIP和SOIC封装●UL实验室认证引脚图如下:管脚功能如下:VCC 主电源供电X1,X2 连接32.768 kHz晶振VBAT +3V电池供电GND 地SDA 串行数据SCL 串行时钟SQW/OUT 方波输出简介:DS1307是一款低功耗,具有56字节非失性RAM的全BCD码时钟日历实时时钟芯片.地址和数据通过两线双向的串行总线传输.芯片可提供秒,分,小时,天数,日期,月份,年份等信息.每一个月的天数能自动调整,并具有闰年补偿功能. AM/PM 标志位决定时钟工作于24小时或12小时模式.芯片有一个内置的电源感应电路,具有掉电检测和电池切换功能.操作:DS1307工作于从设备状态.跟随在”启动条件”之后,主设备提供一从设备寻址字节和要存取的寄存器地址,寄存器就可以被连续地存取直到”停止条件”到来.当VCC 低于1.25 x VBAT时,芯片就会中止目前的存取并复位设备地址计数器.这时,向芯片发出的任何信号将被拒绝,以免发生存取错误.当VCC低于VBAT时,芯片就会切换到电池备份模式.当VCC恢复到大于V BAT +0.2V时,芯片就会由VCC供电.当VCC大于1.25 xVBAT时,存取就可以正常进行.DS1307的结构框图如下:管脚功能描述:●V CC, GND –直流电源供电管脚.当VCC由+5V正常供电时,芯片可以被正常的存取.当VCC低于1.25 x V BAT并且3V电池已连到芯片时,读写被禁止.但时钟保持功能不受影响.当VCC低于V BAT时,RAM和时钟保持器就切换到3V电池供电.●V BAT –3V锂电池或其他电源供电输入.电池电压必须保持在2.0—3.5V之间以确保正确的操作.一个48 mAhr的锂电池可以在主电源不供电的情况下使DS1307保持数据在10年以上.●SCL (Serial Clock Input) –用来同步数据●SDA (Serial Data Input/Output) –输入输出数据.需外接上拉电阻.●SQW/OUT (Square Wave/ Output Driver) –当SQWE位设为1时,管脚输出可供选择的频率方波(1 Hz, 4 kHz, 8 kHz, 32 kHz).需外接上拉电阻.●X1, X2 –接标准32.768 kHz石英晶振.RTC和RAM地址图表:如下图所示.如上图,RTC寄存器地址从00H到07H,RAM地址从08H到3FH.在多字节存取时,当地址指针指向3FH时,芯片会自动把地址指针回复到00H.时钟和日历:通过读取相应的寄存器字节,可以获取时钟和日历信息.RTC寄存器如下图所示:时间和日历信息以BCD码形式存放.寄存器0的bit7为时钟停止位,当设为1时,振荡器停止工作.请注意在DS1307初次上电时,所有的寄存器的状态是不确定的,所以一定要把寄存器0的bit7在初始化时设为0.芯片可以工作于24小时模式或12小时模式.这取决于小时寄存器的bit6为1还是0.置为1时,工作于12小时模式,这时小时寄存器的bit5为AM/PM标志.bit5为1,则为PM. 在24小时模式中, 小时寄存器的bit5和bit4一起组成小时的十位.控制寄存器:控制寄存器07H用来控制方波输出.●OUT (输出控制):当方波输出禁止时,此位决定SQW/OUT脚输出电平的高低,为1则输出高电平,为0则输出低电平.●SQWE(方波输出使能):当此位为1时,允许输出方波.频率则由RS1和RS0位的值决定.●RS(频率选择):控制输出方波的频率当SQWE为1时.下表列出了可供选择的频率:具体的I2C总线操作由于资料比较多,在此就没有翻译.。

实时时钟实验总结

实时时钟实验总结

实时时钟实验总结一、实验目的本实验的主要目的是了解实时时钟的原理及其应用,掌握实时时钟的使用方法,以及通过实验学习如何编写驱动程序。

二、实验原理1. 实时时钟是一种能够提供时间和日期信息的芯片,它通常由一个晶体振荡器和一组计数器组成。

2. 实时时钟可以通过I2C总线与处理器进行通信,读取或设置时间和日期信息。

3. 实现实时时钟需要编写相应的驱动程序,并将其与操作系统进行集成。

三、实验设备与材料1. 实验板:STM32F407ZET6开发板;2. 模块:DS1307实时时钟模块;3. 软件:Keil uVision5开发环境。

四、实验内容1. 硬件连接:将DS1307模块与STM32F407ZET6开发板连接,包括SDA、SCL、VCC和GND等引脚。

2. 编写驱动程序:根据DS1307模块手册编写相应的驱动程序,并将其集成到操作系统中。

3. 测试程序:编写测试程序,通过读取DS1307模块返回的时间和日期信息来验证驱动程序是否正常工作。

五、实验步骤1. 连接硬件:将DS1307模块与STM32F407ZET6开发板连接。

2. 编写驱动程序:根据DS1307模块手册编写相应的驱动程序,并将其集成到操作系统中。

3. 编写测试程序:编写测试程序,通过读取DS1307模块返回的时间和日期信息来验证驱动程序是否正常工作。

4. 下载程序:使用Keil uVision5开发环境将编写好的程序下载到STM32F407ZET6开发板上。

5. 运行测试:启动STM32F407ZET6开发板,通过串口助手等工具查看DS1307模块返回的时间和日期信息,验证驱动程序是否正常工作。

六、实验结果经过测试,实时时钟模块能够正确返回当前时间和日期信息,并且能够根据需要进行设置和调整。

七、实验总结本次实验通过对实时时钟原理的学习以及编写驱动程序和测试程序的练习,加深了对嵌入式系统中硬件与软件协同工作的理解。

同时也掌握了一些基本的嵌入式系统开发技能,如硬件连接、驱动编写、调试等。

DS1307中文说明(含程序)

DS1307中文说明(含程序)

DS1307 时钟芯片中文资料及程序§1:实时时钟 DS1307 简介DS1307 是低功耗、IIC 接口、日历和时钟数据,按 BCD 码存取的时钟/日历芯片。

它提供秒、分、小时、星期、日期、月和年等时钟日历数据。

§2:引脚与接线DS1307 典型接线如图 1 所示。

BT1 为备用电池,3V,7 脚为方波输出,通常把该脚接到单片机的能够产生电平变化中断的引脚,如设置成每秒输出1个方波,则会每秒中断一次,读取时间用以显示。

图1中的R1、R2、R4是必须的上拉电阻。

图 1 DS1307典型接线图§3:DS1307 RAMDS1307 寄存器统一编址,其中的时间相关的和寄器数据组织格式如表 1。

表1时间相关的寄存器说明注:存放时的单元02的位6为12/24小时设置位,1为12时制,0为24时制。

位5为上午/下午(AM/PM)指示位,0为上午(AM),1为下午(PM),在24时制中,该位为10倍时位。

在读写过程中DS1307内部有一个地址指针,通过写操作可对它赋值,读和写每一字节时自动加一,当指针越过DS1307内部RAM尾时指针将返回到0地址处。

DS1307 的时钟和日历数据按 BCD 码存储。

§4:方波信号输出功能方波信号输出功能从SQW/OUT引脚输出设置频率的方波,CONTROL寄存器用于控制SQW/OUT脚的输出,其地址为07,每位的内容如表2。

表2CONTROL寄存器位BIT7(OUT):此位表示在方波输出被禁止时(BIT4=0),SQW/OUT 引脚的逻辑电平,在BIT4=0(SQWE=0方波输出禁止)时,若BIT7(OUT)为1则SQL/OUT引脚为高电平,反之亦然。

BIT4(SQWE)方波输出允许/禁止控制位,SQWE =1 允许方波输出(有效);BIT4=0禁止方波输出。

BIT0(RS0)、BIT1(RS1)于设定输出波形的频率,如表 3。

表 3 CONTROL寄存器说明由于DS1307的方波输出脚为集电极开路,故要在外部加上上拉电阻!要注意的是,00h地址的第7位为器件时钟允许位(CH),此位为1则芯片未开始工作,即时钟未走时,所以在上电时单片机要先读出秒,并判断位7(CH)是否为1,如为 1 要把该位清零写入秒寄存器(地址为 0),并把其他的时间单元设定为默认值。

一种电子数显时钟的制作方法

一种电子数显时钟的制作方法

一种电子数显时钟的制作方法简介电子数显时钟是使用数字和电子元件来显示时间的一种普遍存在的时钟。

制作一般的电子数显时钟通常需要一些基本的电子技能。

本文将介绍一种较为简单的电子数显时钟制作方法,不需要太高的技能门槛,也可以用于初学者进行制作。

所需工具和材料•数码钟芯片:常见的数码芯片有DS1302、DS1307等型号,本文中将采用DS1302芯片;•LED数码管:一般需要4位和7段LED数码管,也可以根据需要选择更多的位数;•电子元器件:–电容:22pF * 2、100nF * 1、10uF * 1;–电阻:1kΩ * 2、10kΩ * 1、4.7kΩ * 1;–钽电容:2.2uF * 1;–晶体管:2N3904 * 1、2N3906 * 1;–二极管:1N4007 * 1;•面包板、电源线等基本工具材料。

程序设计本文中的程序采用C语言,可以在芯片中下载和存储。

下面给出基本的程序框图和说明。

#include <DS1302.h> // 导入DS1302芯片的库// 数码管引脚定义#define DS 11#define ST 10#define SH 9#define A 2#define B 3#define C 4#define D 5#define E 6#define F 7#define G 8int year, month, day, week, hour, minute, second; //定义年、月、日、星期、小时、分钟、秒void setup() {// 数码管引脚定义为输出pinMode(DS, OUTPUT);pinMode(ST, OUTPUT);pinMode(SH, OUTPUT);pinMode(A, OUTPUT);pinMode(B, OUTPUT);pinMode(C, OUTPUT);pinMode(D, OUTPUT);pinMode(E, OUTPUT);pinMode(F, OUTPUT);pinMode(G, OUTPUT);// 初始化DS1302芯片DS1302_init();// 设置初始时间DS1302_set_time(20, 6, 21, 3, 11, 59, 45); // 年、月、日、星期、小时、分钟、秒}void loop() {// 获取当前时间year = DS1302_get_year();month = DS1302_get_month();day = DS1302_get_day();week = DS1302_get_week();hour = DS1302_get_hour();minute = DS1302_get_minute();second = DS1302_get_second();// 将显示时间转换为BCD码int y0 = year % 10;int y1 = year / 10;int m0 = month % 10;int m1 = month / 10;int d0 = day % 10;int d1 = day / 10;int h0 = hour % 10;int h1 = hour / 10;int mi0 = minute % 10;int mi1 = minute / 10;int s0 = second % 10;int s1 = second / 10;// 显示年份digitalWrite(DS, LOW);shiftOut(SH, ST, MSBFIRST, B00111111); // 关闭所有数码管digitalWrite(DS, HIGH);digitalWrite(DS, LOW);shiftOut(SH, ST, MSBFIRST, B00000100); // 选择第一位数码管digitalWrite(DS, HIGH);digitalWrite(DS, LOW);shiftOut(SH, ST, MSBFIRST, y1 == 0 ? B00000000 : dig it[y1]); // 如果高位为0,则不显示digitalWrite(DS, HIGH);digitalWrite(DS, LOW);shiftOut(SH, ST, MSBFIRST, digit[y0]); // 显示低位 digitalWrite(DS, HIGH);// 显示月份...// 显示日、星期...// 显示小时...// 显示分钟...// 显示秒...}程序的具体实现可根据需要进行调节。

毕业设计论文_单片机电子时钟的设计

毕业设计论文_单片机电子时钟的设计

毕业设计论文_单片机电子时钟的设计摘要:电子时钟作为一种常见的时间显示装置,在现代社会中应用广泛。

本文设计了一款基于单片机的电子时钟,使用DS1307实时时钟芯片来获取系统时间,并通过数码管进行显示。

设计过程中,通过对单片机的编程和电路的连接,实现了时间的显示与调节功能,具有较高的准确性和稳定性。

该设计方案简单、实用,可用于各种场合。

关键词:单片机;电子时钟;DS1307;数码管1.引言电子时钟是一种利用电子技术构造的显示时间的装置,具有时间准确、使用简单、显示清晰等特点,广泛应用于生活和工作中。

本文以单片机为核心,设计了一款实时准确的电子时钟,提高了时间的准确度和稳定性。

2.设计原理该设计的核心是通过单片机与DS1307实时时钟芯片的连接,使得单片机可以获取到准确的系统时间,并通过数码管进行显示。

DS1307芯片通过I2C总线与单片机连接,通过读取芯片中的时间寄存器,单片机可以获得当前的时间信息。

3.硬件设计本设计中使用了AT89S52单片机作为主控芯片,通过引脚与DS1307芯片相连。

单片机的P0口接到数码管的段选信号,P1口接到数码管的位选信号,通过控制这两个口的输出状态,可实现对数码管上显示的数字进行控制。

同时,为了使时钟可以正常运行,需外接一个晶振电路为单片机提供时钟信号。

4.软件设计通过对单片机的编程,实现了以下功能:(1)初始化DS1307芯片,设置初始时间;(2)每隔一秒读取一次DS1307芯片的时间寄存器,将时间信息保存到单片机的RAM中;(3)根据当前时间信息,在数码管上显示对应的小时和分钟。

5.调试与测试经过硬件的连接以及软件的编写,进行了调试与测试。

将初始时间设置为08:30,观察数码管上的显示是否正确,以及时间是否准确。

同时,通过手动调节DS1307芯片中的时间,检查单片机是否能正确获取时间,并进行显示。

6.总结与展望本文设计了一款基于单片机的电子时钟,通过单片机与DS1307芯片的连接和编程,实现了准确的时间显示功能。

毕业设计--单片机自动打铃系统论文

毕业设计--单片机自动打铃系统论文

摘要在现如今快节奏的生活中,人们对于时间的要求越来越苛刻,很多时候都需要对时间进行规划,然后到时间点就要有时间提醒,这就必须用到时钟提醒装置,亦可称为打铃装置。

打铃装置有很多种,比如手机的打铃系统,闹钟的机械打铃装置,广播打铃系统等等,但是日常生活中见得最多的还是校园的自动打铃系统。

在学校生活中,每天上下课都离不开打铃系统的使用。

打铃器可以为上下课的学生和老师们提供时间提醒,有利于师生对上课和学习的合理安排,同时,也可作为一个提醒学生们作息时间的时间表,让老师和学生都能有一个规律和科学的时间安排。

因此,打铃系统的核心部分也是时钟部分,为系统提供时间基准。

本设计主要是针对适用于校园打铃系统要求的,其介绍了一种基于单片机的自动打铃系统的设计方法,系统以AT89S51单片机为控制器,以DS1307时钟芯片为系统提供时间,并在液晶显示器上显示,通过按键可以设定定时打铃时间和打铃的时间间隔。

系统软件设计采用C语言来完成,C语言语法简洁,使用方便,用于完成软件设计非常方便。

本文提出的设计方法电路简单、成本低廉、实用性强。

关键字:打铃器、AT89S51单片机、DS1307、液晶显示器AbstractNow fast-paced life, the time more and more demanding, often need time to plan and then to the point in time there should be reminded, which must be used to clock reminder can also be calledrang the bell device. Rang the bell device are many, such as the phone rang the bell system, mechanical bell device of the alarm clock, radio bell systems, etc., but in daily life appear or campus automatic bell system. In school life, the last class of the day are inseparable from the bell system. The bell can provide time for the last class of students and teachers to remind conducive to a reasonable arrangement of the teachers and students to school and learning, but also as a reminder of the schedule of the students schedule, so that teachers and students cana law and scientific timing. Therefore, the core part is the clock part of the bell system, the system provides a time reference.This design is mainly for the applicable requirements of the campus bell system, introduced a microcontroller-based automatic bell system design method, the system controller is AT89S51 SCM , the DS1307 clock chip provide the system with time, and the LCD displayed on the monitor button can set the time interval of the timer rang the bell time and rang the bell. System software design using C language, C language syntax is simple, easy to use, very convenient to be used to complete the software design. This paper presents the design circuit is simple, low cost, and practical.Key words: Rang the bell AT89S51 SCM the DS1307 LCD monitors目录摘要 (I)Abstract (II)1 绪论 (1)1.1 选题目的及意义 (1)1.2 技术发展概况 (1)1.3 论文内容与结构 (3)2 方案设计 (4)2.1 方案比较与选择 (4)2.1.1 系统方案选择 (4)2.1.2 时钟芯片选择 (4)2.1.3 显示器件选择 (5)2.2 设计方案 (5)3 系统硬件设计 (7)3.1 硬件电路图 (7)3.2 时钟电路 (7)3.2.1 DS1307简介 (7)3.2.2 时钟电路设计 (8)3.3 按键电路 (8)3.4 单片机电路 (9)3.4.1 单片机简介 (9)3.4.2 单片机最小系统电路 (13)3.5 显示电路 (14)3.6 打铃电路 (15)4 系统软件设计 (17)4.1 软件设计流程图 (17)4.2 读取DS1307时间程序设计 (18)4.3 显示程序设计 (19)4.4 按键设定程序设计 (22)5 系统调试 (23)5.1 元件清单 (23)5.2 调试过程 (23)6 总结与展望 (26)致谢 (27)参考文献 (28)附录 (29)附录一:电路图 (29)附录二:源程序 (30)1 绪论1.1 选题目的及意义随着现代科技的发展,管理水平的完善,具有自动提示功能的打铃器能够为企业节省人力资源,减少开支,对做到一体化管理具有很大的帮助。

HYM1307 带 56 字节 RAM 的 I2C 串行实时时钟芯片说明书

HYM1307 带 56 字节 RAM 的 I2C 串行实时时钟芯片说明书

HYM1307HYM1307带56字节RAM 的I 2C 串行实时时钟芯片特点■基于32.768kHz 的石英晶体,可对秒,分,时,日,月,周以及带闰年补偿的年进行计数■带备用电池的56字节非易失性RAM ■I 2C 串行总线接口■可编程方波输出■自动掉电检测及电源切换电路■电池供电下,振荡器工作时的消耗小于500nA ■可选的工业温度范围:-40℃至+85℃■封装形式:DIP8和SOP8应用■、IC 卡水表、IC 卡煤气表■移动电话■便携仪器■传真机■电池电源产品■电视机概述HYM1307是一款低功耗、带56个字节用户非易失性SRAM (NV SRAM )、全BCD 码的时钟/日历电路。

地址和数据通过串行I 2C 总线传递。

时钟/日历提供秒、分、小时、周、日、月和年信息。

对小于31天的月,月末的日期自动进行调整,还具有闰年校正的功能。

时钟可以工作在24小时格式或带AM/PM 标志的12小时格式。

HYM1307有一个内置的电压判断电路,具有检测电源掉电功能,在电源掉电时,可自动切换到由备用电源(电池)供电。

定购信息型号工作温度范围封装类型HYM1307DIP8HYM1307Z 0℃~70℃SOP8HYM1307N DIP8HYM1307ZN-40℃~+85℃SOP8付费率电度表方框图和管脚功能方框图图1内部方框图管脚图DIP8SOP8管脚说明序号符号描述1X132.768kHz晶体引脚2X232.768kHz晶体引脚3V BAT+3V电池输入4GND地5SDA串行数据输入/输出。

SDA是I2C串行接口的输入/输出线,此引脚为漏极开路6SCL串行时钟。

SCL是I2C串行接口的时钟线,此引脚为漏极开路7SQW/OUT方波输出驱动脚,此引脚为漏极开路8V CC电源输入引脚绝对最大额定值参数名称额定值单位所有引脚到地的电压-0.5~+7.0V贮存温度-55~+125℃DIP8,10秒260℃焊接温度SOP8,10sec260推荐直流工作条件参数符号最小值典型值最大值单位注释电源电压V CC 4.5 5.0 5.5V逻辑1电压V IH 2.2V CC+0.3V逻辑0电压V IL-0.5+0.8V电池电压V BAT 2.0 3.5V直流电气特性参数符号最小值典型值最大值单位注释输入漏电流(SCL)I LI1µAI/O漏电流(SDA&SQW/OUT)I LO1µA逻辑0输出(I OL=5mA)V OL0.4V电源工作电流I CCA 1.5mA7静态电流I CCS200µA1电池电流(OSC ON);I BAT1300500nA2 SQW/OUT OFF电池电流(OSC ON);I BAT2480800nASQW/OUT ON(32kHz)电源失效电压V PF 1.216×V BAT 1.25×V BAT 1.284×V BAT V8交流电气特性参数符号最小值典型值最大值单位注释SCL时钟频率f SCL0100kHzSTOP条件和START条件t BUF 4.7µs之间总线的空闲时间START条件的保持时间t HDSTA 4.0µs3SCL低周期t LOW 4.7µsSCL高周期t HIGH 4.0µsSTART条件的建立时间t SUSTA 4.7µs数据保持时间t HDDAT0µs4,5数据建立时间t SUDAT250nsSDA和SCL的上升时间t R1000nsSDA和SCL的下降时间t F300nsSTOP条件的建立时间t SUSTO 4.7µs每个总线上的容性负载C B400pF6I/O电容(T A=25℃)C I/O10pF指定晶体负载电容(T A=25℃)12.5pF注:1、V CC,SDA和SCL都为5.0V。

基于DS1307的可调实时时钟系统设计

基于DS1307的可调实时时钟系统设计

基于DS1307的可调实时时钟系统设计
 利用实时时钟芯片DS1307 设计一个能够调节时间的实时时钟。

介绍采用I2C 总线接口实时时钟芯片DS1307 进行准确定时的设计原理,提出实时时钟芯片DS1307 与单片机接口电路的设计方法,同时给出几个典型程序实例,通过Proteus 软件进行仿真实现。

 先来说说实时时钟DS1307的使用!
 DS1307 是一款十分常用的实时时钟芯片,它可以记录年、月、日、时、分、秒等信息,提供至2100年的记录。

可使用电池供电,也就是说,即使Arduino 在断电状态下,时钟芯片仍然是在运行的。

它使用十分常用的两线式串行总线(I2C),只要两根线即可和Arduino 通信。

 接线图:
 电控单元的时钟基准通常可利用CPU 内部定时器作为时钟基准,并通过软件编程和CPU 时钟中断来构造一个软时钟。

这种方法的优点是无需额外硬件支持,但缺点是时钟的计时精度受CPU 主晶振以及与其相连的起振电容的影响而无法做到很高,因此累积误差较大。

同时在主电源掉电时为了维持时钟不停摆,系统必须由备用电源给整个CPU 供电,这将导致功耗增大。

ds1307数字时钟课程设计

ds1307数字时钟课程设计

ds1307数字时钟课程设计一、课程目标知识目标:1. 理解DS1307实时时钟芯片的基本原理和功能;2. 掌握读取和设置DS1307时间参数的方法;3. 学会通过编程实现数字时钟显示的基本技巧。

技能目标:4. 能够正确连接DS1307实时时钟模块与微控制器;5. 能够编写程序读取DS1307时间数据,并在LCD显示屏上显示;6. 能够诊断和解决数字时钟显示中的常见问题。

情感态度价值观目标:7. 培养学生对电子产品的探索精神和实践能力;8. 强化学生合作学习、分享成果的团队意识;9. 激发学生将理论知识应用于实践的兴趣,增强其对科学技术的认识与尊重。

本课程设计针对中学生电子技术课程,结合DS1307数字时钟的制作,旨在通过实践操作,帮助学生掌握基础电子元件的使用和程序编写,同时培养学生的动手能力和创新思维。

课程目标设定符合学生好奇心强、动手欲望高的特点,同时满足学科教学要求,将理论与实践相结合,为学生的后续学习打下坚实基础。

二、教学内容本节教学内容围绕DS1307数字时钟的制作展开,主要包括以下部分:1. 实时时钟芯片DS1307的基础知识:介绍DS1307的内部结构、工作原理及主要性能参数,关联教材第三章第二节。

2. 硬件连接与接口:讲解DS1307与微控制器(如Arduino)的硬件连接方法,包括VCC、GND、I2C接口等,对应教材第三章第三节。

3. I2C通信协议:介绍I2C通信协议的基本原理,以及如何在微控制器上实现I2C通信,关联教材第二章第五节。

4. DS1307时间读取与设置:详细讲解如何通过编程读取和设置DS1307的时间参数,包括时、分、秒、日期等,对应教材第三章第四节。

5. 数字时钟显示编程:教授如何将读取到的DS1307时间数据实时显示在LCD显示屏上,涉及编程技巧及调试方法,关联教材第四章第一节。

6. 故障诊断与排除:介绍在数字时钟制作过程中可能遇到的常见问题及解决方法,强化学生的实际操作能力,对应教材第四章第二节。

基于DS1307的简易时钟显示程序分享

基于DS1307的简易时钟显示程序分享

基于DS1307的简易时钟显示程序分享目前家用的数字电子钟,多数只能显示小时、分钟等信息,功能单一,而且大都采用LED数码管作为显示器件,功耗大,不能令消费者满意。

DS1307简介AM/PM 标志位决定时钟工作于24小时或12小时模式,芯片有一个内置的电源感应电路,具有掉电检测和电池切换功能。

是一款低功耗,具有56字节非失性RAM的全BCD码时钟日历实时时钟芯片,地址和数据通过两线双向的串行总线的传输,芯片可以提供秒,分,小时等信息,每一个月的天数能自动调整。

并且有闰年补偿功能特点:可对秒,时,分,每月的天数,月份,每周的天数进行计数,并具有闰年补偿功能。

计年上限2100。

56字节非失性的RAM两线串行接口可编程方波输出自动掉电检测和切换电路在电池备份模式下,功耗小于500nA工业级的工作温度: -40 到808脚DIP和SOIC封装下面分享一下基于DS1307的简易时钟显示程序给大家:* Coder:NUIST_XKFYT* E-mail:weilun_fong@(Welcome to get help info about this program)* Date:2016-7-17** Device:STC89C54RD,DS1307Z+* FuncTIon:简易时钟显示* Note:* 1.DS1307四位固定地址位为1101,三位可编程地址位为000*/#include 《STC89C5xRC.h》 /* 可更换为《reg52.h》或《AT89x52.h》 */#include 《intrins.h》//#include 《TIme.h》 /* Keil v4中无法调用该标准库函数 */#define uchar unsigned char#define uint unsigned int/* DS1307操作指令 */#define DS1307_WRITE 0xD0#define DS1307_READ 0xD1#define DS1307_DISABLE 0x80#define DS1307_ENABLE 0x7F#define DS1307_12HOUR_MODE 0x20#define DS1307_24HOUR_MODE 0xDF/* DS1307内部寄存器地址 */#define ADDR_SEC 0x00#define ADDR_MIN 0x01#define ADDR_HOUR 0x02#define ADDR_DAY 0x03#define ADDR_DATE 0x04#define ADDR_MONTH 0x05#define ADDR_YEAR 0x06#define ADDR_COR 0x07/* 模块自带AT24C02》》预留接口 *///#define AT24C02_WRITE 0xA0//#define AT24C02_READ 0xA1sbit I2C_SCL = P1^0;sbit I2C_SDA = P1^1;uchar min = 0;uchar sec = 0;uchar code tab[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};/* 重新自定义《TIme.h》中的tm结构体 */struct tm{uchar tm_sec; /* 秒–取值区间为[0,59] */uchar tm_min; /* 分 - 取值区间为[0,59] */uchar tm_hour; /* 时 - 取值区间为[0,23] */uchar tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */uchar tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[1,12] */ uchar tm_year; /* 年份 */uchar tm_wday; /* 星期–取值区间为[1,7] */};/* delay 5us */void delay_5us(void){_nop_();}/* delay par*1ms */void delay_ms(uint par){uchar cnt = 0;while(par--)for(cnt = 120;cnt 》 0;cnt--);}void I2C_Start(void){I2C_SDA = 1;I2C_SCL = 1;delay_5us(); /* 实际延时4.7us即可 */I2C_SDA = 0; /* SCL为高电平时,SDA为下降沿表示起始信号 */delay_5us();}void I2C_Stop(void){I2C_SDA = 0;I2C_SCL = 1;delay_5us();I2C_SDA = 1; /* SCL为高电平时,SDA为上升沿表示结束信号 */delay_5us();}void I2C_Ack(void){uchar cnt = 0;I2C_SCL = 0; /* 在SCL为高电平期间等待应答 */delay_5us();while((I2C_SDA == 1)&&(cnt 《 250)) /* 若为应答0即退出,从机向主机发送应答信号 */cnt++; /* 等待一段时间 */I2C_SCL = 0;delay_5us();}void I2C_noAck(void){I2C_SCL = 1; /* 在scl为高电平期间,由主机向从机发送一个1,非应答信号 */ delay_5us();I2C_SDA = 1;I2C_SCL = 0;delay_5us();}void I2C_sendByte(uchar dat){uchar cnt = 0;uchar dat_buf = 0;dat_buf = dat;for(cnt = 0;cnt 《 8;cnt++){dat_b技术专区•ds12887工作原理及应用设计•绝对干货!PLL芯片接口常见的11个问题以及应对方法•选择PLL频率合成器时,你必须考虑的键性能参数解说•高速串行总线的信号完整性验证•解决串行接口中的信号完整性问题-全文完-。

数字钟电路的设计与制作

数字钟电路的设计与制作

数字钟电路的设计与制作数字钟电路是一种常见的电子设计,它可以非常简单地显示出当前的时间,这种钟可以用在家庭和商业中,也可以放在公共场所和办公室中。

数字钟电路的设计和制作需要一定的电子知识和技术,下面将详细介绍数字钟电路的设计和制作过程。

数字钟电路的设计需要考虑多个方面,包括时钟芯片、显示屏、电源和按键等。

首先是时钟芯片的选择,这个芯片的作用是提供精确的时间数据,数字钟电路使用的最常见的时钟芯片是DS1307。

DS1307是一个非常好用的实时时钟芯片,它通过I2C接口和单片机通信,可以提供年、月、日、时、分、秒和星期等信息。

在使用DS1307芯片时需要注意时钟芯片的连接,要保证它的供电和通信正确连接,这可以通过查看数据手册来设置。

其次是显示屏的选择,数字钟电路通常使用7段数码管来显示时间信息,这种显示屏可以显示数字、字母和符号。

选择显示屏时需要考虑它的亮度、大小和功耗等因素,在选择的时候应该评估这些因素以确保选择了合适的显示屏。

电源是数字钟电路不可缺少的组成部分,数字钟电路通常使用直流电源供电,供电电压通常在3V到5V之间。

数字钟电路的功耗很低,只需要很少的电能,所以可以选择很小的电源,例如小型锂电池、太阳能电池等。

最后是按键,数字钟电路通常需要设置按键来调整时间和日期等参数,因此需要选择合适的按键来保证操作的方便和舒适。

数字钟电路的制作需要打印电路板、焊接元件和编程单片机等步骤。

首先是打印电路板,电路板是数字钟电路的核心部分,需要按照设计图纸打印出所需的电路板。

打印电路板的过程需要注意先清洗电路板,然后使用特殊的UV光照射设备将设计图纸转移到电路板上面。

其次是焊接元件,数字钟电路需要焊接多个元件,包括时钟芯片、显示屏、按键和电容等。

焊接之前需要将元件按照设计图纸的要求放置电路板上面,并使用焊锡将元件固定在电路板上面。

最后是单片机编程,数字钟电路使用单片机来控制时钟芯片、处理输入信息和显示时间等功能。

基于DS1307的多功能时钟系统

基于DS1307的多功能时钟系统

基于DS1307的多功能时钟系统赵亮(大连理工大学电信学院116023)摘要:以AT89S52单片机为控制核心,通过实时时钟芯片DS1307和数字温度传感器DS18B20构成了一个多功能的数字时钟系统。

详细介绍了整个系统的硬件组成结构、工作原理和系统的软件程序设计。

系统采用液晶LCD1602作为显示器,具有实时时间与日历显示、环境温度显示、按键调时、闹铃定时等功能。

软件程序采用均采用C语言编写,便于移植与升级。

关键词:实时时钟日历单片机DS1307 DS18B20 LCD16020 引言目前家用的数字电子钟,多数只能显示小时、分钟等信息,功能单一,而且大都采用LED数码管作为显示器件,功耗大,不能令消费者满意。

为此,笔者开发了一款多功的数字式电子钟,它可以显示年、月、日、小时、分钟等时间信息,同时可以显示环境的温度信息。

还具有按键调时、设定闹铃等功能。

时钟采用LCD作为显示器,界面友好,功耗低。

1 系统的硬件构成系统以AT89S52单片机作为核心控制器件,外围主要有实时时钟芯片DS1307、温度传感器DS18B20等,均为串行通信器件,使得系统线路简单可靠性高。

系统结构框图1所示。

图1 系统结构框图1.1单片机主控模块系统采用AT89S52单片机作为控制核心。

AT89S52单片机与MCS_51系列单片机产品兼容,采用了Flash存储器结构,可以在线下载程序,易于日后的升级。

它主要负责各个模块的初始化工作;设置定时器、寄存器的初值;读取并处理时间、温度等信息;处理按键响应;控制液晶实时显示等。

硬件电路连接如图2所示。

系统采用12M晶振;P0_Up为P0口上拉电阻,P0口为单片机与液晶显示器通信的数据端口;C_reset和R_reset组成系统上电复位电路;P1.0~P1.2为液晶显示器的控制信号端口;P1.3和P1.4为单片机与时钟芯片DS1307通信的端口; P1.5为闹铃的控制端口;P1.6为单片机与温度传感器DS18B20的通信端口;P2.4~P2.7为按键模块的接口。

基于DS1307的可调实时时钟系统设计

基于DS1307的可调实时时钟系统设计

21 . DS 3 7与 A 9 1的 接 口 10 T8 C5 为 了 使 A 8C 1 片 机 能 够 驱 动 D 10 T9 5 单 S 3 7芯 片 . 本 文 采 用 了 I 总 线 虚 拟 技 术 .将 单 片 机 P . 和 ℃ 26口
收 稿 日期 : 0 0 8 0 2 1 —0 — 3 修 稿 日 期 :0 0 8 5 2 1 —0 —2
示。
使 用带有 I 2 C总线接 口的高档单 片机在经 济上是 不合
算 的 . 这 种 情 况 下 . 以采 用 I 在 可 2 C总 线 虚 拟 技 术 【. l 选 J
口也 较 少 f 6 2 晶 的接 口 电路 如 图 2所 2 0液 1 1
用 普 遍 使 用 的 5 单 片机 .利 用 单 片 机 的 通 用 I 1 / O端 E l
基于 D 0 S 7的可调 实 时时钟 系统设计 1 3
陈华珍‘ . 夏 国清
( 州 大 学 华 软 软 件 学 院 电 子 系 , 州 50 9 ) 广 广 19 0
摘 要 :利 用 实时 时 钟 芯 片 DS 3 7设 计 一 个 能 够 调 节 时 间 的 实时 时 钟 。介 绍 采 用 P 总线 接 口实 10 C
阻 。此外 . 照 D uAS公 司推荐 的硬件接法 . 按 A 往往 需 要精度很 高的晶体 . 为了提高其可靠性并节约成本 . 可
将 D 10 S 37的 X 2引脚 添 加 上 拉 电阻 。从 而 可 以 克服 使
用 普 通 晶 振 时 D 10 S 3 7不 起 振 的 问 题 . 进 而 保 证 了 D 10 S 3 7的起 振 日历 时 钟 芯 片 D 1 0 S 3 7与 A 8 C 1的 T95

I2C类 DS1307芯片做时钟实验程序

I2C类 DS1307芯片做时钟实验程序

实时时钟实验系列:I2C类DS1307芯片做时钟实验程序实验目的DS1307是DALLAS公司的一款时钟/日历芯片,采用I2C协议与单片机通讯,是单片机制作时钟/日历的常用芯片。

DS1307为8脚封装的芯片,只需外接一个32.768KHz的晶振即可工作。

本实验将时间信息通过串口显示在PC机上。

关键词:DS1307芯片,时钟程序,实时时钟程序,RTC难度等级:高级DS1307简介DS1307串行实时时钟(RTC)是一款低功耗,全BCD码,带56字节非易失SRAM 的时钟/日历芯片。

地址与数据经I2C双向总线串行传输。

该时钟/日历芯片提供秒、分、时、星期、日、月和年等信息,并能自动调整少于31天包括闰年月份的最后一天。

时钟可以工作在24小时模式或是12小时带AM/PM模式。

DS1307内部嵌入电源传感电路,可探测电源故障并自动转用备用电池供电。

在备用电池供电情况下计时功能继续工作。

DS1307与单片机接线图DS1307内部寄存器地址分频图DS1307时间/日历数据寄存器位图硬件搭建本实验硬件非常简单,DS1307外接一个32.768KHz的晶振即可。

相应SDA管脚SCL管脚用条线连Atmega48单片机的端口PORTD.7和PORTD.6。

通过串口将单片机与PC机连接,用BASCOM自带模拟终端显示时间。

程序代码Dim I As Byte Weekday = 6 Time$ = "23:59:50" Date$ = "09-02-28" DoI = Weekday - 1Strweekday = Lookupstr(i , Weekdays) Print "日期:" ; Date$ ; " " ; Strweekday ; " 时间:" ; Time$ Wait 1 Loop EndGetdatetime: I2cstartI2cwbyte Ds1307w I2cwbyte 0 I2cstartI2cwbyte Ds1307r I2crbyte _sec , Ack I2crbyte _min , Ack I2crbyte _hour , Ack I2crbyte Weekday , Ack I2crbyte _day , Ack I2crbyte _month , Ack I2crbyte _year , Nack I2cstop_sec = Makedec(_sec) _min = Makedec(_min) _hour = Makedec(_hour) _day = Makedec(_day) _month = Makedec(_month) _year = Makedec(_year) Return Setdate:_day = Makebcd(_day) _month = Makebcd(_month) _year = Makebcd(_year) I2cstartI2cwbyte Ds1307w I2cwbyte 3 I2cwbyte Weekday I2cwbyte _day I2cwbyte _month I2cwbyte _year I2cstop'' 初始化星期变量' 初始化Time$变量将调用SetTime 子程 ' 初始化Date$变量将调用SetDate 子程 ' ' ' '' ' ' '' 启动开始 ' 发写地址 ' 1307地址0 ' 启动开始 ' 发送读地址 ' 秒 ' 分 ' 时 ' 星期 ' 日期 ' 月份 ' 年 '' BCD 转十进制 ' ' ' ' ' ' '' 十进制转BCD ' '' 启动开始 ' 发送写地址' 从DS1307地址4开始写 ' 星期 ' 日期 ' 月份 ' 年 'Return Settime:_sec = Makebcd(_sec) _min = Makebcd(_min) _hour = Makebcd(_hour) I2cstartI2cwbyte Ds1307w I2cwbyte 0 I2cwbyte _sec I2cwbyte _min I2cwbyte _hour I2cstop Return Weekdays:Data "星期一" , "星期二" , "星期三" , "星期四" Data "星期五" , "星期六" , "星期日"' '' 十进制转BCD ' '' 启动开始 ' 发送写地址' 从DS1307地址0开始写 ' 秒 ' 分 ' 时 ' ' ' ' '程序讲解程序通过I2C 协议与时钟芯片DS1307通讯获取时间数据。

H1307时钟电路

H1307时钟电路

方框图
H1307
56 字节 RAM、低功耗
管脚说明
绝对最大额定值 推荐直流工作条件

直流电气特性
H1307
56 字节 RAM、低功耗
注:1、VCC,SDA 和SCL 都为5.0V。 2、VCC=0V,VBAT=3V。 3、该周期之后,将产生第一个时钟脉冲。 4、器件内部必须提供一个至少300ns 的SDA 信号保持时间(参考SCL 信号的VIHMIN), 以跳过SCL 下降边沿的未定 义区域。 5、最大thddat 只适用于器件SCL 信号的LOW 周期(tlow)没有变宽的情况。 6、CB— 一个总线上的电容总和(pF)。 7、ICCA— SCL 为最大频率,即100kHz。 8、VBAT=3.0V 时的 VPF。

H1307
56 字节 RAM、低功耗
和RS1 位的值来决定,当方波输出设为1Hz,时钟寄存器在方波的下降沿进行更新。
方波示意图
RS1
Байду номын сангаасRS2
0
0
0
1
1
0
1
1
SQW 1Hz 4.086kHz 8.192kHz 32.768kHz
两线串行数据总线 I2C 总线接口
H1307 支持I2C 总线传递协议。发送数据到总线上的器件为传送器,接收数据的器件 为接收器。控制信息的器件为主器件,受控制的器件为从器件,主器件控制总线,产生串行 时钟,控制总线通道,并产生START 和STOP 条件。H1307 在I2C 总线上是作为一个从 器件工作的。典型的I2C 总线协议配置
H1307
56 字节 RAM、低功耗
时钟和日历 通过读取正确的寄存器字节可获得时间和日历的信息。RTC 寄存器图解如图3 所示,

基于51单片机的LCD万年历

基于51单片机的LCD万年历

●功能描述:本设计完成基于DS1307作为时钟芯片,以HD44780为控制器的LCD万年历显示。

●原理概述:如图一,时钟信号由DS1307模块串行发送到单片机,单片机处理后,将内容通过并行通讯发送到LCD液晶DDRAM 上显示,此过程一直在主函数中循环,从而实现了将“年”、“月”、“日”、“时”、“分”、“秒”在液晶上显示的功能。

●端口说明单片机的P0作为LCD的并行通讯数据端口、P3口的P3.5、P3.6、P3.7作为LCD的控制端口,来控制LCD显示模式、功能以及内容;P1.2、P1.3作为DS1307的串行通讯的数据端以及时钟端,来获取时钟信息到单片机。

●效果显示●图一(电路总图及万年历仿真结果)图二(DS1307时钟电路仿真结果)图三(LCD液晶电路仿真结果)●图四(DS1307与液晶显示数据仿真结果)●程序清单●(一)init.h和init.c/*********************************Copyright (c)***********************************--------------------------File Info------------------------------** File Name: init.h** Last modified Date: 2014-12-27** Last Version: 2.1** Description: 总初始化函数,引入所有头文件,定义特殊脚****-----------------------------------------------------------------** Created By: lvan** Created date: 2014-11-11** Version: 1.0** Descriptions: The original version 初始版本********************************************************************************/ #ifndef INIT_H#define INIT_H/*--------------------------------------------------包含系统头文件---------------------------------------------------*/#include<reg52.h>#include <stdio.h>#include<intrins.h>#include<string.h>#include<stdio.h>/*--------------------------------------------------宏定义---------------------------------------------------*/#define uchar unsigned char#define uint unsigned int#define ulong unsigned long#define fosc 11059200 // 晶振为11.0592MHZ/*--------------------------------------------------包含自定义头文件---------------------------------------------------*/#include"lcd12864.h"#include"delay.h"//#include"table.c"//#include"da.h"//#include"MAX197.h"//#include"zlg.h"#include"ds1307.h"/*--------------------------------------------------定义特殊脚---------------------------------------------------*/sbit BELL=P1^4; //蜂鸣器/*--------------------------------------------------蜂鸣器函数---------------------------------------------------*/extern void didifast(uint i);extern void didislow(uint i);#endif/*********************************Copyright (c)***********************************--------------------------File Info------------------------------** File Name: init.c** Last modified Date: 2014-12-27** Last Version: 2.1** Description: 定义调试过程中用到的蜂鸣器标志****-----------------------------------------------------------------** Created By: lvan** Created date: 2014-11-14** Version: 1.0** Descriptions: The original version 初始版本********************************************************************************/ #include"init.h"void didislow(uint i){for(;i>0;i--){BELL=~BELL;delay15ms();BELL=~BELL;delay15ms();}}void didifast(uint i){for(;i>0;i--){BELL=~BELL;delaynms(7);BELL=~BELL;delaynms(7);}}(二)delay.h和delay.c/*********************************Copyright (c)***********************************--------------------------File Info------------------------------** File Name: delay.h** Last modified Date: 2014-12-27** Last Version: 2.1** Description: 用于存放工程中用到的延时函数****-----------------------------------------------------------------** Created By: lvan** Created date: 2014-11-14** Version: 1.0** Descriptions: The original version 初始版本********************************************************************************/ #include"delay.h"void delay100ms() //@11.0592MHz{unsigned char i, j;i = 180;j = 73;do{while (--j);} while (--i);}void delay10us() //@11.0592MHz{unsigned char i;i = 2;while (--i);}void delay125us(void){uint idata n;for(n=0;n<60*12;n++);//60*12 stc12c5a60s2}void delay20us(void){uchar idata n;for(n=0;n<120;n++);//10*12 stc12c5a60s2}void delay15ms(void){uint idata n;for(n=0;n<4000*12;n++);//4000*12 stc12c5a60s2 }void delaynms(unsigned int k) //@11.0592MHz {unsigned char i, j;for(;k>0;k--){_nop_();_nop_();_nop_();i = 11;j = 190;do{while (--j);} while (--i);}}/*********************************Copyright (c)***********************************--------------------------File Info------------------------------** File Name: delay.h** Last modified Date: 2014-12-27** Last Version: 2.1** Description: 存放所有用于延时的外部函数****-----------------------------------------------------------------** Created By: lvan** Created date: 2014-11-11** Version: 1.0** Descriptions: The original version 初始版本********************************************************************************/ #ifndef DELAY_H#define DELAY_H/*--------------------------------------------------包含头文件---------------------------------------------------*/#include"init.h"/*--------------------------------------------------外部函数定义---------------------------------------------------*/extern void delay100ms();extern void delay10us();extern void delay125us(void);extern void delay20us(void);extern void delay15ms(void);extern void delaynms(uint k);#endif(三)DS1307.C和DS1307.H/*********************************Copyright (c)***********************************--------------------------File Info------------------------------** File Name: ds1307.c** Last modified Date: 2014-12-27** Last Version: 2.1** Description: ds1307的底层驱动函数****-----------------------------------------------------------------** Created By: lvan** Created date: 2014-11-14** Version: 1.0** Descriptions: The original version 初始版本********************************************************************************/ #include"init.h"sbit rtscl=P1^2;sbit rtsda=P1^3;uint tt=0;//uchar code table[]="0123456789";uchar time_receive[8];uchar convert_begin;uint t_click,tp;//**********************************************//over//**********************************************//********************************************///ds1307相关操作函数//传送与接收数据都是先高位//********************************************/void rt_delay() //操作延时,等待信号稳定{uchar i=10;while(i>0)i--;}/*void delay() // 操作之间的时间间隔{uchar i=200;while(i>0)i--;}*/void init_1307() //初始化1307{rtscl = 1; rt_delay(); rtsda = 1; rt_delay();}void start_1307() // 开始信号{rtsda = 1; rtscl = 1; rt_delay(); rtsda = 0; rt_delay();}void stop_1307() // 结束信号{rtsda = 0; rtscl = 1; rt_delay(); rtsda = 1; rt_delay();}void write_1307(uchar d ) //写1307{uchar i,j; rtscl = 0;for(i = 0;i < 8; i++){rtsda = (d >> 7);rtscl = 1;rt_delay();d = d << 1;rtscl = 0;}rtsda = 1;rtscl = 1;while((rtsda == 1) && (j < 255))j++;rtscl=0;}uchar read_1307(uchar b) //读1307{uchar d ,i;rtsda = 1; rtscl = 0;for(i = 0; i < 8; i++){rtscl = 1;rt_delay();d = d << 1;d = d | rtsda;rtscl=0;}rtsda = b;rt_delay();rtscl = 0;rtscl = 1;return d;}read_8byte_1307(){uchar i;start_1307( );write_1307( 0xd0 );write_1307( 0x00 );stop_1307( );for(i = 0;i < 8; i++){start_1307();write_1307(0xd1);time_receive[i]=read_1307(1);stop_1307();}}//********************************************** //over//********************************************** //**********************************************//**********************************************void ds1307init(){TMOD=0x01;TH0=(65536-1000)/256;TL0=(65536-1000)%256; //定时器初始化EA=1;ET0=1;TR0=1;delay15ms();init_1307();start_1307();write_1307(0xd0);write_1307(0x00);write_1307(0x00);write_1307(0x59);write_1307(0x12);write_1307(0x05);write_1307(0x14);write_1307(0x12);write_1307(0x27);stop_1307();}//**************************************************************** //over//*************************************************************** //*************************************************************** //中断服务子程序//***************************************************************void time0() interrupt 1 using 1{TH0=(65536-1000)/256;TL0=(65536-1000)%256;if(convert_begin)t_click++;if(tt>=100){// read_8byte_1307();tt=0;tt++;}/*********************************Copyright (c)***********************************--------------------------File Info------------------------------** File Name: ds1307.h** Last modified Date: 2014-12-27** Last Version: 2.1** Description: 引入ds1307的外部函数,供主函数调用****-----------------------------------------------------------------** Created By: lvan** Created date: 2014-11-14** Version: 1.0** Descriptions: The original version 初始版本********************************************************************************/ #ifndef DS1307_H#define DS1307_Hextern uchar time_receive[8];extern void ds1307init();extern read_8byte_1307();#endif(四)lcd12864.C和lcd12864.H/*******************************************************程序功能:显示字符*******************************************************//*******************************************************///////指令集//////write_cmd(0x30);//基本指令操作//1.设定DDRAM地址命令write_Cmd(0x90);//设定DDRAM地址,因为此时DDRAM地址已经溢出//2.显示状态命令write_Cmd(0x08);//整体显示关,游标关,游标位置关write_Cmd(0x0c);//整体显示开,游标关,游标位置关write_Cmd(0x0e);//整体显示开,游标开,游标位置write_Cmd(0x0f);//整体显示开,游标开,游标位置开//3.位址归位write_Cmd(0x02);//位址归位,游标回到原点write_Cmd(0x84); //将DDRAM地址设为0x88,游标在此闪烁//4.点设定指令//(以下四个命令是控制写入字符以后光标及整屏显示的移动)write_Cmd(0x07); //光标右移整体显示左移write_Data(0x20); //写入两个空格write_Data(0x20);write_Cmd(0x05); //光标左移整体显示右移write_Data(0x20); //写入两个空格write_Data(0x20);write_Cmd(0x06); //光标右移整体显示不移动write_Data(0x20); //写入两个空格write_Data(0x20);write_Cmd(0x04); //光标左移整体显示不移动write_Data(0x20); //写入两个空格write_Data(0x20);//5.游标和显示移位控制//(以下四个命令无需写入显示数据,直接控制光标和整屏显示的移动)write_Cmd(0x10); //光标左移write_Cmd(0x14); //光标右移write_Cmd(0x18); //整体显示左移,光标跟随write_Cmd(0x1c); //整体显示右移,光标跟随write_Cmd(0x0c); //关闭光标//6.进入扩展功能模式命令write_Cmd(0x34); //打开扩展功能模式,绘图显示关闭//7.反白命令write_Cmd(0x04); //同时反白1、3行write_Cmd(0x04); //再次反白1、3行,相当于关闭1、3行反白write_Cmd(0x05); //同时反白2、4行write_Cmd(0x05); //再次反白2、4行,相当于关闭2、4行反白//8.睡眠模式命令write_Cmd(0x08); //进入睡眠模式write_Cmd(0x0c); //退出睡眠模式//9.待命模式命令write_Cmd(0x01); //进入待命模式//10.打开GDRAM显示write_Cmd(0x36); //打开扩展功能模式,打开绘图显示Draw_TX(0x80,0x84,laba); //设置16*16大小图形Clear_GDRAM(); //清除上电复位后RAM中的随机数值Draw_TX(0x80,0x84,laba);//重新显示设置16*16大小图形//11.关闭GDRAM显示write_Cmd(0x34); //打开扩展功能模式,关闭绘图显示//12.设定基本指令集write_Cmd(0x30); //回到基本指令集//13.清除显示命令write_Cmd(0x01);//清屏*********************************************************/ #include"lcd12864.h"/*写指令到LCD*//*输入:指令输出:无*/void write_cmd(uchar cmd){lcd12864_rs=0;lcd12864_rw=0;lcd12864_cs=0;lcd12864_data=cmd;delay20us();lcd12864_cs=1;delay20us();lcd12864_cs=0;}/*写显示数据到LCD*//*输入:数据输出:无*/void write_data(uchar dat){lcd12864_rs=1;lcd12864_rw=0;lcd12864_cs=0;lcd12864_data=dat;delay20us();lcd12864_cs=1;delay20us();lcd12864_cs=0;/*设定显示位置*//*输入:坐标输出:无*/void lcd_pos(uchar x,uchar y){uchar pos;if(x==0){x=0x80;}else if(x==1){x=0x90;}else if(x==2){x=0x88;}else if(x==3){x=0x98;}pos=x+y;write_cmd(pos);//显示地址}/*LCD初始化设定*//*输入:无输出:无*/void lcd_init(){write_cmd(0x38); //基本指令操作delay125us();write_cmd(0x06); //运行方式delay125us();write_cmd(0x0c); //开显示,关光标delay125us();write_cmd(0x01); //清除lcd的显示内容delay15ms();}/*测试程序:显示相应的字符*/ /*void main(){uchar i;delay15ms();lcd_init();lcd_pos(0,0);i=0;while(dis1[i]!='\0'){write_data(dis1[i]);i++;}i=0;lcd_pos(1,0);while(dis2[i]!='\0'){write_data(dis2[i]);i++;}lcd_pos(2,0);i=0;while(dis3[i]!='\0'){write_data(dis3[i]);i++;}lcd_pos(3,0);i=0;while(dis4[i]!='\0'){write_data(dis4[i]);i++;}} *//*********************************Copyright (c)***********************************--------------------------File Info------------------------------** File Name: lcd12864.h** Last modified Date: 2014-12-27** Last Version: 2.1** Description: 液晶的外部函数以及引脚定义****-----------------------------------------------------------------** Created By: lvan** Created date: 2014-11-14** Version: 1.0** Descriptions: The original version 初始版本********************************************************************************/#ifndef LCD12864_H#define LCD12864_H/*--------------------------------------------------包含头文件---------------------------------------------------*/#include"init.h"//定义I/O接口sbit lcd12864_rs=P3^7;sbit lcd12864_rw=P3^6;sbit lcd12864_cs=P3^5;#define lcd12864_data P0//定义P0口为lcd12864的数据口/*写指令到LCD*//*输入:指令输出:无*/extern void write_cmd(uchar cmd);/*写显示数据到LCD*//*输入:数据输出:无*/extern void write_data(uchar dat);/*设定显示位置*//*输入:坐标输出:无*/extern void lcd_pos(uchar x,uchar y);/*LCD初始化设定*//*输入:无输出:无*/extern void lcd_init();#endif●(五)table.c/*********************************Copyright (c)***********************************--------------------------File Info------------------------------** File Name: table.c** Last modified Date: 2014-12-27** Last Version: 2.1** Description: 用于存放在液晶显示的内容****-----------------------------------------------------------------** Created By: lvan** Created date: 2014-11-14** Version: 1.0** Descriptions: The original version 初始版本********************************************************************************/ unsigned char dis1[]={" _LV AN_ "};unsigned char dis2[]={"date:**** / ** / ** "};unsigned char dis3[]={"time: ** / ** / ** "};unsigned char dis4[]={" by:13990513 "};●(一)main.c/*********************************Copyright (c)***********************************--------------------------File Info------------------------------** File Name: main.c** Last modified Date: 2014-12-27** Last Version: 2.1** Description: 基于HD44780控制器的LCD万年历显示****-----------------------------------------------------------------** Created By: lvan** Created date: 2014-11-14** Version: 1.0** Descriptions: The original version 初始版本********************************************************************************/ #include"init.h"#include"table.c"void display(){uchar i;delay15ms();lcd_pos(0,0);i=0;while(dis1[i]!='\0'){write_data(dis1[i]);i++;}i=0;lcd_pos(1,0);while(dis2[i]!='\0'){write_data(dis2[i]);i++;}lcd_pos(2,0);i=0;while(dis3[i]!='\0'){write_data(dis3[i]);i++;}lcd_pos(3,0);i=0;while(dis4[i]!='\0'){write_data(dis4[i]);i++;}}void display1307(){uint nian;//显示日期信息nian=time_receive[7]/16*10+time_receive[7]%16;dis2[5]='2';dis2[6]=(time_receive[4]/100)+0x30;dis2[7]=(time_receive[4]%100/10)+0x30;dis2[8]=(time_receive[4]%10)+0x30;//显示月份dis2[12]=time_receive[5]/16%2+0x30;dis2[13]=time_receive[5]%16+0x30;//显示日期dis2[17]=time_receive[6]/16%4+0x30;dis2[18]=time_receive[6]%16+0x30;// //星期// write_data(' ');// write_data(table[time_receive[3]%16]);//显示小时dis3[7]=time_receive[2]/16%4+0x30;dis3[8]=time_receive[2]%16+0x30;//显示分钟dis3[12]=time_receive[1]/16%8+0x30;dis3[13]=time_receive[1]%16+0x30;//显示秒dis3[17]=time_receive[0]/16%8+0x30;dis3[18]=time_receive[0]%16+0x31;didifast(1);}void main(){lcd_init();ds1307init();display();delaynms(10);while(1){didifast(2); //蜂鸣器,不用可注释read_8byte_1307();display1307();display();}}。

实训项目 数字钟

实训项目 数字钟

实训项目数字钟一、实训目的以实时时钟芯片DS1307和液晶显示LCD1602为主体设计了一款简易数字时钟。

能够准确显示时间(显示格式为时时:分分:秒秒,24小时制),可随时进行时间调整,具有闹钟时间设置、闹钟开/关。

二、实训元件三、实训过程1、硬件设计1.1单片机最小系统单片机最小系统以AT89C51单片机为核心,由单片机、时钟电路、复位电路等组成如图1所示。

主要负责各个模块的初始化工作;读取并处理时间;处理按键响应;控制液晶实时显示等。

主控制器AT89C51单片机与MCS51系列单片机产品兼容,内部自带有4KB的Flash存储器及256KB RAM单元,不需另外扩展EEPROM及静态RAM,可以在线下载程序,易于日后的升级。

图中,P2.0、P2.1、P2.2及P1口为单片机与液晶显示器连接的控制和通信的数据端口;P2.6和P2.7为单片机与时钟芯片DS1307通信的端口;P2.3为闹钟的控制端口;P0.0、P0.1、P0.2、P0.3为按键模块的接口。

时钟电路是由XTAL1和XTAL2之间跨接的晶体振荡器和微调电容构成。

时钟电路中晶体振荡器的频率高则系统的时钟频率就高,所以该系统采用12M晶振;复位电路有两种形式:手动按键复位和上电复位,在本系统中采用的是手动按键复位。

如图1所示,R1、R2、C3和SW组成系统手动按键复位电路。

系统采用DS1307时钟芯片。

DS1307是美国DALLAS公司推出的一种高性能、低功耗的时钟芯片,它是一款I2C总线接口的时钟芯片,采用两线与CPU进行通信,片内含有8个特殊功能寄存器和56bit的SRAM。

DS1307的主要技术指标:具有秒、分、时、日、星期、月、年的计数功能;12小时制和24小时制两种计数模式;可自动调整每月的天数,具有闰年自动修正、掉电保护和上电复位功能。

1.2时钟模块1.2.1 DS1307的引脚功能DS1307采用8引脚双列直插DIP封装形式,引脚分布如图2所示。

DS1307,I2C总线的电子钟设计实例程序

DS1307,I2C总线的电子钟设计实例程序

DS1307,I2C总线的电子钟设计实例程序主控模式操作实时时钟DS1307一实时时钟DS1307 介绍DS1307是低功耗、两线制串行读写接口、日历和时钟数据按BCD码存取的时钟/日历芯片。

它提供秒、分、小时、星期、日期、月和年等时钟日历数据。

另外它还集成了如下几点功能:56 字节掉电时电池保持的NV SRAM 数据存储器可编程的方波信号输出掉电检测和自动切换电池供电模式DS1307 把8 个寄存器和56 字节的RAM 进行了统一编址,具体地址和寄器数据组织格式如下表:表 7-1 DS1307 内存组织结构格式地址数据7 6 5 4 3 2 1 000 SECONDS CH 秒10 位秒个位01 MINUTES 0 分10 位分个位10HR02 HOURS 01224 A/P小时10 位03 DAY 0 0 0 0 0 星期04 DATE 0 0 日期10 位日期个位05 MONTH 0 0 0 月10 位月个位06 YEAR 年10 位年个位07 CONTROL OUT 0 0 SQWE 0 0 RS1 RS008---3fhRAM56 byte用户数据存储区在读写过程中DS1307 内部维护一个地址指针,通过写操作可对它负值,读和写每一字节时自动加一,当指针越过DS1307 内部RAM 尾部时指针将返回到0 地址处。

DS1307 的时钟和日历数据按BCD 码存储。

方波信号输出功能:方波信号输出功能从SQW/OUT 引脚输出设置频率的方波,CONTROL 寄存器用于控制SQW/OUT 脚的输出。

BIT7(OUT):此位表示在方波输出被禁止时SQW/OUT 脚的逻辑电平,在SQWE=0(输出禁止)时若OUT 为1 则SQL/OUT 脚为高电平, 反之亦然。

BIT4(SQWE)方波输出允许/禁止控制位,1 有效。

BIT0(RS0)、BIT1(RS1)用于设定输出波形的频率,如下表:RS1 RS0 输出频率(Hz)0 0 10 1 40961 0 81921 1 32768要注意的是,00h 地址的第7 位为器件时钟允许位(CH),由于在在开始上电时内部RAM内容随机,所以在初始化时将CH 位设零(时钟允许)是非常重要的。

Maxim DS1307 实时钟芯片说明书

Maxim DS1307 实时钟芯片说明书

FEATURES§ Real-time clock (RTC) counts seconds,minutes, hours, date of the month, month, day of the week, and year with leap-year compensation valid up to 2100§ 56-byte, battery-backed, nonvolatile (NV)RAM for data storage § Two-wire serial interface§ Programmable squarewave output signal § Automatic power-fail detect and switch circuitry§ Consumes less than 500nA in battery backup mode with oscillator running§ Optional industrial temperature range:-40°C to +85°C§ Available in 8-pin DIP or SOIC§ Underwriters Laboratory (UL) recognizedORDERING INFORMATIONDS1307 8-Pin DIP (300-mil)DS1307Z 8-Pin SOIC (150-mil)DS1307N 8-Pin DIP (Industrial)DS1307ZN8-Pin SOIC (Industrial)PIN ASSIGNMENTPIN DESCRIPTIONV CC - Primary Power Supply X1, X2 - 32.768kHz Crystal Connection V BAT - +3V Battery Input GND - Ground SDA - Serial Data SCL - Serial ClockSQW/OUT - Square Wave/Output DriverDESCRIPTIONThe DS1307 Serial Real-Time Clock is a low-power, full binary-coded decimal (BCD) clock/calendar plus 56 bytes of NV SRAM. Address and data are transferred serially via a 2-wire, bi-directional bus.The clock/calendar provides seconds, minutes, hours, day, date, month, and year information. The end of the month date is automatically adjusted for months with fewer than 31 days, including corrections for leap year. The clock operates in either the 24-hour or 12-hour format with AM/PM indicator. The DS1307 has a built-in power sense circuit that detects power failures and automatically switches to the battery supply.DS130764 x 8 Serial Real-Time ClockOPERATIONThe DS1307 operates as a slave device on the serial bus. Access is obtained by implementing a START condition and providing a device identification code followed by a register address. Subsequent registers can be accessed sequentially until a STOP condition is executed. When V CC falls below 1.25 x V BAT the device terminates an access in progress and resets the device address counter. Inputs to the device will not be recognized at this time to prevent erroneous data from being written to the device from an out of tolerance system. When V CC falls below V BAT the device switches into a low-current battery backup mode. Upon power-up, the device switches from battery to V CC when V CC is greater than V BAT + 0.2V and recognizes inputs when V CC is greater than 1.25 x V BAT . The block diagram in Figure 1 shows the main elements of the serial RTC.DS1307 BLOCK DIAGRAMFigure 1TYPICAL OPERATING CIRCUITSIGNAL DESCRIPTIONSV CC, GND – DC power is provided to the device on these pins. V CC is the +5V input. When 5V is applied within normal limits, the device is fully accessible and data can be written and read. When a 3V battery is connected to the device and V CC is below 1.25 x V BAT, reads and writes are inhibited. However, the timekeeping function continues unaffected by the lower input voltage. As V CC falls below V BAT the RAM and timekeeper are switched over to the external power supply (nominal 3.0V DC) at V BAT.V BAT – Battery input for any standard 3V lithium cell or other energy source. Battery voltage must be held between 2.0V and 3.5V for proper operation. The nominal write protect trip point voltage at which access to the RTC and user RAM is denied is set by the internal circuitry as 1.25 x V BAT nominal. A lithium battery with 48mAhr or greater will back up the DS1307 for more than 10 years in the absence of power at 25ºC. UL recognized to ensure against reverse charging current when used in conjunction with a lithium battery.See “Conditions of Acceptability” at /TechSupport/QA/ntrl.htm.SCL (Serial Clock Input) – SCL is used to synchronize data movement on the serial interface.SDA (Serial Data Input/Output) – SDA is the input/output pin for the 2-wire serial interface. The SDA pin is open drain which requires an external pullup resistor.SQW/OUT (Square Wave/Output Driver) – When enabled, the SQWE bit set to 1, the SQW/OUT pin outputs one of four square wave frequencies (1Hz, 4kHz, 8kHz, 32kHz). The SQW/OUT pin is open drain and requires an external pull-up resistor. SQW/OUT will operate with either Vcc or Vbat applied. X1, X2 – Connections for a standard 32.768kHz quartz crystal. The internal oscillator circuitry is designed for operation with a crystal having a specified load capacitance (CL) of 12.5pF.For more information on crystal selection and crystal layout considerations, please consult Application Note 58, “Crystal Considerations with Dallas Real-Time Clocks.” The DS1307 can also be driven by an external 32.768kHz oscillator. In this configuration, the X1 pin is connected to the external oscillator signal and the X2 pin is floated.RECOMMENDED LAYOUT FOR CRYSTALCLOCK ACCURACYThe accuracy of the clock is dependent upon the accuracy of the crystal and the accuracy of the match between the capacitive load of the oscillator circuit and the capacitive load for which the crystal was trimmed. Additional error will be added by crystal frequency drift caused by temperature shifts. External circuit noise coupled into the oscillator circuit may result in the clock running fast. See Application Note 58, “Crystal Considerations with Dallas Real-Time Clocks” for detailed information.Please review Application Note 95, “Interfacing the DS1307 with a 8051-Compatible Microcontroller”for additional information.RTC AND RAM ADDRESS MAPThe address map for the RTC and RAM registers of the DS1307 is shown in Figure 2. The RTC registers are located in address locations 00h to 07h. The RAM registers are located in address locations 08h to 3Fh. During a multi-byte access, when the address pointer reaches 3Fh, the end of RAM space, it wraps around to location 00h, the beginning of the clock space.DS1307 ADDRESS MAP Figure 2CLOCK AND CALENDARThe time and calendar information is obtained by reading the appropriate register bytes. The RTC registers are illustrated in Figure 3. The time and calendar are set or initialized by writing the appropriate register bytes. The contents of the time and calendar registers are in the BCD format. Bit 7 of register 0is the clock halt (CH) bit. When this bit is set to a 1, the oscillator is disabled. When cleared to a 0, the oscillator is enabled.Please note that the initial power-on state of all registers is not defined. Therefore, it is important to enable the oscillator (CH bit = 0) during initial configuration.The DS1307 can be run in either 12-hour or 24-hour mode. Bit 6 of the hours register is defined as the 12- or 24-hour mode select bit. When high, the 12-hour mode is selected. In the 12-hour mode, bit 5 is the AM/PM bit with logic high being PM. In the 24-hour mode, bit 5 is the second 10 hour bit (20-23 hours).On a 2-wire START, the current time is transferred to a second set of registers. The time information is read from these secondary registers, while the clock may continue to run. This eliminates the need to re-read the registers in case of an update of the main registers during a read.00H07H 08H 3FHDS1307 TIMEKEEPER REGISTERSFigure 3CONTROL REGISTERThe DS1307 control register is used to control the operation of the SQW/OUT pin.BIT 7BIT 6BIT 5BIT 4BIT 3BIT 2BIT 1BIT 0OUTSQWERS1RS0OUT (Output control): This bit controls the output level of the SQW/OUT pin when the square wave output is disabled. If SQWE = 0, the logic level on the SQW/OUT pin is 1 if OUT = 1 and is 0 if OUT = 0.SQWE (Square Wave Enable): This bit, when set to a logic 1, will enable the oscillator output. The frequency of the square wave output depends upon the value of the RS0 and RS1 bits. With the square wave output set to 1Hz, the clock registers update on the falling edge of the square wave.RS (Rate Select): These bits control the frequency of the square wave output when the square wave output has been enabled. Table 1 lists the square wave frequencies that can be selected with the RS bits.SQUAREWAVE OUTPUT FREQUENCY Table 1RS1RS0SQW OUTPUT FREQUENCY001Hz 01 4.096kHz 108.192kHz 1132.768kHz00000000000002-WIRE SERIAL DATA BUSThe DS1307 supports a bi-directional, 2-wire bus and data transmission protocol. A device that sends data onto the bus is defined as a transmitter and a device receiving data as a receiver. The device that controls the message is called a master. The devices that are controlled by the master are referred to as slaves. The bus must be controlled by a master device that generates the serial clock (SCL), controls the bus access, and generates the START and STOP conditions. The DS1307 operates as a slave on the 2-wire bus. A typical bus configuration using this 2-wire protocol is show in Figure 4.TYPICAL 2-WIRE BUS CONFIGURATION Figure 4Figures 5, 6, and 7 detail how data is transferred on the 2-wire bus.§Data transfer may be initiated only when the bus is not busy.§During data transfer, the data line must remain stable whenever the clock line is HIGH. Changes in the data line while the clock line is high will be interpreted as control signals.Accordingly, the following bus conditions have been defined:Bus not busy: Both data and clock lines remain HIGH.Start data transfer: A change in the state of the data line, from HIGH to LOW, while the clock is HIGH, defines a START condition.Stop data transfer: A change in the state of the data line, from LOW to HIGH, while the clock line is HIGH, defines the STOP condition.Data valid: The state of the data line represents valid data when, after a START condition, the data line is stable for the duration of the HIGH period of the clock signal. The data on the line must be changed during the LOW period of the clock signal. There is one clock pulse per bit of data.Each data transfer is initiated with a START condition and terminated with a STOP condition. The number of data bytes transferred between START and STOP conditions is not limited, and is determined by the master device. The information is transferred byte-wise and each receiver acknowledges with a ninth bit. Within the 2-wire bus specifications a regular mode (100kHz clock rate) and a fast mode (400kHz clock rate) are defined. The DS1307 operates in the regular mode (100kHz) only.Acknowledge: Each receiving device, when addressed, is obliged to generate an acknowledge after the reception of each byte. The master device must generate an extra clock pulse which is associated with this acknowledge bit.A device that acknowledges must pull down the SDA line during the acknowledge clock pulse in such a way that the SDA line is stable LOW during the HIGH period of the acknowledge related clock pulse. Of course, setup and hold times must be taken into account. A master must signal an end of data to the slave by not generating an acknowledge bit on the last byte that has been clocked out of the slave. In this case, the slave must leave the data line HIGH to enable the master to generate the STOP condition.DATA TRANSFER ON 2-WIRE SERIAL BUS Figure 5Depending upon the state of the R/W bit, two types of data transfer are possible:1.Data transfer from a master transmitter to a slave receiver. The first byte transmitted by themaster is the slave address. Next follows a number of data bytes. The slave returns an acknowledge bit after each received byte. Data is transferred with the most significant bit (MSB) first.2.Data transfer from a slave transmitter to a master receiver. The first byte (the slave address) istransmitted by the master. The slave then returns an acknowledge bit. This is followed by the slave transmitting a number of data bytes. The master returns an acknowledge bit after all received bytes other than the last byte. At the end of the last received byte, a “not acknowledge” is returned.The master device generates all of the serial clock pulses and the START and STOP conditions. A transfer is ended with a STOP condition or with a repeated START condition. Since a repeated START condition is also the beginning of the next serial transfer, the bus will not be released. Data is transferred with the most significant bit (MSB) first.The DS1307 may operate in the following two modes:1.Slave receiver mode (DS1307 write mode): Serial data and clock are received through SDA andSCL. After each byte is received an acknowledge bit is transmitted. START and STOP conditions are recognized as the beginning and end of a serial transfer. Address recognition is performed by hardware after reception of the slave address and *direction bit (See Figure 6). The address byte is the first byte received after the start condition is generated by the master. The address byte contains the 7 bit DS1307 address, which is 1101000, followed by the *direction bit (R/W) which, for a write, is a 0. After receiving and decoding the address byte the device outputs an acknowledge on the SDA line. After the DS1307 acknowledges the slave address + write bit, the master transmits a register address to the DS1307 This will set the register pointer on the DS1307. The master will then begin transmitting each byte of data with the DS1307 acknowledging each byte received. The master will generate a stop condition to terminate the data write.DATA WRITE – SLAVE RECEIVER MODE Figure 62.Slave transmitter mode (DS1307 read mode): The first byte is received and handled as in the slavereceiver mode. However, in this mode, the *direction bit will indicate that the transfer direction is reversed. Serial data is transmitted on SDA by the DS1307 while the serial clock is input on SCL.START and STOP conditions are recognized as the beginning and end of a serial transfer (See Figure 7). The address byte is the first byte received after the start condition is generated by the master. The address byte contains the 7-bit DS1307 address, which is 1101000, followed by the *direction bit (R/W) which, for a read, is a 1. After receiving and decoding the address byte the device inputs an acknowledge on the SDA line. The DS1307 then begins to transmit data starting with the register address pointed to by the register pointer. If the register pointer is not written to before the initiation of a read mode the first address that is read is the last one stored in the register pointer. The DS1307 must receive a “not acknowledge” to end a read.DATA READ – SLAVE TRANSMITTER MODE Figure 7ABSOLUTE MAXIMUM RATINGS*Voltage on Any Pin Relative to Ground -0.5V to +7.0VStorage Temperature -55°C to +125°CSoldering Temperature 260°C for 10 seconds DIPSee JPC/JEDEC Standard J-STD-020A forSurface Mount Devices*This is a stress rating only and functional operation of the device at these or any other conditions above those indicated in the operation sections of this specification is not implied. Exposure to absolute maximum rating conditions for extended periods of time may affect reliability.Range Temperature V CCCommercial0°C to +70°C 4.5V to 5.5V V CC1Industrial-40°C to +85°C 4.5V to 5.5V V CC1 RECOMMENDED DC OPERATING CONDITIONS(Over the operating range*) PARAMETER SYMBOL MIN TYP MAX UNITS NOTES Supply Voltage V CC 4.5 5.0 5.5VLogic 1V IH 2.2V CC + 0.3VLogic 0V IL-0.5+0.8VV BAT Battery Voltage V BAT 2.0 3.5V*Unless otherwise specified.DC ELECTRICAL CHARACTERISTICS(Over the operating range*) PARAMETER SYMBOL MIN TYP MAX UNITS NOTES Input Leakage (SCL)I LI1m AI/O Leakage (SDA &I LO1m ASQW/OUT)Logic 0 Output (I OL = 5mA)V OL0.4VActive Supply Current I CCA 1.5mA7 Standby Current I CCS200m A1 Battery Current (OSC ON);I BAT1300500nA2 SQW/OUT OFFI BAT2480800nABattery Current (OSC ON);SQW/OUT ON (32kHz)Power-Fail Voltage V PF 1.216 x V BAT 1.25 x V BAT 1.284 x V BAT V8*Unless otherwise specified.AC ELECTRICAL CHARACTERISTICS(Over the operating range*) PARAMETER SYMBOL MIN TYP MAX UNITS NOTES SCL Clock Frequency f SCL0100kHzBus Free Time Between a STOP andt BUF 4.7m sSTART ConditionHold Time (Repeated) START Condition t HD:STA 4.0m s3 LOW Period of SCL Clock t LOW 4.7m sHIGH Period of SCL Clock t HIGH 4.0m st SU:STA 4.7m sSet-up Time for a Repeated STARTConditionData Hold Time t HD:DAT0m s4,5 Data Set-up Time t SU:DAT250nsRise Time of Both SDA and SCL Signals t R1000nsFall Time of Both SDA and SCL Signals t F300nsSet-up Time for STOP Condition t SU:STO 4.7m s Capacitive Load for each Bus Line C B400pF6C I/O10pFI/O Capacitance (T A = 25ºC)12.5pFCrystal Specified Load Capacitance(T A = 25ºC)*Unless otherwise specified.NOTES:1.I CCS specified with V CC = 5.0V and SDA, SCL = 5.0V.2.V CC = 0V, V BAT = 3V.3.After this period, the first clock pulse is generated.4. A device must internally provide a hold time of at least 300ns for the SDA signal (referred to theV IHMIN of the SCL signal) in order to bridge the undefined region of the falling edge of SCL.5.The maximum t HD:DAT has only to be met if the device does not stretch the LOW period (t LOW) of theSCL signal.6.C B – Total capacitance of one bus line in pF.7.I CCA – SCL clocking at max frequency = 100kHz.8.V PF measured at V BAT = 3.0V.TIMING DIAGRAM Figure 8DS1307 64 X 8 SERIAL REAL-TIME CLOCK 8-PIN DIP MECHANICAL DIMENSIONSPKG8-PIN DIMMIN MAX A IN.MM0.3609.140.40010.16B IN.MM0.2406.100.2606.60C IN.MM0.1203.050.1403.56D IN.MM0.3007.620.3258.26E IN.MM0.0150.380.0401.02F IN.MM0.1203.040.1403.56G IN.MM0.0902.290.1102.79H IN.MM0.3208.130.3709.40J IN.MM0.0080.200.0120.30K IN.MM 0.0150.380.0210.53DS1307Z 64 X 8 SERIAL REAL-TIME CLOCK8-PIN SOIC (150-MIL) MECHANICAL DIMENSIONSPKG8-PIN (150 MIL)DIM MIN MAXA IN. MM 0.1884.780.1964.98B IN. MM 0.1503.810.1584.01C IN. MM 0.0481.220.0621.57E IN. MM 0.0040.100.0100.25F IN. MM 0.0531.350.0691.75G IN. MM 0.050 BSC1.27 BSCH IN. MM 0.2305.840.2446.20J IN. MM 0.0070.180.0110.28K IN. MM 0.0120.300.0200.51L IN. MM 0.0160.410.0501.27phi0°8°56-G2008-001。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

I2C类DS1307芯片做时钟实验程序
实验目的
DS1307是DALLAS公司的一款时钟/日历芯片,采用I2C协议与单片机通讯,是单片机制作时钟/日历的常用芯片。

DS1307为8脚封装的芯片,只需外接一个32.768KHz 的晶振即可工作。

本实验将时间信息通过串口显示在PC机上。

关键词:DS1307芯片,时钟程序,实时时钟程序,RTC
难度等级:高级
DS1307简介
DS1307串行实时时钟(RTC)是一款低功耗,全BCD码,带56字节非易失SRAM的时钟/日历芯片。

地址与数据经I2C双向总线串行传输。

该时钟/日历芯片提供秒、分、时、星期、日、月和年等信息,并能自动调整少于31天包括闰年月份的最后一天。

时钟可以工作在24小时模式或是12小时带AM/PM模式。

DS1307内部嵌入电源传感电路,可探测电源故障并自动转用备用电池供电。

在备用电池供电情况下计时功能继续工作。

DS1307与单片机接线图
DS1307内部寄存器地址分频图
DS1307时间/日历数据寄存器位图
硬件搭建
本实验硬件非常简单,DS1307外接一个32.768KHz的晶振即可。

相应SDA管脚SCL 管脚用条线连Atmega48单片机的端口PORTD.7和PORTD.6。

通过串口将单片机与PC机连接,用BASCOM自带模拟终端显示时间。

程序代码
Dim I As Byte Weekday = 6 Time$ = "23:59:50" Date$ = "09-02-28" Do
I = Weekday - 1
Strweekday = Lookupstr(i , Weekdays) Print "日期:" ; Date$ ; " " ; Strweekday ; " 时间:" ; Time$ Wait 1 Loop End
Getdatetime: I2cstart
I2cwbyte Ds1307w I2cwbyte 0 I2cstart
I2cwbyte Ds1307r I2crbyte _sec , Ack I2crbyte _min , Ack I2crbyte _hour , Ack I2crbyte Weekday , Ack I2crbyte _day , Ack I2crbyte _month , Ack I2crbyte _year , Nack I2cstop
_sec = Makedec(_sec) _min = Makedec(_min) _hour = Makedec(_hour) _day = Makedec(_day) _month = Makedec(_month) _year = Makedec(_year) Return Setdate:
_day = Makebcd(_day) _month = Makebcd(_month) _year = Makebcd(_year) I2cstart
I2cwbyte Ds1307w I2cwbyte 3 I2cwbyte Weekday I2cwbyte _day I2cwbyte _month I2cwbyte _year I2cstop
'
' 初始化星期变量
' 初始化Time$变量将调用SetTime 子程 ' 初始化Date$变量将调用SetDate 子程 ' ' ' '
' ' ' '
' 启动开始 ' 发写地址 ' 1307地址0 ' 启动开始 ' 发送读地址 ' 秒 ' 分 ' 时 ' 星期 ' 日期 ' 月份 ' 年 '
' BCD 转十进制 ' ' ' ' ' ' '
' 十进制转BCD ' '
' 启动开始 ' 发送写地址
' 从DS1307地址4开始写 ' 星期 ' 日期 ' 月份 ' 年 '
Return Settime:
_sec = Makebcd(_sec) _min = Makebcd(_min) _hour = Makebcd(_hour) I2cstart
I2cwbyte Ds1307w I2cwbyte 0 I2cwbyte _sec I2cwbyte _min I2cwbyte _hour I2cstop Return Weekdays:
Data "星期一" , "星期二" , "星期三" , "星期四" Data "星期五" , "星期六" , "星期日"
' '
' 十进制转BCD ' '
' 启动开始 ' 发送写地址
' 从DS1307地址0开始写 ' 秒 ' 分 ' 时 ' ' ' ' '
程序讲解
程序通过I2C 协议与时钟芯片DS1307通讯获取时间数据。

时间信息用PRINT 语句在BASCOM 的模拟终端显示。

程序中使用了CONFIG CLOCK=USER 语句,使得编译器自动定义除“星期”外的时间变量,程序员可直接引用这些变量。

DS1307内部有星期的存储位置,初始化后自动随日期的变更而变,很方便。

注意几个子程序的写法,这些子程序是在引用或赋值DATE$、TIME$变量时系统自动调用的。

与普通子程序的写法不同,开头没有SUB ,结尾用RETURN 而不用END SUB ,也不用DECLARE 声明。

可参照51的实验例程。

相关文档
最新文档