ds1302数码管显示应用

合集下载

实时时钟DS1302的原理与应用

实时时钟DS1302的原理与应用

可编辑ppt
7
表4-3-1 日历、时钟寄存器及其控制字对照表
可编辑ppt
8
表4-3-2 DS1302内部主要寄存器功能表
可编辑ppt
9
其中CH:时钟停止位;为0时振荡器工作;为1时 振荡器停止;AP=1时为下午模式,为0时上午模 式;DS1302的控制字节说明如下: 1.DS1302的控制字节的最高有效位(位7)必须是 逻辑1,如果它为0,则不能把数据写入到DS1302 中:位6如果为0,则表示存取日历时钟数据,为 1表示存取RAM数据;位5至位1指示操作单元的地 址:最低有效位(位0)如为0表示要进行写操作, 为1表示进行读操作,控制字节总是从最低位开 始输出。
可编辑ppt
10
2.在控制指令字输入后的下一个SCLK时钟的上升沿 时数据被写入DS1302,数据输入从低位即位0开 始。同样,在紧跟8位的控制指令字后的下一个 SCLK脉冲的下降沿读出DS1302的数据,读出数据 时从低位0位至高位7。
可编辑ppt
11
4.3.3 DS1302的读写时序
不仅要向寄存器写入控制字。还需要读取相 应寄存器的数据。4.3.3 DS1302的读写时序要想 与DS1302通信,首先要先了解DS1302的控制字。 DS1302的控制字见6.5.4节内容。控制字的最高 有效位(位7)必须是逻辑1,如果它为0。则不能 把数据写入到DS1302中。位6:如果为0,则表示 存取日历时钟数据,为1表示存取RAM数据;位5 至位1(A4~A0):指示操作单元的地址;位0(最 低有效位):如为0。
可编辑操作。 控制字总是从最低位开始输出。在控制字指令输 入后的下一个SCLK时钟的上升沿时,数据被写入 DS1302,数据输入从最低位(0位)开始。同样, 在紧跟8位的控制字指令后的下一个SCLK脉冲的 下降沿,读出DS1302的数据。读出的数据也是从 最低位到最高位。数据读写时序如下图4-3-3所 示。具体操作见驱动程序。

第3节-实时时钟DS1302的原理与应用(项目14)

第3节-实时时钟DS1302的原理与应用(项目14)
一、电路原理
本项目采用八位数码管显示时间,每两位之间利用 闪烁的“—”号表示走时,见图5-3-3所示。图中数码管的 驱动采用74HC573。DS1302的SCLK接单片机P3.7, I/O(SDA) 端口接P3.5,RST接P3.4;DS1302的X1和X2接32768Hz的标 准时钟晶振。
7
6
54321 0
寄存器名称
1 RAM/CK A4 A3 A2 A1 A0 RD/W
秒寄存器控制字
1
0
0 0 0 0 0 1/0
分寄存器控制字
1
0
0 0 0 0 1 1/0
时寄存器控制字
1
0
0 0 0 1 0 1/0
日寄存器控制字
1
0
0 0 0 1 1 1/0
月寄存器控制字
1
0
0 0 1 0 0 1/0
从由DS1302的读写时序可以看出,在SCLK上升沿来 到时写数据,下降沿来到时读数据,单片机向DS1302中发 送和接收的数据先从低位开始,因此在读写操作中需根据 读写时序完成一个字节的读写。
三、DS1302应用操作
DS1302应用操作包括向DS1302写一字节数据、读一 字节数据、读时间操作和调整时间操作。由于要先发送控 制字,从DS1302读时间需要调用一次写和一次读操作;向 对应地址读一字节数据需要调用两次写一字节数据操作, 此种操作用于调整时间。
//读1302数据
x = x >> 4;
dec
= dec + x * 10;
return(dec);
}
/*十进制到8421BCD码转换*/
uchar DEC_BCD_conv(uchar x)

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

IO口实时时钟芯片DS1302的应用实例
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用法

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芯片的原理及应用

实时时钟电路DS1302芯片的原理及应用DS1302是一种实时时钟(RTC)电路芯片,由Dallas Semiconductor (现被Maxim Integrated收购)设计和制造。

它提供了一个准确的时间和日期计时功能,适用于许多应用,例如电子设备、仪器仪表、通讯设备和计算机系统等。

DS1302芯片的原理如下:1.时钟发生器:DS1302芯片内部集成了一个时钟发生器电路,它使用外部XTAL晶体和一个频率分频器来产生准确的时钟信号。

晶体的频率通常为32.768kHz,这是由于此频率具有较好的稳定性。

2.电源管理:DS1302芯片可以使用3V到5.5V的电源供电。

