IO口实时时钟芯片DS1302的应用实例

合集下载

时钟芯片DS1302的用法

时钟芯片DS1302的用法

单片机玩到此时,很想玩TFT真彩屏,但如果不玩一玩汉显字符液晶屏,就总觉得少了些什么,说实话,我对时钟制作并不很感兴趣,因为家里走针的、蹦字的计时器、定时器大小有七八个,还不算手机和电脑的时钟,而要想玩汉显屏,则做时钟算是最合适的了,也难怪杜洋老师会在这上下功夫,毕竟没有那家公司会让咱初学者去搞工控或商品。

前些时,在网上淘了一只LCD-12864模块,已经点亮并通过了简单的测试,准备做杜洋的时钟,准备技术资料时,在网上找到了一篇关于时钟芯片DS1302的应用文章,觉得不错,转帖于此以资共享。

时钟芯片DS1302可靠起振的方法作者:不详出处:不详DS1302是Dallas公司生产的一种实时时钟芯片。

它通过串行方式与单片机进行数据传送,能够向单片机提供包括秒、分、时、日、月、年等在内的实时时间信息,并可对月末日期、闰年天数自动进行调整;它还拥有用于主电源和备份电源的双电源引脚,在主电源关闭的情况下,也能保持时钟的连续运行。

另外,它还能提供31字节的用于高速数据暂存的RAM。

鉴于上述特点,DS1302已在许多单片机系统中得到应用,为系统提供所需的实时时钟信息。

一、 DS1302的主要特性1. 引脚排列图1 DS1302引脚排列图(见附图)DS1302的引脚排列如图1所示,各引脚的功能如下:X1,X2——32768Hz晶振引脚端; RST——复位端; I/O——数据输入/输出端;SCLK——串行时钟端; GND——地; VCC2,VCC1——主电源与后备电源引脚端。

2. 主要功能: DS1302时钟芯片内主要包括移位寄存器、控制逻辑电路、振荡器、实时时钟电路以及用于高速暂存的31字节RAM。

DS1302与单片机系统的数据传送依靠RST,I/O,SCLK三根端线即可完成。

其工作过程可概括为:首先系统RST引脚驱动至高电平,然后在作用于SCLK时钟脉冲的作用下,通过I/O引脚向DS1302输入地址/命令字节,随后再在SCLK时钟脉冲的配合下,从I/O引脚写入或读出相应的数据字节。

ds1302用法

ds1302用法

ds1302用法时钟ic_ds1302的应用之一……基础知识2021-11-0613:09在网上看了很久,发现初学者最有兴趣的就是ds1302时钟电路,也很自然,它是个做出来就让你觉得最实用的电路了,但实际上制做上并不简单,首先你要让你的显示部分(不管是数码管还是lcd)调试通过。

然后把ds1302接好,调试正确了才能在成功显示时间和日期。

下面我们就来说说ds1302的用法。

ds1302的图如下:ds1302就是美国dallas公司面世的一种高性能、低功耗的实时时钟芯片,额外31字节静态ram,使用spi三线USB与cpu展开同步通信,并可以使用突发性方式一次传输多个字节的时钟信号和ram数据。

实时时钟可以提供更多秒、分后、时、日、星期、月和年,一个月大与31天时可以自动调整,且具备闰年补偿功能。

工作电压长约2.5~5.5v。

使用双电源供电(主电源和水泵电源),可以设置水泵电源电池方式,提供更多了对后背电源展开涓细电流电池的能力。

下面就是标准的接线电路图:各引脚功能如下:插槽号名称功能①vcc2主电源②、③x1,x2接32768hz晶振④gnd地线⑤rst复位⑥i/0数据输入输出⑦sclk串行时钟⑧vccl后备电源ds1302有关日历、时间的寄存器共计12个,其中存有7个寄存器(念时81h~8dh,写下时80h~8ch)就是放置秒、分后,小时、日、月、年、周数据的,放置的数据格式为bcd码形式它的内部时间寄存器如下:这张表呢是ds1302内部的7个与时间、日期有关的寄存器图和一个写保护寄存器,我们要做的就是将初始设置的时间、日期数据写入这几个寄存器,然后再不断地读取这几个寄存器来获取实时时间和日期。

这几个寄存器的说明如下:1、秒寄存器(81h、80h)的位7定义为时钟暂停标志(ch)。

当起始上电时该边线为1,时钟振荡器暂停,ds1302处在低功耗状态;只有将秒寄存器的该边线重写为0时,时钟就可以开始运行。

DS1302使用手册

DS1302使用手册

