diff --git a/Keil Code/Last/STARTUP.A51 b/Keil Code/Last/STARTUP.A51
new file mode 100644
index 0000000..ec99b9e
--- /dev/null
+++ b/Keil Code/Last/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/Last/ds1302.c b/Keil Code/Last/ds1302.c
new file mode 100644
index 0000000..802362c
--- /dev/null
+++ b/Keil Code/Last/ds1302.c
@@ -0,0 +1,156 @@
+/******************************************************************************
+ * 文件名:ds1302.c
+ * 功能:DS1302 实时时钟驱动
+ * 说明:提供读写 DS1302 的底层函数,以及时间和闹钟参数的存取。
+ * 时间以 BCD 码格式存储于 TIME 数组中。
+ * 硬件接口:DSIO=P3^4,RST=P3^5,SCLK=P3^6
+ * 编译器:Keil C51
+ ******************************************************************************/
+
+#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 = 要写入的数据
+ * 输出:无
+ * 时序:RST 置高 → 写入 8 位地址(低位在前)→ 写入 8 位数据(低位在前)→ RST 置低
+ ******************************************************************************/
+void Ds1302Write(uchar addr, uchar dat)
+{
+ uchar n;
+
+ RST = 0;
+ _nop_();
+
+ SCLK = 0; /* 时钟先置低 */
+ _nop_();
+ RST = 1; /* 使能 DS1302 */
+ _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;
+ _nop_();
+ SCLK = 0;
+ _nop_();
+ }
+
+ RST = 0; /* 结束通信 */
+ _nop_();
+}
+
+/******************************************************************************
+ * 函数名:Ds1302Read
+ * 功能:从 DS1302 读取一字节数据(先写地址,再读数据)
+ * 输入:addr = 寄存器地址
+ * 输出:返回读取到的数据
+ * 时序:RST 置高 → 写入 8 位地址(低位在前)→ 读取 8 位数据(高位在前)→ RST 置低
+ ******************************************************************************/
+uchar Ds1302Read(uchar addr)
+{
+ uchar n, dat, dat1;
+
+ RST = 0;
+ _nop_();
+
+ SCLK = 0; /* 时钟先置低 */
+ _nop_();
+ RST = 1; /* 使能 DS1302 */
+ _nop_();
+
+ for(n = 0; n < 8; n++) /* 发送 8 位地址(低位在前) */
+ {
+ DSIO = addr & 0x01;
+ addr >>= 1;
+ SCLK = 1;
+ _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;
+ _nop_();
+ }
+
+ RST = 0; /* 结束通信 */
+ _nop_();
+
+ SCLK = 1; /* 确保时序完整 */
+ _nop_();
+ DSIO = 0;
+ _nop_();
+ DSIO = 1;
+ _nop_();
+
+ return dat;
+}
+
+/******************************************************************************
+ * 函数名:Ds1302Init
+ * 功能:初始化 DS1302 时钟芯片
+ * 输入:无
+ * 输出:无
+ * 说明:检查秒寄存器的 CH 位。如果 CH=1 表示时钟停止(首次上电),
+ * 则关闭写保护并写入默认时间;如果 CH=0 表示时钟已在运行,跳过初始化。
+ ******************************************************************************/
+void Ds1302Init()
+{
+ uchar n;
+ uchar sec;
+
+ sec = Ds1302Read(0x81); /* 读取秒寄存器,检查 CH 位(最高位) */
+ if(!(sec & 0x80)) /* CH=0:时钟正在运行,无需初始化 */
+ return;
+
+ /* CH=1:时钟停止,系统首次上电,写入默认时间 */
+ Ds1302Write(0x8E, 0x00); /* 关闭写保护 */
+ for(n = 0; n < 7; n++)
+ {
+ Ds1302Write(WRITE_RTC_ADDR[n], TIME[n]);
+ }
+ Ds1302Write(0x8E, 0x80); /* 开启写保护 */
+}
+
+/******************************************************************************
+ * 函数名:Ds1302ReadTime
+ * 功能:读取 DS1302 当前时间到 TIME 数组
+ * 输入:无
+ * 输出:无(结果存入全局 TIME 数组)
+ ******************************************************************************/
+void Ds1302ReadTime()
+{
+ uchar n;
+
+ for(n = 0; n < 7; n++)
+ {
+ TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
+ }
+}
diff --git a/Keil Code/Last/ds1302.h b/Keil Code/Last/ds1302.h
new file mode 100644
index 0000000..919760d
--- /dev/null
+++ b/Keil Code/Last/ds1302.h
@@ -0,0 +1,37 @@
+/******************************************************************************
+ * 文件名:ds1302.h
+ * 功能:DS1302 实时时钟驱动头文件
+ * 硬件接口:DSIO = P3^4,RST = P3^5,SCLK = P3^6
+ * 编译器:Keil C51
+ ******************************************************************************/
+
+#ifndef __DS1302_H_
+#define __DS1302_H_
+
+#include
+#include
+
+/* 自定义数据类型 */
+#ifndef uchar
+#define uchar unsigned char
+#endif
+
+#ifndef uint
+#define uint unsigned int
+#endif
+
+/* DS1302 引脚定义 */
+sbit DSIO = P3^4; /* 数据线 */
+sbit RST = P3^5; /* 复位/使能引脚(CE) */
+sbit SCLK = P3^6; /* 串行时钟线 */
+
+/* 函数声明 */
+void Ds1302Write(uchar addr, uchar dat); /* 向 DS1302 写入一字节数据 */
+uchar Ds1302Read(uchar addr); /* 从 DS1302 读取一字节数据 */
+void Ds1302Init(void); /* 初始化 DS1302 时钟芯片 */
+void Ds1302ReadTime(void); /* 读取当前时间到 TIME 数组 */
+
+/* 外部全局变量 */
+extern uchar TIME[7]; /* 时间缓冲区:秒、分、时、日、月、周、年(BCD 码) */
+
+#endif
diff --git a/Keil Code/Last/ds18b20.c b/Keil Code/Last/ds18b20.c
new file mode 100644
index 0000000..cfe376d
--- /dev/null
+++ b/Keil Code/Last/ds18b20.c
@@ -0,0 +1,109 @@
+#include "ds18b20.h"
+
+/*
+ * ????????DS18B20_Reset
+ * ???? ????λDS18B20????????????
+ * ???? ????
+ * ??? ??1=?????0=??????
+ */
+bit DS18B20_Reset(void)
+{
+ unsigned int i;
+ unsigned char presence;
+
+ DS18B20_DQ = 0; /* ????????480~960us */
+ for(i=250; i>0; i--); /* DJNZ???: 250*2=500us */
+ DS18B20_DQ = 1; /* ????????DS18B20????15~60us??????60~240us */
+ for(i=10; i>0; i--); /* DJNZ: 10*2=20us, ?????????? */
+
+ presence = DS18B20_DQ; /* ???????????(0=?????1=??????) */
+
+ for(i=200; i>0; i--); /* DJNZ: 200*2=400us, ????????? */
+
+ return (presence == 0); /* ????1?????????????? */
+}
+
+/*
+ * ????????DS18B20_WriteByte
+ * ???? ????DS18B20д????????(LSB????)
+ * ???? ??dat=?д???????
+ * ??? ????
+ */
+void DS18B20_WriteByte(uchar dat)
+{
+ unsigned char i, j;
+
+ for(i=0; i<8; i++)
+ {
+ DS18B20_DQ = 0; /* ??????????д?? */
+ if(dat & 0x01) /* д1????????? */
+ DS18B20_DQ = 1;
+ else /* д0?????????? */
+ DS18B20_DQ = 0;
+ for(j=35; j>0; j--); /* DJNZ: 35*2=70us, ?????>=60us */
+ DS18B20_DQ = 1; /* ??????? */
+ dat >>= 1; /* ???λ(LSB first) */
+ }
+}
+
+/*
+ * ????????DS18B20_ReadByte
+ * ???? ????DS18B20?????????(LSB????)
+ * ???? ????
+ * ??? ????????????
+ */
+uchar DS18B20_ReadByte(void)
+{
+ unsigned char i, j, dat = 0;
+
+ for(i=0; i<8; i++)
+ {
+ DS18B20_DQ = 0; /* ?????????????? */
+ DS18B20_DQ = 1; /* ??????? */
+ for(j=7; j>0; j--); /* DJNZ: 7*2=14us, ???DS18B20???????(~15us) */
+
+ dat >>= 1; /* ?????λ */
+ if(DS18B20_DQ)
+ dat |= 0x80; /* LSB first?????????????λ??????λ */
+
+ for(j=23; j>0; j--); /* DJNZ: 23*2=46us, ?????>=60us */
+ }
+ return dat;
+}
+
+/*
+ * ????????DS18B20_StartConvert
+ * ???? ??????DS18B20??????
+ * ???? ????
+ * ??? ????
+ */
+void DS18B20_StartConvert(void)
+{
+ if(!DS18B20_Reset()) return; /* ??λ???????? */
+ DS18B20_WriteByte(0xCC); /* ????ROM */
+ DS18B20_WriteByte(0x44); /* ????????? */
+}
+
+/*
+ * ????????DS18B20_ReadTemp
+ * ???? ?????DS18B20??????(16λ)
+ * ???? ??temp=??????????????
+ * ??? ??1=????????0=DS18B20δ???
+ */
+bit DS18B20_ReadTemp(int *temp)
+{
+ uchar tempL, tempH;
+ int raw;
+
+ if(!DS18B20_Reset()) return 0; /* ??λ???????? */
+ DS18B20_WriteByte(0xCC); /* ????ROM */
+ DS18B20_WriteByte(0xBE); /* ??????? */
+
+ tempL = DS18B20_ReadByte(); /* ?????????? */
+ tempH = DS18B20_ReadByte(); /* ?????????? */
+
+ raw = (tempH << 8) | tempL; /* ???16λ???? */
+ *temp = raw;
+
+ return 1;
+}
\ No newline at end of file
diff --git a/Keil Code/Last/ds18b20.h b/Keil Code/Last/ds18b20.h
new file mode 100644
index 0000000..3b0fb22
--- /dev/null
+++ b/Keil Code/Last/ds18b20.h
@@ -0,0 +1,26 @@
+#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;
+
+/* ???????? */
+bit DS18B20_Reset(void); /* ??λDS18B20???????? */
+void DS18B20_WriteByte(uchar dat); /* д???????? */
+uchar DS18B20_ReadByte(void); /* ????????? */
+void DS18B20_StartConvert(void); /* ????????? */
+bit DS18B20_ReadTemp(int *temp); /* ????????? */
+
+#endif
\ No newline at end of file
diff --git a/Keil Code/Last/lcd.c b/Keil Code/Last/lcd.c
new file mode 100644
index 0000000..d5a78dd
--- /dev/null
+++ b/Keil Code/Last/lcd.c
@@ -0,0 +1,151 @@
+/******************************************************************************
+ * 文件名:lcd.c
+ * 功能:LCD1602 液晶显示驱动
+ * 说明:支持 4 位和 8 位数据总线模式,由 LCD1602_4PINS 宏控制。
+ * 当前使用 4 位模式,RS=P2^6,RW=P2^5,EN=P2^7,数据口=P0。
+ * 编译器:Keil C51
+ ******************************************************************************/
+
+#include"lcd.h"
+
+/******************************************************************************
+ * 函数名:Lcd1602_Delay1ms
+ * 功能:毫秒级延时函数(12MHz 晶振,12T 模式)
+ * 输入:c = 延时毫秒数
+ * 输出:无
+ ******************************************************************************/
+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
+ * 功能:向 LCD1602 写入一个 8 位指令
+ * 输入:com = 指令字节
+ * 输出:无
+ * 说明:根据是否定义 LCD1602_4PINS,编译为 4 位或 8 位模式
+ ******************************************************************************/
+#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
+ * 功能:向 LCD1602 写入一个 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/Last/lcd.h b/Keil Code/Last/lcd.h
new file mode 100644
index 0000000..6188eaa
--- /dev/null
+++ b/Keil Code/Last/lcd.h
@@ -0,0 +1,39 @@
+/******************************************************************************
+ * 文件名:lcd.h
+ * 功能:LCD1602 液晶驱动头文件
+ * 硬件接口:4 位数据总线模式
+ * RS = P2^6,RW = P2^5,EN = P2^7,数据口 = P0
+ * 编译器:Keil C51
+ ******************************************************************************/
+
+#ifndef __LCD_H_
+#define __LCD_H_
+
+/* 使用 4 位数据线模式(注释此行则使用 8 位模式) */
+#define LCD1602_4PINS
+
+/* 标准头文件 */
+#include
+
+/* 自定义数据类型 */
+#ifndef uchar
+#define uchar unsigned char
+#endif
+
+#ifndef uint
+#define uint unsigned int
+#endif
+
+/* LCD 引脚定义 */
+#define LCD1602_DATAPINS P0 /* LCD 数据口(P0 口) */
+sbit LCD1602_E = P2^7; /* 使能信号 */
+sbit LCD1602_RW = P2^5; /* 读写选择:0=写,1=读 */
+sbit LCD1602_RS = P2^6; /* 寄存器选择:0=指令,1=数据 */
+
+/* 函数声明 */
+void Lcd1602_Delay1ms(uint c); /* 毫秒延时(12MHz 晶振) */
+void LcdWriteCom(uchar com); /* 写入 8 位指令 */
+void LcdWriteData(uchar dat); /* 写入 8 位数据 */
+void LcdInit(void); /* 初始化 LCD1602 */
+
+#endif
diff --git a/Keil Code/Last/main.c b/Keil Code/Last/main.c
new file mode 100644
index 0000000..70968ca
--- /dev/null
+++ b/Keil Code/Last/main.c
@@ -0,0 +1,603 @@
+/******************************************************************************
+ * 文件名:main.c
+ * 功能:DS1302 实时时钟 + DS18B20 温度采集 + LCD1602 显示
+ * 支持按键切换时钟/秒表模式,可设置时间。
+ * 硬件配置:
+ * LCD1602(4 位模式):RS=P2^6, RW=P2^5, EN=P2^7, 数据口=P0
+ * DS1302:DSIO=P3^4, RST=P3^5, SCLK=P3^6
+ * DS18B20:DQ=P3^7
+ * 按键:K1=P3^1, K2=P3^0, K3=P3^2, K4=P3^3
+ * 蜂鸣器/报警:已禁用(函数为空)
+ * 编译器:Keil C51
+ ******************************************************************************/
+
+#include
+#include
+#include"lcd.h"
+#include"ds1302.h"
+#include"temp.h"
+
+
+/*========================== 引脚定义 ==========================*/
+
+sbit K1 = P3^1; /* 模式切换/确认键 */
+sbit K2 = P3^0; /* 切换/返回键 */
+sbit K3 = P3^2; /* 加/开始暂停键 */
+sbit K4 = P3^3; /* 减/清零键 */
+
+
+/*========================== 全局变量 ==========================*/
+
+unsigned char mode = 0; /* 工作模式:0=时钟,2=秒表 */
+unsigned char last_mode = 0xFF; /* 前一次模式,用于检测模式切换 */
+int temperature = 0; /* 温度值(放大 10 倍,如 253 表示 25.3°C) */
+unsigned char temp_state = 0; /* 温度采集状态机:0=空闲,1=转换中 */
+unsigned int temp_wait = 0; /* 温度转换等待计数器 */
+
+unsigned char alarm_hour = 6; /* 闹钟小时 */
+unsigned char alarm_min = 0; /* 闹钟分钟 */
+unsigned char alarm_on = 0; /* 闹钟开关:0=关,1=开 */
+
+unsigned int sw_sec = 0; /* 秒表累计秒数 */
+unsigned char sw_csec = 0; /* 秒表百分秒(0~99) */
+bit sw_running = 0; /* 秒表运行状态:0=停止,1=运行 */
+
+
+/*========================== 宏定义 ==========================*/
+
+/* BCD 码转十进制:0x12 → 12 */
+#define BCD2DEC(bcd) (((bcd)>>4)*10 + ((bcd)&0x0f))
+
+/* 十进制转 BCD 码:12 → 0x12 */
+#define DEC2BCD(dec) (((dec)/10<<4) | ((dec)%10))
+
+
+/*========================== 函数声明 ==========================*/
+
+void Delay10ms(void);
+
+void Timer1Init(void);
+void TempPros(void);
+void AlarmJudge(void);
+void AlarmBuzPro(void);
+void SetTime(void);
+void LcdFramework(void);
+void LcdUpdate(void);
+void KeyScan(void);
+
+
+/*======================= 按键检测函数 ========================*/
+
+/*
+ * K1_Pressed:检测 K1 键是否被按下
+ * 功能:软件消抖,等待按键释放后返回 1
+ * 返回:1=按下了 K1,0=未按下
+ */
+bit K1_Pressed(void)
+{
+ if(K1) return 0; /* 首次检测,高电平表示未按下 */
+ Delay10ms(); /* 软件消抖 */
+ if(K1) return 0; /* 再次检测,确认按下 */
+ while(!K1); /* 等待按键释放 */
+ return 1; /* 有效按下 */
+}
+
+/*
+ * K2_Pressed:检测 K2 键是否被按下
+ */
+bit K2_Pressed(void)
+{
+ if(K2) return 0;
+ Delay10ms();
+ if(K2) return 0;
+ while(!K2);
+ return 1;
+}
+
+/*
+ * K3_Pressed:检测 K3 键是否被按下
+ */
+bit K3_Pressed(void)
+{
+ if(K3) return 0;
+ Delay10ms();
+ if(K3) return 0;
+ while(!K3);
+ return 1;
+}
+
+/*
+ * K4_Pressed:检测 K4 键是否被按下
+ */
+bit K4_Pressed(void)
+{
+ if(K4) return 0;
+ Delay10ms();
+ if(K4) return 0;
+ while(!K4);
+ return 1;
+}
+
+
+/*===================== LCD 辅助函数 ======================*/
+
+/*
+ * LcdWriteStr:在 LCD 当前位置显示字符串
+ * 输入:str = 指向 code 区字符串的指针
+ */
+void LcdWriteStr(unsigned char code *str)
+{
+ while(*str) LcdWriteData(*str++);
+}
+
+/*
+ * LcdShowNumAt:在 LCD 指定位置显示两位十进制数
+ * 输入:addr = DDRAM 地址,num = 要显示的数值(0~99)
+ */
+void LcdShowNumAt(unsigned char addr, unsigned char num)
+{
+ LcdWriteCom(addr);
+ LcdWriteData('0' + num / 10); /* 十位 ASCII 码 */
+ LcdWriteData('0' + num % 10); /* 个位 ASCII 码 */
+}
+
+/*
+ * AdjustValue:通用参数调节函数
+ * 功能:在指定位置显示数值,K3/K4 加减,K1 确认退出
+ * 光标停留在数值的最后一位上。
+ * 输入:val = 待调节变量指针
+ * maxVal = 最大值
+ * dispAddr = 显示地址
+ * cursorAddr = 光标地址(函数内会自动加 1 移到末位)
+ */
+void AdjustValue(unsigned char *val, unsigned char maxVal,
+ unsigned char dispAddr, unsigned char cursorAddr)
+{
+ LcdWriteCom(cursorAddr + 1); /* 光标放在数值最后一位 */
+ LcdWriteCom(0x0f); /* 显示闪烁光标 */
+
+ while(1)
+ {
+ if(K3_Pressed()) /* K3:加 */
+ {
+ if(*val < maxVal) (*val)++;
+ else *val = 0;
+ LcdShowNumAt(dispAddr, *val);
+ LcdWriteCom(cursorAddr + 1); /* 光标回到末位 */
+ LcdWriteCom(0x0f);
+ }
+ if(K4_Pressed()) /* K4:减 */
+ {
+ if(*val > 0) (*val)--;
+ else *val = maxVal;
+ LcdShowNumAt(dispAddr, *val);
+ LcdWriteCom(cursorAddr + 1);
+ LcdWriteCom(0x0f);
+ }
+ if(K1_Pressed()) /* K1:确认退出 */
+ {
+ LcdWriteCom(0x0c); /* 关闭光标 */
+ return;
+ }
+ }
+}
+
+
+/*========================== 主函数 ==========================*/
+
+void main()
+{
+ Timer1Init(); /* 初始化定时器 1(用于秒表计时) */
+ LcdInit(); /* 初始化 LCD1602 液晶 */
+
+ Ds1302Init(); /* 初始化 DS1302 时钟芯片 */
+
+ /* 从 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 当前时间到 TIME 数组 */
+
+ TempPros(); /* 温度采集状态机(非阻塞式) */
+
+ /* 模式切换时刷新 LCD 静态框架 */
+ if(mode != last_mode)
+ {
+ LcdFramework();
+ last_mode = mode;
+ }
+
+ AlarmJudge(); /* 闹钟判断(当前为空函数) */
+ AlarmBuzPro(); /* 蜂鸣器驱动(当前为空函数) */
+ KeyScan(); /* 按键扫描 */
+ LcdUpdate(); /* 刷新 LCD 动态显示 */
+ }
+}
+
+
+/*
+ * ShowLcdWeek:在 LCD 当前位置显示星期缩写
+ * 输入:week = 1~7(对应 Sunday~Saturday)
+ */
+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 框架刷新 ======================*/
+
+/*
+ * LcdFramework:刷新 LCD 静态框架
+ * 功能:根据当前模式,绘制 LCD 的固定显示内容
+ * 模式 0(时钟):显示日期和时间占位符
+ * 模式 2(秒表):显示秒表标题和数字占位符
+ */
+void LcdFramework()
+{
+ LcdWriteCom(0x0c); /* 关闭光标 */
+
+ if(mode == 0) /* 时钟模式 */
+ {
+ LcdWriteCom(0x80);
+ LcdWriteStr("20 - - "); /* 第一行:年-月-日 */
+ LcdWriteCom(0xC0);
+ LcdWriteStr(" : : "); /* 第二行:时:分:秒 + 温度 */
+ }
+ else if(mode == 2) /* 秒表模式 */
+ {
+ LcdWriteCom(0x80);
+ LcdWriteStr(" Stop Watch "); /* 第一行:标题居中 */
+ LcdWriteCom(0xC0);
+ LcdWriteStr(" : : . "); /* 第二行:HH:MM:SS.cs 居中 */
+ }
+}
+
+
+/*======================= LCD 动态更新 ========================*/
+
+/*
+ * LcdUpdate:刷新 LCD 动态显示数据
+ * 功能:根据当前模式,更新温度/时间/秒表等动态数值
+ * 时钟模式显示年月日时分秒星期和温度
+ * 秒表模式显示时、分、秒、百分秒
+ */
+void LcdUpdate()
+{
+ int temp_disp;
+
+ if(mode == 0) /* 时钟模式 */
+ {
+ /* 显示日期 */
+ LcdShowNumAt(0x82, BCD2DEC(TIME[6])); /* 年 */
+ LcdShowNumAt(0x85, BCD2DEC(TIME[4])); /* 月 */
+ LcdShowNumAt(0x88, BCD2DEC(TIME[3])); /* 日 */
+
+ /* 显示星期 */
+ LcdWriteCom(0x8C);
+ ShowLcdWeek(TIME[5] & 0x07);
+
+ /* 显示时间 */
+ LcdShowNumAt(0xC0, BCD2DEC(TIME[2])); /* 时 */
+ LcdShowNumAt(0xC3, BCD2DEC(TIME[1])); /* 分 */
+ LcdShowNumAt(0xC6, BCD2DEC(TIME[0])); /* 秒 */
+
+ /* 显示温度:格式 "-12.3C" 或 " 25.0C" */
+ 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) /* 秒表模式 */
+ {
+ /* 居中显示,位置 0xC2/0xC5/0xC8/0xCB */
+ LcdShowNumAt(0xC2, sw_sec / 3600); /* 小时 */
+ LcdShowNumAt(0xC5, (sw_sec % 3600) / 60); /* 分钟 */
+ LcdShowNumAt(0xC8, sw_sec % 60); /* 秒钟 */
+ LcdShowNumAt(0xCB, sw_csec); /* 百分秒 */
+ }
+}
+
+
+/*========================== 按键扫描 ==========================*/
+
+/*
+ * KeyScan:按键扫描处理
+ * 功能:根据当前模式处理按键事件
+ * 时钟模式:K1=设置时间,K2=切换到秒表
+ * 秒表模式:K3=启动/暂停,K4=清零(暂停时),K2=返回时钟
+ */
+void KeyScan()
+{
+ if(mode == 0) /* 时钟模式 */
+ {
+ if(K1_Pressed()) /* K1:进入时间设置 */
+ {
+ SetTime();
+ last_mode = 0xFF; /* 强制刷新 LCD */
+ }
+ if(K2_Pressed()) /* K2:切换到秒表 */
+ {
+ mode = 2;
+ sw_running = 0;
+ sw_sec = 0;
+ sw_csec = 0;
+ LcdFramework();
+ last_mode = mode;
+ LcdUpdate();
+ }
+ }
+ else if(mode == 2) /* 秒表模式 */
+ {
+ if(K3_Pressed()) /* K3:启动/暂停秒表 */
+ {
+ sw_running = !sw_running;
+ TR1 = sw_running; /* TR1 控制定时器 1 的启停 */
+ }
+ if(K4_Pressed()) /* K4:暂停时清零 */
+ {
+ if(!sw_running)
+ {
+ sw_sec = 0;
+ sw_csec = 0;
+ }
+ }
+ if(K2_Pressed()) /* K2:返回时钟模式 */
+ {
+ mode = 0;
+ TR1 = 0;
+ sw_running = 0;
+ sw_sec = 0;
+ sw_csec = 0;
+ LcdFramework();
+ last_mode = mode;
+ LcdUpdate();
+ }
+ }
+}
+
+
+/*========================== 时间设置 ==========================*/
+
+/*
+ * SetTime:时间和日期设置
+ * 功能:对年、月、日、时、分、秒逐一进行调节,
+ * 星期通过 K3/K4 手动调节,完成后全部写入 DS1302。
+ * 操作:K1 切换调节字段,K3/K4 加减,调节完秒后自动写入。
+ */
+void SetTime()
+{
+ unsigned char y, mo, d, w, h, mi, s;
+
+ /* 将 TIME 数组中的 BCD 码转换为十进制 */
+ y = BCD2DEC(TIME[6]);
+ mo = BCD2DEC(TIME[4]);
+ d = BCD2DEC(TIME[3]);
+ w = TIME[5] & 0x07;
+ h = BCD2DEC(TIME[2]);
+ mi = BCD2DEC(TIME[1]);
+ s = BCD2DEC(TIME[0]);
+
+ /* 绘制设置界面 */
+ LcdWriteCom(0x80);
+ LcdWriteStr("20 - - "); /* 第一行:20YY-MM-DD */
+ LcdWriteCom(0xC0);
+ LcdWriteStr(" : : "); /* 第二行:HH:MM:SS */
+
+ /* 显示当前时间 */
+ LcdShowNumAt(0x82, y); /* 年 */
+ LcdShowNumAt(0x85, mo); /* 月 */
+ LcdShowNumAt(0x88, d); /* 日 */
+ LcdWriteCom(0x8C); ShowLcdWeek(w); /* 星期 */
+ LcdShowNumAt(0xC0, h); /* 时 */
+ LcdShowNumAt(0xC3, mi); /* 分 */
+ LcdShowNumAt(0xC6, s); /* 秒 */
+
+ /* 逐一调节数值(K3/K4 加减,K1 跳到下一项) */
+ AdjustValue(&y, 99, 0x82, 0x82); /* 年 */
+ AdjustValue(&mo, 12, 0x85, 0x85); /* 月 */
+ AdjustValue(&d, 31, 0x88, 0x88); /* 日 */
+ AdjustValue(&h, 23, 0xC0, 0xC0); /* 时 */
+ AdjustValue(&mi, 59, 0xC3, 0xC3); /* 分 */
+ AdjustValue(&s, 59, 0xC6, 0xC6); /* 秒 */
+
+ /* 手动调节星期 */
+ LcdWriteCom(0x8E); LcdWriteCom(0x0f); /* 光标在星期最后一位 */
+ while(1)
+ {
+ if(K3_Pressed())
+ {
+ if(w < 7) w++; else w = 1;
+ LcdWriteCom(0x8C); ShowLcdWeek(w);
+ LcdWriteCom(0x8E); LcdWriteCom(0x0f);
+ }
+ if(K4_Pressed())
+ {
+ if(w > 1) w--; else w = 7;
+ LcdWriteCom(0x8C); ShowLcdWeek(w);
+ LcdWriteCom(0x8E); LcdWriteCom(0x0f);
+ }
+ if(K1_Pressed()) { break; }
+ }
+
+ /* 将调整后的值转回 BCD 码写入 TIME 数组 */
+ TIME[6] = DEC2BCD(y);
+ TIME[4] = DEC2BCD(mo);
+ TIME[3] = DEC2BCD(d);
+ TIME[5] = w;
+ TIME[2] = DEC2BCD(h);
+ TIME[1] = DEC2BCD(mi);
+ TIME[0] = DEC2BCD(s);
+
+ /* 写入 DS1302 */
+ Ds1302Write(0x8E, 0x00); /* 关闭写保护 */
+ Ds1302Write(0x80, TIME[0]); /* 秒 */
+ Ds1302Write(0x82, TIME[1]); /* 分 */
+ Ds1302Write(0x84, TIME[2]); /* 时 */
+ Ds1302Write(0x86, TIME[3]); /* 日 */
+ Ds1302Write(0x88, TIME[4]); /* 月 */
+ Ds1302Write(0x8a, TIME[5]); /* 周 */
+ Ds1302Write(0x8c, TIME[6]); /* 年 */
+ Ds1302Write(0x8E, 0x80); /* 开启写保护 */
+
+ /* 恢复显示 */
+ LcdWriteCom(0x0c); /* 关闭光标 */
+ last_mode = 0xFF; /* 强制刷新 LCD */
+}
+
+
+/*========================= 定时器初始化 =========================*/
+
+/*
+ * Timer1Init:初始化定时器 1
+ * 功能:配置 T1 为模式 1(16 位定时器),启用中断
+ * 用于秒表计时,每 10ms 中断一次
+ */
+void Timer1Init()
+{
+ TMOD &= 0x0F; /* 清空 T1 相关位 */
+ TMOD |= 0x10; /* 设置 T1 为模式 1(16 位定时器) */
+ ET1 = 1; /* 使能 T1 中断 */
+ EA = 1; /* 开启总中断 */
+}
+
+
+/*====================== 定时器 1 中断服务 ======================*/
+
+/*
+ * Timer1:定时器 1 中断服务函数
+ * 功能:每 10ms 中断一次(12MHz 晶振),秒表运行时累加百分秒
+ * 百分秒到 100 时进位 1 秒
+ */
+void Timer1() interrupt 3
+{
+ TH1 = 0xD8; /* 重装初值:定时 10ms */
+ TL1 = 0xF0;
+
+ if(sw_running) /* 秒表正在运行时才累加 */
+ {
+ sw_csec++;
+ if(sw_csec >= 100) /* 百分秒满 100 进 1 秒 */
+ {
+ sw_csec = 0;
+ sw_sec++;
+ }
+ }
+}
+
+
+/*======================= 温度采集 ========================*/
+
+/*
+ * TempPros:温度采集状态机(非阻塞式)
+ * 功能:分两步完成温度采集,避免长时间阻塞主循环
+ * state=0:发送转换命令(复位→0xCC→0x44),切换到等待状态
+ * state=1:等待约 800ms(40 次主循环),然后读取温度
+ * (复位→0xCC→0xBE→读 2 字节→计算→回 state=0)
+ * 说明:DS18B20 在 12 位分辨率下需要最长 750ms 完成转换,
+ * 等待期间主循环正常运行(按键响应、显示刷新不受影响)。
+ */
+void TempPros()
+{
+ unsigned char tmL, tmH;
+ int raw;
+ unsigned char sign = 0;
+
+ if(temp_state == 0)
+ {
+ /* 第一步:启动温度转换 */
+ Ds18b20Init();
+ Ds18b20WriteByte(0xCC); /* 跳过 ROM(单设备模式) */
+ Ds18b20WriteByte(0x44); /* 启动温度转换命令 */
+ temp_state = 1; /* 切换到等待状态 */
+ temp_wait = 0;
+ }
+ else if(temp_state == 1)
+ {
+ /* 第二步:等待转换完成 */
+ temp_wait++;
+ if(temp_wait >= 40) /* 约 800ms(每循环 ~20ms) */
+ {
+ Ds18b20Init();
+ Ds18b20WriteByte(0xCC); /* 跳过 ROM */
+ Ds18b20WriteByte(0xBE); /* 读取暂存器命令 */
+ tmL = Ds18b20ReadByte();/* 读取温度低字节 */
+ tmH = Ds18b20ReadByte();/* 读取温度高字节 */
+ raw = (tmH << 8) | tmL; /* 合并为 16 位原始值 */
+
+ /* 负数处理:符号位为 1 时取反加 1 */
+ if(raw & 0x8000)
+ {
+ raw = ~raw + 1;
+ sign = 1;
+ }
+
+ /* 转换为放大 10 倍的温度值:原始值 × 10 / 16 */
+ temperature = raw * 10 / 16;
+ if(sign)
+ temperature = -temperature;
+
+ temp_state = 0; /* 回到空闲状态,准备下一次采集 */
+ }
+ }
+}
+
+
+/*======================== 闹钟/蜂鸣器 ========================*/
+
+/*
+ * AlarmJudge:闹钟判断函数(蜂鸣器已损坏,保留为空)
+ */
+void AlarmJudge(void)
+{
+}
+
+/*
+ * AlarmBuzPro:蜂鸣器驱动函数(蜂鸣器已损坏,保留为空)
+ */
+void AlarmBuzPro(void)
+{
+}
+
+
+/*========================= 延时函数 ==========================*/
+
+/*
+ * Delay10ms:软件延时约 10ms(12MHz 晶振,12T 模式)
+ * 用于按键消抖
+ */
+void Delay10ms(void)
+{
+ unsigned char a, b, c;
+ for(c = 1; c > 0; c--)
+ for(b = 38; b > 0; b--)
+ for(a = 130; a > 0; a--);
+}
diff --git a/Keil Code/Last/module_structure.md b/Keil Code/Last/module_structure.md
new file mode 100644
index 0000000..1cd64cd
--- /dev/null
+++ b/Keil Code/Last/module_structure.md
@@ -0,0 +1,181 @@
+# 绯荤粺妯″潡缁撴瀯鍥撅紙鍑芥暟璋冪敤鍏崇郴锛�
+
+## main.c 妯″潡
+
+```
+main() 鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+ 鈹� [鍒濆鍖朷
+ 鈹溾攢鈹� Timer1Init() // 瀹氭椂鍣�1鍒濆鍖�
+ 鈹溾攢鈹� LcdInit() 鈹�鈹�鈫� lcd.c // LCD1602鍒濆鍖�
+ 鈹溾攢鈹� Ds1302Init() 鈹�鈹�鈫� ds1302.c // DS1302鍒濆鍖�
+ 鈹� 鈹斺攢鈹� Ds1302Read(), Ds1302Write()
+ 鈹溾攢鈹� DS18B20_SetResolution() 鈹�鈹�鈫� ds18b20.c
+ 鈹溾攢鈹� DS18B20_StartConvert() 鈹�鈹�鈫� ds18b20.c
+ 鈹斺攢鈹� Ds1302Read() 鈹�鈹�鈫� ds1302.c // 璇诲彇闂归挓鍙傛暟
+ 鈹�
+ 鈹� [涓诲惊鐜� while(1)]
+ 鈹溾攢鈹� Ds1302ReadTime() 鈹�鈹�鈫� ds1302.c // 姣忔寰幆璇诲彇鏃堕挓
+ 鈹溾攢鈹� TempPros() // 娓╁害澶勭悊锛堟瘡5娆″惊鐜級
+ 鈹� 鈹溾攢鈹� DS18B20_GetTemp() 鈹�鈹�鈫� ds18b20.c
+ 鈹� 鈹斺攢鈹� DS18B20_StartConvert()
+ 鈹溾攢鈹� LcdFramework() // 妯″紡鍒囨崲鏃跺埛鏂版鏋�
+ 鈹� 鈹斺攢鈹� LcdWriteStr() 鈫� LcdWriteData() 鈹�鈹�鈫� lcd.c
+ 鈹溾攢鈹� AlarmJudge() // 闂归挓鏃堕棿鍖归厤鍒ゆ柇
+ 鈹溾攢鈹� AlarmBuzPro() // 铚傞福鍣ㄩ┍鍔�
+ 鈹� 鈹斺攢鈹� DelayMs()
+ 鈹溾攢鈹� KeyScan() // 鎸夐敭鎵弿
+ 鈹� 鈹斺攢鈹� KeyPressed() (脳5) // 娑堟姈妫�娴�
+ 鈹� 鈹溾攢鈹� SetAlarm() // K1: 闂归挓璁剧疆
+ 鈹� 鈹� 鈹溾攢鈹� LcdWriteStr() 鈫� lcd.c
+ 鈹� 鈹� 鈹溾攢鈹� LcdShowNumAt() 鈫� lcd.c
+ 鈹� 鈹� 鈹溾攢鈹� AdjustValue() // 灏忔椂/鍒嗛挓璋冭妭
+ 鈹� 鈹� 鈹� 鈹溾攢鈹� KeyPressed()
+ 鈹� 鈹� 鈹� 鈹溾攢鈹� KeySound()
+ 鈹� 鈹� 鈹� 鈹斺攢鈹� LcdShowNumAt()
+ 鈹� 鈹� 鈹溾攢鈹� KeyPressed()
+ 鈹� 鈹� 鈹� 鈹斺攢鈹� KeySound()
+ 鈹� 鈹� 鈹斺攢鈹� Ds1302Write() 鈫� ds1302.c
+ 鈹� 鈹溾攢鈹� KeySound() / ReturnSound()
+ 鈹� 鈹� 鈹斺攢鈹� DelayMs()
+ 鈹� 鈹斺攢鈹� 淇敼绉掕〃鍏ㄥ眬鍙橀噺
+ 鈹�
+ 鈹斺攢鈹� LcdUpdate() // LCD鏁版嵁鍒锋柊
+ 鈹溾攢鈹� LcdShowNumAt() 鈫� lcd.c
+ 鈹溾攢鈹� ShowLcdWeek()
+ 鈹� 鈹斺攢鈹� LcdWriteData() 鈫� lcd.c
+ 鈹溾攢鈹� LcdWriteCom() 鈫� lcd.c
+ 鈹斺攢鈹� LcdWriteData() 鈫� lcd.c
+
+Timer1() interrupt 3 // 瀹氭椂鍣ㄤ腑鏂紙10ms锛�
+ 鈹斺攢鈹� sw_running == 1 鈫� sw_csec++ 鈫� sw_sec++ // 绉掕〃璁℃椂
+```
+
+## ds1302.c 妯″潡
+
+```
+Ds1302Init()
+ 鈹溾攢鈹� Ds1302Read(0x81) // 璇荤瀵勫瓨鍣紝妫�娴婥H浣�
+ 鈹斺攢鈹� Ds1302Write() 脳 9 // 鍐欏叆榛樿鏃堕棿 + 鍏抽棴鍐欎繚鎶�
+
+Ds1302ReadTime()
+ 鈹斺攢鈹� Ds1302Read() 脳 7 // 鎵归噺璇诲彇7涓椂闂村瘎瀛樺櫒
+
+Ds1302Write(addr, dat) // SPI鍗忚鍐�
+ 鈹溾攢鈹� RST=1, SCLK=0
+ 鈹溾攢鈹� 寰幆8娆�: 閫愪綅鍙戦�佸湴鍧�(LSB鈫扢SB)
+ 鈹斺攢鈹� 寰幆8娆�: 閫愪綅鍙戦�佹暟鎹�
+
+Ds1302Read(addr) // SPI鍗忚璇�
+ 鈹溾攢鈹� RST=1, SCLK=0
+ 鈹溾攢鈹� 寰幆8娆�: 閫愪綅鍙戦�佸湴鍧�
+ 鈹斺攢鈹� 寰幆8娆�: 閫愪綅璇诲彇鏁版嵁(MSB鈫扡SB)
+```
+
+## ds18b20.c 妯″潡
+
+```
+DS18B20_Reset()
+ 鈹溾攢鈹� DQ=0 鈫� 寤舵椂480渭s
+ 鈹斺攢鈹� DQ=1 鈫� 绛夊緟搴旂瓟
+
+DS18B20_WriteByte(dat) // 鍗曟�荤嚎鍐�
+ 鈹斺攢鈹� 寰幆8娆�: DQ=0 鈫� 鍐檅it 鈫� 寤舵椂60渭s 鈫� DQ=1
+
+DS18B20_ReadByte() // 鍗曟�荤嚎璇�
+ 鈹斺攢鈹� 寰幆8娆�: DQ=0 鈫� DQ=1 鈫� 璇籦it 鈫� 寤舵椂
+
+DS18B20_StartConvert() // 鍚姩娓╁害杞崲
+ 鈹溾攢鈹� DS18B20_Reset()
+ 鈹溾攢鈹� DS18B20_WriteByte(0xCC) // 璺宠繃ROM
+ 鈹斺攢鈹� DS18B20_WriteByte(0x44) // 鍚姩杞崲
+
+DS18B20_SetResolution(res) // 璁剧疆鍒嗚鲸鐜�
+ 鈹溾攢鈹� DS18B20_Reset()
+ 鈹溾攢鈹� DS18B20_WriteByte(0xCC)
+ 鈹溾攢鈹� DS18B20_WriteByte(0x4E) // 鍐欐殏瀛樺櫒
+ 鈹溾攢鈹� DS18B20_WriteByte(0x00) // TH
+ 鈹溾攢鈹� DS18B20_WriteByte(0x00) // TL
+ 鈹溾攢鈹� DS18B20_WriteByte(res) // 閰嶇疆瀵勫瓨鍣�
+ 鈹溾攢鈹� DS18B20_Reset()
+ 鈹溾攢鈹� DS18B20_WriteByte(0xCC)
+ 鈹斺攢鈹� DS18B20_WriteByte(0x48) // 澶嶅埗鍒癊EPROM
+
+DS18B20_GetTemp(int *temp) // 璇诲彇娓╁害鍊�
+ 鈹溾攢鈹� DS18B20_Reset()
+ 鈹溾攢鈹� DS18B20_WriteByte(0xCC)
+ 鈹溾攢鈹� DS18B20_WriteByte(0xBE) // 璇绘殏瀛樺櫒
+ 鈹溾攢鈹� DS18B20_ReadByte() // 浣庡瓧鑺�
+ 鈹斺攢鈹� DS18B20_ReadByte() // 楂樺瓧鑺�
+```
+
+## lcd.c 妯″潡
+
+```
+LcdInit()
+ 鈹斺攢鈹� LcdWriteCom() 脳 5 // 鍒濆鍖栨寚浠ゅ簭鍒�
+
+LcdWriteCom(com) // 鍐欐寚浠わ紙4浣嶆ā寮忥級
+ 鈹溾攢鈹� RS=0, RW=0
+ 鈹溾攢鈹� P0=com 鈫� 鍐欓珮4浣�
+ 鈹溾攢鈹� E=1 鈫� 寤舵椂 鈫� E=0
+ 鈹斺攢鈹� P0=com<<4 鈫� 鍐欎綆4浣�
+ 鈹斺攢鈹� E=1 鈫� 寤舵椂 鈫� E=0
+ 鈹斺攢鈹� 鍐呴儴璋冪敤 Lcd1602_Delay1ms()
+
+LcdWriteData(dat) // 鍐欐暟鎹紙4浣嶆ā寮忥級
+ 鈹溾攢鈹� RS=1, RW=0
+ 鈹溾攢鈹� P0=dat 鈫� 鍐欓珮4浣�
+ 鈹溾攢鈹� E=1 鈫� 寤舵椂 鈫� E=0
+ 鈹斺攢鈹� P0=dat<<4 鈫� 鍐欎綆4浣�
+ 鈹斺攢鈹� E=1 鈫� 寤舵椂 鈫� E=0
+ 鈹斺攢鈹� 鍐呴儴璋冪敤 Lcd1602_Delay1ms()
+```
+
+## 鍑芥暟璋冪敤鎬诲浘
+
+```
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� main() 涓诲惊鐜� 鈹�
+鈹� 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹�
+鈹� 鈹� DS1302 鈹� 鈹� DS18B20 鈹� 鈹� LCD1602 鈹� 鈹� 鎸夐敭鎵弿 鈹� 鈹� 闂归挓澶勭悊 鈹� 鈹�
+鈹� 鈹� 鏃堕挓妯″潡 鈹� 鈹� 娓╁害妯″潡 鈹� 鈹� 鏄剧ず妯″潡 鈹� 鈹� KeyScan 鈹� 鈹� Judge 鈹� 鈹�
+鈹� 鈹斺攢鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹� 鈹�
+鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹�
+鈹� 鈹屸攢鈹�鈹�鈹�鈻尖攢鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈻尖攢鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈻尖攢鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈻尖攢鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈻尖攢鈹�鈹�鈹�鈹� 鈹�
+鈹� 鈹俁eadTime 鈹� 鈹俆empPros 鈹� 鈹侺cdUpdate鈹� 鈹侹eyPressed鈹� 鈹侫larmBuz 鈹� 鈹�
+鈹� 鈹侷nit 鈹� 鈹侴etTemp 鈹� 鈹侳ramework鈹� 鈹係etAlarm 鈹� 鈹侾ro 鈹� 鈹�
+鈹� 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹�
+鈹� 鈹�
+鈹� 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹�
+鈹� 鈹� Timer1 涓柇 (10ms) 鈹� 鈹�
+鈹� 鈹� 鈫� 绉掕〃 sw_csec / sw_sec 绱姞 鈹� 鈹�
+鈹� 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+ 鈹�
+ 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹尖攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+ 鈻� 鈻� 鈻�
+ 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+ 鈹� ds1302.c 鈹� 鈹� ds18b20.c 鈹� 鈹� lcd.c 鈹�
+ 鈹� 搴曞眰椹卞姩 鈹� 鈹� 搴曞眰椹卞姩 鈹� 鈹� 搴曞眰椹卞姩 鈹�
+ 鈹� SPI鍗忚 鈹� 鈹� 鍗曟�荤嚎鍗忚 鈹� 鈹� 骞惰鎺ュ彛 鈹�
+ 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+ 鈹� 鈹� 鈹�
+ 鈻� 鈻� 鈻�
+ 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+ 鈹� STC89C52 纭欢灞� 鈹�
+ 鈹� P1^0-2 DS1302 鈹� P3^7 DS18B20 鈹� P0/P2 LCD 鈹�
+ 鈹� P3^0-3 鎸夐敭 鈹� P2^0 铚傞福鍣� 鈹� Timer1 鈹�
+ 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+```
+
+## 鏂囦欢闂翠緷璧�
+
+```
+main.c 鈹�鈹�鈫� lcd.h (LcdInit, LcdWriteCom, LcdWriteData)
+main.c 鈹�鈹�鈫� ds1302.h (Ds1302Init, Ds1302ReadTime, Ds1302Read, Ds1302Write)
+main.c 鈹�鈹�鈫� ds18b20.h (DS18B20_GetTemp, DS18B20_StartConvert, DS18B20_SetResolution)
+
+ds1302.c 鈹�鈹�鈫� reg51.h, intrins.h
+ds18b20.c 鈹�鈹�鈫� reg51.h, intrins.h
+lcd.c 鈹�鈹�鈫� reg51.h
+```
diff --git a/Keil Code/Last/pro b/Keil Code/Last/pro
new file mode 100644
index 0000000..c709edb
Binary files /dev/null and b/Keil Code/Last/pro differ
diff --git a/Keil Code/Last/pro.hex b/Keil Code/Last/pro.hex
new file mode 100644
index 0000000..06568f6
--- /dev/null
+++ b/Keil Code/Last/pro.hex
@@ -0,0 +1,210 @@
+:0300000002049E59
+:0C049E00787FE4F6D8FD75812D0204E59E
+:1007FC00323020202D20202D2020202020202020B1
+:10080C000020203A20203A202020202020202020C8
+:10081C00200020202053746F70205761746368206F
+:10082C00202000202020203A20203A20202E20209A
+:04083C002020200058
+:100927000123000129FF02260000012800022B00F5
+:1009370000012406012500012A0002210000012DE3
+:0309470000C100EC
+:100A420030B102C322120A9830B102C32230B1FD82
+:020A5200D322AD
+:100A540030B002C322120A9830B002C32230B0FD73
+:020A6400D3229B
+:100A660030B202C322120A9830B202C32230B2FD5B
+:020A7600D32289
+:100A780030B302C322120A9830B302C32230B3FD46
+:020A8800D32277
+:1009D8008E0F8F10851082850F83E49360170510A2
+:1009E800E510AE0F7002050F14F5828E83E493FFB5
+:0609F800120AB180DF22AB
+:0C09AD00AB0FAA10A9111203B4FDAF1388
+:1009B9008D15120AA5E51575F00A842430FF120A6F
+:0F09C900B1E51575F00A84E5F02430FF020AB19C
+:10063B008B0F8A1089118D12E51404FF120AA57F06
+:10064B000F120AA5120A665028AB0FAA10A9111295
+:10065B0003B4C39512500774011203CD8004E41246
+:10066B0003EF1209ADE51404FF120AA57F0F120A5E
+:10067B00A5120A785029AB0FAA10A9111203B4D3F3
+:10068B009400400774FF1203CD8005E5121203EFAF
+:10069B001209ADE51404FF120AA57F0F120AA51269
+:0A06AB000A4250A07F0C120AA5229B
+:1006B500120ABD120A241209547FC11207698F2438
+:1006C500E524D3941740037524067FC31207698F69
+:1006D50025E525D3943B4003E4F5257FC51207693D
+:1006E5008F2AE52AD394014003E4F52A1200031268
+:1006F50005B6E52365296006120840852329120001
+:0C0705001912001A12071112026180E0A4
+:10052A00EF14B4070040030205B590054275F003C5
+:10053A00A4C58325F0C58373020557020560020529
+:10054A006E02057C02058A0205980205A67F5312EF
+:10055A000AB17F7580077F4D120AB17F6F120AB107
+:10056A007F6E80447F54120AB17F75120AB17F658B
+:10057A0080367F57120AB17F65120AB17F648028DC
+:10058A007F54120AB17F68120AB17F75801A7F46BA
+:10059A00120AB17F72120AB17F69800C7F53120A64
+:0C05AA00B17F61120AB17F74120AB12205
+:100840007F0C120AA5E52370177F80120AA57E0788
+:100850007FFC1209D87FC0120AA57E087F0D801A7E
+:10086000E523B402187F80120AA57E087F1E1209B4
+:0E087000D87FC0120AA57E087F2F1209D82259
+:10026100E5236003020365E51CC4540F75F00AA47D
+:10027100FFE51C540F2FFD7F821209B9E51AC45402
+:100281000F75F00AA4FFE51A540F2FFD7F8512099F
+:10029100B9E519C4540F75F00AA4FFE519540F2FDD
+:1002A100FD7F881209B97F8C120AA5E51B5407FF4F
+:1002B10012052AE518C4540F75F00AA4FFE5185475
+:1002C1000F2FFD7FC01209B9E517C4540F75F00A4D
+:1002D100A4FFE517540F2FFD7FC31209B9E516C41A
+:1002E100540F75F00AA4FFE516540F2FFD7FC612B7
+:1002F10009B97FC9120AA5852608852709C3E5081A
+:100301006480948050127F2D120AB1C3E49509F5DF
+:1003110009E49508F50880057F20120AB1AE08AFFF
+:10032100097C007D64120468EF2430FF120AB1AE2B
+:1003310008AF097C007D0A1204687C007D0A120462
+:1003410068ED2430FF120AB17F2E120AB1AE08AF58
+:10035100097C007D0A120468ED2430FF120AB17F86
+:1003610043020AB1E52364027048AE21AF227C0E3C
+:100371007D10120413AD077FC21209B9AE21AF225D
+:100381007C0E7D101204137E007F3CCFCDCFCECCEE
+:10039100CE120413AD077FC51209B9AE21AF227C7D
+:1003A100007D3C1204137FC81209B9AD2D7FCB1219
+:0203B10009B988
+:0103B3002227
+:10071100E5237018120A42500612001E7529FF12B5
+:100721000A545043752302C200E4802CE52364027D
+:100731007035120A665006B200A200928E120A7833
+:10074100500A200007E4F521F522F52D120A545034
+:1007510016E4F523C28EC200F521F522F52D12080B
+:080761004085232912026122E8
+:10001E00E51CC4540F75F00AA4FFE51C540F2FF510
+:10002E0008E51AC4540F75F00AA4FFE51A540F2FF1
+:10003E00F509E519C4540F75F00AA4FFE519540F1C
+:10004E002FF50AE51B5407F50BE518C4540F75F090
+:10005E000AA4FFE518540F2FF50CE517C4540F75BD
+:10006E00F00AA4FFE517540F2FF50DE516C4540F33
+:10007E0075F00AA4FFE516540F2FF50E7F80120AB5
+:10008E00A57E077FFC1209D87FC0120AA57E087FC5
+:10009E000D1209D8AD087F821209B9AD097F8512FC
+:1000AE0009B9AD0A7F881209B97F8C120AA5AF0B68
+:1000BE0012052AAD0C7FC01209B9AD0D7FC312090E
+:1000CE00B9AD0E7FC61209B97B007A007908751397
+:1000DE00827514827D6312063B7B007A0079097566
+:1000EE0013857514857D0C12063B7B007A00790A08
+:1000FE007513887514887D1F12063B7B007A007974
+:10010E000C7513C07514C07D1712063B7B007A0068
+:10011E00790D7513C37514C37D3B12063B7B007AB4
+:10012E0000790E7513C67514C67D3B12063B7F8E85
+:10013E00120AA57F0F120AA5120A665022E50BC3FA
+:10014E0094075004050B8003750B017F8C120AA5D2
+:10015E00AF0B12052A7F8E120AA57F0F120AA51267
+:10016E000A785021E50B94014004150B8003750BA2
+:10017E00077F8C120AA5AF0B12052A7F8E120AA5D5
+:10018E007F0F120AA5120A4250AEE50875F00A84D6
+:10019E00C454F0FFE50875F00A84E5F04FF51CE550
+:1001AE000975F00A84C454F0FFE50975F00A84E578
+:1001BE00F04FF51AE50A75F00A84C454F0FFE50A0B
+:1001CE0075F00A84E5F04FF519850B1BE50C75F0FB
+:1001DE000A84C454F0FFE50C75F00A84E5F04FF57F
+:1001EE0018E50D75F00A84C454F0FFE50D75F00A9C
+:1001FE0084E5F04FF517E50E75F00A84C454F0FF50
+:10020E00E50E75F00A84E5F04FF516E4FD7F8E12CB
+:10021E0008F2AD167F801208F2AD177F821208F237
+:10022E00AD187F841208F2AD197F861208F2AD1A4E
+:10023E007F881208F2AD1B7F8A1208F2AD1C7F8CEC
+:10024E001208F27D807F8E1208F27F0C120AA575BD
+:02025E0029FF76
+:01026000227B
+:0B0ABD0053890F438910D2ABD2AF2247
+:03001B000209FED9
+:1009FE00C0E0C0D0758DD8758BF0300014052DE594
+:100A0E002DC39464400B752D000522E5227002055E
+:060A1E0021D0D0D0E0322F
+:1005B600E4F509E52870161209817FCC1208BC7F84
+:1005C600441208BC752801E4F52BF52C22E52864B5
+:1005D600017061052CE52C7002052BC39428E52BD0
+:1005E600940040501209817FCC1208BC7FBE1208CD
+:1005F600BC12087E8F0812087EEFFEE508FFEE307B
+:10060600E710EFF4FFEEF4FEEF2401FFE43EFE7583
+:1006160009017C007D0A1204017D101204688E26F1
+:100626008F27E509600BC3E49527F527E49526F5A2
+:0406360026E4F52899
+:01063A00229D
+:0100190022C4
+:01001A0022C3
+:0C0A98007F017E267D82DDFEDEFADFF6A7
+:010AA400222F
+:1007B300C2A58B807F017E001207E3D2A77F017E53
+:1007C300001207E3C2A77F017E001207E3EBC454C4
+:1007D300F0F5807F017E001207E3D2A77F017E0040
+:1007E300D3EF9400EE9400400F7DC77C01DCFEDD67
+:0807F300FAEF1F70EB1E80E815
+:0107FB0022DB
+:0C0AA500AB07C2A7C2A61207B3C2A7226B
+:0C0AB100AB07C2A7D2A61207B3C2A7224F
+:100A24007F32120AA57F28120AA57F0C120AA57F1D
+:0E0A340006120AA57F01120AA57F80020AA5FC
+:0E0A8A0081838587898B8D80828486888A8C03
+:09094A000716000012010102135E
+:1008F200C2B500C2B600D2B500E4FEEF1392B4EF67
+:10090200C313FFD2B600C2B6000EBE08EEE4FEED7F
+:100912001392B4EDC313FDD2B600C2B6000EBE08E8
+:04092200EEC2B5006C
+:0109260022AE
+:10076900C2B500C2B600D2B500E4FDEF1392B4EFF2
+:10077900C313FFD2B600C2B6000DBD08EE00E4FDFA
+:10078900A2B4E433FFC43333335480FCEEC3134CB7
+:10079900FED2B600C2B6000DBD08E5C2B500D2B69C
+:0907A90000C2B400D2B400AF0696
+:0107B2002224
+:100954007F81120769EF30E723E4FD7F8E1208F2EE
+:10096400E4FCEC900A9193FF74162CF8E6FD12084F
+:0C097400F20CBC07ED7D807F8E1208F2B3
+:010980002254
+:10000300E4FBEB900A8A93FF12076974162BF8A698
+:05001300070BBB07ED27
+:0100180022C5
+:10098100C2B77F467E00EF1FAC0670011E4C70F6A9
+:10099100D2B7E4FEFF30B7110FBF00010ED3EF94C1
+:0B09A10088EE941340EF7F00227F01DE
+:0109AC002228
+:1008BC00E4FBFAC2B7050BE50B7002050AEF1392C5
+:1008CC00B7750A00750B06E50B150BAC0A70021513
+:1008DC000A4C70F3D2B7EFC313FF0BBB00010AEB4A
+:0508EC0064084A70CE13
+:0108F10022E4
+:10087E007D087C00C2B70FBF0000D2B70FBF0000CB
+:10088E000FBF0000A2B7E433C43333335480FBE907
+:10089E00C3134BF97E007F04EF1FAA0670011E4A98
+:0D08AE0070F6ED1D70011CED4C70C9AF011E
+:0108BB00221A
+:1004AA000206B5E493A3F8E493A34003F68001F2AD
+:1004BA0008DFF48029E493A3F85407240CC8C33353
+:1004CA00C4540F4420C8834004F456800146F6DF22
+:1004DA00E4800B0102040810204080900927E47E82
+:1004EA00019360BCA3FF543F30E509541FFEE49317
+:1004FA00A360010ECF54C025E060A840B8E493A3DE
+:10050A00FAE493A3F8E493A3C8C582C8CAC583CA08
+:10051A00F0A3C8C582C8CAC583CADFE9DEE780BEC0
+:0109530000A3
+:1003B400BB010689828A83E0225002E722BBFE0247
+:0903C400E32289828A83E493227A
+:1003CD00BB010989828A83F8E028F022500327F7C0
+:1003DD0022BBFE05F8E328F3228A838982F8E49391
+:0203ED002822C4
+:1003EF00BB010689828A83F0225002F722BBFE01ED
+:0203FF00F322E7
+:10040100EF8DF0A4A8F0CF8CF0A428CE8DF0A42E0F
+:02041100FE22C9
+:10041300BC000BBE0029EF8DF084FFADF022E4CCCD
+:10042300F875F008EF2FFFEE33FEEC33FCEE9DEC96
+:10043300984005FCEE9DFE0FD5F0E9E4CEFD22EDDC
+:10044300F8F5F0EE8420D21CFEADF075F008EF2F26
+:10045300FFED33FD4007985006D5F0F222C398FD17
+:050463000FD5F0EA22B4
+:10046800C2D5EC30E709B2D5E4C39DFDE49CFCEEAF
+:1004780030E715B2D5E4C39FFFE49EFE120413C310
+:10048800E49DFDE49CFC800312041330D507C3E40B
+:060498009FFFE49EFE221E
+:00000001FF
diff --git a/Keil Code/Last/pro.uvgui.Administrator b/Keil Code/Last/pro.uvgui.Administrator
new file mode 100644
index 0000000..9ea554a
--- /dev/null
+++ b/Keil Code/Last/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/Last/pro.uvopt b/Keil Code/Last/pro.uvopt
new file mode 100644
index 0000000..59153db
--- /dev/null
+++ b/Keil Code/Last/pro.uvopt
@@ -0,0 +1,1907 @@
+
+
+
+ 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
+ 1
+ 0
+ 39
+ 0
+ 508
+ 508
+ 0
+ .\main.c
+ main.c
+
+
+ 1
+ 3
+ 1
+ 1
+ 0
+ 0
+ 0
+ 128
+ 128
+ 0
+ .\lcd.c
+ lcd.c
+
+
+ 1
+ 4
+ 1
+ 1
+ 0
+ 22
+ 0
+ 13
+ 13
+ 0
+ .\ds1302.c
+ ds1302.c
+
+
+ 1
+ 5
+ 1
+ 0
+ 0
+ 24
+ 0
+ 1
+ 1
+ 0
+ .\temp.c
+ temp.c
+
+
+
+
+ C:\Users\HM_DEV\Desktop\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭-2\TEMP.H
+ 1
+ 18
+ 0
+
+ 0
+ 0
+ 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+
+
+
+ C:\Users\HM_DEV\Desktop\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭-2\LCD.H
+ 1
+ 13
+ 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
+ 1
+ 1
+ 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
+
+
+
+
+
+ C:\Users\HM_DEV\Desktop\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭-2\DS1302.H
+ 16
+ 16
+ 0
+
+ 0
+ 0
+ 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+
+
+
+ C:\Users\HM_DEV\Desktop\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭-2\DS18B20.H
+ 4
+ 17
+ 0
+
+ 0
+ 0
+ 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+
+
+
+ C:\Users\HM_DEV\Desktop\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭-2\ds18b20.c
+ 1
+ 4
+ 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
+ 6
+
+
+ .\temp.c
+ 24
+ 1
+ 1
+
+
+ C:\Users\HM_DEV\Desktop\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭-2\ds18b20.c
+ 0
+ 1
+ 4
+
+
+ .\lcd.c
+ 0
+ 128
+ 128
+
+
+ .\ds1302.c
+ 22
+ 13
+ 13
+
+
+ C:\Users\HM_DEV\Desktop\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭-2\DS18B20.H
+ 0
+ 4
+ 17
+
+
+ DS1302.H
+ 0
+ 16
+ 16
+
+
+ .\main.c
+ 39
+ 508
+ 508
+
+
+ C:\KEIL\C51\INC\INTRINS.H
+ 0
+ 1
+ 1
+
+
+ C:\KEIL\C51\INC\ATMEL\REG51.H
+ 0
+ 1
+ 1
+
+
+ Z:\Files\鍗曠墖鏈哄疄璁璡鍗曠墖鏈哄疄璁璡涓骇瀹為獙渚嬬▼\涓骇瀹為獙渚嬬▼\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭\lcd.h
+ 23
+ 20
+ 20
+
+
+ Z:\Files\鍗曠墖鏈哄疄璁璡鍗曠墖鏈哄疄璁璡涓骇瀹為獙渚嬬▼\涓骇瀹為獙渚嬬▼\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭\ds1302.h
+ 0
+ 1
+ 1
+
+
+ LCD.H
+ 0
+ 1
+ 13
+
+
+ TEMP.H
+ 40
+ 1
+ 18
+
+
+
+
+
+
diff --git a/Keil Code/Last/pro.uvproj b/Keil Code/Last/pro.uvproj
new file mode 100644
index 0000000..5c079ff
--- /dev/null
+++ b/Keil Code/Last/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
+
+
+ temp.c
+ 1
+ .\temp.c
+
+
+
+
+
+
+
+
diff --git a/Keil Code/Last/temp.c b/Keil Code/Last/temp.c
new file mode 100644
index 0000000..d78c271
--- /dev/null
+++ b/Keil Code/Last/temp.c
@@ -0,0 +1,85 @@
+/******************************************************************************
+ * 文件名:temp.c
+ * 功能:DS18B20 温度传感器驱动
+ * 说明:三个底层函数分别实现初始化、写字节和读字节,
+ * 配合 main.c 中的非阻塞状态机完成温度采集。
+ * 编译器:Keil C51
+ ******************************************************************************/
+
+#include"temp.h"
+
+/******************************************************************************
+ * 函数名:Ds18b20Init
+ * 功能:初始化 DS18B20(发送复位脉冲,检测存在脉冲)
+ * 输入:无
+ * 输出:返回 1 表示检测到 DS18B20,返回 0 表示设备不存在
+ * 时序:总线拉低 642us → 释放 → 等待 DS18B20 拉低(15~60us)→ 检测存在
+ ******************************************************************************/
+unsigned char Ds18b20Init()
+{
+ unsigned int i;
+
+ DSPORT = 0; /* 拉低总线,发送复位脉冲 */
+ i = 70;
+ while(i--); /* 延时约 642us(>480us 最低要求) */
+
+ DSPORT = 1; /* 释放总线 */
+ i = 0;
+ while(DSPORT) /* 等待 DS18B20 拉低总线(存在脉冲) */
+ {
+ i++;
+ if(i > 5000) /* 超时约 5ms,认为设备不存在 */
+ return 0;
+ }
+ return 1; /* 初始化成功 */
+}
+
+/******************************************************************************
+ * 函数名:Ds18b20WriteByte
+ * 功能:向 DS18B20 写入一个字节(低位在前)
+ * 输入:dat = 要写入的数据
+ * 输出:无
+ * 时序:每写一位,拉低 1us → 写入数据位 → 保持 68us → 释放总线
+ ******************************************************************************/
+void Ds18b20WriteByte(unsigned char dat)
+{
+ unsigned int i, j;
+
+ for(j = 0; j < 8; j++)
+ {
+ DSPORT = 0; /* 拉低总线,开始写时隙 */
+ i++;
+ DSPORT = dat & 0x01; /* 写入当前位(低位在前) */
+ i = 6;
+ while(i--); /* 保持 68us(>60us 要求) */
+ DSPORT = 1; /* 释放总线 */
+ dat >>= 1; /* 准备下一位 */
+ }
+}
+
+/******************************************************************************
+ * 函数名:Ds18b20ReadByte
+ * 功能:从 DS18B20 读取一个字节(低位在前)
+ * 输入:无
+ * 输出:返回读取到的字节数据
+ * 时序:每读一位,拉低 1us → 释放 → 等待 6us → 采样总线 → 等待 48us
+ ******************************************************************************/
+unsigned char Ds18b20ReadByte()
+{
+ unsigned char byte, bi;
+ unsigned int i, j;
+
+ for(j = 8; j > 0; j--)
+ {
+ DSPORT = 0; /* 拉低总线,开始读时隙 */
+ i++;
+ DSPORT = 1; /* 释放总线 */
+ i++;
+ i++; /* 等待约 6us 后采样 */
+ bi = DSPORT; /* 读取当前位 */
+ byte = (byte >> 1) | (bi << 7); /* 低位在前,依次移入 */
+ i = 4;
+ while(i--); /* 等待 48us,确保时隙 >60us */
+ }
+ return byte;
+}
diff --git a/Keil Code/Last/temp.h b/Keil Code/Last/temp.h
new file mode 100644
index 0000000..e38116e
--- /dev/null
+++ b/Keil Code/Last/temp.h
@@ -0,0 +1,21 @@
+/******************************************************************************
+ * 文件名:temp.h
+ * 功能:DS18B20 温度传感器驱动头文件
+ * 硬件接口:P3^7(单总线数据线)
+ * 编译器:Keil C51
+ ******************************************************************************/
+
+#ifndef __TEMP_H_
+#define __TEMP_H_
+
+#include
+
+/* DS18B20 单总线数据引脚定义 */
+sbit DSPORT=P3^7;
+
+/* DS18B20 基本操作函数 */
+unsigned char Ds18b20Init(void); /* 初始化 DS18B20,返回 1=存在 0=不存在 */
+void Ds18b20WriteByte(unsigned char dat); /* 向 DS18B20 写入一个字节 */
+unsigned char Ds18b20ReadByte(void); /* 从 DS18B20 读取一个字节 */
+
+#endif