它内部具有电源管理电路,可以自动切换到低功耗模式以延长电池寿命。

3.时间计数器:DS1302芯片内部包含一个时间计数器,用于计算并保存当前时间、日期和星期。

它采用24小时制,并提供了BCD编码的小时、分钟、秒、日、月和年信息。

4.控制和数据接口:DS1302芯片使用串行接口与外部器件进行通信,如微控制器或外部检测电路。

控制和数据信息通过三根线SCLK(串行时钟)、I/O(串行数据输入/输出)和CE(片选)进行传输。

5.电源备份:为了确保即使在电源中断的情况下仍能保持时间数据,DS1302芯片通过附带的外部电池来提供电源备份功能。

当主电源中断时,芯片会自动切换到电池供电模式,并将时间数据存储在内部RAM中。

DS1302芯片的应用包括但不限于以下几个方面:1.时钟和日历显示:DS1302芯片可以直接连接到LCD显示屏、LED显示器或数码管等设备,用于显示当前时间和日期。

2.定时控制:DS1302芯片可以用作定时器或闹钟,在特定的时间触发一些事件。

例如,可以使用它作为控制家庭设备的定时开关。

3.数据记录:由于DS1302芯片具有时间计数功能,它可以用于记录事件的时间戳,如数据采集、操作记录或系统状态记录。

4.电源失效保护:DS1302芯片的电源备份功能可确保即使在电源中断的情况下,时间数据也能被保存,以避免系统重新启动后时间重置的问题。

时钟芯片DS1302及其应用

时钟芯片DS1302及其应用

时钟停止标志位
秒控制寄存器
秒寄存器
bit7
秒寄存器的最高位,定义为时钟停止位,当该位置1,时 钟振荡停止,DS1302进入低功耗待机模式;
当该位置0,时钟振荡启动;
初始上电状态是没有定义。
启动时钟示例
uchar val;
val = read_DS1302(0x81); //读秒寄存器到val
val &= 0x7f;
最初通过 8 个时钟周期载入控制字节到移位寄存器。如果 控制指令选择的是单字节模式,后来的连续的 8 个时钟脉冲可 以进行 8 位数据的写或 8 位数据的读操作,SCLK 时钟的上升 沿时,数据被写入 DS1302 , SCLK 脉冲的下降沿读出 DS1302 的数据。
• DS1302的基本操作方式是:先写地址(最 后一位是0),再写数据;或者先写地址(最 后一位是1) ,再读数据。
dat|=0x80;
的低位。
DS1302_CLK=1;
nop;
DS1302_CLK=0;
}
return dat;
}
将上面的写字节和读字节放在一起研究 这是一种方案
写一个字节子程序
void sendbyte(uchar a) {
uchar i; for(i=8;i>0;i--) {
DS1302_IO = a & 0x01; a >>= 1; DS1302_CLK=1; _nop_(); DS1302_CLK=0; _nop_(); } }
复位与时钟控制
所有的数据传输必须从将 RST 置高电平开始;
数据传输时序
复位与时钟控制
所有的数据传输必须从将 RST置高电平开始; 一个时钟周期是由下降沿、上升沿组成的序列; 对于数据输入来说,数据必须在数据必须在时钟的上 升沿到来之前有效, 对于数据输入来说,在时钟的下降沿输出数据位。 如果 RST是低电平,所有的数据传输端和IO引脚都为 高阻态。

实时时钟电路DS1302芯片的原理及应用

实时时钟电路DS1302芯片的原理及应用

实时时钟电路DS1302芯片的原理及应用DS1302芯片是一种低功耗的实时时钟(RTC)电路。

它包含了一个真正的时钟/日历芯片和31个静态RAM存储单元,用于存储时钟和日期信息。

DS1302芯片的工作电压范围为2.0V至5.5V,并且具有极低的功耗,非常适合于移动电子设备和电池供电的应用。

DS1302芯片的原理如下:1.时钟发生器:DS1302芯片内部具有一个实时时钟发生器,它通过晶振和电容电路生成稳定的振荡信号,用于计时。

2.时钟/计时电路:DS1302芯片内部的时钟/计时电路可以精确地计算并保持当前的时间和日期。

它具有秒、分钟、小时、日期、月份、星期和年份等不同的计时单元。

3.RAM存储单元:DS1302芯片包含31个静态RAM存储单元,用于存储时钟和日期信息。

这些存储单元可以通过SPI接口进行读写操作,并且在断电情况下也能够保持数据。

4.控制接口:DS1302芯片通过3线接口与微控制器通信,包括一个时钟线、一个数据线和一个使能线。

这种接口使得与微控制器的通信非常简单,并且能够高效地读写时钟和日期信息以及控制芯片的其他功能。