S ODS1302 涓流充电时钟保持芯片的原理与应用摘要 本文概括介绍了 DS1302 时钟芯片的特点和基本组成 通过实例详细说明了有关功能的应用软件 关于 DS1302 各寄存器的详细位控功能请参考 D ALLAS 达拉斯公司的相应产品资料概述DS 1302 是 D ALLAS 公司推出的涓流充电时钟芯片 内含有一个实时时钟/日历和31 字节静态 R AM 通过简 单的串行接口与单片机进行通信 实时时钟/日历电路提供秒 分 时 日 日期 月 年的信息 每月的天 数和闰年的天数可自动调整 时钟操作可通过 AM/PM 指示决定采用 24 或 12 小时格式 DS1302 与单片机之 间能简单地采用同步串行的方式进行通信 仅需用到三个口线 1 RE 复位 2 I/ 数据线 3 SCLK 串行时钟时钟/RAM 的读/写数据以一个字节或多达 31 个字节的字符组方式通信 DS1302 工作时功耗很 低 保持数据和时钟信息时功率小于 1mW DS1302 是由 DS1202 改进而来 增加了以下的特性 双电源管脚用于主电源和备份电源供应 Vcc1为可 编程涓流充电电源 附加七个字节存储器 它广泛应用于电话 传真 便携式仪器以及电池供电的仪器仪表等 产品领域 下面将主要的性能指标作一综合 z 实时时钟具有能计算 2100 年之前的秒 分 时 日 日期 星期 月 年的能力 还有闰年调整的能力 z 31 8 位暂存数据存储 R AM z 串行I /O 口方式使得管脚数量最少 z 宽范围工作电压 2.0 5.5V z 工作电流 2.0V 时,小于 300nA z读/写时钟或 R AM 数据时 有两种传送方式 单字节传送和多字节传送字符组方式z 8 脚 D IP 封装或可选的 8 脚 S OIC 封装根据表面装配z 简单 3 线接口z 与 T TL 兼容Vcc=5V z 可选工业级温度范围 -40+85 z 与 D S1202 兼容 z在 D S1202 基础上增加的特性 对 V cc1 有可选的涓流充电能力 双电源管用于主电源和备份电源供应 备份电源管脚可由电池或大容量电容输入 附加的 7 字节暂存存储器1 DS1302 的基本组成和工作原理 D S 1302 的管脚排列及描述如下图及表所示管脚描述管脚配置X1 X2 32.768KHz 晶振管脚GND 地RST 复位脚I/O 数据输入/输出引脚SCLK 串行时钟Vcc1,Vcc2 电源供电管脚订单信息部分# 描述DS1302 串行时钟芯片8 脚D IPDS1302S 串行时钟芯片8 脚S OIC200milDS1302Z 串行时钟芯片8 脚S OIC150mil2.DS1302 内部寄存器CH: 时钟停止位寄存器2的第7位12/24 小时标志CH=0 振荡器工作允许bit7=1,12 小时模式CH=1 振荡器停止bit7=0,24 小时模式WP: 写保护位寄存器2的第5位:AM/PM 定义WP=0 寄存器数据能够写入AP=1 下午模式WP=1 寄存器数据不能写入AP=0 上午模式TCS: 涓流充电选择DS: 二极管选择位TCS=1010 使能涓流充电DS=01 选择一个二极管TCS=其它禁止涓流充电DS=10 选择两个二极管DS=00 或11, 即使T CS=1010, 充电功能也被禁止RS 位电阻典型位00没有没有01R12K10R24K11R38KDS1302 与微控制器的接口软件及功能应用举例下面首先给出基本的接口软件然后举例说明各种功能的应用1 写保护寄存器操作当写保护寄存器的最高位为0 时允许数据写入寄存器写保护寄存器可以通过命令字节8E 8F 来规定禁止写入/读出写保护位不能在多字节传送模式下写入Wri te_Ena ble:MO V Com man d,#8Eh;命令字节为8EMO V Byt eCn t,#1;单字节传送模式MO V R0,#Xm tDa t数据地址覆给R0MO V XmtDat,#00h数据内容为0写入允许AC ALL Sen d_B yte调用写入数据子程序RE T返回调用本子程序处当写保护寄存器的最高位为1时禁止数据写入寄存器W rit e_D isa ble:MO V Com man d,#8Eh;命令字节为8EMO V Byt eCn t,#1;单字节传送模式MO V R0,#Xm tDa t数据地址覆给R0MO V XmtDat,#80h数据内容为80h禁止写入AC ALL Sen d_B yte调用写入数据子程序RE T返回调用本子程序处以上程序调用了基本数据发送(Send_By te)模块及一些内存单元定义,其源程序清单在附录中给出下面的程序亦使用了这个模块2 时钟停止位操作当把秒寄存器的第7位时钟停止位设置为0 时起动时钟开始Osc_Ena ble:MOV C omma nd,#80h ; 命令字节为80MOV B yteC nt,#1 ; 单字节传送模式MOV R0,#X mtDa t数据地址覆给R0MOV X mtDa t,#00h 数据内容为0振荡器工作允许ACALL Send_Byte 调用写入数据子程序RET 返回调用本子程序处当把秒寄存器的第7位时钟停止位设置为1时时钟振荡器停止HT1380进入低功耗方式Osc_Dis able:M OV C omma nd,#80h;命令字节为80M OV B yteC nt,#1;单字节传送模式M OV R0,#X mtDa t数据地址覆给R0M OV X mtDa t,#80h数据内容为80h振荡器停止A CALL S end_Byte调用写入数据子程序R ET返回调用本子程序处3. 多字节传送方式当命令字节为B E 或B F 时DS1302 工作在多字节传送模式8 个时钟/日历寄存器从寄存器0 地址开始连续读写从0位开始的数据当命令字节为FE 或FF 时DS1302 工作在多字节RAM 传送模式31 个RAM 寄存器从0地址开始连续读写从0 位开始的数据例如写入00 年 6 月21日星期三13 时59 分59 秒程序设置如下W rit e_M ultipl ebyt e:MOV C omm and,#0BEh;命令字节为B EhMOV B yte Cnt,#8;多字节写入模式此模块为8个MOV R0,#XmtD at数据地址覆给R0MOV X mtD at,#59h秒单元内容为59hMOV X mtD at+1,#59h分单元内容为59hMOV X mtD at+2,#13h时单元内容为13hMOV X mtD at+3,#21h日期单元内容为21hMOV X mtD at+4,#06h月单元内容为06hMOV X mtD at+5,#03h星期单元内容为03hMOV X mtD at+6,#0年单元内容为00hMOV X mtD at+7,#0写保护单元内容为00hACA LL S end_By te调用写入数据子程序RET返回调用本子程序处读出寄存器0-7 的内容程序设置如下Rea d_M ultipl eby te:MOV C omm and,#0BFh;命令字节为B FhMOV B yte Cnt,#8;多字节读出模式此模块为8个MOV R1,#Rcv Dat 数据地址覆给R1ACALL R ece ive_By te调用读出数据子程序RET 返回调用本子程序处以上程序调用了基本数据接收(Recei ve_Byt e)模块及一些内存单元定义,其源程序清单在附录中给出下面的程序亦使用了这个模块4. 单字节传送方式例如写入8时12 小时模式程序设置如下Wri te_Sin gle byt e:M OV Co mma nd,#84h; 命令字节为84hM OV By teC nt,#1; 单字节传送模式M OV R0,#X mtD at数据地址覆给R0M OV Xm tDa t,#88h数据内容为88h A CAL LSend_Byte 调用写入数据子程序RET 返回调用本子程序处上面所列出的程序模块Write_Enab le W rit e_Di sabl e Osc_Enable Osc_D isab le与单字节写入模块Write_Singlebyte 的程序架构完全相同仅只是几个入口参数不同本文是为了强调功能使用的不同才将其分为不同模块另外,与涓流充电相关的设定也是单字节操作方式,这里就不再单独列出, 用户在使用中可灵活简略下面模块举例说明如何单字节读出小时单元的内容.Read_Si ngl eby te:M OV Co mma nd,#85h; 命令字节为85hM OV By teC nt,#1; 单字节传送模式M OV R1,#R cvD at数据地址覆给R1A CAL L Re cei ve_Byt e调用读出数据子程序R ET返回调用本子程序处DS1302 应用电路原理图P87LPC764 单片机选取内部振荡及内部复位电路附录数据发送与接收模块源程序清单; CPU 工作频率最大不超过20MHz;******************************************************************************************** ;P87LPC762/4主控器发送接受数据程序; 说明本程序是利用P hilips公司的P87LPC764 单片机任何具有51内核或其它合适的单片机都可在此作为主控器的普通I/O 口(如P1.2/P1.3/P1.4)实现总线的功能对总线上的器件本程序采用D S1302进行读写操作命令字节在C ommand 传送字节数在B yteCnt 中所发送的数据在X mtDat 中所接收的数据在R cvDat 中;******************************************************************************************** ;P87LPC762/4主控器总线发送接受数据程序头文件;内存数据定义BitCnt data 30h ; 数据位计数器Byt eCn t data 31h ; 数据字节计数器Command data 32h ; 命令字节地址RcvDat D ATA40H; 接收数据缓冲区XmtDat D ATA50H; 发送数据缓冲区;端口位定义IO_DAT A b it P1.3; 数据传送总线SCLK b it P1.4; 时钟控制总线RST bi t P1.2; 复位总线;******************************************************************************************** ;发送数据程序;名称:S end_By te;描述:发送Byte Cnt个字节给被控器D S1302;命令字节地址在C ommand 中;所发送数据的字节数在B yteCnt 中发送的数据在X mtDat 缓冲区中;******************************************************************************************** Send_Byt e:CLR RST ;复位引脚为低电平所有数据传送终止NO PCLR SC LK清时钟总线NO PSETB RST ;复位引脚为高电平逻辑控制有效NO PM OV A,Command 准备发送命令字节M OV Bi tCn t,#08h传送位数为8S_By te0:RRC A将最低位传送给进位位CM OV IO_DA TA,C位传送至数据总线NO PSETB SC LK时钟上升沿发送数据有效NO PCLR SC LK清时钟总线D JNZ Bi tCn t,S_By te0位传送未完毕则继续NO PS_By te1:准备发送数据M OV A,@R0 传送数据过程与传送命令相同M OV Bi tCn t,#08hS_By te2:RRC AM OV IO_DA TA,CNO PS ETB SC LKNO PC LR SC LKD JNZ Bi tCn t,S_By te2I NC R0发送数据的内存地址加1D JNZ By teC nt,S_B yte1字节传送未完毕则继续NO PC LR RST逻辑操作完毕清R STR ET;*************************************************************************************** ;接收数据程序;;名称:Rece ive_By te;描述:从被控器D S1302 接收Byte Cnt个字节数据;命令字节地址在C ommand 中;所接收数据的字节数在B yteCnt 中接收的数据在R cvDat 缓冲区中;*********************************************************************************** Rece ive_By te:CLR RST ;复位引脚为低电平所有数据传送终止NO PCLR SC LK清时钟总线NO PS ETB RST;复位引脚为高电平逻辑控制有效M OV A,Com man d准备发送命令字节R_By te0:M OV Bi tCn t,#08h传送位数为8RRC A将最低位传送给进位位CM OV IO_DA TA,C位传送至数据总线NO PSETB SC LK时钟上升沿发送数据有效NO PCLR SC LK清时钟总线D JNZ BitCnt,R_Byte0 位传送未完毕则继续NO PR_By te1:准备接收数据CLR A清类加器C LRC清进位位CM OV Bi tCn t,#08h接收位数为8R_By te2:NO PM OV C,IO_DAT A数据总线上的数据传送给CRRC A从最低位接收数据SETB SC LK时钟总线置高NO PCLR SC LK时钟下降沿接收数据有效D JNZ BitCnt,R_Byte2 位接收未完毕则继续M OV@R1,A 接收到的完整数据字节放入接收内存缓冲区I NC R1 接收数据的内存地址加1D JNZ By teC nt,R_B yte1字节接收未完毕则继续NO PCLR RST 逻辑操作完毕清R STR ET;============================================================================== =============== E ND。

给出DS1302的典型应用原理图

给出DS1302的典型应用原理图

给出DS1302的典型应用原理图1. 概述本文将介绍DS1302实时时钟芯片的典型应用原理图。

DS1302是一款非易失性实时时钟芯片,在许多电子产品中被广泛使用。

它具有低功耗、精确计时等优点,适用于需要具备时间功能的电路设计。

2. DS1302原理图下面是DS1302的典型应用原理图(供参考):电源电路:--------------VCC --- 5V电源GND --- 接地--------------数据通信和控制线:---------------------------RST --- 复位信号IO --- 数据输入/输出SCLK --- 时钟信号CE --- 芯片使能信号---------------------------外部时钟电路:--------------------R --- 32.768kHz晶振C --- 晶振接地--------------------3. DS1302应用原理图解析•电源电路:DS1302芯片需要提供5V电源和接地,确保芯片正常工作。

•数据通信和控制线:RST、IO、SCLK和CE是DS1302与其他电路进行数据通信和控制的接口线。

RST用于复位芯片,IO用于数据的输入和输出,SCLK为时钟信号,CE为芯片的使能信号。

•外部时钟电路:DS1302芯片需要连接一个外部的32.768kHz晶振,以提供精确的时钟输入。

4. DS1302应用原理图使用说明1.连接电源电路:将VCC引脚连接至5V电源,将GND引脚连接至接地。

2.连接数据通信和控制线:根据实际需求,将RST、IO、SCLK和CE引脚连接至其他电路。

3.连接外部时钟电路:将R引脚连接至外部32.768kHz晶振,将C引脚接地。

