From 7df28fc634296c90af52910c1aab42006202d2b5 Mon Sep 17 00:00:00 2001 From: Andy0613 <841676382@qq.com> Date: Tue, 7 Jul 2026 09:27:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=80=E5=90=8E=E4=B8=80=E6=AC=A1=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=92=8C=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=94=AF=E6=8C=81keil4=E7=9A=84=E4=B8=AD?= =?UTF-8?q?=E6=96=87=E6=B3=A8=E9=87=8A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Keil Code/Last/STARTUP.A51 | 198 +++ Keil Code/Last/ds1302.c | 156 ++ Keil Code/Last/ds1302.h | 37 + Keil Code/Last/ds18b20.c | 109 ++ Keil Code/Last/ds18b20.h | 26 + Keil Code/Last/lcd.c | 151 ++ Keil Code/Last/lcd.h | 39 + Keil Code/Last/main.c | 603 ++++++++ Keil Code/Last/module_structure.md | 181 +++ Keil Code/Last/pro | Bin 0 -> 33188 bytes Keil Code/Last/pro.hex | 210 +++ Keil Code/Last/pro.uvgui.Administrator | 1249 ++++++++++++++++ Keil Code/Last/pro.uvopt | 1907 ++++++++++++++++++++++++ Keil Code/Last/pro.uvproj | 380 +++++ Keil Code/Last/temp.c | 85 ++ Keil Code/Last/temp.h | 21 + 16 files changed, 5352 insertions(+) create mode 100644 Keil Code/Last/STARTUP.A51 create mode 100644 Keil Code/Last/ds1302.c create mode 100644 Keil Code/Last/ds1302.h create mode 100644 Keil Code/Last/ds18b20.c create mode 100644 Keil Code/Last/ds18b20.h create mode 100644 Keil Code/Last/lcd.c create mode 100644 Keil Code/Last/lcd.h create mode 100644 Keil Code/Last/main.c create mode 100644 Keil Code/Last/module_structure.md create mode 100644 Keil Code/Last/pro create mode 100644 Keil Code/Last/pro.hex create mode 100644 Keil Code/Last/pro.uvgui.Administrator create mode 100644 Keil Code/Last/pro.uvopt create mode 100644 Keil Code/Last/pro.uvproj create mode 100644 Keil Code/Last/temp.c create mode 100644 Keil Code/Last/temp.h diff --git a/Keil Code/Last/STARTUP.A51 b/Keil Code/Last/STARTUP.A51 new file mode 100644 index 0000000..ec99b9e --- /dev/null +++ b/Keil Code/Last/STARTUP.A51 @@ -0,0 +1,198 @@ +$NOMOD51 +;------------------------------------------------------------------------------ +; This file is part of the C51 Compiler package +; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc. +; Version 8.01 +; +; *** <<< Use Configuration Wizard in Context Menu >>> *** +;------------------------------------------------------------------------------ +; STARTUP.A51: This code is executed after processor reset. +; +; To translate this file use A51 with the following invocation: +; +; A51 STARTUP.A51 +; +; To link the modified STARTUP.OBJ file to your application use the following +; Lx51 invocation: +; +; Lx51 your object file list, STARTUP.OBJ controls +; +;------------------------------------------------------------------------------ +; +; User-defined Power-On Initialization of Memory +; +; With the following EQU statements the initialization of memory +; at processor reset can be defined: +; +; IDATALEN: IDATA memory size <0x0-0x100> +; Note: The absolute start-address of IDATA memory is always 0 +; The IDATA space overlaps physically the DATA and BIT areas. +IDATALEN EQU 80H +; +; XDATASTART: XDATA memory start address <0x0-0xFFFF> +; The absolute start address of XDATA memory +XDATASTART EQU 0 +; +; XDATALEN: XDATA memory size <0x0-0xFFFF> +; The length of XDATA memory in bytes. +XDATALEN EQU 0 +; +; PDATASTART: PDATA memory start address <0x0-0xFFFF> +; The absolute start address of PDATA memory +PDATASTART EQU 0H +; +; PDATALEN: PDATA memory size <0x0-0xFF> +; The length of PDATA memory in bytes. +PDATALEN EQU 0H +; +; +;------------------------------------------------------------------------------ +; +; Reentrant Stack Initialization +; +; The following EQU statements define the stack pointer for reentrant +; functions and initialized it: +; +; Stack Space for reentrant functions in the SMALL model. +; IBPSTACK: Enable SMALL model reentrant stack +; Stack space for reentrant functions in the SMALL model. +IBPSTACK EQU 0 ; set to 1 if small reentrant is used. +; IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF> +; Set the top of the stack to the highest location. +IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 +; +; +; Stack Space for reentrant functions in the LARGE model. +; XBPSTACK: Enable LARGE model reentrant stack +; Stack space for reentrant functions in the LARGE model. +XBPSTACK EQU 0 ; set to 1 if large reentrant is used. +; XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF> +; Set the top of the stack to the highest location. +XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1 +; +; +; Stack Space for reentrant functions in the COMPACT model. +; PBPSTACK: Enable COMPACT model reentrant stack +; Stack space for reentrant functions in the COMPACT model. +PBPSTACK EQU 0 ; set to 1 if compact reentrant is used. +; +; PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF> +; Set the top of the stack to the highest location. +PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 +; +; +;------------------------------------------------------------------------------ +; +; Memory Page for Using the Compact Model with 64 KByte xdata RAM +; Compact Model Page Definition +; +; Define the XDATA page used for PDATA variables. +; PPAGE must conform with the PPAGE set in the linker invocation. +; +; Enable pdata memory page initalization +PPAGEENABLE EQU 0 ; set to 1 if pdata object are used. +; +; PPAGE number <0x0-0xFF> +; uppermost 256-byte address of the page used for PDATA variables. +PPAGE EQU 0 +; +; SFR address which supplies uppermost address byte <0x0-0xFF> +; most 8051 variants use P2 as uppermost address byte +PPAGE_SFR DATA 0A0H +; +; +;------------------------------------------------------------------------------ + +; Standard SFR Symbols +ACC DATA 0E0H +B DATA 0F0H +SP DATA 81H +DPL DATA 82H +DPH DATA 83H + + NAME ?C_STARTUP + + +?C_C51STARTUP SEGMENT CODE +?STACK SEGMENT IDATA + + RSEG ?STACK + DS 1 + + EXTRN CODE (?C_START) + PUBLIC ?C_STARTUP + + CSEG AT 0 +?C_STARTUP: LJMP STARTUP1 + + RSEG ?C_C51STARTUP + +STARTUP1: + +IF IDATALEN <> 0 + MOV R0,#IDATALEN - 1 + CLR A +IDATALOOP: MOV @R0,A + DJNZ R0,IDATALOOP +ENDIF + +IF XDATALEN <> 0 + MOV DPTR,#XDATASTART + MOV R7,#LOW (XDATALEN) + IF (LOW (XDATALEN)) <> 0 + MOV R6,#(HIGH (XDATALEN)) +1 + ELSE + MOV R6,#HIGH (XDATALEN) + ENDIF + CLR A +XDATALOOP: MOVX @DPTR,A + INC DPTR + DJNZ R7,XDATALOOP + DJNZ R6,XDATALOOP +ENDIF + +IF PPAGEENABLE <> 0 + MOV PPAGE_SFR,#PPAGE +ENDIF + +IF PDATALEN <> 0 + MOV R0,#LOW (PDATASTART) + MOV R7,#LOW (PDATALEN) + CLR A +PDATALOOP: MOVX @R0,A + INC R0 + DJNZ R7,PDATALOOP +ENDIF + +IF IBPSTACK <> 0 +EXTRN DATA (?C_IBP) + + MOV ?C_IBP,#LOW IBPSTACKTOP +ENDIF + +IF XBPSTACK <> 0 +EXTRN DATA (?C_XBP) + + MOV ?C_XBP,#HIGH XBPSTACKTOP + MOV ?C_XBP+1,#LOW XBPSTACKTOP +ENDIF + +IF PBPSTACK <> 0 +EXTRN DATA (?C_PBP) + MOV ?C_PBP,#LOW PBPSTACKTOP +ENDIF + + MOV SP,#?STACK-1 + +; This code is required if you use L51_BANK.A51 with Banking Mode 4 +; Code Banking +; Select Bank 0 for L51_BANK.A51 Mode 4 +#if 0 +; Initialize bank mechanism to code bank 0 when using L51_BANK.A51 with Banking Mode 4. +EXTRN CODE (?B_SWITCH0) + CALL ?B_SWITCH0 ; init bank mechanism to code bank 0 +#endif +; + LJMP ?C_START + + END diff --git a/Keil Code/Last/ds1302.c b/Keil Code/Last/ds1302.c new file mode 100644 index 0000000..802362c --- /dev/null +++ b/Keil Code/Last/ds1302.c @@ -0,0 +1,156 @@ +/****************************************************************************** + * 文件名:ds1302.c + * 功能:DS1302 实时时钟驱动 + * 说明:提供读写 DS1302 的底层函数,以及时间和闹钟参数的存取。 + * 时间以 BCD 码格式存储于 TIME 数组中。 + * 硬件接口:DSIO=P3^4,RST=P3^5,SCLK=P3^6 + * 编译器:Keil C51 + ******************************************************************************/ + +#include"ds1302.h" + +/* DS1302 读写地址(存储顺序:秒、分、时、日、月、周、年) */ +uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; +uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; + +/* DS1302 默认时间:2013 年 1 月 1 日 星期二 12:00:00 */ +/* 存储顺序:秒、分、时、日、月、周、年(BCD 码) */ +uchar TIME[7] = {0, 0, 0x12, 0x01, 0x01, 0x02, 0x13}; + +/****************************************************************************** + * 函数名:Ds1302Write + * 功能:向 DS1302 写入一字节数据(先写地址,再写数据) + * 输入:addr = 寄存器地址,dat = 要写入的数据 + * 输出:无 + * 时序:RST 置高 → 写入 8 位地址(低位在前)→ 写入 8 位数据(低位在前)→ RST 置低 + ******************************************************************************/ +void Ds1302Write(uchar addr, uchar dat) +{ + uchar n; + + RST = 0; + _nop_(); + + SCLK = 0; /* 时钟先置低 */ + _nop_(); + RST = 1; /* 使能 DS1302 */ + _nop_(); + + for(n = 0; n < 8; n++) /* 发送 8 位地址(低位在前) */ + { + DSIO = addr & 0x01; /* 输出当前位 */ + addr >>= 1; + SCLK = 1; /* 时钟上升沿,DS1302 锁存数据 */ + _nop_(); + SCLK = 0; + _nop_(); + } + + for(n = 0; n < 8; n++) /* 发送 8 位数据(低位在前) */ + { + DSIO = dat & 0x01; + dat >>= 1; + SCLK = 1; + _nop_(); + SCLK = 0; + _nop_(); + } + + RST = 0; /* 结束通信 */ + _nop_(); +} + +/****************************************************************************** + * 函数名:Ds1302Read + * 功能:从 DS1302 读取一字节数据(先写地址,再读数据) + * 输入:addr = 寄存器地址 + * 输出:返回读取到的数据 + * 时序:RST 置高 → 写入 8 位地址(低位在前)→ 读取 8 位数据(高位在前)→ RST 置低 + ******************************************************************************/ +uchar Ds1302Read(uchar addr) +{ + uchar n, dat, dat1; + + RST = 0; + _nop_(); + + SCLK = 0; /* 时钟先置低 */ + _nop_(); + RST = 1; /* 使能 DS1302 */ + _nop_(); + + for(n = 0; n < 8; n++) /* 发送 8 位地址(低位在前) */ + { + DSIO = addr & 0x01; + addr >>= 1; + SCLK = 1; + _nop_(); + SCLK = 0; /* 下降沿后 DS1302 输出数据 */ + _nop_(); + } + _nop_(); + + for(n = 0; n < 8; n++) /* 读取 8 位数据(高位在前) */ + { + dat1 = DSIO; /* 采样数据线 */ + dat = (dat >> 1) | (dat1 << 7); /* 高位在前,依次移入 */ + SCLK = 1; + _nop_(); + SCLK = 0; + _nop_(); + } + + RST = 0; /* 结束通信 */ + _nop_(); + + SCLK = 1; /* 确保时序完整 */ + _nop_(); + DSIO = 0; + _nop_(); + DSIO = 1; + _nop_(); + + return dat; +} + +/****************************************************************************** + * 函数名:Ds1302Init + * 功能:初始化 DS1302 时钟芯片 + * 输入:无 + * 输出:无 + * 说明:检查秒寄存器的 CH 位。如果 CH=1 表示时钟停止(首次上电), + * 则关闭写保护并写入默认时间;如果 CH=0 表示时钟已在运行,跳过初始化。 + ******************************************************************************/ +void Ds1302Init() +{ + uchar n; + uchar sec; + + sec = Ds1302Read(0x81); /* 读取秒寄存器,检查 CH 位(最高位) */ + if(!(sec & 0x80)) /* CH=0:时钟正在运行,无需初始化 */ + return; + + /* CH=1:时钟停止,系统首次上电,写入默认时间 */ + Ds1302Write(0x8E, 0x00); /* 关闭写保护 */ + for(n = 0; n < 7; n++) + { + Ds1302Write(WRITE_RTC_ADDR[n], TIME[n]); + } + Ds1302Write(0x8E, 0x80); /* 开启写保护 */ +} + +/****************************************************************************** + * 函数名:Ds1302ReadTime + * 功能:读取 DS1302 当前时间到 TIME 数组 + * 输入:无 + * 输出:无(结果存入全局 TIME 数组) + ******************************************************************************/ +void Ds1302ReadTime() +{ + uchar n; + + for(n = 0; n < 7; n++) + { + TIME[n] = Ds1302Read(READ_RTC_ADDR[n]); + } +} diff --git a/Keil Code/Last/ds1302.h b/Keil Code/Last/ds1302.h new file mode 100644 index 0000000..919760d --- /dev/null +++ b/Keil Code/Last/ds1302.h @@ -0,0 +1,37 @@ +/****************************************************************************** + * 文件名:ds1302.h + * 功能:DS1302 实时时钟驱动头文件 + * 硬件接口:DSIO = P3^4,RST = P3^5,SCLK = P3^6 + * 编译器:Keil C51 + ******************************************************************************/ + +#ifndef __DS1302_H_ +#define __DS1302_H_ + +#include +#include + +/* 自定义数据类型 */ +#ifndef uchar +#define uchar unsigned char +#endif + +#ifndef uint +#define uint unsigned int +#endif + +/* DS1302 引脚定义 */ +sbit DSIO = P3^4; /* 数据线 */ +sbit RST = P3^5; /* 复位/使能引脚(CE) */ +sbit SCLK = P3^6; /* 串行时钟线 */ + +/* 函数声明 */ +void Ds1302Write(uchar addr, uchar dat); /* 向 DS1302 写入一字节数据 */ +uchar Ds1302Read(uchar addr); /* 从 DS1302 读取一字节数据 */ +void Ds1302Init(void); /* 初始化 DS1302 时钟芯片 */ +void Ds1302ReadTime(void); /* 读取当前时间到 TIME 数组 */ + +/* 外部全局变量 */ +extern uchar TIME[7]; /* 时间缓冲区:秒、分、时、日、月、周、年(BCD 码) */ + +#endif diff --git a/Keil Code/Last/ds18b20.c b/Keil Code/Last/ds18b20.c new file mode 100644 index 0000000..cfe376d --- /dev/null +++ b/Keil Code/Last/ds18b20.c @@ -0,0 +1,109 @@ +#include "ds18b20.h" + +/* + * ????????DS18B20_Reset + * ???? ????λDS18B20???????????? + * ???? ???? + * ??? ??1=?????0=?????? + */ +bit DS18B20_Reset(void) +{ + unsigned int i; + unsigned char presence; + + DS18B20_DQ = 0; /* ????????480~960us */ + for(i=250; i>0; i--); /* DJNZ???: 250*2=500us */ + DS18B20_DQ = 1; /* ????????DS18B20????15~60us??????60~240us */ + for(i=10; i>0; i--); /* DJNZ: 10*2=20us, ?????????? */ + + presence = DS18B20_DQ; /* ???????????(0=?????1=??????) */ + + for(i=200; i>0; i--); /* DJNZ: 200*2=400us, ????????? */ + + return (presence == 0); /* ????1?????????????? */ +} + +/* + * ????????DS18B20_WriteByte + * ???? ????DS18B20д????????(LSB????) + * ???? ??dat=?д??????? + * ??? ???? + */ +void DS18B20_WriteByte(uchar dat) +{ + unsigned char i, j; + + for(i=0; i<8; i++) + { + DS18B20_DQ = 0; /* ??????????д?? */ + if(dat & 0x01) /* д1????????? */ + DS18B20_DQ = 1; + else /* д0?????????? */ + DS18B20_DQ = 0; + for(j=35; j>0; j--); /* DJNZ: 35*2=70us, ?????>=60us */ + DS18B20_DQ = 1; /* ??????? */ + dat >>= 1; /* ???λ(LSB first) */ + } +} + +/* + * ????????DS18B20_ReadByte + * ???? ????DS18B20?????????(LSB????) + * ???? ???? + * ??? ???????????? + */ +uchar DS18B20_ReadByte(void) +{ + unsigned char i, j, dat = 0; + + for(i=0; i<8; i++) + { + DS18B20_DQ = 0; /* ?????????????? */ + DS18B20_DQ = 1; /* ??????? */ + for(j=7; j>0; j--); /* DJNZ: 7*2=14us, ???DS18B20???????(~15us) */ + + dat >>= 1; /* ?????λ */ + if(DS18B20_DQ) + dat |= 0x80; /* LSB first?????????????λ??????λ */ + + for(j=23; j>0; j--); /* DJNZ: 23*2=46us, ?????>=60us */ + } + return dat; +} + +/* + * ????????DS18B20_StartConvert + * ???? ??????DS18B20?????? + * ???? ???? + * ??? ???? + */ +void DS18B20_StartConvert(void) +{ + if(!DS18B20_Reset()) return; /* ??λ???????? */ + DS18B20_WriteByte(0xCC); /* ????ROM */ + DS18B20_WriteByte(0x44); /* ????????? */ +} + +/* + * ????????DS18B20_ReadTemp + * ???? ?????DS18B20??????(16λ) + * ???? ??temp=?????????????? + * ??? ??1=????????0=DS18B20δ??? + */ +bit DS18B20_ReadTemp(int *temp) +{ + uchar tempL, tempH; + int raw; + + if(!DS18B20_Reset()) return 0; /* ??λ???????? */ + DS18B20_WriteByte(0xCC); /* ????ROM */ + DS18B20_WriteByte(0xBE); /* ??????? */ + + tempL = DS18B20_ReadByte(); /* ?????????? */ + tempH = DS18B20_ReadByte(); /* ?????????? */ + + raw = (tempH << 8) | tempL; /* ???16λ???? */ + *temp = raw; + + return 1; +} \ No newline at end of file diff --git a/Keil Code/Last/ds18b20.h b/Keil Code/Last/ds18b20.h new file mode 100644 index 0000000..3b0fb22 --- /dev/null +++ b/Keil Code/Last/ds18b20.h @@ -0,0 +1,26 @@ +#ifndef __DS18B20_H_ +#define __DS18B20_H_ + +#include +#include + +/* ????????????? */ +#ifndef uchar +#define uchar unsigned char +#endif + +#ifndef uint +#define uint unsigned int +#endif + +/* DS18B20????????????? */ +sbit DS18B20_DQ = P3^7; + +/* ???????? */ +bit DS18B20_Reset(void); /* ??λDS18B20???????? */ +void DS18B20_WriteByte(uchar dat); /* д???????? */ +uchar DS18B20_ReadByte(void); /* ????????? */ +void DS18B20_StartConvert(void); /* ????????? */ +bit DS18B20_ReadTemp(int *temp); /* ????????? */ + +#endif \ No newline at end of file diff --git a/Keil Code/Last/lcd.c b/Keil Code/Last/lcd.c new file mode 100644 index 0000000..d5a78dd --- /dev/null +++ b/Keil Code/Last/lcd.c @@ -0,0 +1,151 @@ +/****************************************************************************** + * 文件名:lcd.c + * 功能:LCD1602 液晶显示驱动 + * 说明:支持 4 位和 8 位数据总线模式,由 LCD1602_4PINS 宏控制。 + * 当前使用 4 位模式,RS=P2^6,RW=P2^5,EN=P2^7,数据口=P0。 + * 编译器:Keil C51 + ******************************************************************************/ + +#include"lcd.h" + +/****************************************************************************** + * 函数名:Lcd1602_Delay1ms + * 功能:毫秒级延时函数(12MHz 晶振,12T 模式) + * 输入:c = 延时毫秒数 + * 输出:无 + ******************************************************************************/ +void Lcd1602_Delay1ms(uint c) +{ + uchar a, b; + for(; c > 0; c--) + { + for(b = 199; b > 0; b--) + { + for(a = 1; a > 0; a--); + } + } +} + +/****************************************************************************** + * 函数名:LcdWriteCom + * 功能:向 LCD1602 写入一个 8 位指令 + * 输入:com = 指令字节 + * 输出:无 + * 说明:根据是否定义 LCD1602_4PINS,编译为 4 位或 8 位模式 + ******************************************************************************/ +#ifndef LCD1602_4PINS /* 8 位数据线模式 */ + +void LcdWriteCom(uchar com) +{ + LCD1602_E = 0; /* 使能信号置低 */ + LCD1602_RS = 0; /* 选择指令寄存器 */ + LCD1602_RW = 0; /* 选择写操作 */ + + LCD1602_DATAPINS = com; /* 输出指令字节 */ + Lcd1602_Delay1ms(1); /* 等待数据稳定 */ + + LCD1602_E = 1; /* 产生使能脉冲 */ + Lcd1602_Delay1ms(5); /* 保持高电平 */ + LCD1602_E = 0; +} + +#else /* 4 位数据线模式 */ + +void LcdWriteCom(uchar com) +{ + LCD1602_E = 0; + LCD1602_RS = 0; + LCD1602_RW = 0; + + LCD1602_DATAPINS = com; /* 先送高 4 位 */ + Lcd1602_Delay1ms(1); + LCD1602_E = 1; + Lcd1602_Delay1ms(1); + LCD1602_E = 0; + + Lcd1602_Delay1ms(1); + LCD1602_DATAPINS = com << 4; /* 再送低 4 位 */ + Lcd1602_Delay1ms(1); + LCD1602_E = 1; + Lcd1602_Delay1ms(1); + LCD1602_E = 0; +} + +#endif + +/****************************************************************************** + * 函数名:LcdWriteData + * 功能:向 LCD1602 写入一个 8 位数据 + * 输入:dat = 数据字节 + * 输出:无 + ******************************************************************************/ +#ifndef LCD1602_4PINS /* 8 位数据线模式 */ + +void LcdWriteData(uchar dat) +{ + LCD1602_E = 0; /* 使能信号置低 */ + LCD1602_RS = 1; /* 选择数据寄存器 */ + LCD1602_RW = 0; /* 选择写操作 */ + + LCD1602_DATAPINS = dat; /* 输出数据字节 */ + Lcd1602_Delay1ms(1); + + LCD1602_E = 1; /* 产生使能脉冲 */ + Lcd1602_Delay1ms(5); + LCD1602_E = 0; +} + +#else /* 4 位数据线模式 */ + +void LcdWriteData(uchar dat) +{ + LCD1602_E = 0; + LCD1602_RS = 1; + LCD1602_RW = 0; + + LCD1602_DATAPINS = dat; /* 先送高 4 位 */ + Lcd1602_Delay1ms(1); + LCD1602_E = 1; + Lcd1602_Delay1ms(1); + LCD1602_E = 0; + + Lcd1602_Delay1ms(1); + LCD1602_DATAPINS = dat << 4; /* 再送低 4 位 */ + Lcd1602_Delay1ms(1); + LCD1602_E = 1; + Lcd1602_Delay1ms(1); + LCD1602_E = 0; +} + +#endif + +/****************************************************************************** + * 函数名:LcdInit + * 功能:LCD1602 初始化(设置显示模式、开显示、清屏) + * 输入:无 + * 输出:无 + ******************************************************************************/ +#ifndef LCD1602_4PINS /* 8 位数据线模式初始化 */ + +void LcdInit() +{ + LcdWriteCom(0x38); /* 设置显示模式:16x2、5x7 点阵、8 位数据 */ + LcdWriteCom(0x0c); /* 开显示,不显示光标 */ + LcdWriteCom(0x06); /* 写入数据后地址自动加 1 */ + LcdWriteCom(0x01); /* 清屏 */ + LcdWriteCom(0x80); /* 设置 DDRAM 起始地址为 0x00(第一行) */ +} + +#else /* 4 位数据线模式初始化 */ + +void LcdInit() +{ + LcdWriteCom(0x32); /* 从 8 位模式切换为 4 位模式 */ + LcdWriteCom(0x28); /* 4 位模式下设置显示模式 */ + LcdWriteCom(0x0c); /* 开显示,不显示光标 */ + LcdWriteCom(0x06); /* 写入数据后地址自动加 1 */ + LcdWriteCom(0x01); /* 清屏 */ + LcdWriteCom(0x80); /* 设置 DDRAM 起始地址为 0x00(第一行) */ +} + +#endif diff --git a/Keil Code/Last/lcd.h b/Keil Code/Last/lcd.h new file mode 100644 index 0000000..6188eaa --- /dev/null +++ b/Keil Code/Last/lcd.h @@ -0,0 +1,39 @@ +/****************************************************************************** + * 文件名:lcd.h + * 功能:LCD1602 液晶驱动头文件 + * 硬件接口:4 位数据总线模式 + * RS = P2^6,RW = P2^5,EN = P2^7,数据口 = P0 + * 编译器:Keil C51 + ******************************************************************************/ + +#ifndef __LCD_H_ +#define __LCD_H_ + +/* 使用 4 位数据线模式(注释此行则使用 8 位模式) */ +#define LCD1602_4PINS + +/* 标准头文件 */ +#include + +/* 自定义数据类型 */ +#ifndef uchar +#define uchar unsigned char +#endif + +#ifndef uint +#define uint unsigned int +#endif + +/* LCD 引脚定义 */ +#define LCD1602_DATAPINS P0 /* LCD 数据口(P0 口) */ +sbit LCD1602_E = P2^7; /* 使能信号 */ +sbit LCD1602_RW = P2^5; /* 读写选择:0=写,1=读 */ +sbit LCD1602_RS = P2^6; /* 寄存器选择:0=指令,1=数据 */ + +/* 函数声明 */ +void Lcd1602_Delay1ms(uint c); /* 毫秒延时(12MHz 晶振) */ +void LcdWriteCom(uchar com); /* 写入 8 位指令 */ +void LcdWriteData(uchar dat); /* 写入 8 位数据 */ +void LcdInit(void); /* 初始化 LCD1602 */ + +#endif diff --git a/Keil Code/Last/main.c b/Keil Code/Last/main.c new file mode 100644 index 0000000..70968ca --- /dev/null +++ b/Keil Code/Last/main.c @@ -0,0 +1,603 @@ +/****************************************************************************** + * 文件名:main.c + * 功能:DS1302 实时时钟 + DS18B20 温度采集 + LCD1602 显示 + * 支持按键切换时钟/秒表模式,可设置时间。 + * 硬件配置: + * LCD1602(4 位模式):RS=P2^6, RW=P2^5, EN=P2^7, 数据口=P0 + * DS1302:DSIO=P3^4, RST=P3^5, SCLK=P3^6 + * DS18B20:DQ=P3^7 + * 按键:K1=P3^1, K2=P3^0, K3=P3^2, K4=P3^3 + * 蜂鸣器/报警:已禁用(函数为空) + * 编译器:Keil C51 + ******************************************************************************/ + +#include +#include +#include"lcd.h" +#include"ds1302.h" +#include"temp.h" + + +/*========================== 引脚定义 ==========================*/ + +sbit K1 = P3^1; /* 模式切换/确认键 */ +sbit K2 = P3^0; /* 切换/返回键 */ +sbit K3 = P3^2; /* 加/开始暂停键 */ +sbit K4 = P3^3; /* 减/清零键 */ + + +/*========================== 全局变量 ==========================*/ + +unsigned char mode = 0; /* 工作模式:0=时钟,2=秒表 */ +unsigned char last_mode = 0xFF; /* 前一次模式,用于检测模式切换 */ +int temperature = 0; /* 温度值(放大 10 倍,如 253 表示 25.3°C) */ +unsigned char temp_state = 0; /* 温度采集状态机:0=空闲,1=转换中 */ +unsigned int temp_wait = 0; /* 温度转换等待计数器 */ + +unsigned char alarm_hour = 6; /* 闹钟小时 */ +unsigned char alarm_min = 0; /* 闹钟分钟 */ +unsigned char alarm_on = 0; /* 闹钟开关:0=关,1=开 */ + +unsigned int sw_sec = 0; /* 秒表累计秒数 */ +unsigned char sw_csec = 0; /* 秒表百分秒(0~99) */ +bit sw_running = 0; /* 秒表运行状态:0=停止,1=运行 */ + + +/*========================== 宏定义 ==========================*/ + +/* BCD 码转十进制:0x12 → 12 */ +#define BCD2DEC(bcd) (((bcd)>>4)*10 + ((bcd)&0x0f)) + +/* 十进制转 BCD 码:12 → 0x12 */ +#define DEC2BCD(dec) (((dec)/10<<4) | ((dec)%10)) + + +/*========================== 函数声明 ==========================*/ + +void Delay10ms(void); + +void Timer1Init(void); +void TempPros(void); +void AlarmJudge(void); +void AlarmBuzPro(void); +void SetTime(void); +void LcdFramework(void); +void LcdUpdate(void); +void KeyScan(void); + + +/*======================= 按键检测函数 ========================*/ + +/* + * K1_Pressed:检测 K1 键是否被按下 + * 功能:软件消抖,等待按键释放后返回 1 + * 返回:1=按下了 K1,0=未按下 + */ +bit K1_Pressed(void) +{ + if(K1) return 0; /* 首次检测,高电平表示未按下 */ + Delay10ms(); /* 软件消抖 */ + if(K1) return 0; /* 再次检测,确认按下 */ + while(!K1); /* 等待按键释放 */ + return 1; /* 有效按下 */ +} + +/* + * K2_Pressed:检测 K2 键是否被按下 + */ +bit K2_Pressed(void) +{ + if(K2) return 0; + Delay10ms(); + if(K2) return 0; + while(!K2); + return 1; +} + +/* + * K3_Pressed:检测 K3 键是否被按下 + */ +bit K3_Pressed(void) +{ + if(K3) return 0; + Delay10ms(); + if(K3) return 0; + while(!K3); + return 1; +} + +/* + * K4_Pressed:检测 K4 键是否被按下 + */ +bit K4_Pressed(void) +{ + if(K4) return 0; + Delay10ms(); + if(K4) return 0; + while(!K4); + return 1; +} + + +/*===================== LCD 辅助函数 ======================*/ + +/* + * LcdWriteStr:在 LCD 当前位置显示字符串 + * 输入:str = 指向 code 区字符串的指针 + */ +void LcdWriteStr(unsigned char code *str) +{ + while(*str) LcdWriteData(*str++); +} + +/* + * LcdShowNumAt:在 LCD 指定位置显示两位十进制数 + * 输入:addr = DDRAM 地址,num = 要显示的数值(0~99) + */ +void LcdShowNumAt(unsigned char addr, unsigned char num) +{ + LcdWriteCom(addr); + LcdWriteData('0' + num / 10); /* 十位 ASCII 码 */ + LcdWriteData('0' + num % 10); /* 个位 ASCII 码 */ +} + +/* + * AdjustValue:通用参数调节函数 + * 功能:在指定位置显示数值,K3/K4 加减,K1 确认退出 + * 光标停留在数值的最后一位上。 + * 输入:val = 待调节变量指针 + * maxVal = 最大值 + * dispAddr = 显示地址 + * cursorAddr = 光标地址(函数内会自动加 1 移到末位) + */ +void AdjustValue(unsigned char *val, unsigned char maxVal, + unsigned char dispAddr, unsigned char cursorAddr) +{ + LcdWriteCom(cursorAddr + 1); /* 光标放在数值最后一位 */ + LcdWriteCom(0x0f); /* 显示闪烁光标 */ + + while(1) + { + if(K3_Pressed()) /* K3:加 */ + { + if(*val < maxVal) (*val)++; + else *val = 0; + LcdShowNumAt(dispAddr, *val); + LcdWriteCom(cursorAddr + 1); /* 光标回到末位 */ + LcdWriteCom(0x0f); + } + if(K4_Pressed()) /* K4:减 */ + { + if(*val > 0) (*val)--; + else *val = maxVal; + LcdShowNumAt(dispAddr, *val); + LcdWriteCom(cursorAddr + 1); + LcdWriteCom(0x0f); + } + if(K1_Pressed()) /* K1:确认退出 */ + { + LcdWriteCom(0x0c); /* 关闭光标 */ + return; + } + } +} + + +/*========================== 主函数 ==========================*/ + +void main() +{ + Timer1Init(); /* 初始化定时器 1(用于秒表计时) */ + LcdInit(); /* 初始化 LCD1602 液晶 */ + + Ds1302Init(); /* 初始化 DS1302 时钟芯片 */ + + /* 从 DS1302 RAM 读取闹钟参数(上电保持) */ + alarm_hour = Ds1302Read(0xC1); + if(alarm_hour > 23) alarm_hour = 6; /* 数据异常时使用默认值 */ + alarm_min = Ds1302Read(0xC3); + if(alarm_min > 59) alarm_min = 0; + alarm_on = Ds1302Read(0xC5); + if(alarm_on > 1) alarm_on = 0; + + /* 主循环 */ + while(1) + { + Ds1302ReadTime(); /* 读取 DS1302 当前时间到 TIME 数组 */ + + TempPros(); /* 温度采集状态机(非阻塞式) */ + + /* 模式切换时刷新 LCD 静态框架 */ + if(mode != last_mode) + { + LcdFramework(); + last_mode = mode; + } + + AlarmJudge(); /* 闹钟判断(当前为空函数) */ + AlarmBuzPro(); /* 蜂鸣器驱动(当前为空函数) */ + KeyScan(); /* 按键扫描 */ + LcdUpdate(); /* 刷新 LCD 动态显示 */ + } +} + + +/* + * ShowLcdWeek:在 LCD 当前位置显示星期缩写 + * 输入:week = 1~7(对应 Sunday~Saturday) + */ +void ShowLcdWeek(unsigned char week) +{ + switch(week) + { + case 1: LcdWriteData('S'); LcdWriteData('u'); LcdWriteData('n'); break; /* Sunday */ + case 2: LcdWriteData('M'); LcdWriteData('o'); LcdWriteData('n'); break; /* Monday */ + case 3: LcdWriteData('T'); LcdWriteData('u'); LcdWriteData('e'); break; /* Tuesday */ + case 4: LcdWriteData('W'); LcdWriteData('e'); LcdWriteData('d'); break; /* Wednesday */ + case 5: LcdWriteData('T'); LcdWriteData('h'); LcdWriteData('u'); break; /* Thursday */ + case 6: LcdWriteData('F'); LcdWriteData('r'); LcdWriteData('i'); break; /* Friday */ + case 7: LcdWriteData('S'); LcdWriteData('a'); LcdWriteData('t'); break; /* Saturday */ + } +} + + +/*===================== LCD 框架刷新 ======================*/ + +/* + * LcdFramework:刷新 LCD 静态框架 + * 功能:根据当前模式,绘制 LCD 的固定显示内容 + * 模式 0(时钟):显示日期和时间占位符 + * 模式 2(秒表):显示秒表标题和数字占位符 + */ +void LcdFramework() +{ + LcdWriteCom(0x0c); /* 关闭光标 */ + + if(mode == 0) /* 时钟模式 */ + { + LcdWriteCom(0x80); + LcdWriteStr("20 - - "); /* 第一行:年-月-日 */ + LcdWriteCom(0xC0); + LcdWriteStr(" : : "); /* 第二行:时:分:秒 + 温度 */ + } + else if(mode == 2) /* 秒表模式 */ + { + LcdWriteCom(0x80); + LcdWriteStr(" Stop Watch "); /* 第一行:标题居中 */ + LcdWriteCom(0xC0); + LcdWriteStr(" : : . "); /* 第二行:HH:MM:SS.cs 居中 */ + } +} + + +/*======================= LCD 动态更新 ========================*/ + +/* + * LcdUpdate:刷新 LCD 动态显示数据 + * 功能:根据当前模式,更新温度/时间/秒表等动态数值 + * 时钟模式显示年月日时分秒星期和温度 + * 秒表模式显示时、分、秒、百分秒 + */ +void LcdUpdate() +{ + int temp_disp; + + if(mode == 0) /* 时钟模式 */ + { + /* 显示日期 */ + LcdShowNumAt(0x82, BCD2DEC(TIME[6])); /* 年 */ + LcdShowNumAt(0x85, BCD2DEC(TIME[4])); /* 月 */ + LcdShowNumAt(0x88, BCD2DEC(TIME[3])); /* 日 */ + + /* 显示星期 */ + LcdWriteCom(0x8C); + ShowLcdWeek(TIME[5] & 0x07); + + /* 显示时间 */ + LcdShowNumAt(0xC0, BCD2DEC(TIME[2])); /* 时 */ + LcdShowNumAt(0xC3, BCD2DEC(TIME[1])); /* 分 */ + LcdShowNumAt(0xC6, BCD2DEC(TIME[0])); /* 秒 */ + + /* 显示温度:格式 "-12.3C" 或 " 25.0C" */ + LcdWriteCom(0xC9); + temp_disp = temperature; + if(temp_disp < 0) + { + LcdWriteData('-'); + temp_disp = -temp_disp; + } + else + { + LcdWriteData(' '); /* 正数前留空格 */ + } + LcdWriteData('0' + temp_disp / 100); /* 十位 */ + LcdWriteData('0' + (temp_disp / 10) % 10); /* 个位 */ + LcdWriteData('.'); /* 小数点 */ + LcdWriteData('0' + temp_disp % 10); /* 十分位 */ + LcdWriteData('C'); /* 单位 */ + } + else if(mode == 2) /* 秒表模式 */ + { + /* 居中显示,位置 0xC2/0xC5/0xC8/0xCB */ + LcdShowNumAt(0xC2, sw_sec / 3600); /* 小时 */ + LcdShowNumAt(0xC5, (sw_sec % 3600) / 60); /* 分钟 */ + LcdShowNumAt(0xC8, sw_sec % 60); /* 秒钟 */ + LcdShowNumAt(0xCB, sw_csec); /* 百分秒 */ + } +} + + +/*========================== 按键扫描 ==========================*/ + +/* + * KeyScan:按键扫描处理 + * 功能:根据当前模式处理按键事件 + * 时钟模式:K1=设置时间,K2=切换到秒表 + * 秒表模式:K3=启动/暂停,K4=清零(暂停时),K2=返回时钟 + */ +void KeyScan() +{ + if(mode == 0) /* 时钟模式 */ + { + if(K1_Pressed()) /* K1:进入时间设置 */ + { + SetTime(); + last_mode = 0xFF; /* 强制刷新 LCD */ + } + if(K2_Pressed()) /* K2:切换到秒表 */ + { + mode = 2; + sw_running = 0; + sw_sec = 0; + sw_csec = 0; + LcdFramework(); + last_mode = mode; + LcdUpdate(); + } + } + else if(mode == 2) /* 秒表模式 */ + { + if(K3_Pressed()) /* K3:启动/暂停秒表 */ + { + sw_running = !sw_running; + TR1 = sw_running; /* TR1 控制定时器 1 的启停 */ + } + if(K4_Pressed()) /* K4:暂停时清零 */ + { + if(!sw_running) + { + sw_sec = 0; + sw_csec = 0; + } + } + if(K2_Pressed()) /* K2:返回时钟模式 */ + { + mode = 0; + TR1 = 0; + sw_running = 0; + sw_sec = 0; + sw_csec = 0; + LcdFramework(); + last_mode = mode; + LcdUpdate(); + } + } +} + + +/*========================== 时间设置 ==========================*/ + +/* + * SetTime:时间和日期设置 + * 功能:对年、月、日、时、分、秒逐一进行调节, + * 星期通过 K3/K4 手动调节,完成后全部写入 DS1302。 + * 操作:K1 切换调节字段,K3/K4 加减,调节完秒后自动写入。 + */ +void SetTime() +{ + unsigned char y, mo, d, w, h, mi, s; + + /* 将 TIME 数组中的 BCD 码转换为十进制 */ + y = BCD2DEC(TIME[6]); + mo = BCD2DEC(TIME[4]); + d = BCD2DEC(TIME[3]); + w = TIME[5] & 0x07; + h = BCD2DEC(TIME[2]); + mi = BCD2DEC(TIME[1]); + s = BCD2DEC(TIME[0]); + + /* 绘制设置界面 */ + LcdWriteCom(0x80); + LcdWriteStr("20 - - "); /* 第一行:20YY-MM-DD */ + LcdWriteCom(0xC0); + LcdWriteStr(" : : "); /* 第二行:HH:MM:SS */ + + /* 显示当前时间 */ + LcdShowNumAt(0x82, y); /* 年 */ + LcdShowNumAt(0x85, mo); /* 月 */ + LcdShowNumAt(0x88, d); /* 日 */ + LcdWriteCom(0x8C); ShowLcdWeek(w); /* 星期 */ + LcdShowNumAt(0xC0, h); /* 时 */ + LcdShowNumAt(0xC3, mi); /* 分 */ + LcdShowNumAt(0xC6, s); /* 秒 */ + + /* 逐一调节数值(K3/K4 加减,K1 跳到下一项) */ + AdjustValue(&y, 99, 0x82, 0x82); /* 年 */ + AdjustValue(&mo, 12, 0x85, 0x85); /* 月 */ + AdjustValue(&d, 31, 0x88, 0x88); /* 日 */ + AdjustValue(&h, 23, 0xC0, 0xC0); /* 时 */ + AdjustValue(&mi, 59, 0xC3, 0xC3); /* 分 */ + AdjustValue(&s, 59, 0xC6, 0xC6); /* 秒 */ + + /* 手动调节星期 */ + LcdWriteCom(0x8E); LcdWriteCom(0x0f); /* 光标在星期最后一位 */ + while(1) + { + if(K3_Pressed()) + { + if(w < 7) w++; else w = 1; + LcdWriteCom(0x8C); ShowLcdWeek(w); + LcdWriteCom(0x8E); LcdWriteCom(0x0f); + } + if(K4_Pressed()) + { + if(w > 1) w--; else w = 7; + LcdWriteCom(0x8C); ShowLcdWeek(w); + LcdWriteCom(0x8E); LcdWriteCom(0x0f); + } + if(K1_Pressed()) { break; } + } + + /* 将调整后的值转回 BCD 码写入 TIME 数组 */ + TIME[6] = DEC2BCD(y); + TIME[4] = DEC2BCD(mo); + TIME[3] = DEC2BCD(d); + TIME[5] = w; + TIME[2] = DEC2BCD(h); + TIME[1] = DEC2BCD(mi); + TIME[0] = DEC2BCD(s); + + /* 写入 DS1302 */ + Ds1302Write(0x8E, 0x00); /* 关闭写保护 */ + Ds1302Write(0x80, TIME[0]); /* 秒 */ + Ds1302Write(0x82, TIME[1]); /* 分 */ + Ds1302Write(0x84, TIME[2]); /* 时 */ + Ds1302Write(0x86, TIME[3]); /* 日 */ + Ds1302Write(0x88, TIME[4]); /* 月 */ + Ds1302Write(0x8a, TIME[5]); /* 周 */ + Ds1302Write(0x8c, TIME[6]); /* 年 */ + Ds1302Write(0x8E, 0x80); /* 开启写保护 */ + + /* 恢复显示 */ + LcdWriteCom(0x0c); /* 关闭光标 */ + last_mode = 0xFF; /* 强制刷新 LCD */ +} + + +/*========================= 定时器初始化 =========================*/ + +/* + * Timer1Init:初始化定时器 1 + * 功能:配置 T1 为模式 1(16 位定时器),启用中断 + * 用于秒表计时,每 10ms 中断一次 + */ +void Timer1Init() +{ + TMOD &= 0x0F; /* 清空 T1 相关位 */ + TMOD |= 0x10; /* 设置 T1 为模式 1(16 位定时器) */ + ET1 = 1; /* 使能 T1 中断 */ + EA = 1; /* 开启总中断 */ +} + + +/*====================== 定时器 1 中断服务 ======================*/ + +/* + * Timer1:定时器 1 中断服务函数 + * 功能:每 10ms 中断一次(12MHz 晶振),秒表运行时累加百分秒 + * 百分秒到 100 时进位 1 秒 + */ +void Timer1() interrupt 3 +{ + TH1 = 0xD8; /* 重装初值:定时 10ms */ + TL1 = 0xF0; + + if(sw_running) /* 秒表正在运行时才累加 */ + { + sw_csec++; + if(sw_csec >= 100) /* 百分秒满 100 进 1 秒 */ + { + sw_csec = 0; + sw_sec++; + } + } +} + + +/*======================= 温度采集 ========================*/ + +/* + * TempPros:温度采集状态机(非阻塞式) + * 功能:分两步完成温度采集,避免长时间阻塞主循环 + * state=0:发送转换命令(复位→0xCC→0x44),切换到等待状态 + * state=1:等待约 800ms(40 次主循环),然后读取温度 + * (复位→0xCC→0xBE→读 2 字节→计算→回 state=0) + * 说明:DS18B20 在 12 位分辨率下需要最长 750ms 完成转换, + * 等待期间主循环正常运行(按键响应、显示刷新不受影响)。 + */ +void TempPros() +{ + unsigned char tmL, tmH; + int raw; + unsigned char sign = 0; + + if(temp_state == 0) + { + /* 第一步:启动温度转换 */ + Ds18b20Init(); + Ds18b20WriteByte(0xCC); /* 跳过 ROM(单设备模式) */ + Ds18b20WriteByte(0x44); /* 启动温度转换命令 */ + temp_state = 1; /* 切换到等待状态 */ + temp_wait = 0; + } + else if(temp_state == 1) + { + /* 第二步:等待转换完成 */ + temp_wait++; + if(temp_wait >= 40) /* 约 800ms(每循环 ~20ms) */ + { + Ds18b20Init(); + Ds18b20WriteByte(0xCC); /* 跳过 ROM */ + Ds18b20WriteByte(0xBE); /* 读取暂存器命令 */ + tmL = Ds18b20ReadByte();/* 读取温度低字节 */ + tmH = Ds18b20ReadByte();/* 读取温度高字节 */ + raw = (tmH << 8) | tmL; /* 合并为 16 位原始值 */ + + /* 负数处理:符号位为 1 时取反加 1 */ + if(raw & 0x8000) + { + raw = ~raw + 1; + sign = 1; + } + + /* 转换为放大 10 倍的温度值:原始值 × 10 / 16 */ + temperature = raw * 10 / 16; + if(sign) + temperature = -temperature; + + temp_state = 0; /* 回到空闲状态,准备下一次采集 */ + } + } +} + + +/*======================== 闹钟/蜂鸣器 ========================*/ + +/* + * AlarmJudge:闹钟判断函数(蜂鸣器已损坏,保留为空) + */ +void AlarmJudge(void) +{ +} + +/* + * AlarmBuzPro:蜂鸣器驱动函数(蜂鸣器已损坏,保留为空) + */ +void AlarmBuzPro(void) +{ +} + + +/*========================= 延时函数 ==========================*/ + +/* + * Delay10ms:软件延时约 10ms(12MHz 晶振,12T 模式) + * 用于按键消抖 + */ +void Delay10ms(void) +{ + unsigned char a, b, c; + for(c = 1; c > 0; c--) + for(b = 38; b > 0; b--) + for(a = 130; a > 0; a--); +} diff --git a/Keil Code/Last/module_structure.md b/Keil Code/Last/module_structure.md new file mode 100644 index 0000000..1cd64cd --- /dev/null +++ b/Keil Code/Last/module_structure.md @@ -0,0 +1,181 @@ +# 绯荤粺妯″潡缁撴瀯鍥撅紙鍑芥暟璋冪敤鍏崇郴锛� + +## main.c 妯″潡 + +``` +main() 鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� + 鈹� [鍒濆鍖朷 + 鈹溾攢鈹� Timer1Init() // 瀹氭椂鍣�1鍒濆鍖� + 鈹溾攢鈹� LcdInit() 鈹�鈹�鈫� lcd.c // LCD1602鍒濆鍖� + 鈹溾攢鈹� Ds1302Init() 鈹�鈹�鈫� ds1302.c // DS1302鍒濆鍖� + 鈹� 鈹斺攢鈹� Ds1302Read(), Ds1302Write() + 鈹溾攢鈹� DS18B20_SetResolution() 鈹�鈹�鈫� ds18b20.c + 鈹溾攢鈹� DS18B20_StartConvert() 鈹�鈹�鈫� ds18b20.c + 鈹斺攢鈹� Ds1302Read() 鈹�鈹�鈫� ds1302.c // 璇诲彇闂归挓鍙傛暟 + 鈹� + 鈹� [涓诲惊鐜� while(1)] + 鈹溾攢鈹� Ds1302ReadTime() 鈹�鈹�鈫� ds1302.c // 姣忔寰幆璇诲彇鏃堕挓 + 鈹溾攢鈹� TempPros() // 娓╁害澶勭悊锛堟瘡5娆″惊鐜級 + 鈹� 鈹溾攢鈹� DS18B20_GetTemp() 鈹�鈹�鈫� ds18b20.c + 鈹� 鈹斺攢鈹� DS18B20_StartConvert() + 鈹溾攢鈹� LcdFramework() // 妯″紡鍒囨崲鏃跺埛鏂版鏋� + 鈹� 鈹斺攢鈹� LcdWriteStr() 鈫� LcdWriteData() 鈹�鈹�鈫� lcd.c + 鈹溾攢鈹� AlarmJudge() // 闂归挓鏃堕棿鍖归厤鍒ゆ柇 + 鈹溾攢鈹� AlarmBuzPro() // 铚傞福鍣ㄩ┍鍔� + 鈹� 鈹斺攢鈹� DelayMs() + 鈹溾攢鈹� KeyScan() // 鎸夐敭鎵弿 + 鈹� 鈹斺攢鈹� KeyPressed() (脳5) // 娑堟姈妫�娴� + 鈹� 鈹溾攢鈹� SetAlarm() // K1: 闂归挓璁剧疆 + 鈹� 鈹� 鈹溾攢鈹� LcdWriteStr() 鈫� lcd.c + 鈹� 鈹� 鈹溾攢鈹� LcdShowNumAt() 鈫� lcd.c + 鈹� 鈹� 鈹溾攢鈹� AdjustValue() // 灏忔椂/鍒嗛挓璋冭妭 + 鈹� 鈹� 鈹� 鈹溾攢鈹� KeyPressed() + 鈹� 鈹� 鈹� 鈹溾攢鈹� KeySound() + 鈹� 鈹� 鈹� 鈹斺攢鈹� LcdShowNumAt() + 鈹� 鈹� 鈹溾攢鈹� KeyPressed() + 鈹� 鈹� 鈹� 鈹斺攢鈹� KeySound() + 鈹� 鈹� 鈹斺攢鈹� Ds1302Write() 鈫� ds1302.c + 鈹� 鈹溾攢鈹� KeySound() / ReturnSound() + 鈹� 鈹� 鈹斺攢鈹� DelayMs() + 鈹� 鈹斺攢鈹� 淇敼绉掕〃鍏ㄥ眬鍙橀噺 + 鈹� + 鈹斺攢鈹� LcdUpdate() // LCD鏁版嵁鍒锋柊 + 鈹溾攢鈹� LcdShowNumAt() 鈫� lcd.c + 鈹溾攢鈹� ShowLcdWeek() + 鈹� 鈹斺攢鈹� LcdWriteData() 鈫� lcd.c + 鈹溾攢鈹� LcdWriteCom() 鈫� lcd.c + 鈹斺攢鈹� LcdWriteData() 鈫� lcd.c + +Timer1() interrupt 3 // 瀹氭椂鍣ㄤ腑鏂紙10ms锛� + 鈹斺攢鈹� sw_running == 1 鈫� sw_csec++ 鈫� sw_sec++ // 绉掕〃璁℃椂 +``` + +## ds1302.c 妯″潡 + +``` +Ds1302Init() + 鈹溾攢鈹� Ds1302Read(0x81) // 璇荤瀵勫瓨鍣紝妫�娴婥H浣� + 鈹斺攢鈹� Ds1302Write() 脳 9 // 鍐欏叆榛樿鏃堕棿 + 鍏抽棴鍐欎繚鎶� + +Ds1302ReadTime() + 鈹斺攢鈹� Ds1302Read() 脳 7 // 鎵归噺璇诲彇7涓椂闂村瘎瀛樺櫒 + +Ds1302Write(addr, dat) // SPI鍗忚鍐� + 鈹溾攢鈹� RST=1, SCLK=0 + 鈹溾攢鈹� 寰幆8娆�: 閫愪綅鍙戦�佸湴鍧�(LSB鈫扢SB) + 鈹斺攢鈹� 寰幆8娆�: 閫愪綅鍙戦�佹暟鎹� + +Ds1302Read(addr) // SPI鍗忚璇� + 鈹溾攢鈹� RST=1, SCLK=0 + 鈹溾攢鈹� 寰幆8娆�: 閫愪綅鍙戦�佸湴鍧� + 鈹斺攢鈹� 寰幆8娆�: 閫愪綅璇诲彇鏁版嵁(MSB鈫扡SB) +``` + +## ds18b20.c 妯″潡 + +``` +DS18B20_Reset() + 鈹溾攢鈹� DQ=0 鈫� 寤舵椂480渭s + 鈹斺攢鈹� DQ=1 鈫� 绛夊緟搴旂瓟 + +DS18B20_WriteByte(dat) // 鍗曟�荤嚎鍐� + 鈹斺攢鈹� 寰幆8娆�: DQ=0 鈫� 鍐檅it 鈫� 寤舵椂60渭s 鈫� DQ=1 + +DS18B20_ReadByte() // 鍗曟�荤嚎璇� + 鈹斺攢鈹� 寰幆8娆�: DQ=0 鈫� DQ=1 鈫� 璇籦it 鈫� 寤舵椂 + +DS18B20_StartConvert() // 鍚姩娓╁害杞崲 + 鈹溾攢鈹� DS18B20_Reset() + 鈹溾攢鈹� DS18B20_WriteByte(0xCC) // 璺宠繃ROM + 鈹斺攢鈹� DS18B20_WriteByte(0x44) // 鍚姩杞崲 + +DS18B20_SetResolution(res) // 璁剧疆鍒嗚鲸鐜� + 鈹溾攢鈹� DS18B20_Reset() + 鈹溾攢鈹� DS18B20_WriteByte(0xCC) + 鈹溾攢鈹� DS18B20_WriteByte(0x4E) // 鍐欐殏瀛樺櫒 + 鈹溾攢鈹� DS18B20_WriteByte(0x00) // TH + 鈹溾攢鈹� DS18B20_WriteByte(0x00) // TL + 鈹溾攢鈹� DS18B20_WriteByte(res) // 閰嶇疆瀵勫瓨鍣� + 鈹溾攢鈹� DS18B20_Reset() + 鈹溾攢鈹� DS18B20_WriteByte(0xCC) + 鈹斺攢鈹� DS18B20_WriteByte(0x48) // 澶嶅埗鍒癊EPROM + +DS18B20_GetTemp(int *temp) // 璇诲彇娓╁害鍊� + 鈹溾攢鈹� DS18B20_Reset() + 鈹溾攢鈹� DS18B20_WriteByte(0xCC) + 鈹溾攢鈹� DS18B20_WriteByte(0xBE) // 璇绘殏瀛樺櫒 + 鈹溾攢鈹� DS18B20_ReadByte() // 浣庡瓧鑺� + 鈹斺攢鈹� DS18B20_ReadByte() // 楂樺瓧鑺� +``` + +## lcd.c 妯″潡 + +``` +LcdInit() + 鈹斺攢鈹� LcdWriteCom() 脳 5 // 鍒濆鍖栨寚浠ゅ簭鍒� + +LcdWriteCom(com) // 鍐欐寚浠わ紙4浣嶆ā寮忥級 + 鈹溾攢鈹� RS=0, RW=0 + 鈹溾攢鈹� P0=com 鈫� 鍐欓珮4浣� + 鈹溾攢鈹� E=1 鈫� 寤舵椂 鈫� E=0 + 鈹斺攢鈹� P0=com<<4 鈫� 鍐欎綆4浣� + 鈹斺攢鈹� E=1 鈫� 寤舵椂 鈫� E=0 + 鈹斺攢鈹� 鍐呴儴璋冪敤 Lcd1602_Delay1ms() + +LcdWriteData(dat) // 鍐欐暟鎹紙4浣嶆ā寮忥級 + 鈹溾攢鈹� RS=1, RW=0 + 鈹溾攢鈹� P0=dat 鈫� 鍐欓珮4浣� + 鈹溾攢鈹� E=1 鈫� 寤舵椂 鈫� E=0 + 鈹斺攢鈹� P0=dat<<4 鈫� 鍐欎綆4浣� + 鈹斺攢鈹� E=1 鈫� 寤舵椂 鈫� E=0 + 鈹斺攢鈹� 鍐呴儴璋冪敤 Lcd1602_Delay1ms() +``` + +## 鍑芥暟璋冪敤鎬诲浘 + +``` +鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� +鈹� main() 涓诲惊鐜� 鈹� +鈹� 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹� +鈹� 鈹� DS1302 鈹� 鈹� DS18B20 鈹� 鈹� LCD1602 鈹� 鈹� 鎸夐敭鎵弿 鈹� 鈹� 闂归挓澶勭悊 鈹� 鈹� +鈹� 鈹� 鏃堕挓妯″潡 鈹� 鈹� 娓╁害妯″潡 鈹� 鈹� 鏄剧ず妯″潡 鈹� 鈹� KeyScan 鈹� 鈹� Judge 鈹� 鈹� +鈹� 鈹斺攢鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹攢鈹�鈹�鈹�鈹�鈹� 鈹� +鈹� 鈹� 鈹� 鈹� 鈹� 鈹� 鈹� +鈹� 鈹屸攢鈹�鈹�鈹�鈻尖攢鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈻尖攢鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈻尖攢鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈻尖攢鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈻尖攢鈹�鈹�鈹�鈹� 鈹� +鈹� 鈹俁eadTime 鈹� 鈹俆empPros 鈹� 鈹侺cdUpdate鈹� 鈹侹eyPressed鈹� 鈹侫larmBuz 鈹� 鈹� +鈹� 鈹侷nit 鈹� 鈹侴etTemp 鈹� 鈹侳ramework鈹� 鈹係etAlarm 鈹� 鈹侾ro 鈹� 鈹� +鈹� 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹� +鈹� 鈹� +鈹� 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹� +鈹� 鈹� Timer1 涓柇 (10ms) 鈹� 鈹� +鈹� 鈹� 鈫� 绉掕〃 sw_csec / sw_sec 绱姞 鈹� 鈹� +鈹� 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹� +鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� + 鈹� + 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹尖攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� + 鈻� 鈻� 鈻� + 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� + 鈹� ds1302.c 鈹� 鈹� ds18b20.c 鈹� 鈹� lcd.c 鈹� + 鈹� 搴曞眰椹卞姩 鈹� 鈹� 搴曞眰椹卞姩 鈹� 鈹� 搴曞眰椹卞姩 鈹� + 鈹� SPI鍗忚 鈹� 鈹� 鍗曟�荤嚎鍗忚 鈹� 鈹� 骞惰鎺ュ彛 鈹� + 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� + 鈹� 鈹� 鈹� + 鈻� 鈻� 鈻� + 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� + 鈹� STC89C52 纭欢灞� 鈹� + 鈹� P1^0-2 DS1302 鈹� P3^7 DS18B20 鈹� P0/P2 LCD 鈹� + 鈹� P3^0-3 鎸夐敭 鈹� P2^0 铚傞福鍣� 鈹� Timer1 鈹� + 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹� +``` + +## 鏂囦欢闂翠緷璧� + +``` +main.c 鈹�鈹�鈫� lcd.h (LcdInit, LcdWriteCom, LcdWriteData) +main.c 鈹�鈹�鈫� ds1302.h (Ds1302Init, Ds1302ReadTime, Ds1302Read, Ds1302Write) +main.c 鈹�鈹�鈫� ds18b20.h (DS18B20_GetTemp, DS18B20_StartConvert, DS18B20_SetResolution) + +ds1302.c 鈹�鈹�鈫� reg51.h, intrins.h +ds18b20.c 鈹�鈹�鈫� reg51.h, intrins.h +lcd.c 鈹�鈹�鈫� reg51.h +``` diff --git a/Keil Code/Last/pro b/Keil Code/Last/pro new file mode 100644 index 0000000000000000000000000000000000000000..c709edb4bf9fbe58e8c668421c8eb6bdd7d39e82 GIT binary patch literal 33188 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 literal 0 HcmV?d00001 diff --git a/Keil Code/Last/pro.hex b/Keil Code/Last/pro.hex new file mode 100644 index 0000000..06568f6 --- /dev/null +++ b/Keil Code/Last/pro.hex @@ -0,0 +1,210 @@ +:0300000002049E59 +:0C049E00787FE4F6D8FD75812D0204E59E +:1007FC00323020202D20202D2020202020202020B1 +:10080C000020203A20203A202020202020202020C8 +:10081C00200020202053746F70205761746368206F +:10082C00202000202020203A20203A20202E20209A +:04083C002020200058 +:100927000123000129FF02260000012800022B00F5 +:1009370000012406012500012A0002210000012DE3 +:0309470000C100EC +:100A420030B102C322120A9830B102C32230B1FD82 +:020A5200D322AD +:100A540030B002C322120A9830B002C32230B0FD73 +:020A6400D3229B +:100A660030B202C322120A9830B202C32230B2FD5B +:020A7600D32289 +:100A780030B302C322120A9830B302C32230B3FD46 +:020A8800D32277 +:1009D8008E0F8F10851082850F83E49360170510A2 +:1009E800E510AE0F7002050F14F5828E83E493FFB5 +:0609F800120AB180DF22AB +:0C09AD00AB0FAA10A9111203B4FDAF1388 +:1009B9008D15120AA5E51575F00A842430FF120A6F +:0F09C900B1E51575F00A84E5F02430FF020AB19C +:10063B008B0F8A1089118D12E51404FF120AA57F06 +:10064B000F120AA5120A665028AB0FAA10A9111295 +:10065B0003B4C39512500774011203CD8004E41246 +:10066B0003EF1209ADE51404FF120AA57F0F120A5E +:10067B00A5120A785029AB0FAA10A9111203B4D3F3 +:10068B009400400774FF1203CD8005E5121203EFAF +:10069B001209ADE51404FF120AA57F0F120AA51269 +:0A06AB000A4250A07F0C120AA5229B +:1006B500120ABD120A241209547FC11207698F2438 +:1006C500E524D3941740037524067FC31207698F69 +:1006D50025E525D3943B4003E4F5257FC51207693D +:1006E5008F2AE52AD394014003E4F52A1200031268 +:1006F50005B6E52365296006120840852329120001 +:0C0705001912001A12071112026180E0A4 +:10052A00EF14B4070040030205B590054275F003C5 +:10053A00A4C58325F0C58373020557020560020529 +:10054A006E02057C02058A0205980205A67F5312EF +:10055A000AB17F7580077F4D120AB17F6F120AB107 +:10056A007F6E80447F54120AB17F75120AB17F658B +:10057A0080367F57120AB17F65120AB17F648028DC +:10058A007F54120AB17F68120AB17F75801A7F46BA +:10059A00120AB17F72120AB17F69800C7F53120A64 +:0C05AA00B17F61120AB17F74120AB12205 +:100840007F0C120AA5E52370177F80120AA57E0788 +:100850007FFC1209D87FC0120AA57E087F0D801A7E +:10086000E523B402187F80120AA57E087F1E1209B4 +:0E087000D87FC0120AA57E087F2F1209D82259 +:10026100E5236003020365E51CC4540F75F00AA47D +:10027100FFE51C540F2FFD7F821209B9E51AC45402 +:100281000F75F00AA4FFE51A540F2FFD7F8512099F +:10029100B9E519C4540F75F00AA4FFE519540F2FDD +:1002A100FD7F881209B97F8C120AA5E51B5407FF4F +:1002B10012052AE518C4540F75F00AA4FFE5185475 +:1002C1000F2FFD7FC01209B9E517C4540F75F00A4D +:1002D100A4FFE517540F2FFD7FC31209B9E516C41A +:1002E100540F75F00AA4FFE516540F2FFD7FC612B7 +:1002F10009B97FC9120AA5852608852709C3E5081A +:100301006480948050127F2D120AB1C3E49509F5DF +:1003110009E49508F50880057F20120AB1AE08AFFF +:10032100097C007D64120468EF2430FF120AB1AE2B +:1003310008AF097C007D0A1204687C007D0A120462 +:1003410068ED2430FF120AB17F2E120AB1AE08AF58 +:10035100097C007D0A120468ED2430FF120AB17F86 +:1003610043020AB1E52364027048AE21AF227C0E3C +:100371007D10120413AD077FC21209B9AE21AF225D +:100381007C0E7D101204137E007F3CCFCDCFCECCEE +:10039100CE120413AD077FC51209B9AE21AF227C7D +:1003A100007D3C1204137FC81209B9AD2D7FCB1219 +:0203B10009B988 +:0103B3002227 +:10071100E5237018120A42500612001E7529FF12B5 +:100721000A545043752302C200E4802CE52364027D +:100731007035120A665006B200A200928E120A7833 +:10074100500A200007E4F521F522F52D120A545034 +:1007510016E4F523C28EC200F521F522F52D12080B +:080761004085232912026122E8 +:10001E00E51CC4540F75F00AA4FFE51C540F2FF510 +:10002E0008E51AC4540F75F00AA4FFE51A540F2FF1 +:10003E00F509E519C4540F75F00AA4FFE519540F1C +:10004E002FF50AE51B5407F50BE518C4540F75F090 +:10005E000AA4FFE518540F2FF50CE517C4540F75BD +:10006E00F00AA4FFE517540F2FF50DE516C4540F33 +:10007E0075F00AA4FFE516540F2FF50E7F80120AB5 +:10008E00A57E077FFC1209D87FC0120AA57E087FC5 +:10009E000D1209D8AD087F821209B9AD097F8512FC +:1000AE0009B9AD0A7F881209B97F8C120AA5AF0B68 +:1000BE0012052AAD0C7FC01209B9AD0D7FC312090E +:1000CE00B9AD0E7FC61209B97B007A007908751397 +:1000DE00827514827D6312063B7B007A0079097566 +:1000EE0013857514857D0C12063B7B007A00790A08 +:1000FE007513887514887D1F12063B7B007A007974 +:10010E000C7513C07514C07D1712063B7B007A0068 +:10011E00790D7513C37514C37D3B12063B7B007AB4 +:10012E0000790E7513C67514C67D3B12063B7F8E85 +:10013E00120AA57F0F120AA5120A665022E50BC3FA +:10014E0094075004050B8003750B017F8C120AA5D2 +:10015E00AF0B12052A7F8E120AA57F0F120AA51267 +:10016E000A785021E50B94014004150B8003750BA2 +:10017E00077F8C120AA5AF0B12052A7F8E120AA5D5 +:10018E007F0F120AA5120A4250AEE50875F00A84D6 +:10019E00C454F0FFE50875F00A84E5F04FF51CE550 +:1001AE000975F00A84C454F0FFE50975F00A84E578 +:1001BE00F04FF51AE50A75F00A84C454F0FFE50A0B +:1001CE0075F00A84E5F04FF519850B1BE50C75F0FB +:1001DE000A84C454F0FFE50C75F00A84E5F04FF57F +:1001EE0018E50D75F00A84C454F0FFE50D75F00A9C +:1001FE0084E5F04FF517E50E75F00A84C454F0FF50 +:10020E00E50E75F00A84E5F04FF516E4FD7F8E12CB +:10021E0008F2AD167F801208F2AD177F821208F237 +:10022E00AD187F841208F2AD197F861208F2AD1A4E +:10023E007F881208F2AD1B7F8A1208F2AD1C7F8CEC +:10024E001208F27D807F8E1208F27F0C120AA575BD +:02025E0029FF76 +:01026000227B +:0B0ABD0053890F438910D2ABD2AF2247 +:03001B000209FED9 +:1009FE00C0E0C0D0758DD8758BF0300014052DE594 +:100A0E002DC39464400B752D000522E5227002055E +:060A1E0021D0D0D0E0322F +:1005B600E4F509E52870161209817FCC1208BC7F84 +:1005C600441208BC752801E4F52BF52C22E52864B5 +:1005D600017061052CE52C7002052BC39428E52BD0 +:1005E600940040501209817FCC1208BC7FBE1208CD +:1005F600BC12087E8F0812087EEFFEE508FFEE307B +:10060600E710EFF4FFEEF4FEEF2401FFE43EFE7583 +:1006160009017C007D0A1204017D101204688E26F1 +:100626008F27E509600BC3E49527F527E49526F5A2 +:0406360026E4F52899 +:01063A00229D +:0100190022C4 +:01001A0022C3 +:0C0A98007F017E267D82DDFEDEFADFF6A7 +:010AA400222F +:1007B300C2A58B807F017E001207E3D2A77F017E53 +:1007C300001207E3C2A77F017E001207E3EBC454C4 +:1007D300F0F5807F017E001207E3D2A77F017E0040 +:1007E300D3EF9400EE9400400F7DC77C01DCFEDD67 +:0807F300FAEF1F70EB1E80E815 +:0107FB0022DB +:0C0AA500AB07C2A7C2A61207B3C2A7226B +:0C0AB100AB07C2A7D2A61207B3C2A7224F +:100A24007F32120AA57F28120AA57F0C120AA57F1D +:0E0A340006120AA57F01120AA57F80020AA5FC +:0E0A8A0081838587898B8D80828486888A8C03 +:09094A000716000012010102135E +:1008F200C2B500C2B600D2B500E4FEEF1392B4EF67 +:10090200C313FFD2B600C2B6000EBE08EEE4FEED7F +:100912001392B4EDC313FDD2B600C2B6000EBE08E8 +:04092200EEC2B5006C +:0109260022AE +:10076900C2B500C2B600D2B500E4FDEF1392B4EFF2 +:10077900C313FFD2B600C2B6000DBD08EE00E4FDFA +:10078900A2B4E433FFC43333335480FCEEC3134CB7 +:10079900FED2B600C2B6000DBD08E5C2B500D2B69C +:0907A90000C2B400D2B400AF0696 +:0107B2002224 +:100954007F81120769EF30E723E4FD7F8E1208F2EE +:10096400E4FCEC900A9193FF74162CF8E6FD12084F +:0C097400F20CBC07ED7D807F8E1208F2B3 +:010980002254 +:10000300E4FBEB900A8A93FF12076974162BF8A698 +:05001300070BBB07ED27 +:0100180022C5 +:10098100C2B77F467E00EF1FAC0670011E4C70F6A9 +:10099100D2B7E4FEFF30B7110FBF00010ED3EF94C1 +:0B09A10088EE941340EF7F00227F01DE +:0109AC002228 +:1008BC00E4FBFAC2B7050BE50B7002050AEF1392C5 +:1008CC00B7750A00750B06E50B150BAC0A70021513 +:1008DC000A4C70F3D2B7EFC313FF0BBB00010AEB4A +:0508EC0064084A70CE13 +:0108F10022E4 +:10087E007D087C00C2B70FBF0000D2B70FBF0000CB +:10088E000FBF0000A2B7E433C43333335480FBE907 +:10089E00C3134BF97E007F04EF1FAA0670011E4A98 +:0D08AE0070F6ED1D70011CED4C70C9AF011E +:0108BB00221A +:1004AA000206B5E493A3F8E493A34003F68001F2AD +:1004BA0008DFF48029E493A3F85407240CC8C33353 +:1004CA00C4540F4420C8834004F456800146F6DF22 +:1004DA00E4800B0102040810204080900927E47E82 +:1004EA00019360BCA3FF543F30E509541FFEE49317 +:1004FA00A360010ECF54C025E060A840B8E493A3DE +:10050A00FAE493A3F8E493A3C8C582C8CAC583CA08 +:10051A00F0A3C8C582C8CAC583CADFE9DEE780BEC0 +:0109530000A3 +:1003B400BB010689828A83E0225002E722BBFE0247 +:0903C400E32289828A83E493227A +:1003CD00BB010989828A83F8E028F022500327F7C0 +:1003DD0022BBFE05F8E328F3228A838982F8E49391 +:0203ED002822C4 +:1003EF00BB010689828A83F0225002F722BBFE01ED +:0203FF00F322E7 +:10040100EF8DF0A4A8F0CF8CF0A428CE8DF0A42E0F +:02041100FE22C9 +:10041300BC000BBE0029EF8DF084FFADF022E4CCCD +:10042300F875F008EF2FFFEE33FEEC33FCEE9DEC96 +:10043300984005FCEE9DFE0FD5F0E9E4CEFD22EDDC +:10044300F8F5F0EE8420D21CFEADF075F008EF2F26 +:10045300FFED33FD4007985006D5F0F222C398FD17 +:050463000FD5F0EA22B4 +:10046800C2D5EC30E709B2D5E4C39DFDE49CFCEEAF +:1004780030E715B2D5E4C39FFFE49EFE120413C310 +:10048800E49DFDE49CFC800312041330D507C3E40B +:060498009FFFE49EFE221E +:00000001FF diff --git a/Keil Code/Last/pro.uvgui.Administrator b/Keil Code/Last/pro.uvgui.Administrator new file mode 100644 index 0000000..9ea554a --- /dev/null +++ b/Keil Code/Last/pro.uvgui.Administrator @@ -0,0 +1,1249 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + + + 1 + 1 + 0 + + + + + + + 44 + 2 + 3 + + -1 + -1 + + + -1 + -1 + + + 34 + 26 + 1051 + 560 + + + + 0 + + 826 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000005000000030000000100000069483A5CC6D5D6D04843363830302D454D332056332E30BFAAB7A2B0E5D7CAC1CF5C352D2DCAB5D1E9B3CCD0F25CD6D0BCB6CAB5D1E9C0FDB3CC5C445331333032CAB1D6D34C434431363032CFD4CABEA3A8BFC9D2D4B0B4BCFCC9E8D6C3CAB1D6D3A3A95C4C43442E4800000000054C43442E4800000000C5D4F200FFFFFFFF69483A5CC6D5D6D04843363830302D454D332056332E30BFAAB7A2B0E5D7CAC1CF5C352D2DCAB5D1E9B3CCD0F25CD6D0BCB6CAB5D1E9C0FDB3CC5C445331333032CAB1D6D34C434431363032CFD4CABEA3A8BFC9D2D4B0B4BCFCC9E8D6C3CAB1D6D3A3A95C6C63642E6300000000056C63642E6300000000FFDC7800FFFFFFFF6C483A5CC6D5D6D04843363830302D454D332056332E30BFAAB7A2B0E5D7CAC1CF5C352D2DCAB5D1E9B3CCD0F25CD6D0BCB6CAB5D1E9C0FDB3CC5C445331333032CAB1D6D34C434431363032CFD4CABEA3A8BFC9D2D4B0B4BCFCC9E8D6C3CAB1D6D3A3A95C6473313330322E6300000000086473313330322E6300000000BECEA100FFFFFFFF6A483A5CC6D5D6D04843363830302D454D332056332E30BFAAB7A2B0E5D7CAC1CF5C352D2DCAB5D1E9B3CCD0F25CD6D0BCB6CAB5D1E9C0FDB3CC5C445331333032CAB1D6D34C434431363032CFD4CABEA3A8BFC9D2D4B0B4BCFCC9E8D6C3CAB1D6D3A3A95C6D61696E2E6300000000066D61696E2E6300000000F0A0A100FFFFFFFF6C483A5CC6D5D6D04843363830302D454D332056332E30BFAAB7A2B0E5D7CAC1CF5C352D2DCAB5D1E9B3CCD0F25CD6D0BCB6CAB5D1E9C0FDB3CC5C445331333032CAB1D6D34C434431363032CFD4CABEA3A8BFC9D2D4B0B4BCFCC9E8D6C3CAB1D6D3A3A95C4453313330322E4800000000084453313330322E4800000000BCA8E100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000009400000065000000560500005D020000 + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 940000004F0000005D030000B3000000 + + + 16 + 19010000EA000000E20300004E010000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000008D0000002E020000 + + + 16 + 9E000000B40000002E0100003B020000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000008D0000002E020000 + + + 16 + 9E000000B40000002E0100003B020000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000077010000EE030000BC010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000077010000EE030000BC010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000077010000EE030000BC010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000077010000EE030000BC010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E0100003B020000 + + + + 1507 + 1507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000077010000EE030000BC010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 97000000660000005A0300009A000000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000077010000EE030000BC010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000077010000EE030000BC010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000077010000EE030000BC010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000620200005305000096020000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000620200005305000096020000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000620200005305000096020000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000620200005305000096020000 + + + 16 + 9E000000B40000009602000015010000 + + + + 1944 + 1944 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 0300000077010000EE030000BC010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000008D0000002E020000 + + + 16 + 9E000000B40000002E0100003B020000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000008D0000002E020000 + + + 16 + 9E000000B40000002E0100003B020000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000005F02000056050000AF020000 + + + 16 + 9E000000B40000009602000015010000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 0000000060010000F1030000D5010000 + + + 16 + 9E000000B40000009602000015010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000620200005305000096020000 + + + 16 + 9E000000B40000009602000015010000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + 97000000660000005A0300009A000000 + + + 16 + 9E000000B40000009602000015010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 97000000660000005A0300009A000000 + + + 16 + 9E000000B40000009602000015010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 97000000660000005A0300009A000000 + + + 16 + 9E000000B40000009602000015010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 97000000660000005A0300009A000000 + + + 16 + 9E000000B40000009602000015010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 97000000660000005A0300009A000000 + + + 16 + 9E000000B40000009602000015010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 6403000066000000EE030000BC010000 + + + 16 + 9E000000B40000002E02000044020000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000008D0000002E020000 + + + 16 + 9E000000B40000002E0100003B020000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000620200005305000096020000 + + + 16 + 9E000000B40000009602000015010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 940 + 0 + 8192 + 0 + + 16 + 0000000000000000B70300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000AF02000056050000C2020000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59398 + 59398 + 1 + 0 + 0 + 0 + 391 + 0 + 8192 + 1 + + 16 + 000000001C0000009201000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 593980 + 59398 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000005705000017000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 0 + 0 + 0 + 0 + 644 + 0 + 8192 + 2 + + 16 + 00000000380000008F02000054000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2485 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF94000000B30000005D030000B7000000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E65002000000000000019010000EA000000E20300004E010000940000004F0000005D030000B30000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF5D0300004F00000061030000D5010000000000000200000004000000010000000000000000000000FFFFFFFF16000000E20500002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000001800040000000000000E6030000EA0000007604000070020000610300004F000000F1030000D50100000000000040410046160000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF900000004F0000009400000047020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000085000000EA00000015010000E2020000000000004F00000090000000470200000000000040140056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF000000005C010000F10300006001000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0900000098070000E30500008F0700009007000091070000B9050000BA050000BB050000BC0500000180008000000000000085000000FB01000076040000700200000000000060010000F1030000D50100000000000040820046090000000A43616C6C20537461636B000000009807000001000000FFFFFFFFFFFFFFFF0A43616C6C20537461636B00000000E305000001000000FFFFFFFFFFFFFFFF064C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFF901000060010000FD010000D501000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF9807000001000000FFFFFFFF9807000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF0000000047020000560500004B020000010000000100001004000000010000000000000000000000FFFFFFFF07000000C5000000C700000077940000930700009407000095070000960700000180008000000100000085000000E6020000DB0500004A030000000000004B02000056050000AF0200000000000040820056070000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2002 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000004000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59398 + Build + + 573 + 00200000010000000D00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000004001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A0000000004002400000000000000000000000000000000010000000100000000000000054275696C6487010000 + + + 478 + 0D00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 478 + 0D00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A00000000000009000000000000000000000000000000000100000001000000 + + + + 59399 + Debug + + 2353 + 00200000000000001B00FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380DB8B00000000000031000000064C6F63616C73000000000000000000000000010000000100000000000000000000000100000000001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000000000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804601000000000000490000000000000000000000000000000001000000010000000000000005446562756784020000 + + + 968 + 1B00FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180DB8B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804601000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 968 + 1B00FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180DB8B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018001890000000000001300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180460100000000000014000000000000000000000000000000000100000001000000 + + + + 0 + 1366 + 768 + + + + +
diff --git a/Keil Code/Last/pro.uvopt b/Keil Code/Last/pro.uvopt new file mode 100644 index 0000000..59153db --- /dev/null +++ b/Keil Code/Last/pro.uvopt @@ -0,0 +1,1907 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + Target 1 + 0x0 + MCS-51 + + 24000000 + + 1 + 1 + 1 + 0 + + + 0 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + + 0 + Data Sheet + DATASHTS\ATMEL\AT89C51_DS.PDF + + + 1 + Instruction Set Manual + DATASHTS\ATMEL\AT_C51ISM.PDF + + + + S8051.DLL + + DP51.DLL + -p51 + S8051.DLL + + TP51.DLL + -p51 + + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + -1 + + + + + + + + + + + + + + + 0 + DLGDP51 + (98=-1,-1,-1,-1,0)(82=-1,-1,-1,-1,0)(83=-1,-1,-1,-1,0)(84=-1,-1,-1,-1,0)(85=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(91=-1,-1,-1,-1,0)(92=-1,-1,-1,-1,0) + + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Source Group 1 + 1 + 0 + 0 + + 1 + 1 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\STARTUP.A51 + STARTUP.A51 + + + 1 + 2 + 1 + 1 + 0 + 39 + 0 + 508 + 508 + 0 + .\main.c + main.c + + + 1 + 3 + 1 + 1 + 0 + 0 + 0 + 128 + 128 + 0 + .\lcd.c + lcd.c + + + 1 + 4 + 1 + 1 + 0 + 22 + 0 + 13 + 13 + 0 + .\ds1302.c + ds1302.c + + + 1 + 5 + 1 + 0 + 0 + 24 + 0 + 1 + 1 + 0 + .\temp.c + temp.c + + + + + C:\Users\HM_DEV\Desktop\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭-2\TEMP.H + 1 + 18 + 0 + + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + + + + C:\Users\HM_DEV\Desktop\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭-2\LCD.H + 1 + 13 + 0 + + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + + + + Z:\Files\鍗曠墖鏈哄疄璁璡鍗曠墖鏈哄疄璁璡涓骇瀹為獙渚嬬▼\涓骇瀹為獙渚嬬▼\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭\ds1302.h + 1 + 1 + 0 + + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + + + + Z:\Files\鍗曠墖鏈哄疄璁璡鍗曠墖鏈哄疄璁璡涓骇瀹為獙渚嬬▼\涓骇瀹為獙渚嬬▼\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭\lcd.h + 20 + 20 + 0 + + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + + + + C:\KEIL\C51\INC\ATMEL\REG51.H + 1 + 1 + 0 + + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + + + + C:\KEIL\C51\INC\INTRINS.H + 1 + 1 + 0 + + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + + + + C:\Users\HM_DEV\Desktop\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭-2\DS1302.H + 16 + 16 + 0 + + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + + + + C:\Users\HM_DEV\Desktop\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭-2\DS18B20.H + 4 + 17 + 0 + + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + + + + C:\Users\HM_DEV\Desktop\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭-2\ds18b20.c + 1 + 4 + 0 + + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + + + + Default + 1 + Build + 0 + + Default + 1 + + 35824 + 1 + Logic Analyzer + 0 + + 0 + + 1 + 6 + 0 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 1 + 0 + 0 + 0 + + + 59392 + 2 + File + 0 + + 0 + + 1 + 2 + 3 + 0 + 24 + 0 + 50 + 893 + 0 + 0 + 0 + 0 + 100 + 0 + 1 + 0 + + + 59398 + 3 + Build + 0 + + 0 + + 1 + 2 + 3 + 0 + 50 + 0 + 76 + 384 + 0 + 0 + 0 + 0 + 100 + 0 + 0 + 0 + + + 59399 + 4 + Debug + 0 + + 0 + + 1 + 2 + 3 + 0 + 50 + 0 + 76 + 626 + 0 + 0 + 0 + 0 + 100 + 0 + 1 + 0 + + + 197 + 5 + Build Output + 0 + + 0 + + 1 + 2 + 4 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 198 + 6 + Command + 197 + + 0 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 250 + 600 + 100 + 1 + 1 + 0 + + + 199 + 7 + Find in Files + 198 + + 0 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 38007 + 8 + Browse + 199 + + 0 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1939 + 9 + UART #1 + 38007 + + 0 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1940 + 10 + UART #2 + 1939 + + 0 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1941 + 11 + UART #3 + 1940 + + 0 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1942 + 12 + UART #4 + 1941 + + 0 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1944 + 13 + Call Stack + 197 + + 197 + + 1 + 2 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 1 + 1 + 0 + + + 1507 + 14 + Call Stack + 1944 + + 197 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 0 + 0 + 0 + + + 1935 + 15 + Locals + 1507 + + 197 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1936 + 16 + Watch 1 + 1935 + + 197 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1937 + 17 + Watch 2 + 1936 + + 197 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 0 + 0 + 0 + + + 1465 + 18 + Memory 1 + 1937 + + 197 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1466 + 19 + Memory 2 + 1465 + + 197 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 0 + 0 + 0 + + + 1467 + 20 + Memory 3 + 1466 + + 197 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 0 + 0 + 0 + + + 1468 + 21 + Memory 4 + 1467 + + 197 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 0 + 0 + 0 + + + 1506 + 22 + Symbols + 1468 + + 197 + + 1 + 4 + 2 + 0 + 527 + 0 + 737 + 1400 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1005 + 23 + Project + 0 + + 0 + + 1 + 2 + 1 + 0 + 76 + 0 + 523 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 1 + 0 + + + 109 + 24 + Books + 1005 + + 0 + + 1 + 4 + 2 + 0 + 76 + 0 + 523 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 195 + 25 + Functions + 109 + + 0 + + 1 + 4 + 2 + 0 + 76 + 0 + 523 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 196 + 26 + Templates + 195 + + 0 + + 1 + 4 + 2 + 0 + 76 + 0 + 523 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 38003 + 27 + Registers + 196 + + 0 + + 1 + 4 + 2 + 0 + 76 + 0 + 523 + 210 + 0 + 0 + 600 + 250 + 100 + 1 + 1 + 0 + + + 35885 + 28 + not set + 0 + + 0 + + 1 + 2 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35886 + 29 + not set + 35885 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35887 + 30 + not set + 35886 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35888 + 31 + not set + 35887 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35889 + 32 + not set + 35888 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35890 + 33 + not set + 35889 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35891 + 34 + not set + 35890 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35892 + 35 + not set + 35891 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35893 + 36 + not set + 35892 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35894 + 37 + not set + 35893 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35895 + 38 + not set + 35894 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35896 + 39 + not set + 35895 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35897 + 40 + not set + 35896 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35898 + 41 + not set + 35897 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35899 + 42 + not set + 35898 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35900 + 43 + not set + 35899 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35901 + 44 + not set + 35900 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35902 + 45 + not set + 35901 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35903 + 46 + not set + 35902 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35904 + 47 + not set + 35903 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35905 + 48 + not set + 35904 + + 0 + + 1 + 4 + 2 + 0 + 76 + 1190 + 523 + 1400 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 203 + 49 + Disassembly + 0 + + 0 + + 1 + 2 + 3 + 0 + 76 + 214 + 286 + 1400 + 0 + 0 + 250 + 600 + 100 + 1 + 1 + 0 + + + 1913 + 50 + Instruction Trace + 203 + + 0 + + 1 + 4 + 2 + 0 + 76 + 214 + 286 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 343 + 51 + Performance Analyzer + 1913 + + 0 + + 1 + 4 + 2 + 0 + 76 + 214 + 286 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 204 + 52 + Performance Analyzer + 343 + + 0 + + 1 + 4 + 2 + 0 + 76 + 214 + 286 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 346 + 53 + Code Coverage + 204 + + 0 + + 1 + 4 + 2 + 0 + 76 + 214 + 286 + 1400 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + + + + 1 + 0 + + 100 + 6 + + + .\temp.c + 24 + 1 + 1 + + + C:\Users\HM_DEV\Desktop\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭-2\ds18b20.c + 0 + 1 + 4 + + + .\lcd.c + 0 + 128 + 128 + + + .\ds1302.c + 22 + 13 + 13 + + + C:\Users\HM_DEV\Desktop\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭-2\DS18B20.H + 0 + 4 + 17 + + + DS1302.H + 0 + 16 + 16 + + + .\main.c + 39 + 508 + 508 + + + C:\KEIL\C51\INC\INTRINS.H + 0 + 1 + 1 + + + C:\KEIL\C51\INC\ATMEL\REG51.H + 0 + 1 + 1 + + + Z:\Files\鍗曠墖鏈哄疄璁璡鍗曠墖鏈哄疄璁璡涓骇瀹為獙渚嬬▼\涓骇瀹為獙渚嬬▼\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭\lcd.h + 23 + 20 + 20 + + + Z:\Files\鍗曠墖鏈哄疄璁璡鍗曠墖鏈哄疄璁璡涓骇瀹為獙渚嬬▼\涓骇瀹為獙渚嬬▼\DS1302鏃堕挓LCD1602鏄剧ず锛堝彲浠ユ寜閿缃椂閽燂級\绋嬪簭\ds1302.h + 0 + 1 + 1 + + + LCD.H + 0 + 1 + 13 + + + TEMP.H + 40 + 1 + 18 + + + + + +
diff --git a/Keil Code/Last/pro.uvproj b/Keil Code/Last/pro.uvproj new file mode 100644 index 0000000..5c079ff --- /dev/null +++ b/Keil Code/Last/pro.uvproj @@ -0,0 +1,380 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + + Target 1 + 0x0 + MCS-51 + + + AT89C51 + Atmel + IRAM(0-0x7F) IROM(0-0xFFF) CLOCK(24000000) + + "LIB\STARTUP.A51" ("Standard 8051 Startup Code") + + 2976 + REGX51.H + + + + + + + + + + 0 + + + + Atmel\ + Atmel\ + + 0 + 0 + 0 + 0 + 1 + + .\ + pro + 1 + 0 + 1 + 1 + 1 + .\ + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 65535 + + + S8051.DLL + + DP51.DLL + -p51 + S8051.DLL + + TP51.DLL + -p51 + + + + 0 + 0 + 0 + 0 + 16 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + -1 + + + + + + + + + + + + + + + + + + + 0 + 0 + 0 + 0 + 0 + -1 + + + + + + + + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0xffff + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x1000 + + + 0 + 0x0 + 0x80 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 1 + 0 + 1 + 3 + 8 + 2 + 1 + 1 + 0 + 0 + + + + + + + + + 0 + 1 + 0 + 0 + + + + + + + + + 0 + 0 + 1 + 0 + 2 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Source Group 1 + + + STARTUP.A51 + 2 + .\STARTUP.A51 + + + main.c + 1 + .\main.c + + + lcd.c + 1 + .\lcd.c + + + ds1302.c + 1 + .\ds1302.c + + + temp.c + 1 + .\temp.c + + + + + + + +
diff --git a/Keil Code/Last/temp.c b/Keil Code/Last/temp.c new file mode 100644 index 0000000..d78c271 --- /dev/null +++ b/Keil Code/Last/temp.c @@ -0,0 +1,85 @@ +/****************************************************************************** + * 文件名:temp.c + * 功能:DS18B20 温度传感器驱动 + * 说明:三个底层函数分别实现初始化、写字节和读字节, + * 配合 main.c 中的非阻塞状态机完成温度采集。 + * 编译器:Keil C51 + ******************************************************************************/ + +#include"temp.h" + +/****************************************************************************** + * 函数名:Ds18b20Init + * 功能:初始化 DS18B20(发送复位脉冲,检测存在脉冲) + * 输入:无 + * 输出:返回 1 表示检测到 DS18B20,返回 0 表示设备不存在 + * 时序:总线拉低 642us → 释放 → 等待 DS18B20 拉低(15~60us)→ 检测存在 + ******************************************************************************/ +unsigned char Ds18b20Init() +{ + unsigned int i; + + DSPORT = 0; /* 拉低总线,发送复位脉冲 */ + i = 70; + while(i--); /* 延时约 642us(>480us 最低要求) */ + + DSPORT = 1; /* 释放总线 */ + i = 0; + while(DSPORT) /* 等待 DS18B20 拉低总线(存在脉冲) */ + { + i++; + if(i > 5000) /* 超时约 5ms,认为设备不存在 */ + return 0; + } + return 1; /* 初始化成功 */ +} + +/****************************************************************************** + * 函数名:Ds18b20WriteByte + * 功能:向 DS18B20 写入一个字节(低位在前) + * 输入:dat = 要写入的数据 + * 输出:无 + * 时序:每写一位,拉低 1us → 写入数据位 → 保持 68us → 释放总线 + ******************************************************************************/ +void Ds18b20WriteByte(unsigned char dat) +{ + unsigned int i, j; + + for(j = 0; j < 8; j++) + { + DSPORT = 0; /* 拉低总线,开始写时隙 */ + i++; + DSPORT = dat & 0x01; /* 写入当前位(低位在前) */ + i = 6; + while(i--); /* 保持 68us(>60us 要求) */ + DSPORT = 1; /* 释放总线 */ + dat >>= 1; /* 准备下一位 */ + } +} + +/****************************************************************************** + * 函数名:Ds18b20ReadByte + * 功能:从 DS18B20 读取一个字节(低位在前) + * 输入:无 + * 输出:返回读取到的字节数据 + * 时序:每读一位,拉低 1us → 释放 → 等待 6us → 采样总线 → 等待 48us + ******************************************************************************/ +unsigned char Ds18b20ReadByte() +{ + unsigned char byte, bi; + unsigned int i, j; + + for(j = 8; j > 0; j--) + { + DSPORT = 0; /* 拉低总线,开始读时隙 */ + i++; + DSPORT = 1; /* 释放总线 */ + i++; + i++; /* 等待约 6us 后采样 */ + bi = DSPORT; /* 读取当前位 */ + byte = (byte >> 1) | (bi << 7); /* 低位在前,依次移入 */ + i = 4; + while(i--); /* 等待 48us,确保时隙 >60us */ + } + return byte; +} diff --git a/Keil Code/Last/temp.h b/Keil Code/Last/temp.h new file mode 100644 index 0000000..e38116e --- /dev/null +++ b/Keil Code/Last/temp.h @@ -0,0 +1,21 @@ +/****************************************************************************** + * 文件名:temp.h + * 功能:DS18B20 温度传感器驱动头文件 + * 硬件接口:P3^7(单总线数据线) + * 编译器:Keil C51 + ******************************************************************************/ + +#ifndef __TEMP_H_ +#define __TEMP_H_ + +#include + +/* DS18B20 单总线数据引脚定义 */ +sbit DSPORT=P3^7; + +/* DS18B20 基本操作函数 */ +unsigned char Ds18b20Init(void); /* 初始化 DS18B20,返回 1=存在 0=不存在 */ +void Ds18b20WriteByte(unsigned char dat); /* 向 DS18B20 写入一个字节 */ +unsigned char Ds18b20ReadByte(void); /* 从 DS18B20 读取一个字节 */ + +#endif