DS1302芯片的应用如下:1.实时时钟:DS1302芯片可以用作电子设备中的实时时钟。

例如,它可以用于计算机、嵌入式系统、电子游戏等设备中,以提供准确的时间和日期信息。

2.定时器:DS1302芯片的计时功能可以用于设计各种定时器应用。

例如,它可以用于计时器、倒计时器、定时开关等应用中,以实现定时功能。

3.时钟显示:DS1302芯片可以与显示模块结合使用,用于显示当前的时间和日期。

例如,它可以用于数字钟、计时器、时钟频率计等应用中。

4.能量管理:由于DS1302芯片具有低功耗特性,因此它可以用于电池供电的设备中,以实现节能的能量管理策略。

例如,它可以用于手持设备、无线传感器网络等应用中,以延长电池寿命。

综上所述,DS1302芯片是一种低功耗的实时时钟电路,具有精确计时、可靠存储和简单接口等优点,适用于计时、显示和能量管理等各种应用中。

课程设计——DS1302数码管显示数字钟的设计1

课程设计——DS1302数码管显示数字钟的设计1

××大学××学院××系课程设计报告××大学××学院××系××课程设计DS1302数码管显示数字钟的设计学生姓名学号所在系专业名称班级指导教师成绩××大学××学院二〇一二年六月摘要:本课程设计要求基于STC89C52单片机实现用8位数码管进行时钟显示。

采用STC89C52单片机和DS1302实时时钟芯片,使用5V电源供电。

时钟可以通过按键切换,数码管显示时、分、秒以及年、月、日,并且可以实现时钟的校准功能。

包括时钟芯片驱动程序,数码管显示及驱动程序。

关键字:单片机,DS1302,时钟电路,数码管显示Abstract: This course is designed 8 digital tube clock display requirements based STC89C52 microcontroller. Using STC89C52 microcontroller and DS1302 real time clock chip, using a 5V power supply. Design of the clock by means of the key switches, digital tube display hours, minutes, seconds, and the year, month, day, and can achieve clock calibration function. Including the driver of the clock chip, digital display and driver.Key words: single chip macrocomputer;DS1302;clock circuit;digital tube display目录1. 总体设计方案 (1)1.1 电子钟功能介绍1.1.1 基本功能介绍 (1)1.1.2 扩展功能介绍 (1)1.2 总体设计方案 (1)1.2.1 计时方案 (1)1.2.2 按键方案 (1)1.2.3 显示方案 (2)2. 单元模块设计 (2)2.1 硬件总电路设计 (2)2.2 显示模块电路设计 (2)2.3 按键调时电路设计 (3)2.4 时钟芯片通信电路 (3)3. 软件模块设计 (4)3.1 主程序设计 (4)3.2 时钟芯片 (5)3.2.1 DS1302内部结构 (5)3.2.2 DS1302的读时序 (6)3.2.3 DS1302的写时序 (6)3.3 键盘调时 (7)4. 设计总结 (8)5. 参考文献 (8)6. 附录 (9)前言数字钟是采用数字电路实现对时、分、秒及数字显示的计时装置,广泛用于个人家庭、车站、办公室等公共场所,成为人们日常生活中的必需品。

DS1302实时时钟原理与应用

DS1302实时时钟原理与应用

DS1302实时时钟原理与应用
1.原理:
DS1302实时时钟通过一个简单的三线接口与微控制器相连,这三根
线分别是:数据线、时钟线和复位线。

通过这三根线,微控制器可以向
DS1302写入和读取时钟和日期信息。

具体的通信协议可以通过发送特定
的命令字节来实现。

当写入数据时,数据线的电平可以提供有效数据,而
时钟线的上升沿控制数据的传输。

当读取数据时,数据线的电平会反映
DS1302存储器中的信息。

2.应用:
a.数字时钟和日期显示器:DS1302实时时钟可以用来驱动数字时钟
和日期显示器,供人们查看当前时间和日期。

b.考勤系统:DS1302实时时钟可以用来记录员工的考勤信息,如签
到和签退时间。

c.定时器:DS1302实时时钟可以用来控制各种定时器,如定时开关、定时器插座等。

d.定时报警器:使用DS1302实时时钟可以实现定时报警功能,如定
时提醒服药、定时关机等。

e.温度和湿度监测:结合温湿度传感器,DS1302实时时钟可以用来
记录环境的温度和湿度信息,并提供时间戳。

f.数据日志记录器:DS1302实时时钟可以用来记录各种传感器的数据,并提供时间戳,以便后续分析和处理。

总之,DS1302实时时钟是一种非常实用的集成电路,具有精确和可靠的时间计量功能。

它可以广泛应用于各种需要时间记录和计量的电子设备和系统中。