5. 注意事项•在连接DS1302芯片时,务必确保正确连接电源和接地,以避免芯片损坏。

•在连接数据通信和控制线时,需要按照芯片的说明书来引脚连接,避免误接或引脚连接错误。

•外部时钟电路的连接需要注意晶振的正确极性,并确保晶振稳定工作。

DS1302 时钟芯片的原理与应用

DS1302 时钟芯片的原理与应用

DS1302 时钟芯片的原理与应用DS1302 是DALLAS 公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31 字节静态RAM 通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM 指示决定采用24 或12 小时格式DS1302 与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1 RES 复位2 I/O 数据线3 SCLK串行时钟时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信DS1302 工作时功耗很低保持数据和时钟信息时功率小于1mWDS1302 是由DS1202 改进而来增加了以下的特性双电源管脚用于主电源和备份电源供应Vcc1 为可编程涓流充电电源附加七个字节存储器它广泛应用于电话传真便携式仪器以及电池供电的仪器仪表等产品领域下面将主要的性能指标作一综合实时时钟具有能计算2100 年之前的秒分时日日期星期月年的能力还有闰年调整的能力31 8 位暂存数据存储RAM串行I/O 口方式使得管脚数量最少宽范围工作电压2.0 5.5V工作电流2.0V 时,小于300nA读/写时钟或RAM 数据时有两种传送方式单字节传送和多字节传送字符组方式8 脚DIP 封装或可选的8 脚SOIC 封装根据表面装配简单3 线接口与TTL 兼容Vcc=5V可选工业级温度范围-40 +85与DS1202 兼容在DS1202 基础上增加的特性对Vcc1 有可选的涓流充电能力双电源管用于主电源和备份电源供应备份电源管脚可由电池或大容量电容输入附加的7 字节暂存存储器1 DS1302 的基本组成和工作原理DS1302 的管脚排列及描述如下图及表所示管脚描述X1 X2 32.768KHz 晶振管脚GND 地RST 复位脚I/O 数据输入/输出引脚SCLK 串行时钟Vcc1,Vcc2 电源供电管脚订单信息部分# 描述DS1302 串行时钟芯片8 脚DIPDS1302S 串行时钟芯片8 脚SOIC 200milDS1302Z 串行时钟芯片8 脚SOIC 150mil2. DS1302 内部寄存器CH: 时钟停止位寄存器2 的第7 位12/24 小时标志CH=0 振荡器工作允许bit7=1,12 小时模式CH=1 振荡器停止bit7=0,24 小时模式WP: 写保护位寄存器2 的第5 位:AM/PM 定义WP=0 寄存器数据能够写入AP=1 下午模式WP=1 寄存器数据不能写入AP=0 上午模式TCS: 涓流充电选择DS: 二极管选择位TCS=1010 使能涓流充电DS=01 选择一个二极管TCS=其它禁止涓流充电DS=10 选择两个二极管DS=00 或11, 即使TCS=1010, 充电功能也被禁止RS 位电阻典型位00 没有没有01 R1 2K10 R2 4K11 R3 8K管脚配置DS1302 与微控制器的接口软件及功能应用举例下面首先给出基本的接口软件然后举例说明各种功能的应用1 写保护寄存器操作当写保护寄存器的最高位为0 时允许数据写入寄存器写保护寄存器可以通过命令字节8E 8F 来规定禁止写入/读出写保护位不能在多字节传送模式下写入Write_Enable:MOV Command,#8Eh ;命令字节为8EMOV ByteCnt,#1 ;单字节传送模式MOV R0,#XmtDat 数据地址覆给R0MOV XmtDat,#00h 数据内容为0 写入允许ACALL Send_Byte 调用写入数据子程序RET 返回调用本子程序处当写保护寄存器的最高位为1 时禁止数据写入寄存器Write_Disable:MOV Command,#8Eh ;命令字节为8EMOV ByteCnt,#1 ;单字节传送模式MOV R0,#XmtDat 数据地址覆给R0MOV XmtDat,#80h 数据内容为80h 禁止写入ACALL Send_Byte 调用写入数据子程序RET 返回调用本子程序处以上程序调用了基本数据发送(Send_Byte)模块及一些内存单元定义, 其源程序清单在附录中给出下面的程序亦使用了这个模块2 时钟停止位操作当把秒寄存器的第7 位时钟停止位设置为0 时起动时钟开始Osc_Enable:MOV Command,#80h ; 命令字节为80MOV ByteCnt,#1 ; 单字节传送模式MOV R0,#XmtDat 数据地址覆给R0MOV XmtDat,#00h 数据内容为0 振荡器工作允许ACALL Send_Byte 调用写入数据子程序RET 返回调用本子程序处当把秒寄存器的第7 位时钟停止位设置为1 时时钟振荡器停止HT1380 进入低功耗方式Osc_Disable:MOV Command,#80h ;命令字节为80MOV ByteCnt,#1 ;单字节传送模式MOV R0,#XmtDat 数据地址覆给R0MOV XmtDat,#80h 数据内容为80h 振荡器停止ACALL Send_Byte 调用写入数据子程序RET 返回调用本子程序处3. 多字节传送方式当命令字节为BE 或BF 时DS1302 工作在多字节传送模式8 个时钟/日历寄存器从寄存器0 地址开始连续读写从0 位开始的数据当命令字节为FE 或FF 时DS1302 工作在多字节RAM 传送模式31 个RAM 寄存器从0 地址开始连续读写从0 位开始的数据例如写入00 年6 月21 日星期三13 时59 分59 秒程序设置如下Write_Multiplebyte:MOV Command,#0BEh ;命令字节为BEhMOV ByteCnt,#8 ;多字节写入模式此模块为8 个MOV R0,#XmtDat 数据地址覆给R0MOV XmtDat,#59h 秒单元内容为59hMOV XmtDat+1,#59h 分单元内容为59hMOV XmtDat+2,#13h 时单元内容为13hMOV XmtDat+3,#21h 日期单元内容为21hMOV XmtDat+4,#06h 月单元内容为06hMOV XmtDat+5,#03h 星期单元内容为03hMOV XmtDat+6,#0 年单元内容为00hMOV XmtDat+7,#0 写保护单元内容为00hACALL Send_Byte 调用写入数据子程序RET 返回调用本子程序处读出寄存器0-7 的内容程序设置如下Read_Multiplebyte:MOV Command,#0BFh ;命令字节为BFhMOV ByteCnt,#8 ;多字节读出模式此模块为8 个MOV R1,#RcvDat 数据地址覆给R1ACALL Receive_Byte 调用读出数据子程序RET 返回调用本子程序处以上程序调用了基本数据接收(Receive_Byte)模块及一些内存单元定义, 其源程序清单在附录中给出下面的程序亦使用了这个模块4. 单字节传送方式例如写入8 时12 小时模式程序设置如下Write_Singlebyte:MOV Command,#84h ; 命令字节为84hMOV ByteCnt,#1 ; 单字节传送模式MOV R0,#XmtDat 数据地址覆给R0MOV XmtDat,#88h 数据内容为88hACALL Send_Byte 调用写入数据子程序RET 返回调用本子程序处上面所列出的程序模块Write_Enable Write_Disable Osc_Enable Osc_Disable与单字节写入模块Write_Singlebyte 的程序架构完全相同仅只是几个入口参数不同本文是为了强调功能使用的不同才将其分为不同模块另外,与涓流充电相关的设定也是单字节操作方式,这里就不再单独列出,用户在使用中可灵活简略下面模块举例说明如何单字节读出小时单元的内容.Read_Singlebyte:MOV Command,#85h ; 命令字节为85hMOV ByteCnt,#1 ; 单字节传送模式MOV R1,#RcvDat 数据地址覆给R1ACALL Receive_Byte 调用读出数据子程序RET 返回调用本子程序处DS1302 应用电路原理图P87LPC764 单片机选取内部振荡及内部复位电路附录数据发送与接收模块源程序清单; CPU 工作频率最大不超过20MHz;******************************************************************** ************************; P87LPC762/4 主控器发送接受数据程序; 说明本程序是利用Philips 公司的P87LPC764 单片机任何具有51 内核或其它合适的单片机都可在此作为主控器的普通I/O 口(如P1.2/P1.3/P1.4)实现总线的功能对总线上的器件本程序采用DS1302进行读写操作命令字节在Command 传送字节数在ByteCnt 中所发送的数据在XmtDat 中所接收的数据在RcvDat 中;******************************************************************** ************************;P87LPC762/4 主控器总线发送接受数据程序头文件;内存数据定义BitCnt data 30h ; 数据位计数器ByteCnt data 31h ; 数据字节计数器Command data 32h ; 命令字节地址RcvDat DATA 40H ; 接收数据缓冲区XmtDat DATA 50H ; 发送数据缓冲区;端口位定义IO_DATA bit P1.3 ; 数据传送总线SCLK bit P1.4 ; 时钟控制总线RST bit P1.2 ; 复位总线;******************************************************************** ************************;发送数据程序;名称:Send_Byte;描述:发送ByteCnt 个字节给被控器DS1302;命令字节地址在Command 中;所发送数据的字节数在ByteCnt 中发送的数据在XmtDat 缓冲区中;******************************************************************** ************************Send_Byte:CLR RST ;复位引脚为低电平所有数据传送终止NOPCLR SCLK 清时钟总线NOPSETB RST ;复位引脚为高电平逻辑控制有效NOPMOV A,Command 准备发送命令字节MOV BitCnt,#08h 传送位数为8S_Byte0:RRC A 将最低位传送给进位位CMOV IO_DATA,C 位传送至数据总线NOPSETB SCLK 时钟上升沿发送数据有效NOPCLR SCLK 清时钟总线DJNZ BitCnt,S_Byte0 位传送未完毕则继续NOPS_Byte1: 准备发送数据MOV A,@R0 传送数据过程与传送命令相同MOV BitCnt,#08hS_Byte2:RRC AMOV IO_DATA,CNOPSETB SCLKNOPCLR SCLKDJNZ BitCnt,S_Byte2INC R0 发送数据的内存地址加1DJNZ ByteCnt,S_Byte1 字节传送未完毕则继续NOPCLR RST 逻辑操作完毕清RSTRET;******************************************************************** *******************;接收数据程序;;名称:Receive_Byte;描述:从被控器DS1302 接收ByteCnt 个字节数据;命令字节地址在Command 中;所接收数据的字节数在ByteCnt 中接收的数据在RcvDat 缓冲区中;******************************************************************** ***************Receive_Byte:CLR RST ;复位引脚为低电平所有数据传送终止NOPCLR SCLK 清时钟总线NOPSETB RST ;复位引脚为高电平逻辑控制有效MOV A,Command 准备发送命令字节MOV BitCnt,#08h 传送位数为8R_Byte0:RRC A 将最低位传送给进位位CMOV IO_DATA,C 位传送至数据总线NOPSETB SCLK 时钟上升沿发送数据有效NOPCLR SCLK 清时钟总线DJNZ BitCnt,R_Byte0 位传送未完毕则继续NOPR_Byte1: 准备接收数据CLR A 清类加器CLR C 清进位位CMOV BitCnt,#08h 接收位数为8R_Byte2:NOPMOV C,IO_DATA 数据总线上的数据传送给CRRC A 从最低位接收数据SETB SCLK 时钟总线置高NOPCLR SCLK 时钟下降沿接收数据有效DJNZ BitCnt,R_Byte2 位接收未完毕则继续MOV @R1,A 接收到的完整数据字节放入接收内存缓冲区INC R1 接收数据的内存地址加1DJNZ ByteCnt,R_Byte1 字节接收未完毕则继续NOPCLR RST 逻辑操作完毕清RSTRETEND(文章出处电子爱好者)。

