From fd4305cfbe8b4ba237d2a2dec5500c3ccbf11677 Mon Sep 17 00:00:00 2001 From: Andy0613 <841676382@qq.com> Date: Tue, 7 Jul 2026 09:17:14 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E5=9B=9B=E6=AC=A1=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81,=E5=9B=A0=E8=9C=82=E9=B8=A3=E5=99=A8?= =?UTF-8?q?=E9=97=AE=E9=A2=98,=E5=88=A0=E9=99=A4=E9=97=B9=E9=92=9F?= =?UTF-8?q?=E9=83=A8=E5=88=86=E4=BB=A3=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Keil Code/Revise_4/STARTUP.A51 | 198 +++ Keil Code/Revise_4/ds1302.c | 136 ++ Keil Code/Revise_4/ds1302.h | 31 + Keil Code/Revise_4/ds18b20.c | 93 + Keil Code/Revise_4/ds18b20.h | 27 + Keil Code/Revise_4/lcd.c | 135 ++ Keil Code/Revise_4/lcd.h | 34 + Keil Code/Revise_4/main.c | 476 +++++ Keil Code/Revise_4/pro | Bin 0 -> 37828 bytes Keil Code/Revise_4/pro.hex | 232 +++ Keil Code/Revise_4/pro.uvgui.Administrator | 1249 +++++++++++++ Keil Code/Revise_4/pro.uvopt | 1843 ++++++++++++++++++++ Keil Code/Revise_4/pro.uvproj | 380 ++++ Keil Code/Revise_4/模å�—结构图.md | 181 ++ 14 files changed, 5015 insertions(+) create mode 100644 Keil Code/Revise_4/STARTUP.A51 create mode 100644 Keil Code/Revise_4/ds1302.c create mode 100644 Keil Code/Revise_4/ds1302.h create mode 100644 Keil Code/Revise_4/ds18b20.c create mode 100644 Keil Code/Revise_4/ds18b20.h create mode 100644 Keil Code/Revise_4/lcd.c create mode 100644 Keil Code/Revise_4/lcd.h create mode 100644 Keil Code/Revise_4/main.c create mode 100644 Keil Code/Revise_4/pro create mode 100644 Keil Code/Revise_4/pro.hex create mode 100644 Keil Code/Revise_4/pro.uvgui.Administrator create mode 100644 Keil Code/Revise_4/pro.uvopt create mode 100644 Keil Code/Revise_4/pro.uvproj create mode 100644 Keil Code/Revise_4/模å�—结构图.md diff --git a/Keil Code/Revise_4/STARTUP.A51 b/Keil Code/Revise_4/STARTUP.A51 new file mode 100644 index 0000000..ec99b9e --- /dev/null +++ b/Keil Code/Revise_4/STARTUP.A51 @@ -0,0 +1,198 @@ +$NOMOD51 +;------------------------------------------------------------------------------ +; This file is part of the C51 Compiler package +; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc. +; Version 8.01 +; +; *** <<< Use Configuration Wizard in Context Menu >>> *** +;------------------------------------------------------------------------------ +; STARTUP.A51: This code is executed after processor reset. +; +; To translate this file use A51 with the following invocation: +; +; A51 STARTUP.A51 +; +; To link the modified STARTUP.OBJ file to your application use the following +; Lx51 invocation: +; +; Lx51 your object file list, STARTUP.OBJ controls +; +;------------------------------------------------------------------------------ +; +; User-defined Power-On Initialization of Memory +; +; With the following EQU statements the initialization of memory +; at processor reset can be defined: +; +; IDATALEN: IDATA memory size <0x0-0x100> +; Note: The absolute start-address of IDATA memory is always 0 +; The IDATA space overlaps physically the DATA and BIT areas. +IDATALEN EQU 80H +; +; XDATASTART: XDATA memory start address <0x0-0xFFFF> +; The absolute start address of XDATA memory +XDATASTART EQU 0 +; +; XDATALEN: XDATA memory size <0x0-0xFFFF> +; The length of XDATA memory in bytes. +XDATALEN EQU 0 +; +; PDATASTART: PDATA memory start address <0x0-0xFFFF> +; The absolute start address of PDATA memory +PDATASTART EQU 0H +; +; PDATALEN: PDATA memory size <0x0-0xFF> +; The length of PDATA memory in bytes. +PDATALEN EQU 0H +; +; +;------------------------------------------------------------------------------ +; +; Reentrant Stack Initialization +; +; The following EQU statements define the stack pointer for reentrant +; functions and initialized it: +; +; Stack Space for reentrant functions in the SMALL model. +; IBPSTACK: Enable SMALL model reentrant stack +; Stack space for reentrant functions in the SMALL model. +IBPSTACK EQU 0 ; set to 1 if small reentrant is used. +; IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF> +; Set the top of the stack to the highest location. +IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 +; +; +; Stack Space for reentrant functions in the LARGE model. +; XBPSTACK: Enable LARGE model reentrant stack +; Stack space for reentrant functions in the LARGE model. +XBPSTACK EQU 0 ; set to 1 if large reentrant is used. +; XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF> +; Set the top of the stack to the highest location. +XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1 +; +; +; Stack Space for reentrant functions in the COMPACT model. +; PBPSTACK: Enable COMPACT model reentrant stack +; Stack space for reentrant functions in the COMPACT model. +PBPSTACK EQU 0 ; set to 1 if compact reentrant is used. +; +; PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF> +; Set the top of the stack to the highest location. +PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 +; +; +;------------------------------------------------------------------------------ +; +; Memory Page for Using the Compact Model with 64 KByte xdata RAM +; Compact Model Page Definition +; +; Define the XDATA page used for PDATA variables. +; PPAGE must conform with the PPAGE set in the linker invocation. +; +; Enable pdata memory page initalization +PPAGEENABLE EQU 0 ; set to 1 if pdata object are used. +; +; PPAGE number <0x0-0xFF> +; uppermost 256-byte address of the page used for PDATA variables. +PPAGE EQU 0 +; +; SFR address which supplies uppermost address byte <0x0-0xFF> +; most 8051 variants use P2 as uppermost address byte +PPAGE_SFR DATA 0A0H +; +; +;------------------------------------------------------------------------------ + +; Standard SFR Symbols +ACC DATA 0E0H +B DATA 0F0H +SP DATA 81H +DPL DATA 82H +DPH DATA 83H + + NAME ?C_STARTUP + + +?C_C51STARTUP SEGMENT CODE +?STACK SEGMENT IDATA + + RSEG ?STACK + DS 1 + + EXTRN CODE (?C_START) + PUBLIC ?C_STARTUP + + CSEG AT 0 +?C_STARTUP: LJMP STARTUP1 + + RSEG ?C_C51STARTUP + +STARTUP1: + +IF IDATALEN <> 0 + MOV R0,#IDATALEN - 1 + CLR A +IDATALOOP: MOV @R0,A + DJNZ R0,IDATALOOP +ENDIF + +IF XDATALEN <> 0 + MOV DPTR,#XDATASTART + MOV R7,#LOW (XDATALEN) + IF (LOW (XDATALEN)) <> 0 + MOV R6,#(HIGH (XDATALEN)) +1 + ELSE + MOV R6,#HIGH (XDATALEN) + ENDIF + CLR A +XDATALOOP: MOVX @DPTR,A + INC DPTR + DJNZ R7,XDATALOOP + DJNZ R6,XDATALOOP +ENDIF + +IF PPAGEENABLE <> 0 + MOV PPAGE_SFR,#PPAGE +ENDIF + +IF PDATALEN <> 0 + MOV R0,#LOW (PDATASTART) + MOV R7,#LOW (PDATALEN) + CLR A +PDATALOOP: MOVX @R0,A + INC R0 + DJNZ R7,PDATALOOP +ENDIF + +IF IBPSTACK <> 0 +EXTRN DATA (?C_IBP) + + MOV ?C_IBP,#LOW IBPSTACKTOP +ENDIF + +IF XBPSTACK <> 0 +EXTRN DATA (?C_XBP) + + MOV ?C_XBP,#HIGH XBPSTACKTOP + MOV ?C_XBP+1,#LOW XBPSTACKTOP +ENDIF + +IF PBPSTACK <> 0 +EXTRN DATA (?C_PBP) + MOV ?C_PBP,#LOW PBPSTACKTOP +ENDIF + + MOV SP,#?STACK-1 + +; This code is required if you use L51_BANK.A51 with Banking Mode 4 +; Code Banking +; Select Bank 0 for L51_BANK.A51 Mode 4 +#if 0 +; Initialize bank mechanism to code bank 0 when using L51_BANK.A51 with Banking Mode 4. +EXTRN CODE (?B_SWITCH0) + CALL ?B_SWITCH0 ; init bank mechanism to code bank 0 +#endif +; + LJMP ?C_START + + END diff --git a/Keil Code/Revise_4/ds1302.c b/Keil Code/Revise_4/ds1302.c new file mode 100644 index 0000000..f07d537 --- /dev/null +++ b/Keil Code/Revise_4/ds1302.c @@ -0,0 +1,136 @@ +#include"ds1302.h" + +/* DS1302¶ÁдµØÖ· */ +/* ´æ´¢Ë³ÐòΪ£ºÃë·ÖʱÈÕÔÂÖÜÄê */ +uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; +uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; + +/* DS1302ĬÈÏʱ¼ä£º2013Äê1ÔÂ1ÈÕÖܶþ 12:00:00 */ +/* ´æ´¢Ë³Ðò£ºÃë ·Ö Ê± ÈÕ Ô ÖÜ Äê */ +/* ´æ´¢¸ñʽ£ºBCDÂë */ +uchar TIME[7] = {0, 0, 0x12, 0x01, 0x01, 0x02, 0x13}; + +/* + * º¯ÊýÃû£ºDs1302Write + * ¹¦ÄÜ £ºÏòDS1302дÈëÊý¾Ý£¬µØÖ·+Êý¾Ý + * ÊäÈë £ºaddr=¼Ä´æÆ÷µØÖ·£¬dat=ҪдÈëµÄÊý¾Ý + * Êä³ö £ºÎÞ + */ +void Ds1302Write(uchar addr, uchar dat) +{ + uchar n; + RST = 0; + _nop_(); + + SCLK = 0; /* ÏȽ«Ê±ÖÓÏßÀ­µÍ */ + _nop_(); + RST = 1; /* È»ºóRST(CE)À­¸ß£¬¿ªÊ¼Í¨ÐÅ */ + _nop_(); + + for (n=0; n<8; n++) /* ·¢ËÍ8λµØÖ·Ö¸Áî */ + { + DSIO = addr & 0x01; /* Êý¾Ý´ÓµÍλ¿ªÊ¼ */ + addr >>= 1; + SCLK = 1; /* ÉÏÉýÑØDS1302¶ÁÈ¡Êý¾Ý */ + _nop_(); + SCLK = 0; + _nop_(); + } + for (n=0; n<8; n++) /* дÈë8λÊý¾Ý */ + { + DSIO = dat & 0x01; + dat >>= 1; + SCLK = 1; /* ÉÏÉýÑØDS1302¶ÁÈ¡Êý¾Ý */ + _nop_(); + SCLK = 0; + _nop_(); + } + + RST = 0; /* ½áÊøÊý¾Ý´«Êä */ + _nop_(); +} + +/* + * º¯ÊýÃû£ºDs1302Read + * ¹¦ÄÜ £º´ÓDS1302¶Áȡһ¸ö×Ö½ÚÊý¾Ý + * ÊäÈë £ºaddr=¼Ä´æÆ÷µØÖ· + * ·µ»Ø £º¶ÁÈ¡µ½µÄÊý¾Ý + */ +uchar Ds1302Read(uchar addr) +{ + uchar n,dat,dat1; + RST = 0; + _nop_(); + + SCLK = 0; /* ÏȽ«Ê±ÖÓÏßÀ­µÍ */ + _nop_(); + RST = 1; /* È»ºóRST(CE)À­¸ß£¬¿ªÊ¼Í¨ÐÅ */ + _nop_(); + + for(n=0; n<8; n++) /* ·¢ËÍ8λµØÖ·Ö¸Áî */ + { + DSIO = addr & 0x01; /* Êý¾Ý´ÓµÍλ¿ªÊ¼ */ + addr >>= 1; + SCLK = 1; /* ÉÏÉýÑØDS1302¶ÁÈ¡Êý¾Ý */ + _nop_(); + SCLK = 0; /* ϽµÑØDS1302Êä³öÊý¾Ý */ + _nop_(); + } + _nop_(); + for(n=0; n<8; n++) /* ¶ÁÈ¡8λÊý¾Ý */ + { + dat1 = DSIO; /* ´Ó¸ßλ¿ªÊ¼ */ + dat = (dat>>1) | (dat1<<7); + SCLK = 1; + _nop_(); + SCLK = 0; /* ϽµÑØDS1302Êä³öÊý¾Ý */ + _nop_(); + } + + RST = 0; + _nop_(); /* È·±£DS1302¸´Î»Ê±¼ä±£Ö¤Îȶ¨ */ + SCLK = 1; + _nop_(); + DSIO = 0; + _nop_(); + DSIO = 1; + _nop_(); + return dat; +} + +/* + * º¯ÊýÃû£ºDs1302Init + * ¹¦ÄÜ £º³õʼ»¯DS1302ʱÖÓоƬ + * ÊäÈë £ºÎÞ + * Êä³ö £ºÎÞ + * ˵Ã÷ £ºÅжÏCH룬Èç¹ûʱÖÓδÔËÐÐÔòдÈëĬÈÏʱ¼ä + */ +void Ds1302Init() +{ + uchar n; + uchar sec; + sec = Ds1302Read(0x81); /* ¶ÁÈ¡Ãë¼Ä´æÆ÷¼ì²éCHλ */ + if(!(sec & 0x80)) /* CH=0±íʾʱÖÓÕýÔÚÔËÐУ¬ÎÞÐè³õʼ»¯ */ + return; /* Ê×´ÎÉϵ磬дÈëĬÈÏʱ¼ä */ + Ds1302Write(0x8E,0X00); /* ¹Ø±Õд±£»¤ */ + for (n=0; n<7; n++) + { + Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]); + } + Ds1302Write(0x8E,0x80); /* ¿ªÆôд±£»¤ */ +} + +/* + * º¯ÊýÃû£ºDs1302ReadTime + * ¹¦ÄÜ £º¶ÁÈ¡DS1302µ±Ç°Ê±¼äµ½TIMEÊý×é + * ÊäÈë £ºÎÞ + * Êä³ö £ºÎÞ + */ +void Ds1302ReadTime() +{ + uchar n; + for (n=0; n<7; n++) /* ¶ÁÈ¡7¸ö×Ö½ÚµÄʱ¼äÊý¾Ý */ + { + TIME[n] = Ds1302Read(READ_RTC_ADDR[n]); + } +} \ No newline at end of file diff --git a/Keil Code/Revise_4/ds1302.h b/Keil Code/Revise_4/ds1302.h new file mode 100644 index 0000000..37e4ab3 --- /dev/null +++ b/Keil Code/Revise_4/ds1302.h @@ -0,0 +1,31 @@ +#ifndef __DS1302_H_ +#define __DS1302_H_ + +/* °üº¬Í·Îļþ */ +#include +#include + +/* Êý¾ÝÀàÐÍÖØ¶¨Òå */ +#ifndef uchar +#define uchar unsigned char +#endif + +#ifndef uint +#define uint unsigned int +#endif + +/* DS1302ʹÓõÄIO¿Ú¶¨Òå */ +sbit DSIO=P3^4; /* Êý¾ÝÏß */ +sbit RST=P3^5; /* ¸´Î»/ʹÄܽŠ*/ +sbit SCLK=P3^6; /* ʱÖÓÏß */ + +/* Íⲿº¯ÊýÉùÃ÷ */ +void Ds1302Write(uchar addr, uchar dat); /* дDS1302 */ +uchar Ds1302Read(uchar addr); /* ¶ÁDS1302 */ +void Ds1302Init(); /* ³õʼ»¯DS1302 */ +void Ds1302ReadTime(); /* ¶ÁÈ¡DS1302ʱ¼ä */ + +/* Íⲿȫ¾Ö±äÁ¿ÉùÃ÷ */ +extern uchar TIME[7]; /* ʱ¼ä»º³åÇø */ + +#endif \ No newline at end of file diff --git a/Keil Code/Revise_4/ds18b20.c b/Keil Code/Revise_4/ds18b20.c new file mode 100644 index 0000000..3cbd5ea --- /dev/null +++ b/Keil Code/Revise_4/ds18b20.c @@ -0,0 +1,93 @@ +#include "ds18b20.h" + +/* DS18B20¸´Î» */ +void DS18B20_Reset(void) +{ + uchar i; + DS18B20_DQ = 0; /* À­µÍ×ÜÏß */ + for(i=0; i<200; i++); /* ÑÓʱԼ480us */ + DS18B20_DQ = 1; /* ÊÍ·Å×ÜÏß */ + for(i=0; i<100; i++); /* µÈ´ý´Ó»úÓ¦´ð */ +} + +/* DS18B20дÈëÒ»¸ö×Ö½Ú */ +void DS18B20_WriteByte(uchar dat) +{ + uchar i, j; + for(i=0; i<8; i++) + { + DS18B20_DQ = 0; /* À­µÍ×ÜÏß¿ªÊ¼Ð´Ê±Ï¶ */ + _nop_(); + if(dat & 0x01) /* д1 */ + DS18B20_DQ = 1; + else /* д0 */ + DS18B20_DQ = 0; + for(j=0; j<30; j++); /* ±£³Öʱ¼äÔ¼60us */ + DS18B20_DQ = 1; /* ÊÍ·Å×ÜÏß */ + _nop_(); + _nop_(); + dat >>= 1; /* ÏÂһλ */ + } +} + +/* DS18B20¶Áȡһ¸ö×Ö½Ú */ +uchar DS18B20_ReadByte(void) +{ + uchar i, j, dat = 0; + for(i=0; i<8; i++) + { + dat >>= 1; + DS18B20_DQ = 0; /* À­µÍ×ÜÏß¿ªÊ¼¶Áʱ϶ */ + _nop_(); + DS18B20_DQ = 1; /* ÊÍ·Å×ÜÏß */ + _nop_(); + _nop_(); + if(DS18B20_DQ) /* ¶ÁÈ¡Êý¾Ý */ + dat |= 0x80; + for(j=0; j<20; j++); /* ÑÓʱµÈ´ý */ + } + return dat; +} + +/* Æô¶¯Î¶Èת»» */ +void DS18B20_StartConvert(void) +{ + DS18B20_Reset(); /* ¸´Î» */ + DS18B20_WriteByte(0xCC); /* Ìø¹ýROM */ + DS18B20_WriteByte(0x44); /* Æô¶¯Î¶Èת»» */ +} + +/* ÉèÖÃDS18B20·Ö±æÂÊ */ +/* res: 0x1F=9bit, 0x3F=10bit, 0x5F=11bit, 0x7F=12bit */ +void DS18B20_SetResolution(uchar res) +{ + DS18B20_Reset(); + DS18B20_WriteByte(0xCC); /* Ìø¹ýROM */ + DS18B20_WriteByte(0x4E); /* дÔÝ´æÆ÷ */ + DS18B20_WriteByte(0x00); /* TH±¨¾¯Öµ */ + DS18B20_WriteByte(0x00); /* TL±¨¾¯Öµ */ + DS18B20_WriteByte(res); /* ÉèÖüĴæÆ÷ */ + DS18B20_Reset(); + DS18B20_WriteByte(0xCC); /* Ìø¹ýROM */ + DS18B20_WriteByte(0x48); /* ½«ÔÝ´æÆ÷дµ½EEPROM */ +} + +/* »ñȡζÈÖµ */ +/* ·µ»Ø1±íʾ³É¹¦£¬temp´æ·ÅԭʼζÈÖµ */ +bit DS18B20_GetTemp(int *temp) +{ + uchar tempL, tempH; + int raw; + + DS18B20_Reset(); + DS18B20_WriteByte(0xCC); /* Ìø¹ýROM */ + DS18B20_WriteByte(0xBE); /* ¶ÁÈ¡ÔÝ´æÆ÷ */ + + tempL = DS18B20_ReadByte(); /* ¶ÁȡζȵÍ×Ö½Ú */ + tempH = DS18B20_ReadByte(); /* ¶Áȡζȸß×Ö½Ú */ + + raw = (tempH << 8) | tempL; /* ºÏ³É16λζÈÖµ */ + *temp = raw; + + return 1; +} \ No newline at end of file diff --git a/Keil Code/Revise_4/ds18b20.h b/Keil Code/Revise_4/ds18b20.h new file mode 100644 index 0000000..a6b981b --- /dev/null +++ b/Keil Code/Revise_4/ds18b20.h @@ -0,0 +1,27 @@ +#ifndef __DS18B20_H_ +#define __DS18B20_H_ + +#include +#include + +/* Êý¾ÝÀàÐÍÖØ¶¨Òå */ +#ifndef uchar +#define uchar unsigned char +#endif + +#ifndef uint +#define uint unsigned int +#endif + +/* DS18B20µ¥×ÜÏßÒý½Å¶¨Òå */ +sbit DS18B20_DQ = P3^7; + +/* º¯ÊýÉùÃ÷ */ +void DS18B20_Reset(void); /* ¸´Î»DS18B20 */ +void DS18B20_WriteByte(uchar dat); /* дÈëÒ»¸ö×Ö½Ú */ +uchar DS18B20_ReadByte(void); /* ¶Áȡһ¸ö×Ö½Ú */ +void DS18B20_StartConvert(void); /* ¿ªÊ¼Î¶Èת»» */ +bit DS18B20_GetTemp(int *temp); /* »ñȡζÈÖµ */ +void DS18B20_SetResolution(uchar res); /* ÉèÖ÷ֱæÂÊ */ + +#endif \ No newline at end of file diff --git a/Keil Code/Revise_4/lcd.c b/Keil Code/Revise_4/lcd.c new file mode 100644 index 0000000..5531080 --- /dev/null +++ b/Keil Code/Revise_4/lcd.c @@ -0,0 +1,135 @@ +#include"lcd.h" + +/* + * º¯ÊýÃû£ºLcd1602_Delay1ms + * ¹¦ÄÜ £ºÈí¼þÑÓʱ1ms + * ÊäÈë £ºc=ÑÓʱmsÊý + * Êä³ö £ºÎÞ + * ˵Ã÷ £ºÔÚ12MHz¾§Õñ12·ÖƵϵÄÑÓʱº¯Êý + */ +void Lcd1602_Delay1ms(uint c) +{ + uchar a,b; + for (; c>0; c--) + { + for (b=199;b>0;b--) + { + for(a=1;a>0;a--); + } + } +} + +/* + * º¯ÊýÃû£ºLcdWriteCom + * ¹¦ÄÜ £ºÏòLCDдÈë8λָÁî + * ÊäÈë £ºcom=Ö¸Áî×Ö½Ú + * Êä³ö £ºÎÞ + */ +#ifndef LCD1602_4PINS /* 8λ×ÜÏß¶Áдģʽ */ +void LcdWriteCom(uchar com) +{ + LCD1602_E = 0; /* ʹÄÜÐźÅÀ­µÍ */ + LCD1602_RS = 0; /* Ñ¡ÔñÖ¸Áî¼Ä´æÆ÷ */ + LCD1602_RW = 0; /* Ñ¡Ôñд²Ù×÷ */ + + LCD1602_DATAPINS = com; /* дÈëÖ¸Áî */ + Lcd1602_Delay1ms(1); /* µÈ´ýÊý¾ÝÎȶ¨ */ + + LCD1602_E = 1; /* дÈëʱÐò */ + Lcd1602_Delay1ms(5); /* ±£³Öʱ¼ä */ + LCD1602_E = 0; +} +#else /* 4λ×ÜÏß¶Áдģʽ */ +void LcdWriteCom(uchar com) +{ + LCD1602_E = 0; + LCD1602_RS = 0; + LCD1602_RW = 0; + + LCD1602_DATAPINS = com; /* д¸ß4λ */ + Lcd1602_Delay1ms(1); + + LCD1602_E = 1; + Lcd1602_Delay1ms(1); + LCD1602_E = 0; + + Lcd1602_Delay1ms(1); + LCD1602_DATAPINS = com << 4; /* дµÍ4λ */ + Lcd1602_Delay1ms(1); + + LCD1602_E = 1; + Lcd1602_Delay1ms(1); + LCD1602_E = 0; +} +#endif + +/* + * º¯ÊýÃû£ºLcdWriteData + * ¹¦ÄÜ £ºÏòLCDдÈë8λÊý¾Ý + * ÊäÈë £ºdat=Êý¾Ý×Ö½Ú + * Êä³ö £ºÎÞ + */ +#ifndef LCD1602_4PINS /* 8λ×ÜÏß¶Áдģʽ */ +void LcdWriteData(uchar dat) +{ + LCD1602_E = 0; /* ʹÄÜÐźÅÀ­µÍ */ + LCD1602_RS = 1; /* Ñ¡ÔñÊý¾Ý¼Ä´æÆ÷ */ + LCD1602_RW = 0; /* Ñ¡Ôñд²Ù×÷ */ + + LCD1602_DATAPINS = dat; /* дÈëÊý¾Ý */ + Lcd1602_Delay1ms(1); + + LCD1602_E = 1; /* дÈëʱÐò */ + Lcd1602_Delay1ms(5); + LCD1602_E = 0; +} +#else /* 4λ×ÜÏß¶Áдģʽ */ +void LcdWriteData(uchar dat) +{ + LCD1602_E = 0; + LCD1602_RS = 1; + LCD1602_RW = 0; + + LCD1602_DATAPINS = dat; /* д¸ß4λ */ + Lcd1602_Delay1ms(1); + + LCD1602_E = 1; + Lcd1602_Delay1ms(1); + LCD1602_E = 0; + + Lcd1602_Delay1ms(1); + LCD1602_DATAPINS = dat << 4; /* дµÍ4λ */ + Lcd1602_Delay1ms(1); + + LCD1602_E = 1; + Lcd1602_Delay1ms(1); + LCD1602_E = 0; +} +#endif + +/* + * º¯ÊýÃû£ºLcdInit + * ¹¦ÄÜ £º³õʼ»¯LCD1602Òº¾§ + * ÊäÈë £ºÎÞ + * Êä³ö £ºÎÞ + */ +#ifndef LCD1602_4PINS /* 8λ×ÜÏß¶Áдģʽ */ +void LcdInit() +{ + LcdWriteCom(0x38); /* ÉèÖÃÏÔʾģʽ£º16x2, 5x7µãÕó, 8λ */ + LcdWriteCom(0x0c); /* ¿ªÏÔʾ£¬²»ÏÔʾ¹â±ê */ + LcdWriteCom(0x06); /* дÈëÊý¾ÝºóµØÖ·×Ô¶¯+1 */ + LcdWriteCom(0x01); /* ÇåÆÁ */ + LcdWriteCom(0x80); /* ÉèÖÃDDRAMµØÖ·Îª0x00£¬µÚÒ»ÐпªÊ¼ */ +} +#else /* 4λ×ÜÏß¶Áдģʽ */ +void LcdInit() +{ + LcdWriteCom(0x32); /* ´Ó8λģʽתΪ4λģʽ */ + LcdWriteCom(0x28); /* 4λģʽϵijõʼ»¯ */ + LcdWriteCom(0x0c); /* ¿ªÏÔʾ£¬²»ÏÔʾ¹â±ê */ + LcdWriteCom(0x06); /* дÈëÊý¾ÝºóµØÖ·×Ô¶¯+1 */ + LcdWriteCom(0x01); /* ÇåÆÁ */ + LcdWriteCom(0x80); /* ÉèÖÃDDRAMµØÖ·Îª0x00£¬µÚÒ»ÐпªÊ¼ */ +} +#endif \ No newline at end of file diff --git a/Keil Code/Revise_4/lcd.h b/Keil Code/Revise_4/lcd.h new file mode 100644 index 0000000..d6d3780 --- /dev/null +++ b/Keil Code/Revise_4/lcd.h @@ -0,0 +1,34 @@ +#ifndef __LCD_H_ +#define __LCD_H_ + +/* + * ʹÓÃ4λ×ÜÏßʱȡÏû×¢ÊÍ LCD1602_4PINS + * ʹÓÃ8λ×ÜÏßʱעÊ͵ô´ËÐÐ + */ +#define LCD1602_4PINS + +/* °üº¬Í·Îļþ */ +#include + +/* Êý¾ÝÀàÐÍÖØ¶¨Òå */ +#ifndef uchar +#define uchar unsigned char +#endif + +#ifndef uint +#define uint unsigned int +#endif + +/* Òý½Å¶¨Òå */ +#define LCD1602_DATAPINS P0 /* LCDÊý¾Ý¿Ú */ +sbit LCD1602_E=P2^7; /* ʹÄÜÐźŠ*/ +sbit LCD1602_RW=P2^5; /* ¶ÁдѡÔñ */ +sbit LCD1602_RS=P2^6; /* Ö¸Áî/Êý¾ÝÑ¡Ôñ */ + +/* º¯ÊýÉùÃ÷ */ +void Lcd1602_Delay1ms(uint c); /* ÑÓʱº¯Êý(12MHzÏÂ) */ +void LcdWriteCom(uchar com); /* дָÁî */ +void LcdWriteData(uchar dat); /* дÊý¾Ý */ +void LcdInit(); /* ³õʼ»¯LCD */ + +#endif \ No newline at end of file diff --git a/Keil Code/Revise_4/main.c b/Keil Code/Revise_4/main.c new file mode 100644 index 0000000..68f59b5 --- /dev/null +++ b/Keil Code/Revise_4/main.c @@ -0,0 +1,476 @@ +#include +#include +#include"lcd.h" +#include"ds1302.h" +#include"ds18b20.h" + +/* ¶Ë¿Ú¶¨Òå */ +sbit K1=P3^1; /* ģʽ/È·Èϼü */ +sbit K2=P3^0; /* Çл»/·µ»Ø¼ü */ +sbit K3=P3^2; /* ¼Ó/¿ªÊ¼ÔÝÍ£ */ +sbit K4=P3^3; /* ¼õ/¸´Î»Çå0 */ + + +/* È«¾Ö±äÁ¿ */ +unsigned char mode = 0; /* ģʽ: 0=ʱÖÓ, 2=Ãë±í */ +unsigned char last_mode = 0xFF; /* ÉÏһģʽ£¬ÓÃÓÚ¼ì²âģʽÇл» */ +int temperature = 0; /* ζÈÖµ(10±¶) */ +unsigned char temp_cnt = 0; /* ζȲɼ¯¼ÆÊý */ +unsigned char alarm_hour=6, alarm_min=0, alarm_on=0; /* ÄÖÖÓ²ÎÊý */ + + +/* Ãë±í±äÁ¿ */ +unsigned int sw_sec = 0; /* Ãë±íÃëÊý */ +unsigned char sw_csec = 0; /* Ãë±í°Ù·ÖÃë */ +bit sw_running = 0; /* Ãë±íÔËÐÐ״̬ */ + +/* ºê¶¨Òå */ +#define BCD2DEC(bcd) (((bcd)>>4)*10 + ((bcd)&0x0f)) +#define DEC2BCD(dec) (((dec)/10<<4) | ((dec)%10)) + +/* º¯ÊýÉùÃ÷ */ +void Delay10ms(void); +void DelayMs(unsigned int ms); +void Timer1Init(void); +void TempPros(void); +void AlarmJudge(void); +void AlarmBuzPro(void); +void SetAlarm(void); +void SetTime(void); +void LcdFramework(void); +void LcdUpdate(void); +void KeyScan(void); + +/* K1°´¼ü¼ì²â£ºÈ¥¶¶ + È·ÈÏÊͷź󷵻Ø1 */ +bit K1_Pressed(void) +{ + if(K1) return 0; + Delay10ms(); + if(K1) return 0; + while(!K1); + return 1; +} + +/* K2°´¼ü¼ì²â£ºÈ¥¶¶ + È·ÈÏÊͷź󷵻Ø1 */ +bit K2_Pressed(void) +{ + if(K2) return 0; + Delay10ms(); + if(K2) return 0; + while(!K2); + return 1; +} + +/* K3°´¼ü¼ì²â£ºÈ¥¶¶ + È·ÈÏÊͷź󷵻Ø1 */ +bit K3_Pressed(void) +{ + if(K3) return 0; + Delay10ms(); + if(K3) return 0; + while(!K3); + return 1; +} + +/* K4°´¼ü¼ì²â£ºÈ¥¶¶ + È·ÈÏÊͷź󷵻Ø1 */ +bit K4_Pressed(void) +{ + if(K4) return 0; + Delay10ms(); + if(K4) return 0; + while(!K4); + return 1; +} + +/* LCDд×Ö·û´® */ +void LcdWriteStr(unsigned char code *str) +{ + while(*str) LcdWriteData(*str++); +} + +/* LCD¶¨Î» + 2λʮ½øÖÆÊýÏÔʾ */ +void LcdShowNumAt(unsigned char addr, unsigned char num) +{ + LcdWriteCom(addr); + LcdWriteData('0' + num / 10); + LcdWriteData('0' + num % 10); +} + +/* ͨÓòÎÊýµ÷Õûº¯Êý£ºÑ­»·¼ì²âK3/K4¼Ó¼õ£¬K1È·ÈÏÍ˳ö */ +void AdjustValue(unsigned char *val, unsigned char maxVal, + unsigned char dispAddr, unsigned char cursorAddr) +{ + LcdWriteCom(cursorAddr); LcdWriteCom(0x0f); + while(1) + { + if(K3_Pressed()) + { + if(*val < maxVal) (*val)++; else *val = 0; + LcdShowNumAt(dispAddr, *val); + LcdWriteCom(cursorAddr); LcdWriteCom(0x0f); + } + if(K4_Pressed()) + { + if(*val > 0) (*val)--; else *val = maxVal; + LcdShowNumAt(dispAddr, *val); + LcdWriteCom(cursorAddr); LcdWriteCom(0x0f); + } + if(K1_Pressed()) { LcdWriteCom(0x0c); return; } + } +} + +/* Ö÷º¯Êý */ +void main() +{ + Timer1Init(); /* ³õʼ»¯¶¨Ê±Æ÷1 */ + LcdInit(); /* ³õʼ»¯LCD1602 */ + + + + Ds1302Init(); /* ³õʼ»¯DS1302 */ + DS18B20_SetResolution(0x3F); /* ÉèÖÃDS18B20·Ö±æÂÊ10λ */ + DS18B20_StartConvert(); /* ¿ªÊ¼Î¶Èת»» */ + + /* ´ÓDS1302 RAM¶ÁÈ¡ÄÖÖÓ²ÎÊý */ + alarm_hour = Ds1302Read(0xC1); + if(alarm_hour > 23) alarm_hour = 6; + alarm_min = Ds1302Read(0xC3); + if(alarm_min > 59) alarm_min = 0; + alarm_on = Ds1302Read(0xC5); + if(alarm_on > 1) alarm_on = 0; + + /* Ö÷Ñ­»· */ + while(1) + { + Ds1302ReadTime(); /* ¶ÁÈ¡DS1302ʱ¼ä */ + + /* ÿ5´ÎÑ­»·²É¼¯Ò»´ÎÎÂ¶È */ + temp_cnt++; + if(temp_cnt >= 5) + { + temp_cnt = 0; + TempPros(); + } + + /* ģʽÇл»Ê±Ë¢ÐÂLCD¿ò¼Ü */ + if(mode != last_mode) + { + LcdFramework(); + last_mode = mode; + } + + AlarmJudge(); /* ÄÖÖÓÅÐ¶Ï */ + AlarmBuzPro(); /* ÄÖÖÓ·äÃùÆ÷´¦Àí */ + KeyScan(); /* °´¼üɨÃè */ + LcdUpdate(); /* LCDÏÔʾ¸üР*/ + } +} + +/* LCDд2λʮ½øÖÆÊý(µ±Ç°Î»ÖÃ) */ +void ShowLcdNum(unsigned char num) +{ + LcdWriteData('0' + num / 10); + LcdWriteData('0' + num % 10); +} + +/* LCDÏÔʾÐÇÆÚдÈë */ +void ShowLcdWeek(unsigned char week) +{ + switch(week) + { + case 1: LcdWriteData('S'); LcdWriteData('u'); LcdWriteData('n'); break; /* Sunday */ + case 2: LcdWriteData('M'); LcdWriteData('o'); LcdWriteData('n'); break; /* Monday */ + case 3: LcdWriteData('T'); LcdWriteData('u'); LcdWriteData('e'); break; /* Tuesday */ + case 4: LcdWriteData('W'); LcdWriteData('e'); LcdWriteData('d'); break; /* Wednesday */ + case 5: LcdWriteData('T'); LcdWriteData('h'); LcdWriteData('u'); break; /* Thursday */ + case 6: LcdWriteData('F'); LcdWriteData('r'); LcdWriteData('i'); break; /* Friday */ + case 7: LcdWriteData('S'); LcdWriteData('a'); LcdWriteData('t'); break; /* Saturday */ + } +} + +/* LCD¿ò¼Ü£ºË¢Ð¾²Ì¬½á¹¹(°´Ä£Ê½) */ +void LcdFramework() +{ + LcdWriteCom(0x0c); /* ¹Ø±ÕÏÔʾ¹â±ê */ + + if(mode == 0) /* ʱÖÓģʽ¿ò¼Ü */ + { + LcdWriteCom(0x80); + LcdWriteStr("20 - - "); + LcdWriteCom(0xC0); + LcdWriteStr(" : : "); + } + else if(mode == 2) /* Ãë±íģʽ¿ò¼Ü */ + { + LcdWriteCom(0x80); + LcdWriteStr(" Stop Watch "); + LcdWriteCom(0xC0); + LcdWriteStr(" : : . "); + } +} + +/* 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 */ + 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) /* Ãë±íģʽ */ + { + LcdShowNumAt(0xC0, sw_sec / 3600); /* ʱ */ + LcdShowNumAt(0xC3, (sw_sec % 3600) / 60); /* ·Ö */ + LcdShowNumAt(0xC6, sw_sec % 60); /* Ãë */ + LcdShowNumAt(0xC9, sw_csec); /* °Ù·ÖÃë */ + } +} + +/* °´¼üɨÃè */ +void KeyScan() +{ + if(mode == 0) /* ʱÖÓģʽ°´¼ü */ + { + if(K1_Pressed()) + { + SetTime(); + last_mode = 0xFF; /* Ç¿ÖÆË¢ÐÂÏÔʾ */ + } + if(K2_Pressed()) + { + mode = 2; + sw_running = 0; + sw_sec = 0; + sw_csec = 0; + LcdFramework(); + last_mode = mode; + LcdUpdate(); + } + } + else if(mode == 2) /* Ãë±íģʽ°´¼ü */ + { + if(K3_Pressed()) + { + sw_running = !sw_running; /* Çл»ÔËÐÐ״̬ */ + TR1 = sw_running; /* ¿ØÖƶ¨Ê±Æ÷ÆôÍ£ */ + } + if(K4_Pressed()) + { + if(!sw_running) { sw_sec = 0; sw_csec = 0; } /* ֹͣʱÇåÁã */ + } + if(K2_Pressed()) + { + mode = 0; + TR1 = 0; + sw_running = 0; + sw_sec = 0; + sw_csec = 0; + LcdFramework(); + last_mode = mode; + LcdUpdate(); + } + } +} + +/* ʱ¼äÉèÖãºK1Çл»×ֶΣ¬K3/K4¼Ó/¼õ£¬×îºóÒ»¸ö×ֶκó×Ô¶¯Ð´ÈëDS1302 */ +void SetTime() +{ + unsigned char y,mo,d,w,h,mi,s; + + /* 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 - - "); + LcdWriteCom(0xC0); + LcdWriteStr(" : : "); + + /* ÏÔʾµ±Ç°Ê±¼ä */ + LcdShowNumAt(0x82, y); + LcdShowNumAt(0x85, mo); + LcdShowNumAt(0x88, d); + LcdWriteCom(0x8C); ShowLcdWeek(w); + LcdShowNumAt(0xC0, h); + LcdShowNumAt(0xC3, mi); + LcdShowNumAt(0xC6, s); + + /* ÈÕÆÚµ÷½Ú */ + 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(0x8C); LcdWriteCom(0x0f); + while(1) + { + if(K3_Pressed()) { if(w<7) w++; else w=1; LcdWriteCom(0x8C); ShowLcdWeek(w); LcdWriteCom(0x8C); LcdWriteCom(0x0f); } + if(K4_Pressed()) { if(w>1) w--; else w=7; LcdWriteCom(0x8C); ShowLcdWeek(w); LcdWriteCom(0x8C); 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; +} + +/* ÄÖÖÓÉèÖãºÊ¹ÓÃAdjustValueÖØ¸´ÀûÓôúÂë */ +void SetAlarm() +{ + LcdWriteCom(0x80); + LcdWriteStr("Alarm Clock Set "); + LcdWriteCom(0xC0); + LcdWriteStr(" : "); + + LcdShowNumAt(0xC3, alarm_hour); + LcdShowNumAt(0xC6, alarm_min); + + LcdWriteCom(0xCA); + LcdWriteStr(alarm_on ? " ON" : "OFF"); + + AdjustValue(&alarm_hour, 23, 0xC3, 0xC4); /* µ÷ÕûСʱ */ + AdjustValue(&alarm_min, 59, 0xC6, 0xC7); /* µ÷Õû·ÖÖÓ */ + + LcdWriteCom(0xCC); LcdWriteCom(0x0f); + while(1) /* ÄÖÖÓ¿ª¹Ø */ + { + if(K3_Pressed()) { alarm_on = 1; LcdWriteCom(0xCA); LcdWriteStr(" ON"); LcdWriteCom(0xCC); LcdWriteCom(0x0f); } + if(K4_Pressed()) { alarm_on = 0; LcdWriteCom(0xCA); LcdWriteStr("OFF"); LcdWriteCom(0xCC); LcdWriteCom(0x0f); } + if(K1_Pressed()) { break; } + } + + /* ±£´æÄÖÖÓ²ÎÊýµ½DS1302 RAM */ + LcdWriteCom(0x0c); /* ¹Ø±Õ¹â±ê */ + Ds1302Write(0x8E, 0x00); /* ÔÊÐíдDS1302 */ + Ds1302Write(0xC0, alarm_hour); /* ´æÐ¡Ê±µ½RAM */ + Ds1302Write(0xC2, alarm_min); /* ´æ·ÖÖÓµ½RAM */ + Ds1302Write(0xC4, alarm_on); /* ´æ¿ª¹Ø×´Ì¬µ½RAM */ + Ds1302Write(0x8E, 0x80); /* ½ûֹдDS1302 */ +} + + + + +/* ¶¨Ê±Æ÷1³õʼ»¯(¹©Ãë±í¼ÆÊ±) */ +void Timer1Init() +{ + TMOD &= 0x0F; /* ÇåT1λ */ + TMOD |= 0x10; /* ÉèÖÃT1Ϊģʽ1(16λ¶¨Ê±Æ÷) */ + ET1 = 1; /* ʹÄÜT1ÖÐ¶Ï */ + EA = 1; /* ×ÜÖжÏʹÄÜ */ +} + +/* ¶¨Ê±Æ÷1ÖжϷþÎñ(Ô¼10msÖжÏÒ»´Î) */ +void Timer1() interrupt 3 +{ + TH1 = 0xD8; /* ×°ÔØ³õÖµ */ + TL1 = 0xF0; + + if(sw_running) /* Ãë±íÔËÐÐʱ */ + { + sw_csec++; + if(sw_csec >= 100) /* °Ù·ÖÃëÂú100½ø1Ãë */ + { + sw_csec = 0; + sw_sec++; + } + } +} + +/* ζȴ¦Àí£º¶ÁÈ¡DS18B20²¢×ª»»Îª10±¶Î¶ÈÖµ */ +void TempPros() +{ + int raw; + unsigned char sign = 0; + + if(!DS18B20_GetTemp(&raw)) /* »ñȡԭʼÎÂ¶È */ + return; + + if(raw & 0x8000) /* ¸ºÎ¶ȴ¦Àí */ + { + raw = ~raw + 1; + sign = 1; + } + + temperature = raw * 10 / 16; /* ת»»Îª10±¶Î¶ÈÖµ */ + if(sign) + temperature = -temperature; + + DS18B20_StartConvert(); /* Æô¶¯ÏÂÒ»´ÎζÈת»» */ +} + +/* ÄÖÖÓÅжÏ(¿Õº¯Êý) */ +void AlarmJudge(void) +{ +} + +/* ÄÖÖÓ·äÃùÆ÷´¦Àí(·äÃùÆ÷ÒÑ»µ) */ +void AlarmBuzPro(void) +{ +} + +/* ºÁÃëÑÓʱ @12MHz */ +void DelayMs(unsigned int ms) +{ + unsigned int i, j; + for(i=0; i0;c--) + for(b=38;b>0;b--) + for(a=130;a>0;a--); +} \ No newline at end of file diff --git a/Keil Code/Revise_4/pro b/Keil Code/Revise_4/pro new file mode 100644 index 0000000000000000000000000000000000000000..f806361712bd38628878a4c46ff38272bdd5cfe8 GIT binary patch literal 37828 zcmcJ231Al0)%KZr_jg!A*aQ{B8&(kvo4bXOghjSA3F00Sf(2QEK9lD>i^?k|%$ihGQ7Q7nVH3`B z7;WZ+6D(QZ?YY^V7@`T~?4_G!@1Qd9TU@tb$%whRq6t+qXIEEvY&2CxSxv=BH5D_; zU505B&v2_%{z*5PEzhj7PdK>jnA4_KOqq6?GCXa{jIz^8Yo=FBJFTi>(%6wBCfoA7 z#_1D{Gi63i)sz|4pdY6U6VuAdaebIxr^~BHjxHGmc(B5Z!lNdPDj6~PuBFSg8jRSB z<~Do-sZ)q%gswmyCQ*KVUoZc}r8mglAtuv?X(`0=Fio~QHO8E5xd|d@z zu=GaRJCp(*Rj)Pm^%6QNkcnzU9E@sa$lPeP|G#MEo=dNjy+?L)uL^%q-YeL^~GN^o*Jro;{t zNsd!gHg!d=P%I=2^V*a(RJDlJL1+8nKhv{wNm-P}(Ka@UF@@^e2aFL#4X`d5=F z6-VsE`ZIDViRtAl155u1Z{j;$NzEDsh>} z#>B5hew27ZuG2P*g<5q>fpU&dFP$>u@c|Ci1uV`FaG`nua-1!E(5k|N%q;yf;vc*MZiyG%HEUKQj!Xy9>Iw_htLuO8# zC_R$JBA;ihVzGwowFhbYA1c;>q%}~ipJ@o4lj~eNZEi#L{Kj);G%YS&A<{Qh9LIPhcCi*}abv?g zu?J}0b!d><`Hf9lNA0Nrsj2hMtDal8MCAVLpmc5dyhU~AOel^o)mWw@5Vi}j;Vq`Q(;?9bBiX_+CG$n^Ax zbd6?KxvWve?VBv=REyGUCCt_a6d9fw*-62~Wp#_^ozu8%p~UYHD^^jX<@u8{D(jYQ z%8~^u#Qwf2OU>kwVh`1Ja?8`WM6?~PtXB83rX@=jEcuSuS0LInP2X2WJEr0%G@Y;6 zOMJa@uBlSW-v zwwu_)B$m=V=bARYHF;d8+R}!znwGCnC2G?6b@uTYWj||aL*0sb68|L>W~9XL!S5)E z-;3YTTeOecrrxV6s;eu?-%s{JQ9mp0^bx>ItGmkWMN?$KPPn_NzJjs*EA zct?xWJI9F3bB+}`%Q;SDv2(ntobxTIcXRQ%zU$_qI^yQiid-6e@LO`P<}%jg z(&&_eJON&r$O=a%YUel=A{ROnMVg&SA}!8jS?%WHbA89nMK#aOHy5Al+XY?4R`n<=pItSj zrlPv0>foYmU|xQfg8{a?N)b%V#N?q+r}bU0ELdBxdTrM=tsCa_P875i+|_ldo#@)5 zef4?`+FR&6-SSrMj9f2m$jRARBGa-b!kevinmtMWp;;#Kvg})s5j#0;T*=7Mqt;^x zc{X!L*IyLe-mNgUdH3Dj&rov0BVSQaAhw#7vhwQ5GiT43HNCXv)m%@==v!I4r)y__ z3FG~0=KDPhoyXdGHtot@JfH-!xz}yG6xq(x^|=F8%vUp~iu^fq8obj*-prgK^0!Q_ zEY$20`Psef)>vuz3A3tePAr`^tKu-!7)|Z1xv{JeH+NO9&}pn3rM9JOs!0t@>bvmHkwe{< z4^`bz9qMf})IXXu<3pkIr^4)Kg_)l=k1Nb>EOg#&{%v9Ux+@2?4R~o|@A0vw0m~PqwxnT9}^RRy=RWoMd5U z_}bzjh0>=``WB|z3+=j=KVF)`jN=e z)V1(_Eb`sdf5W?8#Vx3T|m`;ncG1Rc2)k2WD)H5l?S&S9MX4lO?}^Py5-@{?II(cU%94GH z0u!)qbQRqTm|amZbxf`kdm1Jry^>ngzR8_EHm78K%ue2NRdQ6*uGr1n)(qUWZOw8! zImu2|+Q~EQN*O*{<^IDE*o^3ARHM9(I zY4c5lmcGpsaj^{Ef|gD$yE>p1>gA5gm7zJ4_du{;!n;>wQu01{n{^yX-mfi`d_ZJT z@S?ItBTZdsl~1fHonA3}X4TZHq#E?$8PkK> zikJ3oZqcrEQL6d!!tCVc$KC56xAbi*-fSO0+MOZVZ}d7>kvmPr9iDj%tR9E=TUD~m zR*@qzPr%zIa%|>zA`>#d*CJ$|)bTL$2UWbxQzBKFr{O&#GCT9E7Ay0d>Re{Ks$1rH zcrVBUrW|3ZXBKo4JEI}9u#BiEE5HQtqg*#MYg*zNGb_NX@bAeJEgjk0is!`a*u1ub zo~Y@n8g=vDwu5TA9=^MIbz$b!w!VH~UlX_%fqneIJ|^%o4Q&3N)<@fcHL1OY$-Zp| z_%RMJF&;;<-hNop@;D7?hTxlqspy$kPt_`q z%U_cTk^5q~gLBua0@T@m#58ILyjMi#+pofVO=PA0XC1cf*F|o#-w?Ueep6(#{g%id z?6-B4vfmN;)Na)!irpr%$9`YUZ0rM(ezCuZl*IljG9~smkr}ZMMdrjl(#cKiV|bs4 zER5}hw@dSg{axh0WB;S>DM$w$JWy;%bJSqEz;U@n5ng~7`(I#-Y7p@U+Ao=%oa(iwY`6Pu6-CH_iAk~ z-m-p+cptygfP>PVd!~Vp?@Lp0+H> zq;4=)F=*cz*qnP6o;V`^462y3QHuh`=C$gysZj9KStf7K<|;zpf5OU!Ce z^RGYW=%h`5=IdMt#08@JA~9?E%;ZE{S0s_{+MbSd)%HxJo3>}sJKLQ|-)!#`>6h)D zBYm>H3vFAT-Ba7PDQ%3zrc5);!lrDqZwT&o)Cz3sWctvi&N`ecxr^x{7s&Z?Ub?CK z>ZTs6SI#X=-f99eP2JZv^;o;I69ckM-7jnEaoNg47|^My`{PYL9$(p;0iBz=Z*A(a zb>*=P=+e~vcTGKhX9A2h@~2k0HfQU`RAoHjw8WYm%Mgu(;b^NW`?ondyNLHRu~Pev zHMR1twlv1wCu(->b+6iX&1^rYE#n88D+Km!%ld)l3W0srItR9O^25y)!VhTc><5}F z1om$0;s=^51omp(-Mqdqvv5-{Z5RFNjYe3w>44^o@zbaI68!W;SICoa5>D9@iN?!Z_5ZvX3OE0%$E{N z&XbXrTrOiQxl+bja*Z5e$&ckoORc~$mfSAKT5^vZXUT(dyrsJ*-?HRM8E46M8E?tU zQfA2qQf|rTQlWj>nrKO1Ym%iIPPR1BRP9sNG52hW2H<){+tS981R9b;{YU*Dh<%wd4f5 zK}%%Mv*aXuz9pyI3oMyqpJm->x~$hrA1iQlyi`y+t+ZZDrkN8;=W&xA(#H_#IX zxH>-2=y>x}7z>BaN$OnTP@vX4%JNd@;Xb!z2frje;A1JDl_ZW`FU1wTWZpYW8y&MZ7TcfOk8N8*bu^_IYE z)Vhr?wd4=+vn_cpzRZ#x@fDW59&fVbz4$qn{3U*_CI5<_Z%Hoy5HLgpr%(Rm(WjI#4OR|r@{rK}u-+!g)id`krBQdOP*w&2=y`YAU8zR#wfduJgu(p581iwyaL=zm5j+E625^OFrn)mibJr&}Vyg4zP4y^sV-EQ`QP5Ko+Jl^Vbi$ za&TLAj-!*O!R>=vuO8GsNY`Aq2EG5k(z#K&$y&VW={qg;Ho?2wlFIZiEjcB<*^=7y z{qP>JWNG?AOO~g91@9p(WBOrBu1NnzO+fllOa3eUn01V4RF>-u)2OBkoiM9>QpLY9 zDe5D+hjcy~(~B+IVPz}4C#=z?*@C#An}v|U6K0*FwR8y*_m$kQP2#@tdo>*LB)mUZ z?$Ra{d5x*x+VYBNr6*6XUYyIKX5GEmHm|Y^5EPe$rDLnDKWDXJJK_Fp>+UbNe*BY< zZm8_p`tL8Chjlyd!-l0NEN$=nh*+IkT7MB#-5;~LcC)!~fA$$mQ$7oCyCsihpSR?X z*%z$mOl?q#v&_`oh%~Zfdi4TNj^2<%_h+p-NEox~brz;Sb5~-Y%45K_a}I-TC&-B&5{S4KU?ys^Saf~O!53I&(vjR%q%k> znKMRnRqLmjr*%EQK)3el66YEp+kAC#)ks$dHb%9&h4z_N=P@c^q;QC8+uw;0|5=uU%0-x?((sik49O=61Gmdm!02&86 z%9BC?)lq)pat#B$UxZE!dSiV?W2l_El{G`_%+?yf768IlHq0{jk5C756~paS2c8S{ zIu^o<^crbMKRZI#JtLn!hpPin@76}HL$a|( zoc)O!6^(dEeP6@2hj(AQwt7X~vK3{GOTIgA*@~6E4uP%Kl~*6Qse?{Shx%AUpuf-| zV(1X)Y94(DI&qPPE~+ok5WVpi+_ZSn&l-uLzPE@mVTy(;hC_2hy-Hjt75a*C>?Jd8>O{bmmzr@xP|z01ur47eM#%&#h{nyb&2cECPf zQv9I)Srx!gC1R-B5%q5O=}LW`q&KegKG5U)<)4%Tz{qppufx9Yz@NBCLm#5(!Tq!6 zebz{vud1aUBepVX1CFY?z=gi$BBrW#@kF7j5`zzNn-QTCQ&n3cbYiILTB<6hSZ`_} zU~*!HG0aefBG>%uT*x?@Heg#rh;>SohjmV*qPg@{^GD-Mp%R+?JA}X-Lo8}Y4b;Ax0)gRKqOR$wgzU8V%rn5 zvUK|A$3KK4iq4xSb*SKA6uZky1No2#R2vOJtdm_04X{pm^D12DygvOQ=Be|dle|0w z_2F<7mqT1JO&&V4@kb8iX=~H>4ABc%XRc*1_jCW{*BMR24(nh|1Je*4g>>!fJ9J%Q z_J=bfbYjwV#q2wzCnkMPgicJluCslI^u(msN9e?)>+0NhNKZ_N}(-CS8}Wz5|_@bY0o{4s>GDuZYlzK|h(MHMmoMo8R;h4yHBe zE(5%b*j;`W!pNGK-DQiHHR2Dh?`8NE=xu_LN0f}J#REW<`UKz*&CrWyeuKUp_jL_= zyO_GK4>tVX(|yZ~b1-NFjUBMnKh_fpX;1`Rruzo%CYCpNG~ zjzftRDj&*ET&{7Db?*qB81!FLlsf+@m6KHz7-?jMlxsp}y1QaHmg*9{4x8yq6^G5V z?w=SQjIVnqc~%EnhCD#OmNlync0AOfW@%Myf6_;u-IPIChQ1-3qUp!h1I#xHrgs@l zrsp&S<^*O1j!a+EYYK*H&|4LG`1J_Zdlz~1w<7rM2!1Dmb36|;o%WHB7zT( z;F1U)8NoG*!T`3%!xF2fk+ zF^pjjiAVa4uFp)J>S!WKL0!`xdl8wGmIfS)W_t$*fkKn;K;tQpQ9jVk&sOa)Cyqp|J#(Xesi89WgW!z%* zRc27(L58h6%RmRvoloOn7SY!mJGgOj=l~zL;r(cQv{zANw1r! z#xXr?0~}_+NPj^D>u#%Yl&{6Z881F@lurJuy!ey7_{5A)%=oLl_z5q*?&liE_#8p8 zw*q-NViI$NB<6@n%n=ay392j}rTnaec5p@>Onaamm{M^C<6_G!`XD8>=XAY>+`#ke zQ|8*L8`B{N4qTSJ;uVt|bURIp=W=+Q9O_5^2OM4tariAY7E3ccNjSZO#<~L^G`3i? zh2ucal_@X=I${p=x{2$@M~h&N3zydaz}$I=E54(?hlc30-|l>~YF=Ffo>2VM7l%{M zU^R-4La7Gx!A%-};SyOW{@y}mh(E!CIJnA67Xx;0kreF6ztnY3F?p#~zy|e%m zgm&;sX?_C}6w5O~7f_ytksag-770TrW^F^0 zK6LHYTXX=6YlLun6)0xkMe1&f!Gq=Q8NmlC4yXTVh~AYNG=KPiph2j)Fvo9&I6|U{ zio+U&d4>KN2_5FR;4m*om|{>b_9xnUrw#$?Sf=fYS>~6?;jCf*0f*;99CmQn=QGA- zjf=~bmpjPPMhuKkPzm%ttiN#!iBLY+UpllQF$PJ{&m>WQK_})m5HX@5{^Ce{V#X(C z{N<7O#EehO_)U@c#Ek#j2tAA;-?j)nj6vrO0YpQ2!x;2uBI&~zblwnP`Y;CljYxXp z<1`%f)(D-L^fB7@bdZmj%jhE_bYjwvkI;!ppBkYP?~4w3xvdA8AP+I)6N4U&4?HuH zA2HJtGkp}#kEADN`o;*I7#1D*bJ7U@ke`@zP6|mUCY_T$(uwy)M}934d59UG82qB~ zfjJ3ee#A^q%=A&rNg~q|BmED!z}2@ixK#&B1(AcBKS_Vr8y0N=Cx%T6maN#WhKJ?D z?|R=1#wCAco1nLdgi^i#X}6Ei(A(?{{IBI${l zo|x&Q_}7v2#7s}j^ilj!Bt0?H6El4jzaL3Ye4K`(y*`N0iAl%34?5I8G3mG$LI*lA z>3<_pe?ccE{lf^InDmb#bYjp4an`Rh{!u#f?>OrZX0Hc(eAuaL(1XtUhGS7r z>qJazLrm*IOlv^Q-c8Kj3JhtmvkS*f2V(XH&hSVlo~3D!o-;JkiAm>-i*#bp@8CUD z|DDWdwWjhn=Y#%K05R23JAbU#Y)wdVgW|9@?2X{GMh?>tiQokxJc)A|eU0-8Un9{T zxM9HEBz-hWF&t&OKE%VnqaM5(`bY;w2yXl2Tu%OO(1jrkB_oECVPU2ZOB#oYy@}7z zxLM&ANB%Y`=Rf*1Zz$PEtbgqT?kk{OJEYuZ9i-WyeuujG`2yY?!Vr*{0{$^XN6o$F zVayYNx$8mvdW8OlhlhFbshJpukp8Vm{I?_cod|CAF!^y@V$a|>M9guAnBxpF#}#6Z zBg7mxh<8Qg`FjNGTO7u*K0Xa$)PE+_a;R_Oa*YRiQG`wm`l(b9_jT`-HZ!^z&O1P= zRSj#+E+X`*x0fwd8e$_3F~kmIh#kfW1>tUnO_(s&mn`z|t%^CQOs4U~qYU0#-!FNx zqR1LmR)-$o=%yHsvbE_o;t)R+$xEMS_49h4d2t@CuU8-1LH*ZS2Pi+(3k((<`Ww`5 zwhIN#3(0=xVH!GO1cUx$gicKQvk^Km>Dwc8V$#Q=;Odw^F%9vN5jrvHydT2!#O(gO zA3{1Y>E}lH6O-N&p%atNr6&0kgZ>_uiFj`x51-|a5y4JtS5pOn0_Drn!vh@jUfrl4z?k$aQ8amlwjWE70T`3rHpED|t6Mpr~Kh8nO$ptmSs#=vOi zFve{p#{abbKy%%b&%EhvvXkPdvoQ8C$T&putMhCmV6$IT#XR zj8&sK6ZB55__NO!DKT4X(|hVJpF=$!P*PBD3Ssai246_^d58|9@ui2c(+j-E!{~&- z7BW=VQ~v{}Jd7}4+Wg}@+{L43Jgl#~88_L(y(9ekMfeqY82rX_HsBx4F{?vOxX-Gh z`gLs58}3a>S}4oOkTcX$|<9he&wz+ZC9Xz>C}=JM}+?SG|GqSA%6e4JtkOgl75 zK|F-9)+0T|(gY`&V5cm9f)_kQJXP7iu{5lx3JpU=HX3SBk;F4SI#q}jO^gOXdQRX; zC+0XpyG=SV?D*_@M>*(A2~Bh7*DX6=O92Fj-}Mbw3z{31ns3O18xL-U1)Ewf&cAVt z=jSkL!;zjpQO|!i4^Msfa-)0k0|SEeT{-&T#rgL-v^rM!CrENZM3QwO`VaiVFTc+#ylWS5uPf+?{oU#_jetJ=jIw}ZeQpo2ygjrH>Yq~d zzB1467u)Q^lmVEXYFGvR;&cxW(_i%RGd#>*&uvZ4?-qs9!@v=<-{8R&IO;ty>0JJh zP7KqF`r~qlbYjw9H{1jM#H4dM#Pr0Zza2?WO!_+!Ix*>32f&d(G3kGI$v&N!bgUEL zn4Xw)E_X;LCLNnQ;q=6`JLnlg1XK4%RM^dH+h)T9AeN>R&30{v8{<&SLG2pG3j_PBb=U?bli3i(}_vPa2uu* zlaBi@VLCDC=SS$oY)ja}aC&0Uzs=!1IJE67&nCjWB4zj;g$D3ZM;nNyL>yu?RT!fw zh&OQ;OHZ!D9%TM(B{2OojpPYaNFHb|m_lNx*X@eo82=8vCLQtb3}OEPem#TgC{G5* zqhI8|U=S>?!E+R6%`7p^Dlzwq$&Z-3 zcr>$&PqRuq-jk1*rUJt%>hHE8iIrTpPi2BDgMs@nkU^`OS^sh6tV)!Sg)~`Tf4Erxx;Ur{KY3 z&Vy}zCEsu?e_ML}06`VQ}PmSf@a}V}2(h(MiD~2RwIWmGrh43SO7NdH7MHXmL zII=uiuftg!8^Ong@C|+zqkDcu7FkUK$1KY9I-G^OCJX2jL-b}pi!r#1w!eyUz+WA+ zn6B61ETGq6Tp7Z1I1~jBiC(T*xuzDz1Dh)D)=zj%rNK(G`4 zevW({Dn)quBNo%wzKWe9Jx0~T`Z9B|Q>;Kw8L;N+fv?BrE?05w7CpYFvcx}LRi1YG zn?qC0%UyUXL*lpU83Vi_T2(FaTf$g(kUz`jQr-yu+dTGLx@xuQi67m&hCj~8$AF1GOELp|Z9 zJ)it34{1~uR}}ORTXW(2LpWw(%iTf1&mIo;SYOdC1Za`?dV#=-`Zl!!o%Wa$~f%dt|g_dSq0Kdt^H6>3x|l z@Vct4$rQj-vsIia6d9Q5E^=6=hkQ@vOLUa)F!#Va72BMJSvGU}k?!ewXi#mybvSb2 zG3SodmfN=6T9|I#a$BxPZng^Wn4^~Mx6WbkhKp>)xux51Zs|50S-K5JmTuG2O4S<+ z?+AED!Bcaw4Tp|y!+E3IaNg*Xdfuo!<&2Y~+%xDx!i@2czBJdVi|su2 zXLEGvXW5HPRCq0V##eTg9`BW1t=-O9qfe$g7mIXu*2;Ix2|OPAm$X~P&@H=pM^$Lk zs?qtzM^(I{r%B+Xd9_K4^fZaNcXl{k;v1e^LG!1gm@ZXS&E1{gF);2<*m@d?>u70J zQT$O2=1v>N$6GqEp8Zw_BOb8s6Jd?fjsqrGV}efnTTbd#tE)N~MvkC3O3ZZ-7q%P& zI2^@~j-cV;?gsrl!sOA z^YEMqu8&~V_q_P3^*;U`Yft-J$9H>!+B-zkz_IqU6B@_b!|qXdSk>O<<9-~uD@(fj z4TQNWo*m#;U(CE60G?!t1_@UK8YGO7Wf&t%;`BFv?~?-99q#l(05}Q+0pN%s030y{ zfCEnX0z`(VBOX~ zoz9~Zldje~k4{Yb@ew*P>1uoP(i7|OW#m(foJS`noojo_PfWU6@4WQHq^nKOqZ5N( z#Vw<6^g`c$-lqA=H>pqya8!qGdd(H@NqnB`E8nDwa)8|Aa0)s2Zx|(%iar$V7zY{z z8NwPwnRH6wb1Y$v@P@z6se*SMpij8hH`c;v1nr~&MeBqOC@^|6wJ~M#2(*!y+D1(6 zBBnM0Bli~lg`+mK804JUTJyYa?`G(EWE( z_x&7qFw&uN;oJtwZ$K1+CIIx|yf6Lr&vj!Mavc(09J)8)PsW2sq>&GrnkyUIe?%Hp zgQljn2S!t~W3%b%yv&H%af#VciP>pi!7D9r3D2p z^3t(X7lklN)#71vLtrWtF%^iI3PVfcxuK0e->WeSA?DFrunbb(V zvnd^+3N6d-e#w5;iib;4@NE!X`vhx7T{h+{J&UbKZ{F*PYhNf)l+8birE>^ z#Z2dGt7^(>OUuivP`m-1t13#%gP{2R`e})(>Kc*j(t{jN2D}~mn7e>->&o!?UaqIs zm(5a`lk8B=SG?t)R;_!i-I7z2YU>tew%jjU9*`IBm)1QyyZ>gmiGofL1(942ygMklR5%IK8-+RWj4q;h7Y$PF2_@IT3nmX+>uE>tz^ z+@svx5LEE)9MsaUtHE9ssgUjgfch~Lta-Hd+(>#c^0MS~v_ep8yYp+U^CRg`q;>a= zn_EZkePZ$k8t5tm?U8`qdr{{>govsskCta@(d!^^faqfZkK?Q$d z&YN^GmZ%fG8rD9HqaI_H*05@7OuuuIO_reVG_TT63+ycUpx8Stwe`!7u5#|!uy;kT z!#;n1x1N;R={Kp5y`yvg5LDeWncSY-(OPvs%`5_&#qgGDy=2bTddV!;+Q_WX+Q>A) z`>t*qWX{p`f970~XENu>gXXNuK+dv)ZhF3RP!9B3YKQ4Sx<6qpIU}js9h267e|VL1 zvwnmlecg&)!#=+?pxj~@2D#fd}+<{4{n@0RfF(7xxBL+zu^MB?i(B($(3|q z34o=X&d?&W1P06ahQhyYkL|O_pml-9@b{{@jaYCexoz9qEiy@ zG)A?(*LGM-^YJ=6@}8Szwli&&fTNw-J}qT{)lTJM?c{k_J9r+}e(2-pzj7@c$fV}i zILLt65$X<(GO0P$&;YAt)w*>t;&YSBE8}`}zdho3gRJ zDH~^Qq+{lV_SON!IAU06IAR?*j3d_JBM%=I!Po?XV|*Pli~~m5s9%r=d)&l`1UmJN zbYjw}f20$GehBx-^H2YAJH@&FiBkEKY%~ZqZs6D;$TZx5YDjz~8N~+qU#%m(qdjYD zmozS|?eDiEguuOptMv<6$l5)bR4GDbq?S=(1}T(?NeR(iAmR~g71)?m~@>$_zrYp(sf$lJJ5+quk)#H z{=}f4%zm}+(`xw4Kwx~(kD?o)`!bY8$~@f9`YR3_%3~G7v0v&;EHA!J%KZ3SzV3h* z*9_=}hDicj$vy&G0`XQMFLl7Mjp+7psDl!&QorGGEb+XR`}s_rxA?#_xOnFTr$wO} z&hcNQ!revJvFMP6RrL{zn!mgm@fGZn5q4n<_iyejEg7sF@}G&>W|o(zoSqR5y43LN z9^wxUVZ@IPauY*z#MjxfpC0j-D28K!bx!Hi5kD+3;;%8WgZLLm;)g5j*Hqwr@5bnJ&Jv%tgDbb{?j5@ z*Bp8D6C+p`96r66g~XZ}2j=D9RuASpSXaQYkVSeOE+odSFh*Am<0{3}Uo@w#b@J$Q zLU;-1VY+xZv4cu-?<{z7n=)Z88_rV~D1M&3zGnZ$eWd|LE32vCT(0>>4OZg-m+aFI z&chvhZnWz~CmXOXa4bc%qeYEiv|~j(PNU1t=NIlMHTjDN>~jPUIG|au4LHz3V~2}M z14&V6AUOzgvNyrYnwWzuF$Yy*4x+>yG>JJ#5_3=_<{(JSL64Y&9C2MpK9rV=ACw1! zA~B+Y4jTeTI&ntBo@CF#*2TcD(9&pop(lj3v|2HH#>Hg%)lYfE^QZgAgHck!g=`c z>Vx`R2t&(tPi0VcKp_rhHs@=ZEo>7{3Z20PezUu{T;U>qCta-K|FUQF_(`^q>F~`B{R9Y}O*yMIsZ;nt z+15Q<9+aIWZ^vJJu*KFA@9z9aKP|Bcb}MzC@}1DvlO|(c4$^>Zdg`L*x^}K$otj-}O zWe<@V1wAFPkCNO}&|U06IdoeQ)t&mgq9EGDS0qf zmTE!ydVHznYCAM&%}=wrmveabMRgGgb?vhwtE2RvvRXy2WCy_;Eb@AGi0;j0hl;$F zJyiGRvN~|To7IKRds!W_-_MQ^`D^xYt+{N8e#$PZI}x8|N6BCnhJXBM^mX4 z<{RW?GiRJwQB~6|*$F+VFx$Vm+|CZ#p2H_y-^If=@8V&bck!9uck#qcn?7-qQ8tNv zvguOLN4Ld;PEb*!%06@2tePn^XPoY8h}VBtLJ>A*?@S@f8HL$Ft$XR+9oH)aPgY5` znq9z+S=~{&CaaeJn(TOZr6T{8Rl|QnwoDa1t0w>F*$Uk(%}#_jNw){HljUrcCb1uB zPBE?QOFBuv9jD(4sxH#+(9-l==k6w3Qe@0eyQcyDq0?H51Z>hY)BNUAKWCqmIKC`Y zku1_17p5{FHAUHhV(!?vcT@c1?N{z9jNkB*6X?MRCwHAGWFfvfT!^m@7wTt*)l(bY z)6scVUq>fXhu{gM93DOzjE9egJ365np${KTFfAP|NTpii7_IS9|Jz;0ZZg>HGWy?w znfv#BeIKUo|K&cT_iCD{+$+9ffa9pm35-@z-TkV$wNpBAu9Y?O%E6iAmR9mq#Zi9g}l7@+T%8QxZ7R ziDMdu`q7?X9O=ZMZ~A86nE@M2Hr=Oh(8#@Ao+eW)@YLcNhfL6@YWIvws1M9W10P^E z67aZscTKndkApCOcZIXB$u1|S%)iRyj{6F3eykMc&q^RhH-OUt(#WSq!#LpAInP7q zde!S&YWKAm_!tqFIQfeWR0@S+UsL+%;$MnRcvr0)Ph8|tcMc_U^bio>O_Ysf@YXsH?@)4tk zP^-Xm$x|l@9Upe%%eH~NK^oKx?F}&MMdvp@Phg$QXcN16ApQWohGTr-uuOv$Gd|Mm z%pni!)WPTfy1!)eX20d%{?JpHU^9YmJKILvG_{{~O0UCNn^|s%-aSI^6~PBYuukLh z`011=59`Dz59`dxFUqI?Kex`^GcWeFbt z6#&;!)zb>Ys_hQJLD#@K1dj1hNXFk+*BKb1U(bz7|9Ia(B0i~VNi>H(ArAY>L1*l~ z1b?D|&~@!3ua^aR(C7qrRZ$A?)H$(nEENW1)D-YjwDn)N`PkXzVG^Ck$43KO?kV2MopK2uAZv?AA#BQ(;hCj&Pv=rv959 zRf2pl4{)EJMk&xYgIT0fG2yl&oweZNj{Ph;Bt^BJZO`=4A&Iq0dUz6lJ2m$IY8Q%C zgDKABEBD)(f?H)21!`pbRb>fAbW}Fz-$`DqkM1PwRNvMOH+`=E$H)HBV*OA0t1wY=!bHRI!-o!DYc{Ks3ZEskZ!(*;H2TdvA{-g=R>Va{)E+FLWO zq%Bi($R15N$Lg}Z=JA1V&-wZIUn%?oy!8K*+g3mM)V4KG?eeeQ`so-7O{ZE41HckvfwzyuuSHR34c}}NDcz~B?swqManY+CZE4OWLK^-Hu#^)H}Uy< zLq5%2zGmHO6@N(X&&n+pN*MFyt*%jdk8$PQ>B(!tN|I_uc2ZttY=f`$Y3>1A-l(ephZb-{qFJKi1VlnRc06O-Lxy$`poA|yV5%k-}}kvJs*w! z@{{X7x^{d*fA)0UvFop`&+X2A{CWGXPcANc@t{4McDXS>9=&^f>e|ZWj$Qwg+j{M8 zjrh0RI?X)hXMQb3sfH-myQ0i@MKM8rlE;Y5k8j!WQOO6Hdv~;My?%G=e}DN&$p<|F zezLdqhCPMx?ps?;a7#?DOLnBTwi-fiHS;p8u46MyF;zLnZH61-Ms3`%^YMk=8{!XJ ySv2vkwp}-AQzZYHxouY;ZI0xpZM!m`_R0N|ZQ>>x883jE)SCUIS(WHE&;B1v1EPlj literal 0 HcmV?d00001 diff --git a/Keil Code/Revise_4/pro.hex b/Keil Code/Revise_4/pro.hex new file mode 100644 index 0000000..c726301 --- /dev/null +++ b/Keil Code/Revise_4/pro.hex @@ -0,0 +1,232 @@ +:0300000002058E68 +:0C058E00787FE4F6D8FD75812B0205D5BE +:10078A00323020202D20202D202020202020202023 +:10079A000020203A20203A2020202020202020203B +:1007AA00200020202053746F7020576174636820E2 +:1007BA00200020203A20203A20202E20202020200D +:1007CA002000416C61726D20436C6F636B2053652E +:1007DA00742000202020203A2020202020202020C1 +:0B07EA00202000204F4E004F4646002C +:1009F8000123000128FF02260000012A0001240625 +:0F0A080001250001290002210000012B00C1007F +:100B4B0030B102C322120BB230B102C32230B1FD5D +:020B5B00D322A3 +:100B5D0030B002C322120BB230B002C32230B0FD4E +:020B6D00D32291 +:100B6F0030B202C322120BB230B202C32230B2FD36 +:020B7F00D3227F +:100B810030B302C322120BB230B302C32230B3FD21 +:020B9100D3226D +:100A48008E0F8F10851082850F83E4936017051031 +:100A5800E510AE0F7002050F14F5828E83E493FF44 +:060A6800120BCB80DF221F +:0C09CD00AB0FAA10A9111203B4FDAF1368 +:1009D9008D15120BBFE51575F00A842430FF120B33 +:0F09E900CBE51575F00A84E5F02430FF020BCB47 +:1006A6008B0F8A1089118D12AF14120BBF7F0F1298 +:1006B6000BBF120B6F5026AB0FAA10A9111203B471 +:1006C600C39512500774011203CD8004E41203EFA0 +:1006D6001209CDAF14120BBF7F0F120BBF120B8185 +:1006E6005027AB0FAA10A9111203B4D394004007E8 +:1006F60074FF1203CD8005E5121203EF1209CDAF88 +:1007060014120BBF7F0F120BBF120B4B50A47F0CA2 +:04071600120BBF22E1 +:10071A00120BD7120AF41209A07F3F120A94120B85 +:10072A00E27FC112089A8F24E524D39417400375F7 +:10073A0024067FC312089A8F25E525D3943B4003EC +:10074A00E4F5257FC512089A8F29E529D39401403B +:10075A0003E4F529120003052AE52AC39405400695 +:10076A00E4F52A12084DE5236528600612092D854D +:10077A00232812001912001A1207F512026180D4F6 +:100B2F008F1DE51D75F00A842430FF120BCBE51DD8 +:0C0B3F0075F00A84E5F02430FF020BCBB7 +:10061A00EF14B4070040030206A590063275F003F2 +:10062A00A4C58325F0C58373020647020650020655 +:10063A005E02066C02067A0206880206967F53124A +:10064A000BCB7F7580077F4D120BCB7F6F120BCBC5 +:10065A007F6E80447F54120BCB7F75120BCB7F6564 +:10066A0080367F57120BCB7F65120BCB7F648028B5 +:10067A007F54120BCB7F68120BCB7F75801A7F4693 +:10068A00120BCB7F72120BCB7F69800C7F53120B3C +:0C069A00CB7F61120BCB7F74120BCB22C4 +:10092D007F0C120BBFE52370177F80120BBF7E0764 +:10093D007F8A120A487FC0120BBF7E077F9B801AE9 +:10094D00E523B402187F80120BBF7E077FAC120A1D +:0E095D00487FC0120BBF7E077FBC120A4822E3 +:10026100E5236003020365E51CC4540F75F00AA47D +:10027100FFE51C540F2FFD7F821209D9E51AC454E2 +:100281000F75F00AA4FFE51A540F2FFD7F8512099F +:10029100D9E519C4540F75F00AA4FFE519540F2FBD +:1002A100FD7F881209D97F8C120BBFE51B5407FF14 +:1002B10012061AE518C4540F75F00AA4FFE5185484 +:1002C1000F2FFD7FC01209D9E517C4540F75F00A2D +:1002D100A4FFE517540F2FFD7FC31209D9E516C4FA +:1002E100540F75F00AA4FFE516540F2FFD7FC612B7 +:1002F10009D97FC9120BBF852608852709C3E508DF +:100301006480948050127F2D120BCBC3E49509F5C4 +:1003110009E49508F50880057F20120BCBAE08AFE4 +:10032100097C007D64120468EF2430FF120BCBAE10 +:1003310008AF097C007D0A1204687C007D0A120462 +:1003410068ED2430FF120BCB7F2E120BCBAE08AF22 +:10035100097C007D0A120468ED2430FF120BCB7F6B +:1003610043020BCBE52364027048AE21AF227C0E21 +:100371007D10120413AD077FC01209D9AE21AF223F +:100381007C0E7D101204137E007F3CCFCDCFCECCEE +:10039100CE120413AD077FC31209D9AE21AF227C5F +:1003A100007D3C1204137FC61209D9AD2B7FC912FF +:0203B10009D968 +:0103B3002227 +:1007F500E5237018120B4B500612001E7528FF12C8 +:100805000B5D5043752302C200E4802CE52364028E +:100815007035120B6F5006B200A200928E120B813A +:10082500500A200007E4F521F522F52B120B5D5047 +:1008350016E4F523C28EC200F521F522F52B120927 +:080845002D8523281202612217 +:10001E00E51CC4540F75F00AA4FFE51C540F2FF510 +:10002E0008E51AC4540F75F00AA4FFE51A540F2FF1 +:10003E00F509E519C4540F75F00AA4FFE519540F1C +:10004E002FF50AE51B5407F50BE518C4540F75F090 +:10005E000AA4FFE518540F2FF50CE517C4540F75BD +:10006E00F00AA4FFE517540F2FF50DE516C4540F33 +:10007E0075F00AA4FFE516540F2FF50E7F80120BB4 +:10008E00BF7E077F8A120A487FC0120BBF7E077F92 +:10009E009B120A48AD087F821209D9AD097F8512DD +:1000AE0009D9AD0A7F881209D97F8C120BBFAF0B0D +:1000BE0012061AAD0C7FC01209D9AD0D7FC31209FD +:1000CE00D9AD0E7FC61209D97B007A007908751357 +:1000DE00827514827D631206A67B007A00790975FB +:1000EE0013857514857D0C1206A67B007A00790A9D +:1000FE007513887514887D1F1206A67B007A007909 +:10010E000C7513C07514C07D171206A67B007A00FD +:10011E00790D7513C37514C37D3B1206A67B007A49 +:10012E0000790E7513C67514C67D3B1206A67F8C1C +:10013E00120BBF7F0F120BBF120B6F5022E50BC3BA +:10014E0094075004050B8003750B017F8C120BBFB7 +:10015E00AF0B12061A7F8C120BBF7F0F120BBF1242 +:10016E000B815021E50B94014004150B8003750B98 +:10017E00077F8C120BBFAF0B12061A7F8C120BBFB0 +:10018E007F0F120BBF120B4B50AEE50875F00A84B1 +:10019E00C454F0FFE50875F00A84E5F04FF51CE550 +:1001AE000975F00A84C454F0FFE50975F00A84E578 +:1001BE00F04FF51AE50A75F00A84C454F0FFE50A0B +:1001CE0075F00A84E5F04FF519850B1BE50C75F0FB +:1001DE000A84C454F0FFE50C75F00A84E5F04FF57F +:1001EE0018E50D75F00A84C454F0FFE50D75F00A9C +:1001FE0084E5F04FF517E50E75F00A84C454F0FF50 +:10020E00E50E75F00A84E5F04FF516E4FD7F8E12CB +:10021E00096BAD167F8012096BAD177F8212096BC9 +:10022E00AD187F8412096BAD197F8612096BAD1A5A +:10023E007F8812096BAD1B7F8A12096BAD1C7F8CF8 +:10024E0012096B7D807F8E12096B7F0C120BBF75AE +:02025E0028FF77 +:01026000227B +:1004BD007F80120BBF7E077FCC120A487FC0120BC4 +:1004CD00BF7E077FDD120A48AD247FC31209D9AD67 +:1004DD00257FC61209D97FCA120BBFE52960067E9A +:1004ED00077FED80047E077FF1120A487B007A00BA +:1004FD0079247513C37514C47D171206A67B007A73 +:10050D000079257513C67514C77D3B1206A67FCCE1 +:10051D00120BBF7F0F120BBF120B6F5019752901F4 +:10052D007FCA120BBF7E077FED120A487FCC120BDC +:10053D00BF7F0F120BBF120B815019E4F5297FCA33 +:10054D00120BBF7E077FF1120A487FCC120BBF7FC3 +:10055D000F120BBF120B4B50BF7F0C120BBFE4FDE4 +:10056D007F8E12096BAD247FC012096BAD257FC242 +:10057D0012096BAD297FC412096B7D807F8E020934 +:01058D006B02 +:0B0BD70053890F438910D2ABD2AF222C +:03001B00020A6E68 +:100A6E00C0E0C0D0758DD8758BF0300014052BE525 +:100A7E002BC39464400B752B000522E522700205F2 +:060A8E0021D0D0D0E032BF +:10084D00E4F50AFB7A007908120B12503FE50830E7 +:10085D00E714E509F4FFE508F4FEEF2401F509E4DA +:10086D003EF508750A01AE08AF097C007D0A120439 +:10087D00017D101204688E268F27E50A600BC3E4F4 +:0C088D009527F527E49526F526120BE2CE +:01089900223C +:0100190022C4 +:01001A0022C3 +:100AB500E4FDFCC3ED9FEC9E5015E4FBFA0BBB0077 +:0F0AC500010AEB64704A70F50DBD00010C80E46E +:010AD40022FF +:0C0BB2007F017E267D82DDFEDEFADFF68C +:010BBE002214 +:1008E400C2A58B807F017E00120914D2A77F017EEE +:1008F40000120914C2A77F017E00120914EBC4542C +:10090400F0F5807F017E00120914D2A77F017E00DA +:10091400D3EF9400EE9400400F7DC77C01DCFEDD34 +:08092400FAEF1F70EB1E80E8E2 +:01092C0022A8 +:0C0BBF00AB07C2A7C2A61208E4C2A7221E +:0C0BCB00AB07C2A7D2A61208E4C2A72202 +:100AF4007F32120BBF7F28120BBF7F0C120BBF7FFC +:0E0B040006120BBF7F01120BBF7F80020BBFDA +:0E0BA40081838587898B8D80828486888A8CE8 +:090A170007160000120101021390 +:10096B00C2B500C2B600D2B500E4FEEF1392B4EFED +:10097B00C313FFD2B600C2B6000EBE08EEE4FEED06 +:10098B001392B4EDC313FDD2B600C2B6000EBE086F +:04099B00EEC2B500F3 +:01099F002235 +:10089A00C2B500C2B600D2B500E4FDEF1392B4EFC0 +:1008AA00C313FFD2B600C2B6000DBD08EE00E4FDC8 +:1008BA00A2B4E433FFC43333335480FCEEC3134C85 +:1008CA00FED2B600C2B6000DBD08E5C2B500D2B66A +:0908DA0000C2B400D2B400AF0664 +:0108E30022F2 +:1009A0007F8112089AEF30E723E4FD7F8E12096BF6 +:1009B000E4FCEC900BAB93FF74162CF8E6FD1209E7 +:0C09C0006B0CBC07ED7D807F8E12096B74 +:0109CC002208 +:10000300E4FBEB900BA493FF12089A74162BF8A64B +:05001300070BBB07ED27 +:0100180022C5 +:100B9300C2B7E4FF0FBFC8FCD2B7E4FF0FBF64FCCA +:010BA300222F +:050A2100120B937FCCD5 +:100A2600E4FEC2B700EF30E004D2B78002C2B7E4FA +:100A3600FD0DBD1EFCD2B70000EFC313FF0EBE08AE +:010A4600E1CE +:010A4700228C +:100AD500E4FFFEEFC313FFC2B700D2B7000030B783 +:0E0AE50003430780E4FD0DBD14FC0EBE08E5C2 +:010AF30022E0 +:080BE200120A217F44020A26D9 +:100A9400AC07120A217F4E120A26E4FF120A26E44A +:100AA400FF120A26AF04120A26120A217F48020AFC +:010AB400261B +:100B1200120A217FBE120A26120AD5AC07120AD582 +:0C0B2200EFFFAD04EDCF8FF012049ED366 +:010B2E0022A4 +:10059A0002071AE493A3F8E493A34003F68001F256 +:1005AA0008DFF48029E493A3F85407240CC8C33362 +:1005BA00C4540F4420C8834004F456800146F6DF31 +:1005CA00E4800B01020408102040809009F8E47EC0 +:1005DA00019360BCA3FF543F30E509541FFEE49326 +:1005EA00A360010ECF54C025E060A840B8E493A3ED +:1005FA00FAE493A3F8E493A3C8C582C8CAC583CA18 +:10060A00F0A3C8C582C8CAC583CADFE9DEE780BECF +:010A200000D5 +:1003B400BB010689828A83E0225002E722BBFE0247 +:0903C400E32289828A83E493227A +:1003CD00BB010989828A83F8E028F022500327F7C0 +:1003DD0022BBFE05F8E328F3228A838982F8E49391 +:0203ED002822C4 +:1003EF00BB010689828A83F0225002F722BBFE01ED +:0203FF00F322E7 +:10040100EF8DF0A4A8F0CF8CF0A428CE8DF0A42E0F +:02041100FE22C9 +:10041300BC000BBE0029EF8DF084FFADF022E4CCCD +:10042300F875F008EF2FFFEE33FEEC33FCEE9DEC96 +:10043300984005FCEE9DFE0FD5F0E9E4CEFD22EDDC +:10044300F8F5F0EE8420D21CFEADF075F008EF2F26 +:10045300FFED33FD4007985006D5F0F222C398FD17 +:050463000FD5F0EA22B4 +:10046800C2D5EC30E709B2D5E4C39DFDE49CFCEEAF +:1004780030E715B2D5E4C39FFFE49EFE120413C310 +:10048800E49DFDE49CFC800312041330D507C3E40B +:060498009FFFE49EFE221E +:10049E00BB010A89828A83F0E5F0A3F0225006F7A9 +:0F04AE0009A7F01922BBFE06F3E5F009F31922A6 +:00000001FF diff --git a/Keil Code/Revise_4/pro.uvgui.Administrator b/Keil Code/Revise_4/pro.uvgui.Administrator new file mode 100644 index 0000000..9ea554a --- /dev/null +++ b/Keil Code/Revise_4/pro.uvgui.Administrator @@ -0,0 +1,1249 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + + + 1 + 1 + 0 + + + + + + + 44 + 2 + 3 + + -1 + -1 + + + -1 + -1 + + + 34 + 26 + 1051 + 560 + + + + 0 + + 826 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000005000000030000000100000069483A5CC6D5D6D04843363830302D454D332056332E30BFAAB7A2B0E5D7CAC1CF5C352D2DCAB5D1E9B3CCD0F25CD6D0BCB6CAB5D1E9C0FDB3CC5C445331333032CAB1D6D34C434431363032CFD4CABEA3A8BFC9D2D4B0B4BCFCC9E8D6C3CAB1D6D3A3A95C4C43442E4800000000054C43442E4800000000C5D4F200FFFFFFFF69483A5CC6D5D6D04843363830302D454D332056332E30BFAAB7A2B0E5D7CAC1CF5C352D2DCAB5D1E9B3CCD0F25CD6D0BCB6CAB5D1E9C0FDB3CC5C445331333032CAB1D6D34C434431363032CFD4CABEA3A8BFC9D2D4B0B4BCFCC9E8D6C3CAB1D6D3A3A95C6C63642E6300000000056C63642E6300000000FFDC7800FFFFFFFF6C483A5CC6D5D6D04843363830302D454D332056332E30BFAAB7A2B0E5D7CAC1CF5C352D2DCAB5D1E9B3CCD0F25CD6D0BCB6CAB5D1E9C0FDB3CC5C445331333032CAB1D6D34C434431363032CFD4CABEA3A8BFC9D2D4B0B4BCFCC9E8D6C3CAB1D6D3A3A95C6473313330322E6300000000086473313330322E6300000000BECEA100FFFFFFFF6A483A5CC6D5D6D04843363830302D454D332056332E30BFAAB7A2B0E5D7CAC1CF5C352D2DCAB5D1E9B3CCD0F25CD6D0BCB6CAB5D1E9C0FDB3CC5C445331333032CAB1D6D34C434431363032CFD4CABEA3A8BFC9D2D4B0B4BCFCC9E8D6C3CAB1D6D3A3A95C6D61696E2E6300000000066D61696E2E6300000000F0A0A100FFFFFFFF6C483A5CC6D5D6D04843363830302D454D332056332E30BFAAB7A2B0E5D7CAC1CF5C352D2DCAB5D1E9B3CCD0F25CD6D0BCB6CAB5D1E9C0FDB3CC5C445331333032CAB1D6D34C434431363032CFD4CABEA3A8BFC9D2D4B0B4BCFCC9E8D6C3CAB1D6D3A3A95C4453313330322E4800000000084453313330322E4800000000BCA8E100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000009400000065000000560500005D020000 + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 940000004F0000005D030000B3000000 + + + 16 + 19010000EA000000E20300004E010000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000008D0000002E020000 + + + 16 + 9E000000B40000002E0100003B020000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000008D0000002E020000 + + + 16 + 9E000000B40000002E0100003B020000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000077010000EE030000BC010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000077010000EE030000BC010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000077010000EE030000BC010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000077010000EE030000BC010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E0100003B020000 + + + + 1507 + 1507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000077010000EE030000BC010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 97000000660000005A0300009A000000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000077010000EE030000BC010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000077010000EE030000BC010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000077010000EE030000BC010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000620200005305000096020000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000620200005305000096020000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000620200005305000096020000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000620200005305000096020000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1944 + 1944 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 0300000077010000EE030000BC010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000008D0000002E020000 + + + 16 + 9E000000B40000002E0100003B020000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000008D0000002E020000 + + + 16 + 9E000000B40000002E0100003B020000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000005F02000056050000AF020000 + + + 16 + 9E000000B40000009602000015010000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 0000000060010000F1030000D5010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000620200005305000096020000 + + + 16 + 9E000000B40000009602000015010000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + 97000000660000005A0300009A000000 + + + 16 + 9E000000B40000009602000015010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 97000000660000005A0300009A000000 + + + 16 + 9E000000B40000009602000015010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 97000000660000005A0300009A000000 + + + 16 + 9E000000B40000009602000015010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 97000000660000005A0300009A000000 + + + 16 + 9E000000B40000009602000015010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 97000000660000005A0300009A000000 + + + 16 + 9E000000B40000009602000015010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000008D0000002E020000 + + + 16 + 9E000000B40000002E0100003B020000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000620200005305000096020000 + + + 16 + 9E000000B40000009602000015010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 940 + 0 + 8192 + 0 + + 16 + 0000000000000000B70300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000AF02000056050000C2020000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59398 + 59398 + 1 + 0 + 0 + 0 + 391 + 0 + 8192 + 1 + + 16 + 000000001C0000009201000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 593980 + 59398 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000005705000017000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 0 + 0 + 0 + 0 + 644 + 0 + 8192 + 2 + + 16 + 00000000380000008F02000054000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2485 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF94000000B30000005D030000B7000000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E65002000000000000019010000EA000000E20300004E010000940000004F0000005D030000B30000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF5D0300004F00000061030000D5010000000000000200000004000000010000000000000000000000FFFFFFFF16000000E20500002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000001800040000000000000E6030000EA0000007604000070020000610300004F000000F1030000D50100000000000040410046160000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF900000004F0000009400000047020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000085000000EA00000015010000E2020000000000004F00000090000000470200000000000040140056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF000000005C010000F10300006001000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0900000098070000E30500008F0700009007000091070000B9050000BA050000BB050000BC0500000180008000000000000085000000FB01000076040000700200000000000060010000F1030000D50100000000000040820046090000000A43616C6C20537461636B000000009807000001000000FFFFFFFFFFFFFFFF0A43616C6C20537461636B00000000E305000001000000FFFFFFFFFFFFFFFF064C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFF901000060010000FD010000D501000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF9807000001000000FFFFFFFF9807000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF0000000047020000560500004B020000010000000100001004000000010000000000000000000000FFFFFFFF07000000C5000000C700000077940000930700009407000095070000960700000180008000000100000085000000E6020000DB0500004A030000000000004B02000056050000AF0200000000000040820056070000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2002 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000004000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59398 + Build + + 573 + 00200000010000000D00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000004001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A0000000004002400000000000000000000000000000000010000000100000000000000054275696C6487010000 + + + 478 + 0D00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 478 + 0D00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A00000000000009000000000000000000000000000000000100000001000000 + + + + 59399 + Debug + + 2353 + 00200000000000001B00FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380DB8B00000000000031000000064C6F63616C73000000000000000000000000010000000100000000000000000000000100000000001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000000000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804601000000000000490000000000000000000000000000000001000000010000000000000005446562756784020000 + + + 968 + 1B00FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180DB8B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804601000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 968 + 1B00FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180DB8B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018001890000000000001300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180460100000000000014000000000000000000000000000000000100000001000000 + + + + 0 + 1366 + 768 + + + + +
diff --git a/Keil Code/Revise_4/pro.uvopt b/Keil Code/Revise_4/pro.uvopt new file mode 100644 index 0000000..5c7ba03 --- /dev/null +++ b/Keil Code/Revise_4/pro.uvopt @@ -0,0 +1,1843 @@ + + + + 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 + 0 + 0 + 19 + 19 + 0 + .\main.c + main.c + + + 1 + 3 + 1 + 1 + 0 + 0 + 0 + 13 + 13 + 0 + .\lcd.c + lcd.c + + + 1 + 4 + 1 + 1 + 0 + 17 + 0 + 1 + 1 + 0 + .\ds1302.c + ds1302.c + + + 1 + 5 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + .\ds18b20.c + ds18b20.c + + + + + C:\Users\HM_DEV\Desktop\DS1302时钟LCD1602显示(�以按键设置时钟)\程�-1\LCD.H + 11 + 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 + 68 + 68 + 0 + + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + + + + C:\KEIL\C51\INC\INTRINS.H + 1 + 1 + 0 + + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + + + + C:\Users\HM_DEV\Desktop\DS1302时钟LCD1602显示(�以按键设置时钟)\程�-1\DS1302.H + 16 + 16 + 0 + + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + + + + C:\Users\HM_DEV\Desktop\DS1302时钟LCD1602显示(�以按键设置时钟)\程�-1\DS18B20.H + 1 + 1 + 0 + + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + + + + Default + 1 + Build + 0 + + Default + 1 + + 35824 + 1 + Logic Analyzer + 0 + + 0 + + 1 + 6 + 0 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 1 + 0 + 0 + 0 + + + 59392 + 2 + File + 0 + + 0 + + 1 + 2 + 3 + 0 + 24 + 0 + 50 + 893 + 0 + 0 + 0 + 0 + 100 + 0 + 1 + 0 + + + 59398 + 3 + Build + 0 + + 0 + + 1 + 2 + 3 + 0 + 50 + 0 + 76 + 384 + 0 + 0 + 0 + 0 + 100 + 0 + 0 + 0 + + + 59399 + 4 + Debug + 0 + + 0 + + 1 + 2 + 3 + 0 + 50 + 0 + 76 + 626 + 0 + 0 + 0 + 0 + 100 + 0 + 1 + 0 + + + 197 + 5 + Build Output + 0 + + 0 + + 1 + 2 + 4 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 198 + 6 + Command + 197 + + 0 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 250 + 600 + 100 + 1 + 1 + 0 + + + 199 + 7 + Find in Files + 198 + + 0 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 38007 + 8 + Browse + 199 + + 0 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1939 + 9 + UART #1 + 38007 + + 0 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1940 + 10 + UART #2 + 1939 + + 0 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1941 + 11 + UART #3 + 1940 + + 0 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1942 + 12 + UART #4 + 1941 + + 0 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1944 + 13 + Call Stack + 197 + + 197 + + 1 + 2 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 1 + 1 + 0 + + + 1507 + 14 + Call Stack + 1944 + + 197 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 0 + 0 + 0 + + + 1935 + 15 + Locals + 1507 + + 197 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1936 + 16 + Watch 1 + 1935 + + 197 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1937 + 17 + Watch 2 + 1936 + + 197 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 0 + 0 + 0 + + + 1465 + 18 + Memory 1 + 1937 + + 197 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1466 + 19 + Memory 2 + 1465 + + 197 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 0 + 0 + 0 + + + 1467 + 20 + Memory 3 + 1466 + + 197 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 0 + 0 + 0 + + + 1468 + 21 + Memory 4 + 1467 + + 197 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 0 + 0 + 0 + + + 1506 + 22 + Symbols + 1468 + + 197 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1005 + 23 + Project + 0 + + 0 + + 1 + 2 + 1 + 0 + 76 + 0 + 523 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 1 + 0 + + + 109 + 24 + Books + 1005 + + 0 + + 1 + 4 + 2 + 0 + 76 + 0 + 523 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 195 + 25 + Functions + 109 + + 0 + + 1 + 4 + 2 + 0 + 76 + 0 + 523 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 196 + 26 + Templates + 195 + + 0 + + 1 + 4 + 2 + 0 + 76 + 0 + 523 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 38003 + 27 + Registers + 196 + + 0 + + 1 + 4 + 2 + 0 + 76 + 0 + 523 + 210 + 0 + 0 + 600 + 250 + 100 + 1 + 1 + 0 + + + 35885 + 28 + not set + 0 + + 0 + + 1 + 2 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35886 + 29 + not set + 35885 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35887 + 30 + not set + 35886 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35888 + 31 + not set + 35887 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35889 + 32 + not set + 35888 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35890 + 33 + not set + 35889 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35891 + 34 + not set + 35890 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35892 + 35 + not set + 35891 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35893 + 36 + not set + 35892 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35894 + 37 + not set + 35893 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35895 + 38 + not set + 35894 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35896 + 39 + not set + 35895 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35897 + 40 + not set + 35896 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35898 + 41 + not set + 35897 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35899 + 42 + not set + 35898 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35900 + 43 + not set + 35899 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35901 + 44 + not set + 35900 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35902 + 45 + not set + 35901 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35903 + 46 + not set + 35902 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35904 + 47 + not set + 35903 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35905 + 48 + not set + 35904 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 203 + 49 + Disassembly + 0 + + 0 + + 1 + 2 + 3 + 0 + 76 + 214 + 286 + 1400 + 0 + 0 + 250 + 600 + 100 + 1 + 1 + 0 + + + 1913 + 50 + Instruction Trace + 203 + + 0 + + 1 + 4 + 2 + 0 + 76 + 214 + 286 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 343 + 51 + Performance Analyzer + 1913 + + 0 + + 1 + 4 + 2 + 0 + 76 + 214 + 286 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 204 + 52 + Performance Analyzer + 343 + + 0 + + 1 + 4 + 2 + 0 + 76 + 214 + 286 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 346 + 53 + Code Coverage + 204 + + 0 + + 1 + 4 + 2 + 0 + 76 + 214 + 286 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + + + + 1 + 0 + + 100 + 2 + + + DS18B20.H + 1 + 1 + 1 + + + DS1302.H + 1 + 16 + 16 + + + .\main.c + 0 + 19 + 19 + + + C:\KEIL\C51\INC\INTRINS.H + 0 + 1 + 1 + + + .\ds18b20.c + 1 + 1 + 1 + + + C:\KEIL\C51\INC\ATMEL\REG51.H + 0 + 68 + 68 + + + Z:\Files\�片机实训\�片机实训\中级实验例程\中级实验例程\DS1302时钟LCD1602显示(�以按键设置时钟)\程�\lcd.h + 23 + 20 + 20 + + + .\lcd.c + 0 + 13 + 13 + + + .\ds1302.c + 17 + 1 + 1 + + + Z:\Files\�片机实训\�片机实训\中级实验例程\中级实验例程\DS1302时钟LCD1602显示(�以按键设置时钟)\程�\ds1302.h + 0 + 1 + 1 + + + LCD.H + 29 + 11 + 13 + + + + + +
diff --git a/Keil Code/Revise_4/pro.uvproj b/Keil Code/Revise_4/pro.uvproj new file mode 100644 index 0000000..8d5a251 --- /dev/null +++ b/Keil Code/Revise_4/pro.uvproj @@ -0,0 +1,380 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + + Target 1 + 0x0 + MCS-51 + + + AT89C51 + Atmel + IRAM(0-0x7F) IROM(0-0xFFF) CLOCK(24000000) + + "LIB\STARTUP.A51" ("Standard 8051 Startup Code") + + 2976 + REGX51.H + + + + + + + + + + 0 + + + + Atmel\ + Atmel\ + + 0 + 0 + 0 + 0 + 1 + + .\ + pro + 1 + 0 + 1 + 1 + 1 + .\ + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 65535 + + + S8051.DLL + + DP51.DLL + -p51 + S8051.DLL + + TP51.DLL + -p51 + + + + 0 + 0 + 0 + 0 + 16 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + -1 + + + + + + + + + + + + + + + + + + + 0 + 0 + 0 + 0 + 0 + -1 + + + + + + + + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0xffff + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x1000 + + + 0 + 0x0 + 0x80 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 1 + 0 + 1 + 3 + 8 + 2 + 1 + 1 + 0 + 0 + + + + + + + + + 0 + 1 + 0 + 0 + + + + + + + + + 0 + 0 + 1 + 0 + 2 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Source Group 1 + + + STARTUP.A51 + 2 + .\STARTUP.A51 + + + main.c + 1 + .\main.c + + + lcd.c + 1 + .\lcd.c + + + ds1302.c + 1 + .\ds1302.c + + + ds18b20.c + 1 + .\ds18b20.c + + + + + + + +
diff --git a/Keil Code/Revise_4/模�结构图.md b/Keil Code/Revise_4/模�结构图.md new file mode 100644 index 0000000..1cd64cd --- /dev/null +++ b/Keil Code/Revise_4/模�结构图.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) // 读秒寄存器,检测CH� + └── Ds1302Write() × 9 // 写入默认时间 + 关闭写�护 + +Ds1302ReadTime() + └── Ds1302Read() × 7 // 批�读�7个时间寄存器 + +Ds1302Write(addr, dat) // SPI�议写 + ├── RST=1, SCLK=0 + ├── 循环8次: ����地�(LSB→MSB) + └── 循环8次: ����数� + +Ds1302Read(addr) // SPI�议读 + ├── RST=1, SCLK=0 + ├── 循环8次: ����地� + └── 循环8次: ��读�数�(MSB→LSB) +``` + +## ds18b20.c 模� + +``` +DS18B20_Reset() + ├── DQ=0 → 延时480μs + └── DQ=1 → 等待应答 + +DS18B20_WriteByte(dat) // �总线写 + └── 循环8次: DQ=0 → 写bit → 延时60μs → DQ=1 + +DS18B20_ReadByte() // �总线读 + └── 循环8次: DQ=0 → DQ=1 → 读bit → 延时 + +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) // �制到EEPROM + +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 │ │ +│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ +│ │ │ │ │ │ │ +│ ┌────▼────� ┌────▼────� ┌────▼────� ┌────▼────� ┌────▼────� │ +│ │ReadTime │ │TempPros │ │LcdUpdate│ │KeyPressed│ │AlarmBuz │ │ +│ │Init │ │GetTemp │ │Framework│ │SetAlarm │ │Pro │ │ +│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ +│ │ +│ ┌─────────────────────────────────────────────────────────────� │ +│ │ 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 +```