通过合理的设计和应用,我们可以充分发挥DS1302实时时钟的功能,提高系统的可靠性和稳定性。

DS1302汇编数码管显示8位

DS1302汇编数码管显示8位

/*****************************************电路P1口接74HC573锁存4位数码管位远,P0接4位数码管段选。

P2.5,p2.6,p2.7接DS1302. *****************************************/ORG 0000HAJMP STARTORG 000BHAJMP TIM0SCLK EQU P2^7IO EQU P2^6RST EQU P2^5ALL_FLAG EQU 31H ;标志位SEC EQU 32H ;秒MIN EQU 33H ;分HOUR EQU 34H ;时DAY EQU 35H ;日MON EQU 36H ;月WEEK EQU 37H ;星期YEAR EQU 38H ;年DS_DAT EQU 39HDS_ADD EQU 3AHDS_DATA EQU 3BHS1 EQU r7ORG 70HSTART:MOV TMOD ,#00000001BMOV TH0 ,#HIGH(65536-1000);HIGH和LOW写反了会错MOV TL0 ,#LOW(65536-1000)SETB EASETB ET0SETB TR0LCALL DS_INITLOOP2:CALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYLCALL DS_R_TIMEsjmp LOOP2DELAY:MOV R1,#10 ;1ms延时子程序D0: MOV R2,#248DJNZ R2,$DJNZ R1,D0RET/***************************************** DS1302写字节函数*****************************************/ DS_W_BYTE:MOV R0,#08MOV A,DS_DATDS_W1:RRC AMOV IO,CNOPSETB SCLKnopCLR SCLKDJNZ R0,DS_W1RET/***************************************** DS1302读字节函数*****************************************/ DS_R_BYTE:SETB IOMOV A,#00HMOV R0,#08DS_R1:MOV C,IORRC ASETB SCLKNOPCLR SCLKNOPDJNZ R0,DS_R1MOV DS_DA T,ARET/***************************************** DS1302读数据函数入口地址存至DS_ADD;读取到的数据存入DS_DA T *****************************************/ DS_R_DAT:CLR RSTNOPCLR SCLKNOPSETB RSTNOPMOV DS_DA T,DS_ADDLCALL DS_W_BYTELCALL DS_R_BYTESETB SCLKCLR RSTNOPNOPSETB SCLKNOPNOPCLR IONOPNOPsetb IONOPNOPRET/***************************************** DS1302写数据函数入口地址DS_ADD,入口数据DS_DA TA*****************************************/ DS_W_DAT:CLR RSTNOPCLR SCLKNOPSETB RSTNOPMOV DS_DA T,DS_ADDLCALL DS_W_BYTEMOV DS_DA T,DS_DATALCALL DS_W_BYTEMOV DS_DA T,ASETB SCLKCLR RSTNOPNOPSETB SCLKNOPNOP ;加了延时CLR IONOPNOPsetb IONOPNOPRET/*****************************************DS1302读时间函数入口地址DS_ADD,*****************************************/DS_R_TIME:MOV DS_ADD,#81HLCALL DS_R_DATMOV SEC,DS_DATMOV DS_ADD,#83HLCALL DS_R_DATMOV MIN,DS_DATMOV DS_ADD,#85HLCALL DS_R_DATMOV HOUR,DS_DATMOV DS_ADD,#87HLCALL DS_R_DATMOV DAY,DS_DATMOV DS_ADD,#89HLCALL DS_R_DATMOV MON,DS_DATMOV DS_ADD,#8BHLCALL DS_R_DATMOV WEEK,DS_DATMOV DS_ADD,#8DHLCALL DS_R_DATMOV YEAR,DS_DATRET/*****************************************DS1302写时间函数入口地址DS_ADD,入口数据*****************************************/DS_W_TIME:CLR RSTCLR SCLKMOV DS_ADD,#8EH ;语序写MOV DS_DATA,#00HLCALL DS_W_DA TMOV DS_ADD,#80HMOV DS_DATA,SECLCALL DS_W_DA TMOV DS_ADD,#82HMOV DS_DATA,MINLCALL DS_W_DA TMOV DS_ADD,#84HMOV DS_DATA,HOURLCALL DS_W_DA TMOV DS_ADD,#86HMOV DS_DATA,DAYLCALL DS_W_DA TMOV DS_ADD,#88HMOV DS_DATA,MONLCALL DS_W_DA TMOV DS_ADD,#8AHMOV DS_DATA,WEEKLCALL DS_W_DA TMOV DS_ADD,#8CHMOV DS_DATA,YEARLCALL DS_W_DA TMOV DS_ADD,#8EH ;写保护MOV DS_DATA,#80HLCALL DS_W_DA TRET/*****************************************DS1302初始化*****************************************/DS_INIT:CLR RSTCLR SCLKMOV DS_ADD,#8EH ;允许写MOV DS_DATA,#00HLCALL DS_W_DA TMOV DS_ADD,#90HMOV DS_DATA,0xa5LCALL DS_W_DA TMOV DS_ADD,#80HMOV DS_DATA,#00HLCALL DS_W_DA TMOV DS_ADD,#82HMOV DS_DATA,#00HLCALL DS_W_DATMOV DS_ADD,#84HMOV DS_DATA,#23HLCALL DS_W_DA TMOV DS_ADD,#86HMOV DS_DATA,#16HLCALL DS_W_DA TMOV DS_ADD,#88HMOV DS_DATA,#12HLCALL DS_W_DA TMOV DS_ADD,#8aHMOV DS_DATA,#02HLCALL DS_W_DA TMOV DS_ADD,#8cHMOV DS_DATA,#14HLCALL DS_W_DA TMOV DS_ADD,#8EH ;写保护MOV DS_DATA,#80HLCALL DS_W_DA TRETTIM0:PUSH ACCPUSH PSWPUSH DPHPUSH DPLPUSH BMOV TH0 ,#HIGH(65536-1000) MOV TL0 ,#LOW(65536-1000) MOV A ,SECMOV B,#16DIV ABMOV 50H ,BMOV 51H, AMOV A,MINMOV B,#16DIV ABMOV 52H,BMOV 53h,AMOV A,HOURMOV B ,#16DIV ABMOV 54H,BMOV 55H,AINC S1MOV DPTR,#TABMOV P1,#0HCJNE S1,#1H,Z1NOPNOPMOV A ,50HMOVC A,@A+DPTRMOV P0,ASETB P1.0SJMP LOOPZ1:CJNE S1,#02H,Z2MOV A,51H MOVC A,@A+DPTRMOV P0,ASETB P1.1SJMP LOOPZ2:CJNE S1,#03H,Z3MOV P0,#0BFH SETB P1.2SJMP LOOPZ3:CJNE S1,#04H,Z4MOV A,52H MOVC A,@A+DPTRMOV P0,ASETB P1.3SJMP LOOPZ4:CJNE S1,#05H,Z5MOV A,53H MOVC A,@A+DPTRMOV P0,ASETB P1.4SJMP LOOPZ5:CJNE S1,#06H,Z6MOV P0,#0BFHSETB P1.5SJMP LOOPZ6:CJNE S1,#07H,Z7MOV A,54HMOVC A,@A+DPTRMOV P0,ASETB P1.6SJMP LOOPZ7:CJNE S1,#08H,Z8MOV A,55HMOVC A,@A+DPTRMOV P0,ASETB P1.7MOV S1,#0HSJMP LOOPZ8:LJMP 00HLOOP:POP BPOP DPLPOP DPHPOP PSWPOP ACCRETITAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFHEND。