DS1302时钟芯片实例讲解

DS1302时钟芯片实例讲解

Page 13
Page 14
驱动程序
Page 15
Page 4
DS1302的寄存器:
DS1302有关于日历、时间的寄存器共有12个。其中七个 寄存器(读时81H--8DH,写时80H--8CH),存放的数据 格式是BCD码形式。
Page 5
注意: 注意:
1)、小时寄存器(85H、84H)的位7用来定义DS1302 是运行12小时模式还是24小时模式。为高时是12小时模 式。在12小时模式时,位5为1是下午(PM)。在24小时 模式时,位5是第二个10小时位。 2)、秒寄存器(81H、80H)的位7定义为时钟暂停标志 (CH)。当CH=1时,时钟振荡器停止,DS1302为低能 耗状态,CH=0时,时钟正常运行。 3)、控制寄存器(8FH、8EH)位7为写保护位,其他7 位均置0。在任何对时钟和RAM写操作之前,WP位必须 置0。当WP=1时,写保护位防止对任意寄存器进行写操 作。
Page 11
小时寄存器 1 日寄存器 月寄存器 1 1
星期寄存器 1 年寄存器 1
寄存器名称
D 7 1
D6 RAM/C K 0 0 0 1 1 1 1
D D4 D3 D2 5 A A3 A2 A1 4 0 0 1 0 0 1 1 0 1 0 1 0 … 1 1 1DS1302时钟芯片实例讲解
11-嵌本班--赵晶
DS1302的简介:
Page 2
DS1302外部引脚分配及功能:
X1、X2:32.768KHz晶振接入引脚。 X1、X2:32.768KHz晶振接入引脚。 晶振接入引脚 GND: GND: 接 地。 CE:复位引脚,低电平有效, CE:复位引脚,低电平有效,操作时高电 平。 I/O:数据输入/输出引脚, I/O:数据输入/输出引脚,具有三态功 能。 SCLK:串行时钟输入引脚。 SCLK:串行时钟输入引脚。 Vcc1: 工作电源引脚。 Vcc1: 工作电源引脚。 Vcc2: 备用电源引脚。 Vcc2: 备用电源引脚。

实时时钟芯片DS1302在教学中的研究与应用

实时时钟芯片DS1302在教学中的研究与应用

