From eb0ae8ee8abb93e792398045c4b99691bd808269 Mon Sep 17 00:00:00 2001
From: Andy0613 <841676382@qq.com>
Date: Tue, 7 Jul 2026 09:15:23 +0800
Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=AC=A1=E4=BC=98=E5=8C=96?=
=?UTF-8?q?=E4=BB=A3=E7=A0=81=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=94=AF=E6=8C=81?=
=?UTF-8?q?keil4=E7=9A=84=E6=B3=A8=E9=87=8A,=E6=AD=A4=E5=A4=96=E4=BC=98?=
=?UTF-8?q?=E5=8C=96LCD1602=E6=98=BE=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Keil Code/Revise_3/STARTUP.A51 | 198 +++
Keil Code/Revise_3/ds1302.c | 136 ++
Keil Code/Revise_3/ds1302.h | 31 +
Keil Code/Revise_3/ds18b20.c | 93 +
Keil Code/Revise_3/ds18b20.h | 27 +
Keil Code/Revise_3/lcd.c | 135 ++
Keil Code/Revise_3/lcd.h | 34 +
Keil Code/Revise_3/main.c | 643 +++++++
Keil Code/Revise_3/pro | Bin 0 -> 40873 bytes
Keil Code/Revise_3/pro.hex | 239 +++
Keil Code/Revise_3/pro.uvgui.Administrator | 1249 ++++++++++++++
Keil Code/Revise_3/pro.uvopt | 1811 ++++++++++++++++++++
Keil Code/Revise_3/pro.uvproj | 380 ++++
13 files changed, 4976 insertions(+)
create mode 100644 Keil Code/Revise_3/STARTUP.A51
create mode 100644 Keil Code/Revise_3/ds1302.c
create mode 100644 Keil Code/Revise_3/ds1302.h
create mode 100644 Keil Code/Revise_3/ds18b20.c
create mode 100644 Keil Code/Revise_3/ds18b20.h
create mode 100644 Keil Code/Revise_3/lcd.c
create mode 100644 Keil Code/Revise_3/lcd.h
create mode 100644 Keil Code/Revise_3/main.c
create mode 100644 Keil Code/Revise_3/pro
create mode 100644 Keil Code/Revise_3/pro.hex
create mode 100644 Keil Code/Revise_3/pro.uvgui.Administrator
create mode 100644 Keil Code/Revise_3/pro.uvopt
create mode 100644 Keil Code/Revise_3/pro.uvproj
diff --git a/Keil Code/Revise_3/STARTUP.A51 b/Keil Code/Revise_3/STARTUP.A51
new file mode 100644
index 0000000..ec99b9e
--- /dev/null
+++ b/Keil Code/Revise_3/STARTUP.A51
@@ -0,0 +1,198 @@
+$NOMOD51
+;------------------------------------------------------------------------------
+; This file is part of the C51 Compiler package
+; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc.
+; Version 8.01
+;
+; *** <<< Use Configuration Wizard in Context Menu >>> ***
+;------------------------------------------------------------------------------
+; STARTUP.A51: This code is executed after processor reset.
+;
+; To translate this file use A51 with the following invocation:
+;
+; A51 STARTUP.A51
+;
+; To link the modified STARTUP.OBJ file to your application use the following
+; Lx51 invocation:
+;
+; Lx51 your object file list, STARTUP.OBJ controls
+;
+;------------------------------------------------------------------------------
+;
+; User-defined Power-On Initialization of Memory
+;
+; With the following EQU statements the initialization of memory
+; at processor reset can be defined:
+;
+; IDATALEN: IDATA memory size <0x0-0x100>
+; Note: The absolute start-address of IDATA memory is always 0
+; The IDATA space overlaps physically the DATA and BIT areas.
+IDATALEN EQU 80H
+;
+; XDATASTART: XDATA memory start address <0x0-0xFFFF>
+; The absolute start address of XDATA memory
+XDATASTART EQU 0
+;
+; XDATALEN: XDATA memory size <0x0-0xFFFF>
+; The length of XDATA memory in bytes.
+XDATALEN EQU 0
+;
+; PDATASTART: PDATA memory start address <0x0-0xFFFF>
+; The absolute start address of PDATA memory
+PDATASTART EQU 0H
+;
+; PDATALEN: PDATA memory size <0x0-0xFF>
+; The length of PDATA memory in bytes.
+PDATALEN EQU 0H
+;
+;
+;------------------------------------------------------------------------------
+;
+; Reentrant Stack Initialization
+;
+; The following EQU statements define the stack pointer for reentrant
+; functions and initialized it:
+;
+; Stack Space for reentrant functions in the SMALL model.
+; IBPSTACK: Enable SMALL model reentrant stack
+; Stack space for reentrant functions in the SMALL model.
+IBPSTACK EQU 0 ; set to 1 if small reentrant is used.
+; IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF>
+; Set the top of the stack to the highest location.
+IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
+;
+;
+; Stack Space for reentrant functions in the LARGE model.
+; XBPSTACK: Enable LARGE model reentrant stack
+; Stack space for reentrant functions in the LARGE model.
+XBPSTACK EQU 0 ; set to 1 if large reentrant is used.
+; XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>
+; Set the top of the stack to the highest location.
+XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1
+;
+;
+; Stack Space for reentrant functions in the COMPACT model.
+; PBPSTACK: Enable COMPACT model reentrant stack
+; Stack space for reentrant functions in the COMPACT model.
+PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.
+;
+; PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF>
+; Set the top of the stack to the highest location.
+PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
+;
+;
+;------------------------------------------------------------------------------
+;
+; Memory Page for Using the Compact Model with 64 KByte xdata RAM
+; Compact Model Page Definition
+;
+; Define the XDATA page used for PDATA variables.
+; PPAGE must conform with the PPAGE set in the linker invocation.
+;
+; Enable pdata memory page initalization
+PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.
+;
+; PPAGE number <0x0-0xFF>
+; uppermost 256-byte address of the page used for PDATA variables.
+PPAGE EQU 0
+;
+; SFR address which supplies uppermost address byte <0x0-0xFF>
+; most 8051 variants use P2 as uppermost address byte
+PPAGE_SFR DATA 0A0H
+;
+;
+;------------------------------------------------------------------------------
+
+; Standard SFR Symbols
+ACC DATA 0E0H
+B DATA 0F0H
+SP DATA 81H
+DPL DATA 82H
+DPH DATA 83H
+
+ NAME ?C_STARTUP
+
+
+?C_C51STARTUP SEGMENT CODE
+?STACK SEGMENT IDATA
+
+ RSEG ?STACK
+ DS 1
+
+ EXTRN CODE (?C_START)
+ PUBLIC ?C_STARTUP
+
+ CSEG AT 0
+?C_STARTUP: LJMP STARTUP1
+
+ RSEG ?C_C51STARTUP
+
+STARTUP1:
+
+IF IDATALEN <> 0
+ MOV R0,#IDATALEN - 1
+ CLR A
+IDATALOOP: MOV @R0,A
+ DJNZ R0,IDATALOOP
+ENDIF
+
+IF XDATALEN <> 0
+ MOV DPTR,#XDATASTART
+ MOV R7,#LOW (XDATALEN)
+ IF (LOW (XDATALEN)) <> 0
+ MOV R6,#(HIGH (XDATALEN)) +1
+ ELSE
+ MOV R6,#HIGH (XDATALEN)
+ ENDIF
+ CLR A
+XDATALOOP: MOVX @DPTR,A
+ INC DPTR
+ DJNZ R7,XDATALOOP
+ DJNZ R6,XDATALOOP
+ENDIF
+
+IF PPAGEENABLE <> 0
+ MOV PPAGE_SFR,#PPAGE
+ENDIF
+
+IF PDATALEN <> 0
+ MOV R0,#LOW (PDATASTART)
+ MOV R7,#LOW (PDATALEN)
+ CLR A
+PDATALOOP: MOVX @R0,A
+ INC R0
+ DJNZ R7,PDATALOOP
+ENDIF
+
+IF IBPSTACK <> 0
+EXTRN DATA (?C_IBP)
+
+ MOV ?C_IBP,#LOW IBPSTACKTOP
+ENDIF
+
+IF XBPSTACK <> 0
+EXTRN DATA (?C_XBP)
+
+ MOV ?C_XBP,#HIGH XBPSTACKTOP
+ MOV ?C_XBP+1,#LOW XBPSTACKTOP
+ENDIF
+
+IF PBPSTACK <> 0
+EXTRN DATA (?C_PBP)
+ MOV ?C_PBP,#LOW PBPSTACKTOP
+ENDIF
+
+ MOV SP,#?STACK-1
+
+; This code is required if you use L51_BANK.A51 with Banking Mode 4
+; Code Banking
+; Select Bank 0 for L51_BANK.A51 Mode 4
+#if 0
+; Initialize bank mechanism to code bank 0 when using L51_BANK.A51 with Banking Mode 4.
+EXTRN CODE (?B_SWITCH0)
+ CALL ?B_SWITCH0 ; init bank mechanism to code bank 0
+#endif
+;
+ LJMP ?C_START
+
+ END
diff --git a/Keil Code/Revise_3/ds1302.c b/Keil Code/Revise_3/ds1302.c
new file mode 100644
index 0000000..e2c510e
--- /dev/null
+++ b/Keil Code/Revise_3/ds1302.c
@@ -0,0 +1,136 @@
+#include"ds1302.h"
+
+/* DS1302读写地址 */
+/* 存储顺序为秒分时日月周年 */
+uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
+uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
+
+/* DS1302默认时间:2013年1月1日周二 12:00:00 */
+/* 存储顺序:秒 分 时 日 月 星期 年 */
+/* 存储格式:BCD码 */
+uchar TIME[7] = {0, 0, 0x12, 0x01, 0x01, 0x02, 0x13};
+
+/*
+ * 函数名:Ds1302Write
+ * 功能 :向DS1302写入数据(地址+数据)
+ * 输入 :addr=寄存器地址, dat=要写入的数据
+ * 输出 :无
+ */
+void Ds1302Write(uchar addr, uchar dat)
+{
+ uchar n;
+ RST = 0;
+ _nop_();
+
+ SCLK = 0; /* 先将时钟线置低 */
+ _nop_();
+ RST = 1; /* 然后RST(CE)置高,开始通信 */
+ _nop_();
+
+ for (n=0; n<8; n++) /* 发送8位地址命令 */
+ {
+ DSIO = addr & 0x01; /* 数据从低位开始 */
+ addr >>= 1;
+ SCLK = 1; /* 上升沿时DS1302读取数据 */
+ _nop_();
+ SCLK = 0;
+ _nop_();
+ }
+ for (n=0; n<8; n++) /* 写入8位数据 */
+ {
+ DSIO = dat & 0x01;
+ dat >>= 1;
+ SCLK = 1; /* 上升沿时DS1302读取数据 */
+ _nop_();
+ SCLK = 0;
+ _nop_();
+ }
+
+ RST = 0; /* 结束数据传输 */
+ _nop_();
+}
+
+/*
+ * 函数名:Ds1302Read
+ * 功能 :从DS1302读取一个字节数据
+ * 输入 :addr=寄存器地址
+ * 输出 :读取到的数据
+ */
+uchar Ds1302Read(uchar addr)
+{
+ uchar n,dat,dat1;
+ RST = 0;
+ _nop_();
+
+ SCLK = 0; /* 先将时钟线置低 */
+ _nop_();
+ RST = 1; /* 然后RST(CE)置高,开始通信 */
+ _nop_();
+
+ for(n=0; n<8; n++) /* 发送8位地址命令 */
+ {
+ DSIO = addr & 0x01; /* 数据从低位开始 */
+ addr >>= 1;
+ SCLK = 1; /* 上升沿时DS1302读取数据 */
+ _nop_();
+ SCLK = 0; /* 下降沿时DS1302输出数据 */
+ _nop_();
+ }
+ _nop_();
+ for(n=0; n<8; n++) /* 读取8位数据 */
+ {
+ dat1 = DSIO; /* 从高位开始 */
+ dat = (dat>>1) | (dat1<<7);
+ SCLK = 1;
+ _nop_();
+ SCLK = 0; /* 下降沿时DS1302输出数据 */
+ _nop_();
+ }
+
+ RST = 0;
+ _nop_(); /* 以下为DS1302复位时序,确保稳定 */
+ SCLK = 1;
+ _nop_();
+ DSIO = 0;
+ _nop_();
+ DSIO = 1;
+ _nop_();
+ return dat;
+}
+
+/*
+ * 函数名:Ds1302Init
+ * 功能 :初始化DS1302时钟芯片
+ * 输入 :无
+ * 输出 :无
+ * 说明 :判断CH位,若时钟已运行则跳过初始化
+ */
+void Ds1302Init()
+{
+ uchar n;
+ uchar sec;
+ sec = Ds1302Read(0x81); /* 读取秒寄存器,检查CH位 */
+ if(!(sec & 0x80)) /* CH=0表示时钟已运行,无需初始化 */
+ return; /* 首次上电,写入默认时间 */
+ Ds1302Write(0x8E,0X00); /* 关闭写保护 */
+ for (n=0; n<7; n++)
+ {
+ Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);
+ }
+ Ds1302Write(0x8E,0x80); /* 开启写保护 */
+}
+
+/*
+ * 函数名:Ds1302ReadTime
+ * 功能 :读取DS1302当前时间到TIME数组
+ * 输入 :无
+ * 输出 :无
+ */
+void Ds1302ReadTime()
+{
+ uchar n;
+ for (n=0; n<7; n++) /* 读取7个字节的时间数据 */
+ {
+ TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
+ }
+}
diff --git a/Keil Code/Revise_3/ds1302.h b/Keil Code/Revise_3/ds1302.h
new file mode 100644
index 0000000..401c54e
--- /dev/null
+++ b/Keil Code/Revise_3/ds1302.h
@@ -0,0 +1,31 @@
+#ifndef __DS1302_H_
+#define __DS1302_H_
+
+/* 包含头文件 */
+#include
+#include
+
+/* 数据类型重定义 */
+#ifndef uchar
+#define uchar unsigned char
+#endif
+
+#ifndef uint
+#define uint unsigned int
+#endif
+
+/* DS1302使用的IO口定义 */
+sbit DSIO=P1^1; /* 数据线 */
+sbit RST=P1^2; /* 复位/使能线 */
+sbit SCLK=P1^0; /* 时钟线 */
+
+/* 外部函数声明 */
+void Ds1302Write(uchar addr, uchar dat); /* 写DS1302 */
+uchar Ds1302Read(uchar addr); /* 读DS1302 */
+void Ds1302Init(); /* 初始化DS1302 */
+void Ds1302ReadTime(); /* 读取DS1302时间 */
+
+/* 外部全局变量声明 */
+extern uchar TIME[7]; /* 时间数组 */
+
+#endif
diff --git a/Keil Code/Revise_3/ds18b20.c b/Keil Code/Revise_3/ds18b20.c
new file mode 100644
index 0000000..5dad04e
--- /dev/null
+++ b/Keil Code/Revise_3/ds18b20.c
@@ -0,0 +1,93 @@
+#include "ds18b20.h"
+
+/* DS18B20复位 */
+void DS18B20_Reset(void)
+{
+ uchar i;
+ DS18B20_DQ = 0; /* 拉低总线 */
+ for(i=0; i<200; i++); /* 延时约480us */
+ DS18B20_DQ = 1; /* 释放总线 */
+ for(i=0; i<100; i++); /* 等待存在脉冲 */
+}
+
+/* DS18B20写入一个字节 */
+void DS18B20_WriteByte(uchar dat)
+{
+ uchar i, j;
+ for(i=0; i<8; i++)
+ {
+ DS18B20_DQ = 0; /* 拉低总线开始写时隙 */
+ _nop_();
+ if(dat & 0x01) /* 写1 */
+ DS18B20_DQ = 1;
+ else /* 写0 */
+ DS18B20_DQ = 0;
+ for(j=0; j<30; j++); /* 保持时间约60us */
+ DS18B20_DQ = 1; /* 释放总线 */
+ _nop_();
+ _nop_();
+ dat >>= 1; /* 下一位 */
+ }
+}
+
+/* DS18B20读取一个字节 */
+uchar DS18B20_ReadByte(void)
+{
+ uchar i, j, dat = 0;
+ for(i=0; i<8; i++)
+ {
+ dat >>= 1;
+ DS18B20_DQ = 0; /* 拉低总线开始读时隙 */
+ _nop_();
+ DS18B20_DQ = 1; /* 释放总线 */
+ _nop_();
+ _nop_();
+ if(DS18B20_DQ) /* 读取数据 */
+ dat |= 0x80;
+ for(j=0; j<20; j++); /* 保持时间 */
+ }
+ return dat;
+}
+
+/* 启动温度转换 */
+void DS18B20_StartConvert(void)
+{
+ DS18B20_Reset(); /* 复位 */
+ DS18B20_WriteByte(0xCC); /* 跳过ROM */
+ DS18B20_WriteByte(0x44); /* 启动温度转换 */
+}
+
+/* 设置DS18B20分辨率 */
+/* res: 0x1F=9bit, 0x3F=10bit, 0x5F=11bit, 0x7F=12bit */
+void DS18B20_SetResolution(uchar res)
+{
+ DS18B20_Reset();
+ DS18B20_WriteByte(0xCC); /* 跳过ROM */
+ DS18B20_WriteByte(0x4E); /* 写暂存器 */
+ DS18B20_WriteByte(0x00); /* TH告警值 */
+ DS18B20_WriteByte(0x00); /* TL告警值 */
+ DS18B20_WriteByte(res); /* 配置寄存器 */
+ DS18B20_Reset();
+ DS18B20_WriteByte(0xCC); /* 跳过ROM */
+ DS18B20_WriteByte(0x48); /* 复制暂存器到EEPROM */
+}
+
+/* 读取温度值 */
+/* 返回1表示成功,temp存放原始温度值 */
+bit DS18B20_GetTemp(int *temp)
+{
+ uchar tempL, tempH;
+ int raw;
+
+ DS18B20_Reset();
+ DS18B20_WriteByte(0xCC); /* 跳过ROM */
+ DS18B20_WriteByte(0xBE); /* 读取暂存器 */
+
+ tempL = DS18B20_ReadByte(); /* 读取温度低字节 */
+ tempH = DS18B20_ReadByte(); /* 读取温度高字节 */
+
+ raw = (tempH << 8) | tempL; /* 合成16位温度值 */
+ *temp = raw;
+
+ return 1;
+}
diff --git a/Keil Code/Revise_3/ds18b20.h b/Keil Code/Revise_3/ds18b20.h
new file mode 100644
index 0000000..b8ba5be
--- /dev/null
+++ b/Keil Code/Revise_3/ds18b20.h
@@ -0,0 +1,27 @@
+#ifndef __DS18B20_H_
+#define __DS18B20_H_
+
+#include
+#include
+
+/* 数据类型重定义 */
+#ifndef uchar
+#define uchar unsigned char
+#endif
+
+#ifndef uint
+#define uint unsigned int
+#endif
+
+/* DS18B20数据线引脚定义 */
+sbit DS18B20_DQ = P3^7;
+
+/* 函数声明 */
+void DS18B20_Reset(void); /* 复位DS18B20 */
+void DS18B20_WriteByte(uchar dat); /* 写入一个字节 */
+uchar DS18B20_ReadByte(void); /* 读取一个字节 */
+void DS18B20_StartConvert(void); /* 启动温度转换 */
+bit DS18B20_GetTemp(int *temp); /* 读取温度值 */
+void DS18B20_SetResolution(uchar res); /* 设置分辨率 */
+
+#endif
diff --git a/Keil Code/Revise_3/lcd.c b/Keil Code/Revise_3/lcd.c
new file mode 100644
index 0000000..c7ec023
--- /dev/null
+++ b/Keil Code/Revise_3/lcd.c
@@ -0,0 +1,135 @@
+#include"lcd.h"
+
+/*
+ * 函数名:Lcd1602_Delay1ms
+ * 功能 :延时1ms
+ * 输入 :c=延时ms数
+ * 输出 :无
+ * 说明 :12MHz晶振,12分频下的延时函数
+ */
+void Lcd1602_Delay1ms(uint c)
+{
+ uchar a,b;
+ for (; c>0; c--)
+ {
+ for (b=199;b>0;b--)
+ {
+ for(a=1;a>0;a--);
+ }
+ }
+}
+
+/*
+ * 函数名:LcdWriteCom
+ * 功能 :向LCD写入8位命令
+ * 输入 :com=命令字节
+ * 输出 :无
+ */
+#ifndef LCD1602_4PINS /* 8位数据线模式 */
+void LcdWriteCom(uchar com)
+{
+ LCD1602_E = 0; /* 使能信号置低 */
+ LCD1602_RS = 0; /* 选择指令寄存器 */
+ LCD1602_RW = 0; /* 选择写操作 */
+
+ LCD1602_DATAPINS = com; /* 写入命令 */
+ Lcd1602_Delay1ms(1); /* 等待数据稳定 */
+
+ LCD1602_E = 1; /* 写入时序 */
+ Lcd1602_Delay1ms(5); /* 保持时间 */
+ LCD1602_E = 0;
+}
+#else /* 4位数据线模式 */
+void LcdWriteCom(uchar com)
+{
+ LCD1602_E = 0;
+ LCD1602_RS = 0;
+ LCD1602_RW = 0;
+
+ LCD1602_DATAPINS = com; /* 写入高4位 */
+ Lcd1602_Delay1ms(1);
+
+ LCD1602_E = 1;
+ Lcd1602_Delay1ms(1);
+ LCD1602_E = 0;
+
+ Lcd1602_Delay1ms(1);
+ LCD1602_DATAPINS = com << 4; /* 写入低4位 */
+ Lcd1602_Delay1ms(1);
+
+ LCD1602_E = 1;
+ Lcd1602_Delay1ms(1);
+ LCD1602_E = 0;
+}
+#endif
+
+/*
+ * 函数名:LcdWriteData
+ * 功能 :向LCD写入8位数据
+ * 输入 :dat=数据字节
+ * 输出 :无
+ */
+#ifndef LCD1602_4PINS /* 8位数据线模式 */
+void LcdWriteData(uchar dat)
+{
+ LCD1602_E = 0; /* 使能信号置低 */
+ LCD1602_RS = 1; /* 选择数据寄存器 */
+ LCD1602_RW = 0; /* 选择写操作 */
+
+ LCD1602_DATAPINS = dat; /* 写入数据 */
+ Lcd1602_Delay1ms(1);
+
+ LCD1602_E = 1; /* 写入时序 */
+ Lcd1602_Delay1ms(5);
+ LCD1602_E = 0;
+}
+#else /* 4位数据线模式 */
+void LcdWriteData(uchar dat)
+{
+ LCD1602_E = 0;
+ LCD1602_RS = 1;
+ LCD1602_RW = 0;
+
+ LCD1602_DATAPINS = dat; /* 写入高4位 */
+ Lcd1602_Delay1ms(1);
+
+ LCD1602_E = 1;
+ Lcd1602_Delay1ms(1);
+ LCD1602_E = 0;
+
+ Lcd1602_Delay1ms(1);
+ LCD1602_DATAPINS = dat << 4; /* 写入低4位 */
+ Lcd1602_Delay1ms(1);
+
+ LCD1602_E = 1;
+ Lcd1602_Delay1ms(1);
+ LCD1602_E = 0;
+}
+#endif
+
+/*
+ * 函数名:LcdInit
+ * 功能 :初始化LCD1602液晶
+ * 输入 :无
+ * 输出 :无
+ */
+#ifndef LCD1602_4PINS /* 8位数据线模式 */
+void LcdInit()
+{
+ LcdWriteCom(0x38); /* 设置显示模式:16x2, 5x7点阵, 8位 */
+ LcdWriteCom(0x0c); /* 开显示,不显示光标 */
+ LcdWriteCom(0x06); /* 写入数据后地址自动加1 */
+ LcdWriteCom(0x01); /* 清屏 */
+ LcdWriteCom(0x80); /* 设置DDRAM地址为0x00(第一行起始) */
+}
+#else /* 4位数据线模式 */
+void LcdInit()
+{
+ LcdWriteCom(0x32); /* 从8位模式转换为4位模式 */
+ LcdWriteCom(0x28); /* 4位模式下的初始化 */
+ LcdWriteCom(0x0c); /* 开显示,不显示光标 */
+ LcdWriteCom(0x06); /* 写入数据后地址自动加1 */
+ LcdWriteCom(0x01); /* 清屏 */
+ LcdWriteCom(0x80); /* 设置DDRAM地址为0x00(第一行起始) */
+}
+#endif
diff --git a/Keil Code/Revise_3/lcd.h b/Keil Code/Revise_3/lcd.h
new file mode 100644
index 0000000..6673d7f
--- /dev/null
+++ b/Keil Code/Revise_3/lcd.h
@@ -0,0 +1,34 @@
+#ifndef __LCD_H_
+#define __LCD_H_
+
+/*
+ * 使用4位数据线时取消注释 LCD1602_4PINS,
+ * 使用8位数据线时注释掉即可
+ */
+#define LCD1602_4PINS
+
+/* 包含头文件 */
+#include
+
+/* 数据类型重定义 */
+#ifndef uchar
+#define uchar unsigned char
+#endif
+
+#ifndef uint
+#define uint unsigned int
+#endif
+
+/* 引脚定义 */
+#define LCD1602_DATAPINS P0 /* LCD数据口 */
+sbit LCD1602_E=P2^7; /* 使能信号 */
+sbit LCD1602_RW=P2^5; /* 读写选择 */
+sbit LCD1602_RS=P2^6; /* 指令/数据选择 */
+
+/* 函数声明 */
+void Lcd1602_Delay1ms(uint c); /* 延时函数(12MHz) */
+void LcdWriteCom(uchar com); /* 写命令 */
+void LcdWriteData(uchar dat); /* 写数据 */
+void LcdInit(); /* 初始化LCD */
+
+#endif
diff --git a/Keil Code/Revise_3/main.c b/Keil Code/Revise_3/main.c
new file mode 100644
index 0000000..9041408
--- /dev/null
+++ b/Keil Code/Revise_3/main.c
@@ -0,0 +1,643 @@
+#include
+#include
+#include"lcd.h"
+#include"ds1302.h"
+#include"ds18b20.h"
+
+/* 按键引脚定义 */
+sbit K1=P3^1; /* 模式/确认键 */
+sbit K2=P3^0; /* 切换/返回键 */
+sbit K3=P3^2; /* 加/开始暂停键 */
+sbit K4=P3^3; /* 减/复位键 */
+sbit Buzzer=P2^0; /* 蜂鸣器引脚 */
+
+/* 函数声明 */
+void Delay10ms(void);
+void LcdFramework(void);
+void LcdUpdate(void);
+void TempPros(void);
+void KeyScan(void);
+void SetAlarm(void);
+void AlarmJudge(void);
+void AlarmBuzPro(void);
+void Timer1Init(void);
+void KeySound(void);
+void ReturnSound(void);
+void DelayMs(unsigned int ms);
+
+/* 全局变量 */
+unsigned char mode = 0; /* 模式: 0=时钟, 2=秒表 */
+unsigned char last_mode = 0xFF; /* 上一次模式,用于检测模式切换 */
+int temperature = 0; /* 温度值(10倍) */
+unsigned char temp_cnt = 0; /* 温度采集计数 */
+
+/* 闹钟参数 */
+unsigned char alarm_hour = 6; /* 闹钟小时 */
+unsigned char alarm_min = 0; /* 闹钟分钟 */
+unsigned char alarm_on = 0; /* 闹钟开关 */
+unsigned char alarm_buz = 0; /* 闹钟蜂鸣标志 */
+unsigned char alarm_buz_cnt = 0; /* 闹钟蜂鸣计数 */
+
+/* 秒表参数 */
+unsigned int sw_sec = 0; /* 秒表秒数 */
+unsigned char sw_csec = 0; /* 秒表百分秒 */
+bit sw_running = 0; /* 秒表运行状态 */
+
+void main()
+{
+ Timer1Init(); /* 初始化定时器1 */
+ LcdInit(); /* 初始化LCD1602 */
+
+ /* 开机蜂鸣器响一声 */
+ Buzzer = 0;
+ Delay10ms();Delay10ms();Delay10ms();Delay10ms();Delay10ms();
+ Delay10ms();Delay10ms();Delay10ms();Delay10ms();Delay10ms();
+ Buzzer = 1;
+
+ Ds1302Init(); /* 初始化DS1302 */
+ DS18B20_SetResolution(0x3F); /* 设置DS18B20分辨率10位 */
+ DS18B20_StartConvert(); /* 启动温度转换 */
+
+ /* 从DS1302 RAM读取闹钟参数 */
+ alarm_hour = Ds1302Read(0xC1);
+ if(alarm_hour > 23) alarm_hour = 6;
+ alarm_min = Ds1302Read(0xC3);
+ if(alarm_min > 59) alarm_min = 0;
+ alarm_on = Ds1302Read(0xC5);
+ if(alarm_on > 1) alarm_on = 0;
+
+ /* 主循环 */
+ while(1)
+ {
+ Ds1302ReadTime(); /* 读取DS1302时间 */
+
+ /* 每5个循环采集一次温度 */
+ temp_cnt++;
+ if(temp_cnt >= 5)
+ {
+ temp_cnt = 0;
+ TempPros();
+ }
+
+ /* 模式切换时刷新LCD框架 */
+ if(mode != last_mode)
+ {
+ LcdFramework();
+ last_mode = mode;
+ }
+
+ AlarmJudge(); /* 闹钟判断 */
+ AlarmBuzPro(); /* 闹钟蜂鸣处理 */
+ KeyScan(); /* 按键扫描 */
+ LcdUpdate(); /* LCD显示更新 */
+ }
+}
+
+/* 在LCD上显示两位数字 */
+void ShowLcdNum(unsigned char num)
+{
+ LcdWriteData('0' + num / 10); /* 十位 */
+ LcdWriteData('0' + num % 10); /* 个位 */
+}
+
+/* 在LCD上显示星期(英文缩写) */
+void ShowLcdWeek(unsigned char week)
+{
+ switch(week)
+ {
+ case 1: LcdWriteData('S'); LcdWriteData('u'); LcdWriteData('n'); break; /* Sunday */
+ case 2: LcdWriteData('M'); LcdWriteData('o'); LcdWriteData('n'); break; /* Monday */
+ case 3: LcdWriteData('T'); LcdWriteData('u'); LcdWriteData('e'); break; /* Tuesday */
+ case 4: LcdWriteData('W'); LcdWriteData('e'); LcdWriteData('d'); break; /* Wednesday */
+ case 5: LcdWriteData('T'); LcdWriteData('h'); LcdWriteData('u'); break; /* Thursday */
+ case 6: LcdWriteData('F'); LcdWriteData('r'); LcdWriteData('i'); break; /* Friday */
+ case 7: LcdWriteData('S'); LcdWriteData('a'); LcdWriteData('t'); break; /* Saturday */
+ }
+}
+
+/* LCD界面框架绘制 */
+void LcdFramework()
+{
+ if(mode == 0) /* 时钟模式界面 */
+ {
+ LcdWriteCom(0x0c); /* 不显示光标 */
+
+ /* 第一行:20 - - */
+ LcdWriteCom(0x80);
+ LcdWriteData('2'); LcdWriteData('0');
+ LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData('-');
+ LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData('-');
+ LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData(' '); LcdWriteData(' ');
+
+ /* 第二行: : : 温度 */
+ LcdWriteCom(0x80+0x40);
+ LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData(':');
+ LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData(':');
+ LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData(' '); LcdWriteData(' ');
+ }
+ else if(mode == 2) /* 秒表模式界面 */
+ {
+ LcdWriteCom(0x0c); /* 不显示光标 */
+
+ /* 第一行:显示 Stop Watch 标题 */
+ LcdWriteCom(0x80);
+ LcdWriteData(' '); LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData('S'); LcdWriteData('t'); LcdWriteData('o');
+ LcdWriteData('p'); LcdWriteData(' ');
+ LcdWriteData('W'); LcdWriteData('a'); LcdWriteData('t');
+ LcdWriteData('c'); LcdWriteData('h');
+ LcdWriteData(' '); LcdWriteData(' '); LcdWriteData(' ');
+
+ /* 第二行: : : . */
+ LcdWriteCom(0x80+0x40);
+ LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData(':'); LcdWriteData(' ');
+ LcdWriteData(' '); LcdWriteData(':');
+ LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData('.');
+ LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData(' '); LcdWriteData(' '); LcdWriteData(' '); LcdWriteData(' ');
+ }
+}
+
+/* LCD显示数据更新 */
+void LcdUpdate()
+{
+ unsigned char t;
+ int temp_disp;
+
+ if(mode == 0) /* 时钟模式 */
+ {
+ /* 显示年(BCD码转十进制) */
+ LcdWriteCom(0x82);
+ ShowLcdNum((TIME[6]>>4)*10 + (TIME[6]&0x0f));
+
+ /* 显示月 */
+ LcdWriteCom(0x85);
+ ShowLcdNum((TIME[4]>>4)*10 + (TIME[4]&0x0f));
+
+ /* 显示日 */
+ LcdWriteCom(0x88);
+ ShowLcdNum((TIME[3]>>4)*10 + (TIME[3]&0x0f));
+
+ /* 显示星期 */
+ LcdWriteCom(0x8C);
+ ShowLcdWeek(TIME[5] & 0x07);
+
+ /* 显示时 */
+ LcdWriteCom(0xC0);
+ ShowLcdNum((TIME[2]>>4)*10 + (TIME[2]&0x0f));
+
+ /* 显示分 */
+ LcdWriteCom(0xC3);
+ ShowLcdNum((TIME[1]>>4)*10 + (TIME[1]&0x0f));
+
+ /* 显示秒 */
+ LcdWriteCom(0xC6);
+ ShowLcdNum((TIME[0]>>4)*10 + (TIME[0]&0x0f));
+
+ /* 显示温度,如 -12.3C */
+ LcdWriteCom(0xC9);
+ temp_disp = temperature;
+ if(temp_disp < 0) { LcdWriteData('-'); temp_disp = -temp_disp; }
+ else { LcdWriteData(' '); }
+ LcdWriteData('0' + temp_disp / 100);
+ LcdWriteData('0' + (temp_disp / 10) % 10);
+ LcdWriteData('.');
+ LcdWriteData('0' + temp_disp % 10);
+ LcdWriteData('C');
+ }
+ else if(mode == 2) /* 秒表模式 */
+ {
+ /* 显示时 */
+ t = sw_sec / 3600;
+ LcdWriteCom(0xC0);
+ LcdWriteData('0' + t / 10);
+ LcdWriteData('0' + t % 10);
+
+ /* 显示分 */
+ LcdWriteCom(0xC3);
+ t = (sw_sec % 3600) / 60;
+ LcdWriteData('0' + t / 10);
+ LcdWriteData('0' + t % 10);
+
+ /* 显示秒 */
+ LcdWriteCom(0xC6);
+ LcdWriteData('0' + (sw_sec % 60) / 10);
+ LcdWriteData('0' + (sw_sec % 60) % 10);
+
+ /* 显示百分秒 */
+ LcdWriteCom(0xC9);
+ LcdWriteData('0' + sw_csec / 10);
+ LcdWriteData('0' + sw_csec % 10);
+ }
+}
+
+/* 按键扫描处理 */
+void KeyScan()
+{
+ if(mode == 0) /* 时钟模式下的按键 */
+ {
+ /* K1:进入闹钟设置 */
+ if(K1 == 0)
+ {
+ Delay10ms();
+ if(K1 == 0)
+ {
+ while(!K1);
+ SetAlarm();
+ last_mode = 0xFF; /* 强制刷新界面 */
+ ReturnSound();
+ }
+ }
+ /* K2:进入秒表模式 */
+ if(K2 == 0)
+ {
+ Delay10ms();
+ if(K2 == 0)
+ {
+ while(!K2);
+ KeySound();
+ mode = 2;
+ sw_running = 0; /* 秒表停止 */
+ sw_sec = 0; /* 秒表归零 */
+ sw_csec = 0;
+ }
+ }
+ }
+ else if(mode == 2) /* 秒表模式下的按键 */
+ {
+ /* K3:开始/暂停秒表 */
+ if(K3 == 0)
+ {
+ Delay10ms();
+ if(K3 == 0)
+ {
+ while(!K3);
+ KeySound();
+ sw_running = !sw_running; /* 切换运行状态 */
+ TR1 = sw_running; /* 控制定时器启停 */
+ }
+ }
+ /* K4:秒表复位(仅在停止时有效) */
+ if(K4 == 0)
+ {
+ Delay10ms();
+ if(K4 == 0)
+ {
+ while(!K4);
+ KeySound();
+ if(!sw_running)
+ {
+ sw_sec = 0; /* 秒表归零 */
+ sw_csec = 0;
+ }
+ }
+ }
+ /* K2:返回时钟模式 */
+ if(K2 == 0)
+ {
+ Delay10ms();
+ if(K2 == 0)
+ {
+ while(!K2);
+ mode = 0;
+ TR1 = 0; /* 关闭定时器 */
+ sw_running = 0;
+ sw_sec = 0;
+ sw_csec = 0;
+ ReturnSound();
+ }
+ }
+ }
+}
+
+/* 闹钟设置功能 */
+void SetAlarm()
+{
+ /* 显示闹钟设置界面标题 */
+ LcdWriteCom(0x80);
+ LcdWriteData('A'); LcdWriteData('l'); LcdWriteData('a'); LcdWriteData('r');
+ LcdWriteData('m'); LcdWriteData(' '); LcdWriteData('C'); LcdWriteData('l');
+ LcdWriteData('o'); LcdWriteData('c'); LcdWriteData('k'); LcdWriteData(' ');
+ LcdWriteData('S'); LcdWriteData('e'); LcdWriteData('t'); LcdWriteData(' ');
+
+ /* 显示时间占位符 */
+ LcdWriteCom(0xC0);
+ LcdWriteData(' '); LcdWriteData(' '); LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData(' '); LcdWriteData(':'); LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData(' '); LcdWriteData(' '); LcdWriteData(' '); LcdWriteData(' ');
+ LcdWriteData(' '); LcdWriteData(' '); LcdWriteData(' '); LcdWriteData(' ');
+
+ /* 显示当前闹钟小时 */
+ LcdWriteCom(0xC3);
+ LcdWriteData('0' + alarm_hour / 10);
+ LcdWriteData('0' + alarm_hour % 10);
+
+ /* 显示当前闹钟分钟 */
+ LcdWriteCom(0xC6);
+ LcdWriteData('0' + alarm_min / 10);
+ LcdWriteData('0' + alarm_min % 10);
+
+ /* 显示闹钟开关状态 */
+ LcdWriteCom(0xCA);
+ if(alarm_on) { LcdWriteData(' '); LcdWriteData('O'); LcdWriteData('N'); }
+ else { LcdWriteData('O'); LcdWriteData('F'); LcdWriteData('F'); }
+
+ /* 设置闹钟小时 */
+ LcdWriteCom(0xC4);
+ LcdWriteCom(0x0f); /* 显示光标 */
+ while(1)
+ {
+ if(K3 == 0) /* K3加 */
+ {
+ Delay10ms();
+ if(K3 == 0)
+ {
+ while(!K3);
+ KeySound();
+ if(alarm_hour < 23) alarm_hour++; else alarm_hour = 0;
+ LcdWriteCom(0xC3);
+ LcdWriteData('0' + alarm_hour / 10);
+ LcdWriteData('0' + alarm_hour % 10);
+ LcdWriteCom(0xC4);
+ LcdWriteCom(0x0f);
+ }
+ }
+ if(K4 == 0) /* K4减 */
+ {
+ Delay10ms();
+ if(K4 == 0)
+ {
+ while(!K4);
+ KeySound();
+ if(alarm_hour > 0) alarm_hour--; else alarm_hour = 23;
+ LcdWriteCom(0xC3);
+ LcdWriteData('0' + alarm_hour / 10);
+ LcdWriteData('0' + alarm_hour % 10);
+ LcdWriteCom(0xC4);
+ LcdWriteCom(0x0f);
+ }
+ }
+ if(K1 == 0) /* K1确认 */
+ {
+ Delay10ms();
+ if(K1 == 0)
+ {
+ while(!K1);
+ KeySound();
+ break;
+ }
+ }
+ }
+
+ /* 设置闹钟分钟 */
+ LcdWriteCom(0xC7);
+ LcdWriteCom(0x0f); /* 显示光标 */
+ while(1)
+ {
+ if(K3 == 0) /* K3加 */
+ {
+ Delay10ms();
+ if(K3 == 0)
+ {
+ while(!K3);
+ KeySound();
+ if(alarm_min < 59) alarm_min++; else alarm_min = 0;
+ LcdWriteCom(0xC6);
+ LcdWriteData('0' + alarm_min / 10);
+ LcdWriteData('0' + alarm_min % 10);
+ LcdWriteCom(0xC7);
+ LcdWriteCom(0x0f);
+ }
+ }
+ if(K4 == 0) /* K4减 */
+ {
+ Delay10ms();
+ if(K4 == 0)
+ {
+ while(!K4);
+ KeySound();
+ if(alarm_min > 0) alarm_min--; else alarm_min = 59;
+ LcdWriteCom(0xC6);
+ LcdWriteData('0' + alarm_min / 10);
+ LcdWriteData('0' + alarm_min % 10);
+ LcdWriteCom(0xC7);
+ LcdWriteCom(0x0f);
+ }
+ }
+ if(K1 == 0) /* K1确认 */
+ {
+ Delay10ms();
+ if(K1 == 0)
+ {
+ while(!K1);
+ KeySound();
+ break;
+ }
+ }
+ }
+
+ /* 设置闹钟开关 */
+ LcdWriteCom(0xCC);
+ LcdWriteCom(0x0f); /* 显示光标 */
+ while(1)
+ {
+ if(K3 == 0) /* K3:开启闹钟 */
+ {
+ Delay10ms();
+ if(K3 == 0)
+ {
+ while(!K3);
+ KeySound();
+ alarm_on = 1;
+ LcdWriteCom(0xCA);
+ LcdWriteData(' '); LcdWriteData('O'); LcdWriteData('N');
+ LcdWriteCom(0xCC);
+ LcdWriteCom(0x0f);
+ }
+ }
+ if(K4 == 0) /* K4:关闭闹钟 */
+ {
+ Delay10ms();
+ if(K4 == 0)
+ {
+ while(!K4);
+ KeySound();
+ alarm_on = 0;
+ LcdWriteCom(0xCA);
+ LcdWriteData('O'); LcdWriteData('F'); LcdWriteData('F');
+ LcdWriteCom(0xCC);
+ LcdWriteCom(0x0f);
+ }
+ }
+ if(K1 == 0) /* K1确认退出 */
+ {
+ Delay10ms();
+ if(K1 == 0)
+ {
+ while(!K1);
+ KeySound();
+ break;
+ }
+ }
+ }
+
+ /* 退出设置,保存闹钟参数到DS1302 RAM */
+ LcdWriteCom(0x0c); /* 关闭光标 */
+ Ds1302Write(0x8E, 0x00); /* 允许写DS1302 */
+ Ds1302Write(0xC0, alarm_hour); /* 保存小时到RAM */
+ Ds1302Write(0xC2, alarm_min); /* 保存分钟到RAM */
+ Ds1302Write(0xC4, alarm_on); /* 保存开关状态到RAM */
+ Ds1302Write(0x8E, 0x80); /* 禁止写DS1302 */
+}
+
+/* 闹钟判断 */
+void AlarmJudge()
+{
+ unsigned char h, m, s;
+ h = (TIME[2] >> 4) * 10 + (TIME[2] & 0x0f); /* 当前小时 */
+ m = (TIME[1] >> 4) * 10 + (TIME[1] & 0x0f); /* 当前分钟 */
+ s = (TIME[0] >> 4) * 10 + (TIME[0] & 0x0f); /* 当前秒 */
+
+ /* 闹钟响铃中:每分钟的0秒检查是否超时 */
+ if(alarm_buz)
+ {
+ if(s == 0)
+ {
+ alarm_buz_cnt++;
+ if(alarm_buz_cnt > 50) /* 超过50分钟则停止响铃 */
+ {
+ alarm_buz_cnt = 0;
+ alarm_buz = 0;
+ }
+ }
+ }
+
+ /* 到达闹钟时间且前3秒触发响铃 */
+ if(alarm_on && h == alarm_hour && m == alarm_min && s >= 0 && s < 3)
+ {
+ if(!alarm_buz) alarm_buz = 1;
+ }
+
+ /* 到达59秒时关闭闹钟 */
+ if(s == 59)
+ alarm_buz = 0;
+
+ /* 按任意键关闭闹钟 */
+ if(K1 == 0 || K2 == 0)
+ {
+ alarm_buz = 0;
+ Buzzer = 1;
+ }
+}
+
+/* 闹钟蜂鸣处理(蜂鸣器交替响) */
+void AlarmBuzPro()
+{
+ if(alarm_buz)
+ {
+ Buzzer = 0;
+ DelayMs(50);
+ Buzzer = 1;
+ DelayMs(50);
+ }
+}
+
+/* 定时器1初始化(用于秒表) */
+void Timer1Init()
+{
+ TMOD &= 0x0F; /* 清除T1位 */
+ TMOD |= 0x10; /* 设置T1为模式1(16位定时器) */
+ ET1 = 1; /* 使能T1中断 */
+ EA = 1; /* 开总中断 */
+}
+
+/* 定时器1中断服务函数(约10ms中断一次) */
+void Timer1() interrupt 3
+{
+ TH1 = 0xD8; /* 重装初值 */
+ TL1 = 0xF0;
+
+ if(sw_running) /* 秒表运行时 */
+ {
+ sw_csec++;
+ if(sw_csec >= 100) /* 百分秒满100进1秒 */
+ {
+ sw_csec = 0;
+ sw_sec++;
+ }
+ }
+}
+
+/* 温度处理:读取DS18B20并转换为10倍温度值 */
+void TempPros()
+{
+ int raw;
+ unsigned char sign = 0;
+
+ if(!DS18B20_GetTemp(&raw)) /* 读取原始温度 */
+ return;
+
+ if(raw & 0x8000) /* 负温度处理 */
+ {
+ raw = ~raw + 1;
+ sign = 1;
+ }
+
+ temperature = raw * 10 / 16; /* 转换为10倍温度值 */
+ if(sign)
+ temperature = -temperature;
+
+ DS18B20_StartConvert(); /* 启动下一次温度转换 */
+}
+
+/* 毫秒延时函数(12MHz晶振) */
+void DelayMs(unsigned int ms)
+{
+ unsigned int i, j;
+ for(i=0; i0;c--)
+ for(b=38;b>0;b--)
+ for(a=130;a>0;a--);
+}
diff --git a/Keil Code/Revise_3/pro b/Keil Code/Revise_3/pro
new file mode 100644
index 0000000000000000000000000000000000000000..e68a41c9386f2951386c2f4ebbb4411c2fbfd545
GIT binary patch
literal 40873
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
LrmA|V-!=Ka$-$zB
literal 0
HcmV?d00001
diff --git a/Keil Code/Revise_3/pro.hex b/Keil Code/Revise_3/pro.hex
new file mode 100644
index 0000000..43f298e
--- /dev/null
+++ b/Keil Code/Revise_3/pro.hex
@@ -0,0 +1,239 @@
+:030000000207965E
+:0C079600787FE4F6D8FD7581200207DDB5
+:100ABE00010A00010FFF020D0000011200010B06DA
+:100ACE00010C0001110001100001130002080000CA
+:050ADE00011400C1003D
+:10070400120C96120BEDC2A0120C71120C71120C89
+:1007140071120C71120C71120C71120C71120C7199
+:10072400120C71120C71D2A0120AED7F3F120B8DC4
+:10073400120CA17FC11209F68F0BE50BD39417405D
+:1007440003750B067FC31209F68F0CE50CD3943B9B
+:100754004003E4F50C7FC51209F68F11E511D3941B
+:10076400014003E4F511120C280512E512C39405A7
+:100774004006E4F5121209A9E50A650F60061204A1
+:10078400F2850A0F1209341200031208AE12032371
+:0207940080D40F
+:040BAE00540F2FFFB2
+:100BB2008F1FE51F75F00A842430FF120C8AE51F8F
+:0C0BC20075F00A84E5F02430FF020C8A74
+:10082200EF14B4070040030208AD90083A75F003D4
+:10083200A4C58325F0C5837302084F020858020835
+:100842006602087402088202089002089E7F531210
+:100852000C8A7F7580077F4D120C8A7F6F120C8A7B
+:100862007F6E80447F54120C8A7F75120C8A7F65DA
+:1008720080367F57120C8A7F65120C8A7F6480282B
+:100882007F54120C8A7F68120C8A7F75801A7F4609
+:10089200120C8A7F72120C8A7F69800C7F53120CB1
+:0C08A2008A7F61120C8A7F74120C8A227B
+:1004F200E50A600302058A7F0C120C7E7F80120CD3
+:100502007E7F32120C8A7F30120C8A7F20120C8A74
+:100512007F20120C8A7F2D120C8A7F20120C8A7F78
+:1005220020120C8A7F2D120C8A7F20120C8A7F20C7
+:10053200120C8A7F20120C8A7F20120C8A7F2012D2
+:100542000C8A7F20120C8A7F20120C8A7F20120CC8
+:100552008A7FC0120C7E7F20120C8A7F20120C8AA6
+:100562007F3A120C8A7F20120C8A7F20120C8A7F1B
+:100572003A120C8A7F20120C8A7F20120C8A7F206A
+:10058200120C8A7F2002061CE50A6402600302063E
+:10059200477F0C120C7E7F80120C7E7F20120C8A09
+:1005A2007F20120C8A7F20120C8A7F53120C8A7FC2
+:1005B20074120C8A7F6F120C8A7F70120C8A7F2051
+:1005C200120C8A7F57120C8A7F61120C8A7F741276
+:1005D2000C8A7F63120C8A7F68120C8A7F20120CAD
+:1005E2008A7F20120C8A7F20120C8A7FC0120C7E16
+:1005F2007F20120C8A7F20120C8A7F3A120C8A7F8B
+:1006020020120C8A7F20120C8A7F3A120C8A7F20D9
+:10061200120C8A7F20120C8A7F2E120C8A7F2012E3
+:100622000C8A7F20120C8A7F20120C8A7F20120CE7
+:100632008A7F20120C8A7F20120C8A7F20120C8A59
+:060642007F20120C8A2249
+:10032300E50A60030204217F82120C7EE51BC4549C
+:100333000F75F00AA4FFE51B120BAE7F85120C7E2E
+:10034300E519C4540F75F00AA4FFE519120BAE7F2B
+:1003530088120C7EE518C4540F75F00AA4FFE51843
+:10036300120BAE7F8C120C7EE51A5407FF12082283
+:100373007FC0120C7EE517C4540F75F00AA4FFE585
+:1003830017120BAE7FC3120C7EE516C4540F75F023
+:100393000AA4FFE516120BAE7FC6120C7EE515C448
+:1003A300540F75F00AA4FFE515120BAE7FC9120CAA
+:1003B3007E850D1D850E1EC3E51D6480948050123D
+:1003C3007F2D120C8AC3E4951EF51EE4951DF51DC1
+:1003D30080057F20120C8AAE1DAF1E7C007D641247
+:1003E30006AFEF2430FF120C8AAE1DAF1E7C007DDA
+:1003F3000A1206AF7C007D0A1206AFED2430FF120D
+:100403000C8A7F2E120C8AAE1DAF1E7C007D0A1251
+:1004130006AFED2430FF120C8A7F430204EEE50A97
+:10042300640260030204F1AE08AF097C0E7D101272
+:10043300065A8F1C7FC0120C7EE51C75F00A8424BB
+:1004430030FF120C8AE51C75F00A84E5F02430FFB6
+:10045300120C8A7FC3120C7EAE08AF097C0E7D108E
+:1004630012065A7E007F3CCFCDCFCECCCE12065A99
+:100473008F1CE51C75F00A842430FF120C8AE51CDE
+:1004830075F00A84E5F02430FF120C8A7FC6120C43
+:100493007EAE08AF097C007D3C12065A7E007F0ABF
+:1004A300CFCDCFCECCCE12065AEF2430FF120C8A1A
+:1004B300AE08AF097C007D3C12065A7E007F0ACF4E
+:1004C300CDCFCECCCE12065AED2430FF120C8A7F4C
+:1004D300C9120C7EE51475F00A842430FF120C8ACD
+:0E04E300E51475F00A84E5F02430FF120C8A4F
+:0104F10022E8
+:1008AE00E50A703120B112120C7120B10C30B1FD7D
+:1008BE0012001E750FFF120C3E20B069120C712033
+:1008CE00B06330B0FD120CA9750A02C200E4F5083F
+:1008DE00F509F51422E50A6402704A20B212120CD0
+:1008EE007120B20C30B2FD120CA9B200A200928E91
+:1008FE0020B316120C7120B31030B3FD120CA920C8
+:10090E000007E4F508F509F51420B019120C712052
+:10091E00B01330B0FDE4F50AC28EC200F508F50939
+:06092E00F514120C3E223C
+:10001E007F80120C7E7F41120C8A7F6C120C8A7FBD
+:10002E0061120C8A7F72120C8A7F6D120C8A7F20ED
+:10003E00120C8A7F43120C8A7F6C120C8A7F6F120D
+:10004E000C8A7F63120C8A7F6B120C8A7F20120C33
+:10005E008A7F53120C8A7F65120C8A7F74120C8A67
+:10006E007F20120C8A7FC0120C7E7F20120C8A7F9A
+:10007E0020120C8A7F20120C8A7F20120C8A7F207D
+:10008E00120C8A7F3A120C8A7F20120C8A7F201261
+:10009E000C8A7F20120C8A7F20120C8A7F20120C71
+:1000AE008A7F20120C8A7F20120C8A7F20120C8AE3
+:1000BE007F20120C8A7F20120C8A7FC3120C7EE5E1
+:1000CE000B75F00A842430FF120C8AE50B75F00ACA
+:1000DE0084E5F02430FF120C8A7FC6120C7EE50CEC
+:1000EE0075F00A842430FF120C8AE50C75F00A8430
+:1000FE00E5F02430FF120C8A7FCA120C7EE51160E7
+:10010E000E7F20120C8A7F4F120C8A7F4E800C7F3E
+:10011E004F120C8A7F46120C8A7F46120C8A7FC4BD
+:10012E00120C7E7F0F120C7E20B243120C7120B285
+:10013E003D30B2FD120CA9E50BC394175004050B0C
+:10014E008003E4F50B7FC3120C7EE50B75F00A8479
+:10015E002430FF120C8AE50B75F00A84E5F024308A
+:10016E00FF120C8A7FC4120C7E7F0F120C7E20B3FE
+:10017E0043120C7120B33D30B3FD120CA9E50BD325
+:10018E0094004004150B8003750B177FC3120C7E71
+:10019E00E50B75F00A842430FF120C8AE50B75F01E
+:1001AE000A84E5F02430FF120C8A7FC4120C7E7F85
+:1001BE000F120C7E30B103020136120C7130B103F6
+:1001CE0002013630B1FD120CA97FC7120C7E7F0FD3
+:1001DE00120C7E20B243120C7120B23D30B2FD12D1
+:1001EE000CA9E50CC3943B5004050C8003E4F50CFC
+:1001FE007FC6120C7EE50C75F00A842430FF120CBB
+:10020E008AE50C75F00A84E5F02430FF120C8A7F23
+:10021E00C7120C7E7F0F120C7E20B343120C71207E
+:10022E00B33D30B3FD120CA9E50CD3940040041578
+:10023E000C8003750C3B7FC6120C7EE50C75F00A24
+:10024E00842430FF120C8AE50C75F00A84E5F02444
+:10025E0030FF120C8A7FC7120C7E7F0F120C7E307D
+:10026E00B1030201E1120C7130B1030201E130B1B0
+:10027E00FD120CA97FCC120C7E7F0F120C7E20B2C9
+:10028E002D120C7120B22730B2FD120CA97511017E
+:10029E007FCA120C7E7F20120C8A7F4F120C8A7F2F
+:1002AE004E120C8A7FCC120C7E7F0F120C7E20B366
+:1002BE002D120C7120B32730B3FD120CA9E4F511E9
+:1002CE007FCA120C7E7F4F120C8A7F46120C8A7FD9
+:1002DE0046120C8A7FCC120C7E7F0F120C7E20B140
+:1002EE009D120C7120B19730B1FD120CA97F0C122A
+:1002FE000C7EE4FD7F8E120A89AD0B7FC0120A8937
+:10030E00AD0C7FC2120A89AD117FC4120A897D809D
+:05031E007F8E020A8938
+:10093400E517C4540F75F00AA4FFE517540F2FFFF1
+:10094400E516C4540F75F00AA4FEE516540F2EFEE6
+:10095400E515C4540F75F00AA4FDE515540F2DFDDB
+:10096400E5106011ED700E0513E513D394324005C4
+:10097400E4F513F510E511601AEFB50B16EEB50C9E
+:1009840012EDC39400400CED94035007E51070037E
+:10099400751001BD3B03E4F51030B10320B005E44C
+:0409A400F510D2A0D8
+:0109A800222C
+:10000300E5106012C2A07F327E00120B6DD2A07F7A
+:07001300327E00120B6D228A
+:0B0C960053890F438910D2ABD2AF226C
+:03001B00020B4194
+:100B4100C0E0C0D0758DD8758BF03000140514E568
+:100B510014C39464400B7514000509E5097002057E
+:060B610008D0D0D0E03204
+:1009A900E4F51EFB7A00791C120C0B503FE51C3054
+:1009B900E714E51DF4FFE51CF4FEEF2401F51DE441
+:1009C9003EF51C751E01AE1CAF1D7C007D0A12068A
+:1009D900487D101206AF8E0D8F0EE51E600BC3E425
+:0C09E900950EF50EE4950DF50D120CA115
+:0109F50022DF
+:060B6700C2A07F287E0001
+:100B6D00E4FDFCC3ED9FEC9E5015E4FBFA0BBB00BE
+:0F0B7D00010AEB64704A70F50DBD00010C80E4B5
+:010B8C002246
+:060CA900120B67D2A0222D
+:100C3E00120B67D2A07F1E120B6DC2A07F28120B63
+:040C4E006DD2A022A1
+:0C0C71007F017E267D82DDFEDEFADFF6CC
+:010C7D002254
+:100A4000C2A58B807F017E00120A70D2A77F017E33
+:100A500000120A70C2A77F017E00120A70EBC45414
+:100A6000F0F5807F017E00120A70D2A77F017E0020
+:100A7000D3EF9400EE9400400F7DC77C01DCFEDDD7
+:080A8000FAEF1F70EB1E80E885
+:010A8800224B
+:0C0C7E00AB07C2A7C2A6120A40C2A72200
+:0C0C8A00AB07C2A7D2A6120A40C2A722E4
+:100BED007F32120C7E7F28120C7E7F0C120C7E7FC2
+:0E0BFD0006120C7E7F01120C7E7F80020C7EA1
+:0E0C630081838587898B8D80828486888A8C28
+:090AE300071500001201010213C5
+:100A8900C29200C29000D29200E4FEEF139291EF5D
+:100A9900C313FFD29000C290000EBE08EEE4FEED33
+:100AA900139291EDC313FDD29000C290000EBE08BF
+:040AB900EEC29200F7
+:010ABD002216
+:1009F600C29200C29000D29200E4FDEF139291EFF2
+:100A0600C313FFD29000C290000DBD08EE00E4FDB6
+:100A1600A291E433FFC43333335480FCEEC3134C4A
+:100A2600FED29000C290000DBD08E5C29200D290A1
+:090A360000C29100D29100AF064C
+:010A3F002294
+:100AED007F811209F6EF30E723E4FD7F8E120A892C
+:100AFD00E4FCEC900C6A93FF74152CF8E6FD120AD9
+:0C0B0D00890CBC07ED7D807F8E120A89E8
+:010B190022B9
+:100C2800E4FBEB900C6393FF1209F674152BF8A6FE
+:050C3800070BBB07EDF6
+:010C3D002294
+:100C5200C2B7E4FF0FBFC8FCD2B7E4FF0FBF64FC0A
+:010C6200226F
+:050B1A00120C527FCC1B
+:100B1F00E4FEC2B700EF30E004D2B78002C2B7E400
+:100B2F00FD0DBD1EFCD2B70000EFC313FF0EBE08B4
+:010B3F00E1D4
+:010B40002292
+:100BCE00E4FFFEEFC313FFC2B700D2B7000030B789
+:0E0BDE0003430780E4FD0DBD14FC0EBE08E5C8
+:010BEC0022E6
+:080CA100120B1A7F44020B1F25
+:100B8D00AC07120B1A7F4E120B1FE4FF120B1FE462
+:100B9D00FF120B1FAF04120B1F120B1A7F48020B13
+:010BAD001F28
+:100C0B00120B1A7FBE120B1F120BCEAC07120BCEA0
+:0C0C1B00EFFFAD04EDCF8FF01206E5D323
+:010C270022AA
+:1007A200020704E493A3F8E493A34003F68001F262
+:1007B20008DFF48029E493A3F85407240CC8C33358
+:1007C200C4540F4420C8834004F456800146F6DF27
+:1007D200E4800B0102040810204080900ABEE47EEF
+:1007E200019360BCA3FF543F30E509541FFEE4931C
+:1007F200A360010ECF54C025E060A840B8E493A3E3
+:10080200FAE493A3F8E493A3C8C582C8CAC583CA0D
+:10081200F0A3C8C582C8CAC583CADFE9DEE780BEC5
+:010AEC000009
+:10064800EF8DF0A4A8F0CF8CF0A428CE8DF0A42EC6
+:02065800FE2280
+:10065A00BC000BBE0029EF8DF084FFADF022E4CC84
+:10066A00F875F008EF2FFFEE33FEEC33FCEE9DEC4D
+:10067A00984005FCEE9DFE0FD5F0E9E4CEFD22ED93
+:10068A00F8F5F0EE8420D21CFEADF075F008EF2FDD
+:10069A00FFED33FD4007985006D5F0F222C398FDCE
+:0506AA000FD5F0EA226B
+:1006AF00C2D5EC30E709B2D5E4C39DFDE49CFCEE66
+:1006BF0030E715B2D5E4C39FFFE49EFE12065AC37E
+:1006CF00E49DFDE49CFC800312065A30D507C3E479
+:0606DF009FFFE49EFE22D5
+:1006E500BB010A89828A83F0E5F0A3F0225006F760
+:0F06F50009A7F01922BBFE06F3E5F009F319225D
+:00000001FF
diff --git a/Keil Code/Revise_3/pro.uvgui.Administrator b/Keil Code/Revise_3/pro.uvgui.Administrator
new file mode 100644
index 0000000..9ea554a
--- /dev/null
+++ b/Keil Code/Revise_3/pro.uvgui.Administrator
@@ -0,0 +1,1249 @@
+
+
+
+ 1.1
+
+ ### uVision Project, (C) Keil Software
+
+
+
+
+
+ 1
+ 1
+ 0
+
+
+
+
+
+
+ 44
+ 2
+ 3
+
+ -1
+ -1
+
+
+ -1
+ -1
+
+
+ 34
+ 26
+ 1051
+ 560
+
+
+
+ 0
+
+ 826
+ 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000005000000030000000100000069483A5CC6D5D6D04843363830302D454D332056332E30BFAAB7A2B0E5D7CAC1CF5C352D2DCAB5D1E9B3CCD0F25CD6D0BCB6CAB5D1E9C0FDB3CC5C445331333032CAB1D6D34C434431363032CFD4CABEA3A8BFC9D2D4B0B4BCFCC9E8D6C3CAB1D6D3A3A95C4C43442E4800000000054C43442E4800000000C5D4F200FFFFFFFF69483A5CC6D5D6D04843363830302D454D332056332E30BFAAB7A2B0E5D7CAC1CF5C352D2DCAB5D1E9B3CCD0F25CD6D0BCB6CAB5D1E9C0FDB3CC5C445331333032CAB1D6D34C434431363032CFD4CABEA3A8BFC9D2D4B0B4BCFCC9E8D6C3CAB1D6D3A3A95C6C63642E6300000000056C63642E6300000000FFDC7800FFFFFFFF6C483A5CC6D5D6D04843363830302D454D332056332E30BFAAB7A2B0E5D7CAC1CF5C352D2DCAB5D1E9B3CCD0F25CD6D0BCB6CAB5D1E9C0FDB3CC5C445331333032CAB1D6D34C434431363032CFD4CABEA3A8BFC9D2D4B0B4BCFCC9E8D6C3CAB1D6D3A3A95C6473313330322E6300000000086473313330322E6300000000BECEA100FFFFFFFF6A483A5CC6D5D6D04843363830302D454D332056332E30BFAAB7A2B0E5D7CAC1CF5C352D2DCAB5D1E9B3CCD0F25CD6D0BCB6CAB5D1E9C0FDB3CC5C445331333032CAB1D6D34C434431363032CFD4CABEA3A8BFC9D2D4B0B4BCFCC9E8D6C3CAB1D6D3A3A95C6D61696E2E6300000000066D61696E2E6300000000F0A0A100FFFFFFFF6C483A5CC6D5D6D04843363830302D454D332056332E30BFAAB7A2B0E5D7CAC1CF5C352D2DCAB5D1E9B3CCD0F25CD6D0BCB6CAB5D1E9C0FDB3CC5C445331333032CAB1D6D34C434431363032CFD4CABEA3A8BFC9D2D4B0B4BCFCC9E8D6C3CAB1D6D3A3A95C4453313330322E4800000000084453313330322E4800000000BCA8E100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000009400000065000000560500005D020000
+
+
+
+ 0
+ Build
+
+ -1
+ -1
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 940000004F0000005D030000B3000000
+
+
+ 16
+ 19010000EA000000E20300004E010000
+
+
+
+ 1005
+ 1005
+ 1
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 03000000660000008D0000002E020000
+
+
+ 16
+ 9E000000B40000002E0100003B020000
+
+
+
+ 109
+ 109
+ 1
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 03000000660000008D0000002E020000
+
+
+ 16
+ 9E000000B40000002E0100003B020000
+
+
+
+ 1465
+ 1465
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 0300000077010000EE030000BC010000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 1466
+ 1466
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 0300000077010000EE030000BC010000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 1467
+ 1467
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 0300000077010000EE030000BC010000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 1468
+ 1468
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 0300000077010000EE030000BC010000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 1506
+ 1506
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 16384
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E0100003B020000
+
+
+
+ 1507
+ 1507
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 0300000077010000EE030000BC010000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 1913
+ 1913
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 97000000660000005A0300009A000000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 1935
+ 1935
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 0300000077010000EE030000BC010000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 1936
+ 1936
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 0300000077010000EE030000BC010000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 1937
+ 1937
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 0300000077010000EE030000BC010000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 1939
+ 1939
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 03000000620200005305000096020000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 1940
+ 1940
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 03000000620200005305000096020000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 1941
+ 1941
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 03000000620200005305000096020000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 1942
+ 1942
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 03000000620200005305000096020000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 1944
+ 1944
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 32768
+ 0
+
+ 16
+ 0300000077010000EE030000BC010000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 195
+ 195
+ 1
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 03000000660000008D0000002E020000
+
+
+ 16
+ 9E000000B40000002E0100003B020000
+
+
+
+ 196
+ 196
+ 1
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 03000000660000008D0000002E020000
+
+
+ 16
+ 9E000000B40000002E0100003B020000
+
+
+
+ 197
+ 197
+ 1
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 32768
+ 0
+
+ 16
+ 000000005F02000056050000AF020000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 198
+ 198
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 32768
+ 0
+
+ 16
+ 0000000060010000F1030000D5010000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 199
+ 199
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 03000000620200005305000096020000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 203
+ 203
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 8192
+ 0
+
+ 16
+ 97000000660000005A0300009A000000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 204
+ 204
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 97000000660000005A0300009A000000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 221
+ 221
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 00000000000000000000000000000000
+
+
+ 16
+ 0A0000000A0000006E0000006E000000
+
+
+
+ 343
+ 343
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 97000000660000005A0300009A000000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 346
+ 346
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 97000000660000005A0300009A000000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 35824
+ 35824
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 97000000660000005A0300009A000000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 35885
+ 35885
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35886
+ 35886
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35887
+ 35887
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35888
+ 35888
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35889
+ 35889
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35890
+ 35890
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35891
+ 35891
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35892
+ 35892
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35893
+ 35893
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35894
+ 35894
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35895
+ 35895
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35896
+ 35896
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35897
+ 35897
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35898
+ 35898
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35899
+ 35899
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35900
+ 35900
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35901
+ 35901
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35902
+ 35902
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35903
+ 35903
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35904
+ 35904
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 35905
+ 35905
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 6403000066000000EE030000BC010000
+
+
+ 16
+ 9E000000B40000002E02000044020000
+
+
+
+ 38003
+ 38003
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 03000000660000008D0000002E020000
+
+
+ 16
+ 9E000000B40000002E0100003B020000
+
+
+
+ 38007
+ 38007
+ 0
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 03000000620200005305000096020000
+
+
+ 16
+ 9E000000B40000009602000015010000
+
+
+
+ 59392
+ 59392
+ 1
+ 0
+ 0
+ 0
+ 940
+ 0
+ 8192
+ 0
+
+ 16
+ 0000000000000000B70300001C000000
+
+
+ 16
+ 0A0000000A0000006E0000006E000000
+
+
+
+ 59393
+ 0
+ 1
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 00000000AF02000056050000C2020000
+
+
+ 16
+ 0A0000000A0000006E0000006E000000
+
+
+
+ 59398
+ 59398
+ 1
+ 0
+ 0
+ 0
+ 391
+ 0
+ 8192
+ 1
+
+ 16
+ 000000001C0000009201000038000000
+
+
+ 16
+ 0A0000000A0000006E0000006E000000
+
+
+
+ 593980
+ 59398
+ 1
+ 0
+ 0
+ 0
+ 32767
+ 0
+ 4096
+ 0
+
+ 16
+ 00000000000000005705000017000000
+
+
+ 16
+ 0A0000000A0000006E0000006E000000
+
+
+
+ 59399
+ 59399
+ 0
+ 0
+ 0
+ 0
+ 644
+ 0
+ 8192
+ 2
+
+ 16
+ 00000000380000008F02000054000000
+
+
+ 16
+ 0A0000000A0000006E0000006E000000
+
+
+
+ 2485
+ 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF94000000B30000005D030000B7000000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E65002000000000000019010000EA000000E20300004E010000940000004F0000005D030000B30000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF5D0300004F00000061030000D5010000000000000200000004000000010000000000000000000000FFFFFFFF16000000E20500002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000001800040000000000000E6030000EA0000007604000070020000610300004F000000F1030000D50100000000000040410046160000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF900000004F0000009400000047020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000085000000EA00000015010000E2020000000000004F00000090000000470200000000000040140056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF000000005C010000F10300006001000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0900000098070000E30500008F0700009007000091070000B9050000BA050000BB050000BC0500000180008000000000000085000000FB01000076040000700200000000000060010000F1030000D50100000000000040820046090000000A43616C6C20537461636B000000009807000001000000FFFFFFFFFFFFFFFF0A43616C6C20537461636B00000000E305000001000000FFFFFFFFFFFFFFFF064C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFF901000060010000FD010000D501000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF9807000001000000FFFFFFFF9807000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF0000000047020000560500004B020000010000000100001004000000010000000000000000000000FFFFFFFF07000000C5000000C700000077940000930700009407000095070000960700000180008000000100000085000000E6020000DB0500004A030000000000004B02000056050000AF0200000000000040820056070000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000
+
+
+ 59392
+ File
+
+ 2002
+ 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000004000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000
+
+
+ 1423
+ 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000
+
+
+ 1423
+ 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000
+
+
+
+ 59398
+ Build
+
+ 573
+ 00200000010000000D00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000004001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A0000000004002400000000000000000000000000000000010000000100000000000000054275696C6487010000
+
+
+ 478
+ 0D00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF000100000000000000010000000000000001000000
+
+
+ 478
+ 0D00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A00000000000009000000000000000000000000000000000100000001000000
+
+
+
+ 59399
+ Debug
+
+ 2353
+ 00200000000000001B00FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380DB8B00000000000031000000064C6F63616C73000000000000000000000000010000000100000000000000000000000100000000001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000000000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804601000000000000490000000000000000000000000000000001000000010000000000000005446562756784020000
+
+
+ 968
+ 1B00FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180DB8B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804601000000000000FFFFFFFF000100000000000000010000000000000001000000
+
+
+ 968
+ 1B00FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180DB8B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018001890000000000001300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180460100000000000014000000000000000000000000000000000100000001000000
+
+
+
+ 0
+ 1366
+ 768
+
+
+
+
+
diff --git a/Keil Code/Revise_3/pro.uvopt b/Keil Code/Revise_3/pro.uvopt
new file mode 100644
index 0000000..9ac6c09
--- /dev/null
+++ b/Keil Code/Revise_3/pro.uvopt
@@ -0,0 +1,1811 @@
+
+
+
+ 1.0
+
+ ### uVision Project, (C) Keil Software
+
+
+ *.c
+ *.s*; *.src; *.a*
+ *.obj
+ *.lib
+ *.txt; *.h; *.inc
+ *.plm
+ *.cpp
+
+
+
+ 0
+ 0
+
+
+
+ Target 1
+ 0x0
+ MCS-51
+
+ 24000000
+
+ 1
+ 1
+ 1
+ 0
+
+
+ 0
+ 65535
+ 0
+ 0
+ 0
+
+
+ 120
+ 65
+ 8
+ .\
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+
+
+ 1
+ 0
+ 1
+
+ 255
+
+
+ 0
+ Data Sheet
+ DATASHTS\ATMEL\AT89C51_DS.PDF
+
+
+ 1
+ Instruction Set Manual
+ DATASHTS\ATMEL\AT_C51ISM.PDF
+
+
+
+ S8051.DLL
+
+ DP51.DLL
+ -p51
+ S8051.DLL
+
+ TP51.DLL
+ -p51
+
+
+ 1
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 0
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ DLGDP51
+ (98=-1,-1,-1,-1,0)(82=-1,-1,-1,-1,0)(83=-1,-1,-1,-1,0)(84=-1,-1,-1,-1,0)(85=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(91=-1,-1,-1,-1,0)(92=-1,-1,-1,-1,0)
+
+
+
+ 0
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+ Source Group 1
+ 1
+ 0
+ 0
+
+ 1
+ 1
+ 2
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ .\STARTUP.A51
+ STARTUP.A51
+
+
+ 1
+ 2
+ 1
+ 0
+ 0
+ 15
+ 0
+ 251
+ 263
+ 0
+ .\main.c
+ main.c
+
+
+ 1
+ 3
+ 1
+ 1
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+ .\lcd.c
+ lcd.c
+
+
+ 1
+ 4
+ 1
+ 1
+ 0
+ 17
+ 0
+ 1
+ 1
+ 0
+ .\ds1302.c
+ ds1302.c
+
+
+ 1
+ 5
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 1
+ 0
+ .\ds18b20.c
+ ds18b20.c
+
+
+
+
+ C:\Users\HM_DEV\Desktop\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭-0\LCD.H
+ 11
+ 13
+ 0
+
+ 0
+ 0
+ 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+
+
+
+ C:\Users\HM_DEV\Desktop\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭-0\DS1302.H
+ 1
+ 7
+ 0
+
+ 0
+ 0
+ 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+
+
+
+ Z:\Files\鍗曠墖鏈哄疄璁璡鍗曠墖鏈哄疄璁璡涓骇瀹為獙渚嬬▼\涓骇瀹為獙渚嬬▼\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭\ds1302.h
+ 1
+ 1
+ 0
+
+ 0
+ 0
+ 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+
+
+
+ Z:\Files\鍗曠墖鏈哄疄璁璡鍗曠墖鏈哄疄璁璡涓骇瀹為獙渚嬬▼\涓骇瀹為獙渚嬬▼\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭\lcd.h
+ 20
+ 20
+ 0
+
+ 0
+ 0
+ 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+
+
+
+ C:\KEIL\C51\INC\ATMEL\REG51.H
+ 68
+ 68
+ 0
+
+ 0
+ 0
+ 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+
+
+
+ C:\KEIL\C51\INC\INTRINS.H
+ 1
+ 1
+ 0
+
+ 0
+ 0
+ 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+
+
+
+ Default
+ 1
+ Build
+ 0
+
+ Default
+ 1
+
+ 35824
+ 1
+ Logic Analyzer
+ 0
+
+ 0
+
+ 1
+ 6
+ 0
+ 0
+ 0
+ 0
+ 210
+ 600
+ 0
+ 0
+ 250
+ 600
+ 1
+ 0
+ 0
+ 0
+
+
+ 59392
+ 2
+ File
+ 0
+
+ 0
+
+ 1
+ 2
+ 3
+ 0
+ 24
+ 0
+ 50
+ 893
+ 0
+ 0
+ 0
+ 0
+ 100
+ 0
+ 1
+ 0
+
+
+ 59398
+ 3
+ Build
+ 0
+
+ 0
+
+ 1
+ 2
+ 3
+ 0
+ 50
+ 0
+ 76
+ 384
+ 0
+ 0
+ 0
+ 0
+ 100
+ 0
+ 0
+ 0
+
+
+ 59399
+ 4
+ Debug
+ 0
+
+ 0
+
+ 1
+ 2
+ 3
+ 0
+ 50
+ 0
+ 76
+ 626
+ 0
+ 0
+ 0
+ 0
+ 100
+ 0
+ 1
+ 0
+
+
+ 197
+ 5
+ Build Output
+ 0
+
+ 0
+
+ 1
+ 2
+ 4
+ 0
+ 527
+ 0
+ 737
+ 1400
+ 0
+ 0
+ 250
+ 600
+ 100
+ 0
+ 0
+ 0
+
+
+ 198
+ 6
+ Command
+ 197
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 527
+ 0
+ 737
+ 1400
+ 0
+ 0
+ 250
+ 600
+ 100
+ 1
+ 1
+ 0
+
+
+ 199
+ 7
+ Find in Files
+ 198
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 527
+ 0
+ 737
+ 1400
+ 0
+ 0
+ 250
+ 600
+ 100
+ 0
+ 0
+ 0
+
+
+ 38007
+ 8
+ Browse
+ 199
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 527
+ 0
+ 737
+ 1400
+ 0
+ 0
+ 250
+ 600
+ 100
+ 0
+ 0
+ 0
+
+
+ 1939
+ 9
+ UART #1
+ 38007
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 527
+ 0
+ 737
+ 1400
+ 0
+ 0
+ 250
+ 600
+ 100
+ 0
+ 0
+ 0
+
+
+ 1940
+ 10
+ UART #2
+ 1939
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 527
+ 0
+ 737
+ 1400
+ 0
+ 0
+ 250
+ 600
+ 100
+ 0
+ 0
+ 0
+
+
+ 1941
+ 11
+ UART #3
+ 1940
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 527
+ 0
+ 737
+ 1400
+ 0
+ 0
+ 250
+ 600
+ 100
+ 0
+ 0
+ 0
+
+
+ 1942
+ 12
+ UART #4
+ 1941
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 527
+ 0
+ 737
+ 1400
+ 0
+ 0
+ 250
+ 600
+ 100
+ 0
+ 0
+ 0
+
+
+ 1944
+ 13
+ Call Stack
+ 197
+
+ 197
+
+ 1
+ 2
+ 2
+ 0
+ 527
+ 0
+ 737
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 50
+ 1
+ 1
+ 0
+
+
+ 1507
+ 14
+ Call Stack
+ 1944
+
+ 197
+
+ 1
+ 4
+ 2
+ 0
+ 527
+ 0
+ 737
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 50
+ 0
+ 0
+ 0
+
+
+ 1935
+ 15
+ Locals
+ 1507
+
+ 197
+
+ 1
+ 4
+ 2
+ 0
+ 527
+ 0
+ 737
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 50
+ 0
+ 1
+ 0
+
+
+ 1936
+ 16
+ Watch 1
+ 1935
+
+ 197
+
+ 1
+ 4
+ 2
+ 0
+ 527
+ 0
+ 737
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 50
+ 0
+ 1
+ 0
+
+
+ 1937
+ 17
+ Watch 2
+ 1936
+
+ 197
+
+ 1
+ 4
+ 2
+ 0
+ 527
+ 0
+ 737
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 50
+ 0
+ 0
+ 0
+
+
+ 1465
+ 18
+ Memory 1
+ 1937
+
+ 197
+
+ 1
+ 4
+ 2
+ 0
+ 527
+ 0
+ 737
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 50
+ 0
+ 1
+ 0
+
+
+ 1466
+ 19
+ Memory 2
+ 1465
+
+ 197
+
+ 1
+ 4
+ 2
+ 0
+ 527
+ 0
+ 737
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 50
+ 0
+ 0
+ 0
+
+
+ 1467
+ 20
+ Memory 3
+ 1466
+
+ 197
+
+ 1
+ 4
+ 2
+ 0
+ 527
+ 0
+ 737
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 50
+ 0
+ 0
+ 0
+
+
+ 1468
+ 21
+ Memory 4
+ 1467
+
+ 197
+
+ 1
+ 4
+ 2
+ 0
+ 527
+ 0
+ 737
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 50
+ 0
+ 0
+ 0
+
+
+ 1506
+ 22
+ Symbols
+ 1468
+
+ 197
+
+ 1
+ 4
+ 2
+ 0
+ 527
+ 0
+ 737
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 50
+ 0
+ 1
+ 0
+
+
+ 1005
+ 23
+ Project
+ 0
+
+ 0
+
+ 1
+ 2
+ 1
+ 0
+ 76
+ 0
+ 523
+ 210
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 1
+ 0
+
+
+ 109
+ 24
+ Books
+ 1005
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 0
+ 523
+ 210
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 195
+ 25
+ Functions
+ 109
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 0
+ 523
+ 210
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 196
+ 26
+ Templates
+ 195
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 0
+ 523
+ 210
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 38003
+ 27
+ Registers
+ 196
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 0
+ 523
+ 210
+ 0
+ 0
+ 600
+ 250
+ 100
+ 1
+ 1
+ 0
+
+
+ 35885
+ 28
+ not set
+ 0
+
+ 0
+
+ 1
+ 2
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35886
+ 29
+ not set
+ 35885
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35887
+ 30
+ not set
+ 35886
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35888
+ 31
+ not set
+ 35887
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35889
+ 32
+ not set
+ 35888
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35890
+ 33
+ not set
+ 35889
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35891
+ 34
+ not set
+ 35890
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35892
+ 35
+ not set
+ 35891
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35893
+ 36
+ not set
+ 35892
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35894
+ 37
+ not set
+ 35893
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35895
+ 38
+ not set
+ 35894
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35896
+ 39
+ not set
+ 35895
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35897
+ 40
+ not set
+ 35896
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35898
+ 41
+ not set
+ 35897
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35899
+ 42
+ not set
+ 35898
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35900
+ 43
+ not set
+ 35899
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35901
+ 44
+ not set
+ 35900
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35902
+ 45
+ not set
+ 35901
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35903
+ 46
+ not set
+ 35902
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35904
+ 47
+ not set
+ 35903
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 35905
+ 48
+ not set
+ 35904
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 1190
+ 523
+ 1400
+ 0
+ 0
+ 600
+ 250
+ 100
+ 0
+ 0
+ 0
+
+
+ 203
+ 49
+ Disassembly
+ 0
+
+ 0
+
+ 1
+ 2
+ 3
+ 0
+ 76
+ 214
+ 286
+ 1400
+ 0
+ 0
+ 250
+ 600
+ 100
+ 1
+ 1
+ 0
+
+
+ 1913
+ 50
+ Instruction Trace
+ 203
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 214
+ 286
+ 1400
+ 0
+ 0
+ 250
+ 600
+ 100
+ 0
+ 0
+ 0
+
+
+ 343
+ 51
+ Performance Analyzer
+ 1913
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 214
+ 286
+ 1400
+ 0
+ 0
+ 250
+ 600
+ 100
+ 0
+ 0
+ 0
+
+
+ 204
+ 52
+ Performance Analyzer
+ 343
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 214
+ 286
+ 1400
+ 0
+ 0
+ 250
+ 600
+ 100
+ 0
+ 0
+ 0
+
+
+ 346
+ 53
+ Code Coverage
+ 204
+
+ 0
+
+ 1
+ 4
+ 2
+ 0
+ 76
+ 214
+ 286
+ 1400
+ 0
+ 0
+ 250
+ 600
+ 100
+ 0
+ 0
+ 0
+
+
+
+
+
+ 1
+ 0
+
+ 100
+ 0
+
+
+ .\main.c
+ 15
+ 251
+ 263
+
+
+ C:\KEIL\C51\INC\INTRINS.H
+ 0
+ 1
+ 1
+
+
+ .\ds18b20.c
+ 1
+ 1
+ 1
+
+
+ C:\KEIL\C51\INC\ATMEL\REG51.H
+ 0
+ 68
+ 68
+
+
+ Z:\Files\鍗曠墖鏈哄疄璁璡鍗曠墖鏈哄疄璁璡涓骇瀹為獙渚嬬▼\涓骇瀹為獙渚嬬▼\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭\lcd.h
+ 23
+ 20
+ 20
+
+
+ .\lcd.c
+ 0
+ 1
+ 1
+
+
+ .\ds1302.c
+ 17
+ 1
+ 1
+
+
+ Z:\Files\鍗曠墖鏈哄疄璁璡鍗曠墖鏈哄疄璁璡涓骇瀹為獙渚嬬▼\涓骇瀹為獙渚嬬▼\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭\ds1302.h
+ 0
+ 1
+ 1
+
+
+ DS1302.H
+ 0
+ 1
+ 7
+
+
+ LCD.H
+ 29
+ 11
+ 13
+
+
+
+
+
+
diff --git a/Keil Code/Revise_3/pro.uvproj b/Keil Code/Revise_3/pro.uvproj
new file mode 100644
index 0000000..8d5a251
--- /dev/null
+++ b/Keil Code/Revise_3/pro.uvproj
@@ -0,0 +1,380 @@
+
+
+
+ 1.0
+
+ ### uVision Project, (C) Keil Software
+
+
+
+ Target 1
+ 0x0
+ MCS-51
+
+
+ AT89C51
+ Atmel
+ IRAM(0-0x7F) IROM(0-0xFFF) CLOCK(24000000)
+
+ "LIB\STARTUP.A51" ("Standard 8051 Startup Code")
+
+ 2976
+ REGX51.H
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+ Atmel\
+ Atmel\
+
+ 0
+ 0
+ 0
+ 0
+ 1
+
+ .\
+ pro
+ 1
+ 0
+ 1
+ 1
+ 1
+ .\
+ 0
+ 0
+ 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 3
+
+
+ 65535
+
+
+ S8051.DLL
+
+ DP51.DLL
+ -p51
+ S8051.DLL
+
+ TP51.DLL
+ -p51
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 16
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+
+
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 1
+
+ 0
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ -1
+
+
+
+
+
+
+
+ 0
+ 0
+ 2
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+ 0
+ 0x0
+ 0xffff
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x1000
+
+
+ 0
+ 0x0
+ 0x80
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+
+
+ 0
+ 0
+ 1
+ 0
+ 1
+ 3
+ 8
+ 2
+ 1
+ 1
+ 0
+ 0
+
+
+
+
+
+
+
+
+ 0
+ 1
+ 0
+ 0
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 1
+ 0
+ 2
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Source Group 1
+
+
+ STARTUP.A51
+ 2
+ .\STARTUP.A51
+
+
+ main.c
+ 1
+ .\main.c
+
+
+ lcd.c
+ 1
+ .\lcd.c
+
+
+ ds1302.c
+ 1
+ .\ds1302.c
+
+
+ ds18b20.c
+ 1
+ .\ds18b20.c
+
+
+
+
+
+
+
+