ds1302用法

ds1302用法

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

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

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

DS1302的图如下:DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与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时,时钟才能开始运行。

2、小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。

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芯片的单片机系统中。

用DS1302与数码管设计的可调电子表设计与仿真

用DS1302与数码管设计的可调电子表设计与仿真

目录摘要 (2)1 引言 (3)2 设计方案与要求 (4)2.1 功能要求 (4)2.2 系统基本方案选择和论证 (4)2.2.1 单片机芯片的选择和论证 (4)2.2.2 显示模块的选择和论证 (5)2.2.3 时钟芯片的选择和论证 (5)2.3 电路设计最终方案决定 (5)2.4 各硬件基本原理及介绍 (6)2.4.1 AT89C51单片机原理及介绍 (6)2.4.2 LED数码管显示原理及介绍 (6)2.4.3 DS1302原理及介绍 (7)3 硬件设计部分 (8)3.1 电路设计框图 (8)3.2 系统硬件概述 (8)3.3 主要单元电路的设计 (8)3.3.1 单片机主控制模块的设计 (8)3.3.2 时钟电路DS1302的设计 (10)3.3.3 显示模块的设计 (11)3.3.4 锁存器模块的设计 (12)4 软件设计部分 (13)4.1 软件设计概述 (13)4.2 Keil C51和Proteus介绍 (13)4.2.1 Keil C51的介绍 (13)4.2.2 Proteus的介绍 (13)4.3 整体设计 (14)5 结束语 (17)基于DS1302与数码管设计的电子表摘要单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子产品等,这些都离不开单片机。

单片机是将CPU、RAM、ROM、定时器、计数器和多种接口于一体的微控制器。

它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上,而51系列单片机是各单片机中最为典型和最有代表性的一种。

本文通过对一个基于DS1302与数码管的电子表的设计,从而达到学习、了解单片机相关指令在各方面的应用。