_
_
_
u 8 c o d e S e g C o d e口: { 0 x 3  ̄0 x 0 6 ’ 0 x S b ,O x 4 f ,0 x 6 6 , 0 x 6 d , O x 7 d ,0 x 0 7 ,0 x 7 ‘0 x 6 £ O x O 0 } ; v o i d DS13 0 2 I n i t i a  ̄ v o i d DS 1 3 0 2S e t T i m e ( u 8 v o i d DS1 3 02 Ge t T i me ( u 8
s b i t I O=P 2 1 ; / / D S 1 3 0 2数据口 P 1 . 1 s b i t R S T:P 2 2 ; / / D S 1 3 0 2片选 口 P 1 . 2 / / 秒分时 日 月星期年 u 8 n o w [ ] = ( O x 3 q 0 x 0 &O x 3 1 , O x 0 5 , 0 x O 4 , O x 1 6 } ;
科 技论 坛
实时时钟芯片 DS 1 3 0 2 在教学 中的研究与应用
张继峰
( 东北石油大学秦 皇岛分校 , 河北 秦 皇岛 0 6 6 0 0 4 ) 摘 要: D S 1 3 0 2是 美国 D a l l a s公 司推 出的一种 高性能、 低功耗 、 带 R A M 的实时时钟 芯片。通过研 究 D S 1 3 0 2芯 片原理 , 应用方法 及典型 电路分析 , 使 学生掌握芯 片应用方法和手段。在硬 件编程 中, 掌握三线接 口与 C P U进行 同步通信 , 中断应 用, 定 时应 用, 最终达到
P2 0、 P21 、 P2 2。
n o p _ 0  ̄
d a t > > =1 ; , / 数据右移—位

DS1302实时时钟芯片应用

DS1302实时时钟芯片应用

DS1302实时实钟芯片应用(一)DS1302概述DS1302是DALLAS公司生产的绢流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与微控制器进行通信。

具有秒、分、时、日、周、月、年信息。

每月的天数和闰年的天数可自动调整。

时钟和RAM的读/写可以以一个字节或多达31个字节的形式进行传输。

DS1302工作时的功耗很低,保持数据和时钟信息时所需功率小于1mW。

有主电源和备用电源。

(二)DS1302的主要性能A. 实时时钟能计算到2099年B. 31字节静态RAMC. 串口通信方式D. 电压范围2~5.5V,2V时工作电流小于300nAE. 温度范围-40~+85℃(三)引脚及功能(四)DS1302的命令字每一次数据传送都由一字节命令字开始,其后紧跟一字节数据或多字节数据。

命令字如下:读写DS1302内部RAM命令字如下:(五)DS1302的数据传送通过把/RST拉至高电平来启动数据传送,将/RST拉至低电平则可终止数据传送,I/O引脚变为高阻状态。

数据输入时,在时钟的上升沿数据必须有效,而数据位在时钟的下降沿输出。

上电时,在Vcc≥2.5V之前,/RST必须为逻辑0。

此外,当把/RST拉至逻辑1时,SCLK必须为逻辑0。

跟随在写命令字节的8个SCLK周期之后,在下8个SCLK周期的上升沿输入数据字节,如果有额外的SCLK 周期,它们将被忽略,数据从最低位(位0)开始传送。

跟随在读命令字节的8个时钟周期之后,在下8个时钟周期的下将沿输出数据字节。

注意:被传送的第一个数据位发生在写命令字节的最后一位之后和第一个下将沿。

只要/RST保持高电平,如果有额外的时钟周期,它们将重新发送数据字节,这一操作使之具有连续的多字节的读能力。

另外,在时钟的每一个上升沿,I/O引脚为三态。

数据从最低位开始是传送。

DS1302的多字节读写:对时钟/日历寄存器进行多字节读写时,其命令字节BFH为读,BEH为写;当对RAM 进行多字节读写时,其命令字节FFH为读,FEH为写。

51单片机综合学习系统之 DS1302时钟应用篇

51单片机综合学习系统之 DS1302时钟应用篇

51单片机综合学习系统之DS1302时钟应用篇大家好,通过以前的学习,我们已经对51单片机综合学习系统的使用方法及学习方式有所了解与熟悉,学会了使用AD模数转换的基本知识,体会到了综合学习系统的易用性与易学性,这一期我们将一起学习DS1302时钟的基本原理与应用实例。

先看一下我们将要使用的51单片机综合学习系统能完成哪些实验与产品开发工作:分别有流水灯,数码管显示,液晶显示,按键开关,蜂鸣器奏乐,继电器控制,IIC总线,SPI总线,PS/2实验,AD模数转换,光耦实验,串口通信,红外线遥控,无线遥控,温度传感,步进电机控制等等。

主体系统如图1所示,其配套书本教程《单片机快速入门》如图2所示。

图151单片机综合学习系统主机部分图片图251单片机综合学习系统配套书本教程——《单片机快速入门》上图是我们将要使用的51单片机综合学习系统硬件平台,如图1所示,本期实验我们用到了综合系统主机、板载的DS1302时钟芯片,综合系统其它功能模块原理与使用详见前几期《电子制作》杂志及后期连载教程介绍。

在很多单片机系统中都要求带有实时时钟电路,如最常见的数字钟、钟控设备、数据记录仪表,这些仪表往往需要采集带时标的数据,同时一般它们也会有一些需要保存起来的重要数据,有了这些数据,便于用户后期对数据进行观察、分析。

本小节就介绍市面上常见的时钟芯片DS1302的应用。

DS1302是美国DALLAS公司推出的一款高性能、低功耗、带内部RAM的实时时钟芯片(RTC),也就是一种能够为单片机系统提供日期和时间的芯片。

通过本小节的学习,我们将会把RTC相关的一些技术粗略介绍一下,然后介绍DS1302与单片机之间的软硬件应用。

DS1302时钟芯片简介DS1302是DALLAS公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与单片机进行通信。

实时时钟/日历电路提供秒、分、时、日、星期、月、年的信息,每个月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM标志位决定采用24或12小时时间格式。

51单片机综合学习系统之 DS1302时钟应用篇

51单片机综合学习系统之 DS1302时钟应用篇

51单片机综合学习系统之DS1302时钟应用篇大家好,通过以前的学习,我们已经对51单片机综合学习系统的使用方法及学习方式有所了解与熟悉,学会了使用AD模数转换的基本知识,体会到了综合学习系统的易用性与易学性,这一期我们将一起学习DS1302时钟的基本原理与应用实例。

先看一下我们将要使用的51单片机综合学习系统能完成哪些实验与产品开发工作:分别有流水灯,数码管显示,液晶显示,按键开关,蜂鸣器奏乐,继电器控制,IIC总线,SPI总线,PS/2实验,AD模数转换,光耦实验,串口通信,红外线遥控,无线遥控,温度传感,步进电机控制等等。

主体系统如图1所示,其配套书本教程《单片机快速入门》如图2所示。

图151单片机综合学习系统主机部分图片图251单片机综合学习系统配套书本教程——《单片机快速入门》上图是我们将要使用的51单片机综合学习系统硬件平台,如图1所示,本期实验我们用到了综合系统主机、板载的DS1302时钟芯片,综合系统其它功能模块原理与使用详见前几期《电子制作》杂志及后期连载教程介绍。

在很多单片机系统中都要求带有实时时钟电路,如最常见的数字钟、钟控设备、数据记录仪表,这些仪表往往需要采集带时标的数据,同时一般它们也会有一些需要保存起来的重要数据,有了这些数据,便于用户后期对数据进行观察、分析。

本小节就介绍市面上常见的时钟芯片DS1302的应用。

DS1302是美国DALLAS公司推出的一款高性能、低功耗、带内部RAM的实时时钟芯片(RTC),也就是一种能够为单片机系统提供日期和时间的芯片。

通过本小节的学习,我们将会把RTC相关的一些技术粗略介绍一下,然后介绍DS1302与单片机之间的软硬件应用。

DS1302时钟芯片简介DS1302是DALLAS公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与单片机进行通信。

实时时钟/日历电路提供秒、分、时、日、星期、月、年的信息,每个月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM标志位决定采用24或12小时时间格式。

单片机学习项目 (12) 实时时钟DS1302的原理与应用

单片机学习项目 (12) 实时时钟DS1302的原理与应用

单片机学习项目项目12-实时时钟DS1302的原理与应用一:电路原理图利用数码管显示时间,可以在电子表电路基础上连接DS1302完成,见图5-3-3所示。

6反相器74HC04为动态显示的数码管阳极驱动,中间非门省略。

图中数码管的驱动采用74HC573。

DS1302的SCLK接单片机P3.7, I/O(SDA)端口接P1.0,RST接P1.1;DS1302的X1和X2接32768Hz的标准时钟晶振。

一:程序设计主程序主用作用是调用DS1302子程序,把读取到的是时间信息通过数码管显示出来,由于采用动态显示,因此主程序中要用到定时器中断。

分页显示在定时器中断服务函数中进行。

程序清单如下:#include<reg51.h>#include”ds1302.c”uchar cp1,cp2,cp3;code uchar seven_seg[10] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};code uchar seg_bit[] ={0x01,0x02,0x04,0x08,0x10,0x20};uchar flash;bit conv;void time0_isr(void) interrupt 1 //利用中断对数码管上显示的数据进行刷新{TH0= (65536 –2000) / 256;TL0= (65536 –2000) % 256;cp1++;if(cp1>= 250)//0.5秒{cp1= 0;flash= ~flash; //产生小数点闪烁变量cp2++;if(cp2>= 5){conv= !conv;//产生交替显示变量cp2= 0;}}P0= 0xff;//消隐if(conv== 1){switch(cp3){case0:P0 = seven_seg[sec % 10];break;case1:P0 = seven_seg[sec / 10];break;case2:P0 = seven_seg[min % 10] & (0x7f | flash);break;case3:P0 = seven_seg[min / 10];break;case4:P0 = seven_seg[hour % 10] & (0x7f | flash);break;case5:P0 = seven_seg[hour / 10];break;} }else{switch(cp3){case0:P0 = seven_seg[date % 10];break;case1:P0 = seven_seg[date / 10];break;case2:P0 = seven_seg[month % 10];break;case3:P0 = seven_seg[month / 10];break;case4:P0 = seven_seg[year % 10];break;case5:P0 = seven_seg[year / 10];break;}}P2= seg_bit[cp3];cp3++;if(cp3>= 6)cp3 = 0;}void timer0_init(void) //Timer0初始化{TMOD= 0x01;TH0= (65536 –2000) / 256;TL0= (65536 –2000) % 256;TR0= 1;ET0= 1;EA = 1;}void main(void){uchari = 46;//举例,比如要调整时间,分钟设定为46分i= DEC_BCD_conv(i);timer0_init();write_ds1302_add_dat(0x8e,0x00); //写操作,可以对DS1302调整write_ds1302_add_dat(0x80,0x30); //写秒,30秒write_ds1302_add_dat(0x82,i); //写分,46分write_ds1302_add_dat(0x84,0x12); //写时,12时write_ds1302_add_dat(0x86,0x28); //写日,28日write_ds1302_add_dat(0x88,0x05); //写月,5月write_ds1302_add_dat(0x8a,0x03); //写星期,星期三write_ds1302_add_dat(0x8c,0x12); //写年,(20)12年write_ds1302_add_dat(0x8e,0x80); //写保护while(1){get_ds1302_time();}}一、DS1302驱动程序DS1302驱动程序包含以上操作函数,程序完成后存放在DS1302.c中,用于带有DS1302芯片的单片机系统中。

51 DS1302实时时钟 实验(十四)

51 DS1302实时时钟 实验(十四)

实验十四: DS1302实时时钟实验一、 硬件原理图:Ds1302接线图键盘接线二、硬件接线图:华南理工大学无线电爱好者协会F D R 工作室三、实验原理:DS1302 是美国DALLAS 公司推出的一种高性能、低功耗、带RAM 的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为 2.5V ~5.5V 。

采用三线接口与CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM 数据。

DS1302内部有一个31×8的用于临时性存放数据的RAM 寄存器。

DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。

2.1 引脚功能及结构 图1示出DS1302的引脚排列,其中V cc1为后备电源,V CC2为主电源。

在主电源关闭的情况下,也能保持时钟的连续运行。

DS1302由V cc1或V cc2两者中的较大者供电。

当V cc2大于V cc1+0.2V 时,V cc2给DS1302供电。

当V cc2小于V cc1时,DS1302由V cc1供电。

X1和X2是振荡源,外接32.768kHz 晶振。

RST 是复位/片选线,通过把RST 输入驱动置高电平来启动所有的数据传送。

RST 输入有两种功能:首先,RST 接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST 提供终止单字节或多字节数据的传送手段。

当RST 为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。

如果在传送过程中RST 置为低电平,则会终止此次数据传送,I/O 引脚变为高阻态。

上电运行时,在V cc ≥2.5V 之前,RST 必须保持低电平。

只有在SCLK 为低电平时,才能将RST 置为高电平。

I/O 为串行数据输入输出端(双向),后面有详细说明。

SCLK 始终是输入端。

华南理工大学无线电爱好者协会F D R 工作室2.2 DS1302的控制字节 DS1302 的控制字如图2所示。

时钟芯片DS1302及其应用

时钟芯片DS1302及其应用

DS1302示例
• 所有的数据传输必须在RST为高电平时进行(如 果在传输过程中RST置低电平,则会终止此次数 据传送,IO引脚变为高阻态) • 上电运行时,RST必须保持低电平。只有在SCLK 为低电平时,才能将RST置为高电平。 • 写操作前,关闭写保护;写操作完成后,要打开 写保护 • DS1302的仿真模型在Microprocessor ICs里面 • 充电电池BATTERY在Miscellaneous里面,但是 没有仿真模型
CH 0 12/24 0 0 0 0 0 0 0
秒的十位 分的十位 A/P HR
秒的个位 分的个位 小时个位 日的个位 月的个位 0 星期几 年的个位
日的十位 0 0 0/1 0
年的十位
注意: 注意: 1、秒寄存器的 位:置1,时钟停振,进入低功耗态;置0,时钟工作。 、秒寄存器的CH位 ,时钟停振,进入低功耗态; ,时钟工作。 2、小时寄存器的D7位:置1,12小时制(D5置1表示上午,置0表示下午); 、小时寄存器的 位 , 小时制( 置 表示上午, 表示下午); 小时制 表示上午 表示下午 小时制( 组成小时的十位)。 置0,24小时制(此时 、D4组成小时的十位)。 , 小时制 此时D5、 组成小时的十位
R/W:1——可以读;0——可以写 R/C:1——普通存储器;0——特殊寄存器
R/W:1——可以读;0——可以写 R/C:1——普通存储器;0——特殊寄存器
R/W:1——可以读;0——可以写 R/C:1——普通存储器;0——特殊寄存器
DS1302初始化
一般程序设计流程: 1、注意对DS1302的读写操作必须在RST为1时才允许操作; 2、确认对DS1302是读操作还是写操作:写操作时必须关闭写保护寄存器的写保 护位(0x00);读操作时跟此寄存器无关; 3、确认是否需要对备用电池充电操作; 4、确定采用单字节操作还是突发模式操作;(SPI串口通信:RST、SCLK、I/O) 串口通信: 串口通信 、 、 ) 单字节读写操作: 单字节读写操作: 写操作:先写地址( ),然后写数据 写操作:先写地址(RW=0,允许写数据的单元地址),然后写数据 ,允许写数据的单元地址), 读操作:先写地址( ),然后读数据 读操作:先写地址(RW=1,允许读数据的单元地址),然后读数据 ,允许读数据的单元地址), 突发模式读写操作: 突发模式读写操作: 时间/日历特殊寄存器必须一次读写 日历特殊寄存器必须一次读写8个寄存器 时间 日历特殊寄存器必须一次读写 个寄存器 RAM普通寄存器可一次读写 普通寄存器可一次读写1—31个寄存器 普通寄存器可一次读写 个寄存器 写操作:先写地址( )),然后写多个数据 写操作:先写地址(0xBE(特殊)/0xFE(普通)),然后写多个数据 (特殊) (普通)), (8个(特殊)/1—31(普通)) 个 特殊) (普通)) 读操作:先写地址( )),然后读多个数据 读操作:先写地址(0xBF(特殊)/0xFF(普通)),然后读多个数据 (特殊) (普通)), (8个(特殊)/1—31(普通)) 个 特殊) (普通)) 5、读写操作完毕(写操作完成后必须打开写保护寄存器的写保护位(0x80))。

