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 供电,这将导致功耗增大。

  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的实验例程。

相关文档
最新文档