系统由主控制器AT89C51、实时钟电路DS1302、显示电路组成,能实现时钟显示的功能,能进行时、分、秒的显示。

DS1302时钟数码管显示

DS1302时钟数码管显示

DS1302时钟数码管显示DS1302时钟芯片,大家都知道是什么来的。

不懂的百度下就知道了。

这个只是读取出时间,其它功能没有写出来,用了四位共阳数码管显示。

具体电路和仿真可以到中国电子DIY之家论坛搜索/*********************************** DS1302简单时间显示** 数码管显示************************************/#include#define uchar unsigned char#define uint unsigned int#define W P2 //位选#define D P0 //段选sbit IO=P1^0; //数据口sbit SCLK=P1^1; //控制数据时钟sbit RST=P1^2; //使能端、复位端/************按键引脚定义***********/sbit s1=P1^5; //按键加sbit s2=P1^6; //按键减sbit s3=P1^7; //按键选择char knum=0,snum,fnum;/***********写时分秒地址************/#define write_shi 0x84#define write_fen 0x82#define write_miao 0x80/***********读时分秒地址************/#define read_shi 0x85#define read_fen 0x83#define read_miao 0x81char shi,fen,miao; //读出数据存储变量uchard[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90}; //不带小数点uchardd[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //带小数点void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.{ //delay(500);大约延时500ms.uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}uchar read_1302(uchar add) //读函数{uchar i,date;RST=0; //禁止读写数据for(i=0;i<8;i++){RST=1;SCLK=0;IO=add&0x01;add>>=1;SCLK=1;}for(i=0;i<8;i++){if(IO)date=date|0x80;elsedate=date|0x00;SCLK=1;date>>=1;SCLK=0;}RST=0;date=date/16*10+date%16; //进制转换16转10进制IO=0; //数据读完后,IO口必须为0,不然小时一直显示85 return date;}void write_1302(uchar add,uchar dat) //写函数{uchar i;RST=0; //禁止读写数据// SCLK=0;for(i=0;i<8;i++) //写地址{RST=1; //允许读写数据SCLK=0;IO=add&0x01;add>>=1;SCLK=1;}for(i=0;i<8;i++) //写数据{RST=1; //允许读写数据SCLK=0;IO=dat&0x01;dat>>=1;SCLK=1;}RST=0;}void init_1302() //初始化函数设置时间{write_1302(0x8e,0x00); //保护取消,可以进行读写操作write_1302(write_miao,0x56);write_1302(write_fen,0x49);write_1302(write_shi,0x14);write_1302(0x8e,0x80); //保护启动,不能进行读写操作}void display(uchar shi,uchar fen,uchar miao) //显示函数{if(knum==0){snum=30;fnum=30;}if(knum==1){fnum++;snum=30;}if(knum==2){snum++;fnum=30;}if(snum>=30){W=0x01; //位选D=d[shi/10]; //段选delay(5);D=0XFF; //消隐if(miao%2==0) //小数点闪烁{W=0x02;D=dd[shi%10];delay(5);D=0XFF; //消隐}else{W=0x02;D=d[shi%10];delay(5);D=0XFF; //消?}if(snum==60)snum=0;}if(fnum>=30){W=0x04;D=d[fen/10];delay(5);D=0XFF; //消隐W=0x08;D=d[fen%10];delay(5);D=0XFF; //消隐if(fnum==60)fnum=0;}}void read_sf(){shi=read_1302(read_shi);fen=read_1302(read_fen);miao=read_1302(read_miao);display(shi,fen,miao);}void keyscan() //按键扫描函数{if(s3==0) //选择按键按下{delay(10);if(s3==0){while(!s3)display(shi,fen,miao); //加上这句,按键按下就不会闪knum++; if(knum==1) //分闪烁{write_1302(0x8e,0x00); //保护取消write_1302(write_miao,0x80);}if(knum==3) //时钟启动{knum=0;write_1302(write_miao,0x00);write_1302(0x8e,0x80); //保护启动}}}if(knum==1) //分钟调节{if(s1==0) //加{delay(10);if(s1==0){while(!s1)display(shi,fen,miao); //加上这句,按键按下就不会闪fen++; fen=fen/10*16+fen%10; //转为16进制if(fen==0x60)fen=0x00;write_1302(write_fen,fen); //写入1302read_sf(); //读出时间,然后显示}}if(s2==0){delay(10);if(s2==0){while(!s2)display(shi,fen,miao); //加上这句,按键按下就不会闪fen--; fen=fen/10*16+fen%10; //转为16进制if(fen==-1)fen=0x59;write_1302(write_fen,fen);read_sf();}}}if(knum==2){if(s1==0){delay(10);if(s1==0){while(!s1)display(shi,fen,miao); //加上这句,按键按下就不会闪shi++; shi=shi/10*16+shi%10; //转为16进制if(shi==0x24)shi=0x00;write_1302(write_shi,shi);read_sf();}}if(s2==0){delay(10);if(s2==0){while(!s2)display(shi,fen,miao); //加上这句,按键按下就不会闪shi--;shi=shi/10*16+shi%10; //转为16进制if(shi==-1)shi=0x23;write_1302(write_shi,shi);read_sf();}}}}void main(){// init_1302();while(1){read_sf();keyscan();}}。