DS1302程序设计实例

DS1302程序设计实例

时钟芯片DS1302汇编程序interval equ 5000;Timer0 定时常数Flag05s bit 00h ;0.5秒标志T_RST Bit P1.2;实时时钟复位线引脚T_CLK Bit P1.1;实时时钟时钟线引脚T_IO Bit P1.0 ;实时时钟数据线引脚;DS1302内部参数,0.5秒读一次SECOND EQU 30HMINUTE EQU 31HHOUR EQU 32HDAY EQU 33HMONTH EQU 34HWEEK EQU 35HYEAR EQU 36HDspBuf EQU 40H ;显示缓冲区SeleDIG equ 44h ;位扫描Ti5ms EQU 45H ;系统时钟每4ms加"1" Ti05S EQU 46HP2BUF EQU 47H ;输出口内部寄存器STATE EQU 48HStTmr equ 49hORG 0000HAJMP STARTORG 0BHAJMP ITimer0ORG 80HSEGCODE:;db 01h,02h,04h,08,10h,20h,40h, 80h DB 3FH,06H,5BH,4FH,66H;段码表 DB 6DH,7DH,07H,7FH,6FH DB 7BH,7CH,39H,5EH,79H,71HDB 00HORG 100HSTART: MOV IE,#00Hclr AMOV R0,#0FFHSTART1: MOV @R0,ADJNZ R0,START1MOV SP,#0C0H ;修改堆栈MOV TMOD,#11HMOV TH0,#HIGH(65536-interval) MOV TL0,#LOW(65536-interval) SETB TR0MOV SECOND,#02H ;初始时间设为12:00:00MOV MINUTE,#01HMOV HOUR,#20HMOV DAY,#30H ;初始日期设为08年1月1日第一周MOV MONTH,#10HMOV WEEK,#01HMOV YEAR,#09HLCALL SETDS1302MOV SELEDIG,#00HMOV IE,#02HSETB EAmov r6,#51hmov r7,#0CDhcall UpdateBufLOOP: nopjnb Flag05s,loop01clr Flag05sinc Ti05sLCALL GET1302call ChgStcall displayloop01: nopnopnopLJMP LOOP;状态转换,;5秒转换一次,state=0,显示“年”;1===“月日”;2===“时分”;3===“分秒”ChgSt: mov a,Ti05sclr csubb a,StTmrcjne a,#10,$+3jc ChgSt00mov StTmr,Ti05sinc StateChgSt00: retDisplay: mov a,Stateanl a,#03hcjne a,#00h,Display01mov r6,#20hmov r7,yearajmp Display00display01:cjne a,#01h,Display02mov r6,monthmov r7,dayajmp Display00display02:cjne a,#02h,Display03mov r6,hourmov r7,minuteajmp Display00display03:cjne a,#03h,Display04mov r6,minutemov r7,secondDisplay00:call UpdateBufretdisplay04:mov state,#0ffhret;更新显示缓冲区;将R6R7的内容显示在LED上,R6为高8位,显示在左边两个LED;R0,ACC,DPTRUpdateBuf:mov dptr,#segcodemov r0,#dspbufmov a,r6anl a,#0f0hswap amovc a,@a+dptrmov @r0,ainc r0mov a,r6anl a,#0fhmovc a,@a+dptrmov @r0,ainc r0mov a,r7anl a,#0f0hswap amovc a,@a+dptrmov @r0,ainc r0mov a,r7anl a,#0fhmovc a,@a+dptrmov @r0,ainc r0ret;定时器0中断服务程序ITimer0:MOV TH0,#HIGH(65536-interval) MOV TL0,#LOW(65536-interval) PUSH ACCmov a,Ti5msinc acjne a,#100,$+3jc ITimer04clr asetb Flag05sITimer04:mov Ti5ms,a;真实的电路必须加以下四行mov a,p2buforl a,#0fhMOV P2,amov p0,#00hINC SELEDIGMOV A,SELEDIGANL A,#03HJNZ ITIM01MOV A,P2BUFANL A,#0F0HORL A,#01HAJMP ITIM00ITIM01:CJNE A,#01H,ITIM02MOV A,P2BUFANL A,#0F0HORL A,#02HAJMP ITIM00ITIM02:CJNE A,#02H,ITIM03MOV A,P2BUFANL A,#0F0HORL A,#04HAJMP ITIM00 ITIM03: MOV A,P2BUFANL A,#0F0HORL A,#08HITIM00: cpl aMOV P2,AMOV A,SELEDIGANL A,#03HADD A,#DSPBUFMOV R0,AMOV A,@R0MOV P0,APOP ACCreti;设置DS1302初始时间,并启动计时SETDS1302:CLR T_RSTnopCLR T_CLKnopSETB T_RSTnopMOV B,#8EH ;写控制命令字LCALL INPUTBYTEMOV B,#00H ;写保护关闭LCALL INPUTBYTESETB T_CLKnopCLR T_RSTMOV R0,#SECOND;内存中的时间首地址MOV R1,#80H;DS1302中的时间首地址MOV R7,#7 ;字节数SETLOOP:CLR T_RSTnopCLR T_CLKnopSETB T_RSTnopMOV B,R1 ;写命令字LCALL INPUTBYTEMOV A,@R0 ;设置时间MOV B,ALCALL INPUTBYTEINC R0INC R1INC R1SETB T_CLKnopCLR T_RSTnopDJNZ R7,SETLOOPCLR T_RSTnopCLR T_CLKnopSETB T_RSTnopMOV B,#8EHLCALL INPUTBYTEMOV B,#80H;开写保护LCALL INPUTBYTESETB T_CLKnopCLR T_RSTnopRET;从DS1302读取时间GET1302:MOV R0,#SECONDMOV R1,#81H;DS1302中读时间的首地址MOV R7,#7GETLOOP:CLR T_RSTnopCLR T_CLKnopSETB T_RSTnopMOV B,R1LCALL INPUTBYTE;写命令字LCALL OUTPUTBYTE;读时间MOV @R0,A ;将从DS1302中读取的时间从内存中保存INC R0 ;修改地址指针 INC R1INC R1SETB T_CLKnopCLR T_RSTnopDJNZ R7,GETLOOPRET;向DS1302写一个字节INPUTBYTE:MOV R4,#8 INPUTLOOP:MOV A,BRRC AMOV B,AMOV T_IO,CSETB T_CLKNOP;NOPCLR T_CLKDJNZ R4,INPUTLOOPRET;从DS1302读一个字节OUTPUTBYTE:clr aclr cMOV R4,#8OUTPUTLOOP:NOP;NOPMOV C,T_IORRC ASETB T_CLKNOP;NOPCLR T_CLKDJNZ R4,OUTPUTLOOPRETEND ;======= ==== 基于DS1302的日历时钟演示实例#include<reg51.h>#include<intrins.h>unsigned char code digit[10]={"0123456789"}; sbit DATA=P3^6;sbit RST=P3^4;sbit SCLK=P3^5;sbit RS=P2^0;sbit RW=P2^1;sbit E=P2^2;sbit BF=P0^7;void delaynus(unsigned char n){ //延时若干微秒unsigned char i;for(i=0;i<n;i++);}void Write1302(unsigned char dat){unsigned char i;SCLK=0;delaynus(2);for(i=0;i<8;i++){DATA=dat&0x01;delaynus(2);SCLK=1;delaynus(2);SCLK=0;dat>>=1;} }函数功能:根据命令字,向1302写一个字节数据入口参数:Cmd,储存命令字;dat,储存待写的数据void WriteSet1302(unsigned char Cmd,unsigned char dat) {RST=0;SCLK=0;RST=1;delaynus(2);Write1302(Cmd);Write1302(dat);SCLK=1;RST=0;}unsigned char Read1302(void){unsigned char i,dat;delaynus(2);for(i=0;i<8;i++){dat>>=1;if(DATA==1)dat|=0x80;SCLK=1;delaynus(2);SCLK=0;delaynus(2);}return dat;}函数功能:根据命令字,从1302读取一个字节数据入口参数:Cmdunsigned char ReadSet1302(unsigned char Cmd){unsigned char dat;RST=0;SCLK=0;RST=1;Write1302(Cmd);dat=Read1302();SCLK=1;RST=0;return dat;}void Init_DS1302(void){WriteSet1302(0x8E,0x00); //写入不保护指令WriteSet1302(0x80,((0/10)<<4|(0%10)));//写入秒的初始值WriteSet1302(0x82,((0/10)<<4|(0%10)));//写入分的初始值WriteSet1302(0x84,((12/10)<<4|(12%10)));//写入小时的初始值WriteSet1302(0x86,((16/10)<<4|(16%10)));//写入日的初始值WriteSet1302(0x88,((11/10)<<4|(11%10)));//写入月的初始值WriteSet1302(0x8c,((8/10)<<4|(8%10)));//写入小时的初始值}函数功能:延时1ms(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒void delay1ms(){unsigned char i,j;for(i=0;i<10;i++)for(j=0;j<33;j++) ;}void delaynms(unsigned char n){unsigned char i;for(i=0;i<n;i++) delay1ms();}函数功能:判断液晶模块的忙碌状态返回值:result。

DS1302时钟C语言编程完整实例

DS1302时钟C语言编程完整实例

1 DS1302 简介:DS1302是美国D ALLAS 公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态R AM,采用S PI 三线接口与C PU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和R AM数据。

实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。

工作电压宽达2.5~5.5V。

采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。

DS1302的外部引脚分配如图1所示及内部结构如图2所示。

DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。

图1 DS1302的外部引脚分配图2 DS1302的内部结构各引脚的功能为:V cc1:主电源;Vcc2:备份电源。

当V cc2>Vcc1+0.2V 时,由Vcc2向D S1302供电,当V cc2< Vcc1时,由V cc1向D S1302供电。

SCLK:串行时钟,输入,控制数据的输入与输出;I/O:三线接口时的双向数据线;CE:输入信号,在读、写数据期间,必须为高。

该引脚有两个功能:第一,CE 开始控制字访问移位寄存器的控制逻辑;其次,CE 提供结束单字节或多字节数据传输的方法。

DS1302有下列几组寄存器:① D S1302有关日历、时间的寄存器共有12个,其中有7个寄存器 (读时81h ~8Dh ,写时80h ~8Ch ),存放的数据格式为 BCD 码形式, 如图3所示。

图 3 DS1302有关日历、时间的寄存器 小时寄存器(85h 、84h )的位7用于定义 D S1302是运行于12小时 模式还是24小时模式。

当为高时,选择12小时模式。

在12小时模式时,位5是 ,当为1时,表示 PM 。

在24小时模式时,位5是第二个10小时 位。

秒寄存器(81h 、80h )的位7定义为时钟暂停标志(CH )。

用ds1302制作一个精密的电子时钟

用ds1302制作一个精密的电子时钟

用ds1302制作一个精密的电子时钟感想:我看视频的时候讲的是DS12CR887这块芯片,两块毕竟是不一样的,所以,我只是看了他讲怎样看时序,之后的就没再看了。

我就拿着自己下载打印的DS1302数据手册,研习,研习,再研习。

还查了书上的,网上的,源程序。

但是,你别指望着谁会把所有的东西都给你写上去。

只能作为参考。

后来,我终于写出了一个程序,可是一编译,就漏洞百出。

最主要的有两点:for循环和BCD码。

不过还好,都得到了很好的解决。