(完整版)DS1302数码管显示程序

(完整版)DS1302数码管显示程序
clock_s2=clock_s2&0xff;
clock_s1<<=4;
clock_s1=clock_s1|clock_s2;// 10to16
clock_f1=mie/10;
clock_f2=mie%10;
clock_f1=clock_f1&0xff; //全1出1与运算
clock_f2=clock_f2&0xff;
delay(1);P0=0X00;}
if(cant1==5)
cant1=0;
P2=2;
P0=ledmap[10];//显示"-"数组里的0x40
delay(1);
P0=0X00;
if(cant2<=3)
{
P2=3;
P0=ledmap[clock_fs];//分十位
delay(1);
P0=0X00;
P2=4;
if(mie>=60)
{
mie=0;
}
delayAJ(10);
}//以上时钟+设定
}
}
if(down==0)
{
delayAJ(5);//消抖
if(down==0)
{
delayAJ(5);
if(b==1)
{
hour--;
if(hour<0)
{
hour=23;
}
delayAJ(10);
}
if(b==2)
delayAJ(5);
}
while(!set)
{
delayAJ(5);
}
}
if(b!=0)//时分设定
{
if(up==0)

DS1302时钟芯片的原理与应用

DS1302时钟芯片的原理与应用

DS1302时钟芯片的原理与应用一、DS1302的基本原理1.1DS1302的主要硬件组成DS1302由时钟单元、RAM单元和控制逻辑单元组成。

时钟单元包含实时的年、月、日、时、分和秒,具有自动闰年判断功能;RAM单元用于存储用户数据;控制逻辑单元负责控制读写操作,以及更新时钟和用户数据。

1.2DS1302的工作原理DS1302的工作原理基于周期性的时间计数。

其内部有一组振荡器和计数器,分别产生时钟信号和时间计数。

在供电正常的情况下,DS1302会精确地计时,保持准确的时间。

通过与外部晶振和电源电压的连接,DS1302可以获得准确的参考时钟,确保时间的准确性。

二、DS1302的应用2.1数字时钟2.2计时器2.3定时开关DS1302的时间计数功能可以用于定时开关的设计。

例如,可以使用DS1302来控制家庭照明系统、温室灌溉系统等设备的自动开关功能。

用户可以预先设置开关时间,DS1302会精确地计时,并在预定时间点触发开关操作。

2.4温湿度记录DS1302的RAM单元可以用来存储一些用户数据。

一种常见的应用是温湿度记录。

通过将温湿度传感器与DS1302连接,可以实时获取环境的温度和湿度,并将其存储到DS1302的RAM中。

用户可以随时读取存储的数据,进行分析和处理。

2.5定时闹钟三、DS1302的优点和注意事项3.1优点3.2注意事项在使用DS1302时,需要注意以下几点:-DS1302工作电压范围为2.0V至5.5V,应根据实际需求选择合适的工作电压。

-DS1302的振荡器需要外接一个32.768kHz的晶振,保证时间计数的准确性。

-DS1302的通信接口使用的是串行通信,需要根据具体的控制器和系统设计进行接口匹配。

总结:DS1302是一款功能丰富的实时时钟(RTC)芯片,广泛应用于计时、时间显示和时间记录等领域。

它可以实现数字时钟、计时器、定时开关、温湿度记录、定时闹钟等功能。

DS1302具有精确的时间计数和存储功能,体积小巧、功耗低、价格相对较低,是许多电子应用中的理想选择。

时钟芯片DS1302数码管程序

时钟芯片DS1302数码管程序
void write(uchar address,uchar number)
{
uchar i;
dsclk=0;//清零时钟总线
dsdata=0;//清零数据总线
dsret=0;//片选端无效
dsret=1;//逻辑控制有效,可对1302操作
for(i=16;i>0;i++)
dsclk=1;
}
dsclk=1;//上升沿动作
dsret=0;//片选无效,不可进行操作
}
/*********** 时间显示函数**************/
void show(
{
uchar i;
for(i=0;i<8;i++) // 数码管有8位,因此需要循环8次
{
uchar code tab[8]={0xf7,0xfb,0Xfd,0Xfe,0x7f,0xbf,0xdf,0xef};//数码管显示位选端
uchar buf[8];//申请数据暂存空间
/********** 延时函数************/
void delay(uchar i)
{
while(--i);
address=address>>1;
if(dsdata)
address=address|0x80;
dsclk=1;//上升沿动作
dsclk=1;//等待
}
dsclk=1;//时钟置高
dsret=0;//片选无效
return (address);
}
/*********** 写 ***************/
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
buff=ReadByte(Read_Min); //分
scanbuff[2]=buff/16;//十位
scanbuff[3]=buff%16;//个位
buff=ReadByte(Read_Sec); //秒
scanbuff[4]=buff/16;//十位
scanbuff[5]=buff%16;//个位
void WriteDS1302(void);//向DS1302写入时间。
void ReadDS1302(void);//读取DS1302中的年,月,日,星期几,小时,分钟和秒.
void SendCmd(unsigned char cmd);//传送地址
void delayus(unsigned char tt);
}
//读取地址RCmd的时间/数据
unsigned char ReadByte(unsigned char RCmd)
{
unsigned char valu=0x00,temp;
CE=0;//初使化
SCLK=0;//初使化,并为rise edge做准备
CE=1;//初使化,传输开始。The SCLK must be low when CE is driven to high level.
#defineRead_Mon0x89
#defineRead_Day0x8b
#defineRead_Yea0x8d
#define CLK_BurstW0xbf//时钟突发模式写
#define CLK_BurstR0xbf//时钟突发模式读
#define Write_RAM_Begin0xc0//RAM第一个字节写指令
sbit _74hc154_D = P1^3;
sbit CE =P1^6;
sbit SCLK=P1^5;
sbit IO=P1^4;
uchar code scan[][4]={{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1},
{0,1,0,0},{0,1,0,1},{0,1,1,0},{0,1,1,1},
delay(10);
}
}
}
void WriteDS1302(void)
{
WriteByte(Write_Yea,BCDTUAN(13));//写13年
}
//读取DS1302中的年,月,日,星期几,小时,分钟和秒.
void ReadDS1302(void)
{
unsigned char buff;//将读取的数据送入缓存数e(Read_Yea); //年
scanbuff[10]=buff/16;//十位
scanbuff[11]=buff%16;//个位
buff=ReadByte(Read_Mon); //月
scanbuff[6]=buff/16;//十位
scanbuff[7]=buff%16;//个位
{1,0,0,0},{1,0,0,1},{1,0,1,0},{1,0,1,1},
{1,1,0,0},{1,1,0,1},{1,1,1,0},{1,1,1,1}
};
uchar scanbuff[]={0,0,0,0,0,0,0,0,0,0,0,0};
uchar code dispdate[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void _74hc154(uchar k)//位扫描设定
{
_74hc154_A=scan[k][0];
_74hc154_B=scan[k][1];
_74hc154_C=scan[k][2];
#define BCDTUAN(str) (str/10*16+str%10) //定义宏,将要写入DS1302的时间转化为BCD码
#define Write_Sec0x80
#defineWrite_Min0x82
#defineWrite_Hou0x84
#defineWrite_Dat0x86
#defineWrite_Mon0x88
buff=ReadByte(Read_Dat); //日
scanbuff[8]=buff/16;//十位
scanbuff[9]=buff%16;//个位
buff=ReadByte(Read_Hou); //时
scanbuff[0]=buff/16;//十位
scanbuff[1]=buff%16;//个位
SendCmd(RCmd);//传送地址
DS1302应用
刚学单片机,好多好奇,所以想做个简单的时钟。下面是PROTEUS仿真电路和电路图,简单易懂。
文笔不好,说了多余。下面是程序。
#include<reg52.h>
#include<intrins.h>
#include<ds1302.h>
#define uint unsigned int
#define uchar unsigned char
#define Read_RAM_Begin0xc1//RAM第一个字节读指令
#define RAM_BurstW0xfe//突发模式写RAM
#define RAM_BurstR0xff//突发模式读RAM
sbit _74hc154_A = P1^0;
sbit _74hc154_B = P1^1;
sbit _74hc154_C = P1^2;
_74hc154_D=scan[k][3];
}
void main()
{
uchar i;
while(1)
{
WriteDS1302();
ReadDS1302() ;
for(i=0;i<12;i++)
{
_74hc154(i); //位扫描
P0=~dispdate[scanbuff[i]];//数据送P0口
#defineWrite_day0x8a
#defineWrite_Yea0x8c
#defineWrite_WP0x8e//写保护位
#define Write_TCR0x90
#define Read_Sec0x81
#defineRead_Min0x83
#defineRead_Hou0x85
#defineRead_Dat0x87
相关文档
最新文档