解决方案:#include#include#define uchar unsigned char#define uint unsigned intuchar data table[]="2009-01-01 Mon.";uchar data table1[]=" 00:00:00";uchar code xingqi[]="Mon. Tue. Wed. Thu. Fri. Sat. Sun.";uchar num;uchar hour,min,sec,week,day,month,year;sbit ds1302_sclk=P1^4;sbit ds1302_io=P1^5;sbit ds1302_ce=P2^2;sbit acc0=ACC^0;sbit acc7=ACC^7;sbit lcdrs=P1^7; //端口定义sbit lcdrw=P1^6;sbit lcde=P2^4;sbit le=P3^ 6;sbit led en=P2^5;sbit dkle=P3^7;void delay(uint a);void write_byte(uchar dat) //写入一个字节{uchar i;ACC=dat;for(i=8;i>0;i--){ds1302_io=acc0;ds1302_sclk=1;ds1302_sclk=0;ACC=ACC>>1;}}uchar read_byte() //读出一个字节{uchar i;for(i=8;i>0;i--){ACC=ACC>>1;acc7=ds1302_io;ds1302_sclk=1;ds1302_sclk=0;}return(ACC);}void s_write(uchar add,uchar dat)//单字节写入子函数{ds1302_ce=0;ds1302_sclk=0;ds1302_ce=1;write_byte(add);write_byte(dat);ds1302_sclk=1;ds1302_ce=0;}uchar s_read(uchar add) //单字节读出子函数{uchar temp;ds1302_ce=0;ds1302_sclk=0;ds1302_ce=1;write_byte(add);temp=read_byte();ds1302_sclk=1;ds1302_ce=0;temp=(temp/0x0a)*10+temp%0x0a;return(temp);}void set_ds1302(uchar *pClock) //设置ds1302的时间{uchar i;uchar add=0x80;EA=0;s_write(0x8e,0x00);for(i=7;i>0;i--){s_write(add,*pClock);pClock++;add+=2;}s_write(0x8e,0x80);EA=1;}void read_ds1302(uchar Curtime[]) //读取ds1302的时间{uchar i;uchar add=0x81;EA=0;for(i=7;i>0;i--){Curtime[i]=s_read(add);add+=2;}EA=1;}void write_com(uchar com) //写命令子函数{lcde=0;lcdrw=0;lcdrs=0;delay(1);lcde=1;delay(1);P0=com;delay(1);lcde=0;}void write_data(uchar dat) //写数据子函数{lcde=0;lcdrw=0;lcdrs=1;delay(1);lcde=1;delay(1);P0=dat;delay(1);lcde=0;}void init(){month=1;day=1;year=9;lcde=0; //LCD1602初始化le=0;leden=0;write_com(0x38);delay(100);write_com(0x38);delay(50);write_com(0x38);delay(10);write_com(0x08);write_com(0x01);write_com(0x0c);write_com(0x80);for(num=0;num<15;num++) //在第一行显示“ 2000-00-00 Mon.”{write_data(table[num]);}write_com(0x80+0x40);for(num=0;num<10;num++) //在第二行末尾显示“00:00:00”{write_data(table1[num]);}}void write_time(uchar add,uchar dat) //写入时间子函数{uchar shi,ge;shi=dat/16;ge=dat%16;write_com(0x80+0x40+add);write_data(0x30+shi);write_data(0x30+ge);}void write_riqi(uchar add,uchar dat) //写入日期子函数{uchar shi,ge;shi=dat/16;ge=dat%16;write_com(0x80+add);write_data(0x30+shi);write_data(0x30+ge);}void write_xingqi(uchar dat) //写入星期子函数{write_com(0x80+0x0b);switch(dat){case 1: for(num=0;num<4;num++){write_data(xingqi[num]);};break;case 2: for(num=5;num<9;num++){write_data(xingqi[num]);};break;case 3: for(num=10;num<14;num++){write_data(xingqi[num]);};break;case 4: for(num=15;num<19;num++){write_data(xingqi[num]);};break;case 5: for(num=20;num<24;num++){write_data(xingqi[num]);};break;case 6: for(num=25;num<29;num++){write_data(xingqi[num]);};break;case 7: for(num=30;num<34;num++){write_data(xingqi[num]);};break;}}void main(){init();delay(5);s_write(0x8e,0x00); //控制写入WP=0 s_write(0x90,0xa5);s_write(0x80,0x00); //秒s_write(0x82,0x20); //分s_write(0x84,0x09); //时24时制s_write(0x86,0x27); //日s_write(0x88,0x08); //月s_write(0x8a,0x04); //星期s_write(0x8c,0x09); //年 */s_write(0x8e,0x80);//控制写入WP=1;P0=0xff;while(1){sec=s_read(0x81);write_time(8,sec);write_com(0x80+0x40+9);min=s_read(0x83);write_time(5,min);write_com(0x80+0x40+6);hour=s_read(0x85);write_time(2,hour);write_com(0x80+0x40+3); week=s_read(0x8b);write_xingqi(week);write_com(0x80+0x0d);day=s_read(0x87);write_riqi(8,day);write_com(0x80+9);month=s_read(0x89);write_riqi(5,month);write_com(0x80+6);year=s_read(0x8d);write_riqi(2,year);write_com(0x80+3);}}void delay(uint a) { //延时子函数uint i,j;for(j=a;j>0;j--)for(i=250;i>0;i--) ;}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2)在控制指令字输入后的下一个SCLK时钟的上升沿 时数据被写入DS1302,数据输入从低位即位0开始。同 样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降 沿读出DS1302的数据,读出数据时从低位0位至高位7。
6.5
DS1302的读写时序
不仅要向寄存器写入控制字。还需要读取相应寄存器 的数据。要想与DS1302通信,首先要先了解DS1302的控
日历、 时钟寄存器及其控制字对照表 7 6 5 4 A3 0 0 0 0 0 0 0 0 1 1 3 A2 0 0 0 0 1 1 1 1 0 1 2 A1 0 0 1 1 0 0 1 1 0 1 1 A0 0 1 0 1 0 1 0 1 0 1 0 RD/W 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0
//秒 //分 //时 //日 //月 //星期 //年
time1[4]=d&0x0f; time1[5]=(d>>4)&0x0f; } void set_time(void) { v_W1302(0x8e,0x00); v_W1302(0x80,0x80); v_W1302(0x82,min); v_W1302(0x84,hou); v_W1302(0x86,day); v_W1302(0x88,mon); v_W1302(0x8c,yea); v_W1302(0x80,0x00); v_W1302(0x8e,0x80); } 以上函数为DS1302.H文件,在主函数中要调用该函数
源,外接32.768kHz晶振。RST是复位/片选线,通过把
RST输入驱动置高电平来启动所有的数据传送。RST输入
有两种功能:首先,RST接通控制逻辑,允许地址/命令序 列送入移位寄存器;其次,RST提供终止单字节或多字节 数据的传送手段。 当RST为高电平时,所有的数据传送被初始化,允许 对DS1302进行操作。如果在传送过程中RST置为低电平, 则会终止此次数据传送,I/O引脚变为高阻态。上电运
/************************************************************************** 程序描述:该程序能通过和单片机连接的按键调整并设置DS1302的时间,并能将 从DS1302中读出的时间在六个七段数码管上显示,P0口驱动数码管的各段,P2口 低六位连接到六个数码管的公共端,数码管为共阳。 **************************************************************************/ #include <reg51.h> #include <intrins.h> #include "DS1302.h" #define uchar unsigned char #define uint unsigned int code seven_tab[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; code bit_select[6] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; uint get_time_flag; uchar dot,flash,a,b,c,d; uchar year,month,day,hour,minute,second,week; uchar key1_state,key2_state,key3_state,key4_state,ttt; static uchar key1_flag=0; //定义静态变量 sbit key1 = P3^0; //定义4个按键的端口 sbit key2 = P3^1; sbit key3 = P3^2; sbit key4 = P3^3; /************时间延迟函数**************/
sbit ACC7=ACC^7; uchar time1[6]; char counter[3]; uchar sec,min,hou,day,mon,yea; void Init1302(void); void v_W1302(uchar ucAddr, uchar ucDa); uchar uc_R1302(uchar ucAddr); void get_time(void); void set_time(void); /*********往DS1302写入1Byte数据**************/ void v_WTInputByte(uchar ucDa) { uchar i; ACC= ucDa; for(i=8; i>0; i--) { T_IO = ACC0; //*相当于汇编中的 RRC T_CLK = 1; T_CLK = 0; ACC =ACC>> 1; } } /**********从DS1302读取1Byte数据********************/
提BCD码表示的时间和日期的器件。主系统与RTC间的通
信可通过并行口也可通过串行口,并行器件速度快但需 较大的底板空间和较昂贵,串行器件体积较小且价格也 相对便宜。 希望读者在学完本节后,能完成相关的电路设计,并
掌握如下知识点:
◆掌握时钟芯片DS1302的原理、特性及选择;
◆51单片机和时钟芯片DS1302的接口电路设计;
器。
DS1302是DS1202的升级产品,与DS1202兼容,但
增加了主电源/后背电源双电源引脚,同时提供了对后背电
源进行涓细电流充电的能力。
6.3 DS1302的引脚功能及内部结构
下图14-1示出DS1302的实物图及引脚排列,其中Vcc1 为后备电源,VCC2为主电源。在主电源关闭的情况下,也 能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较 大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。 当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡
寄存器名称 秒寄存器 分寄存器 时寄存器 日寄存器 月寄存器 周寄存器 年寄存器 写保护寄存器 慢充电寄存器 时钟突发秒寄存器
1 RAM/CK A4 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1
DS1302内部主要寄存器功能如下表所示
DS1302内部主要寄存器功能表 命令字 名称 读 秒寄存器 分寄存器 80H 82H 写 81H 83H 00-59 00-59
取值范围 7 6 5 4 3 2 1 0
各位内容
CH 0
10SEC 10MIN
SEC MIN
时寄存器
日寄存器 月寄存器 周寄存器
84H
86H 88H 8AH
85H
87H 89H 8BH
6.6 DS1302的程序设计
1)DS1302和单片机连接接示意图
2)DS1302应用程序设计流程图如下所示:
图6-5
DS1302应用程序设计流程图
3)应用程序清单如下:
程序用按键设置秒、分、时,用液晶LCD1602显示设
置的时间。 /************************************************* 程序描述:以下程序为DS1302的头函数文件,在建立项 目的时候该部分要保存为DS1302.H。该头文件中有对 DS1302基本的单字节读写函数,取时间函数,设置时间 函数,在主函数中要调用这些函数。 ************************************************ /
} /*******取出时间并处理,以便送数码管显示*********/ void get_time(void) { uchar d; d=uc_R1302(0x81); counter[0]=d/16*10+d%16; //十六进制转换为BCD码 time1[0]=d&0x0f; time1[1]=(d>>4)&0x0f; d=uc_R1302(0x83); counter[1]=d/16*10+d%16; //十六进制转换为BCD码 time1[2]=d&0x0f; time1[3]=(d>>4)&0x0f; d=uc_R1302(0x85); counter[2]=d/16*10+d%16; //十六进制转换为BCD码
制字。DS1302的控制字见5.4节内容。控制字的最高有效
位(位7)必须是逻辑1,如果它为0。则不能把数据写入到 DS1302中。位6:如果为0,则表示存取日历时钟数据, 为1表示存取RAM数据;位5至位1(A4~A0):指示操作单 元的地址;位0(最低有效位):如为0。表示要进行写操
作,为1表示进行读操作。控制字总是从最低位开始输出。
的控制字节说明 1)DS1302的控制字节的最高有效位(位7)必须是逻 辑1,如果它为0,则不能把数据写入到DS1302中:位6如 果为0,则表示存取日历时钟数据,为1表示存取RAM数
据;位5至位1指示操作单元的地址:最低有效位(位0)为0
表示要进行写操作,为1表示进行读操作,控制字节总是
从最低位开始输出。
1-12或0-23
1-28,29,30,31 1-12 1-7
12/24
0 0 0
0
0 0 0
A/P
HR
HR
DATE MONTH 0 DAY
10DATE 0 0 10M 0
年寄存器
8CH
8DH
0-99
10YEAR
YEAR
其中CH:时钟停止位;为0时振荡器工作;为1时振
荡器停止;AP=1时为下午模式,为0时上午模式DS1302
v_W1302(0x80,0x00); v_W1302(0x82,0x59); v_W1302(0x84,0x10); v_W1302(0x86,0x01); v_W1302(0x88,0x08); v_W1302(0x8a,0x03); v_W1302(0x8c,0x07); v_W1302(0x8e,0x80);
相关文档
最新文档