/* ********************************************************************************************************* * uC/TCP-IP V2 * The Embedded TCP/IP Suite * * (c) Copyright 2003-2010; Micrium, Inc.; Weston, FL * * All rights reserved. Protected by international copyright laws. * * uC/TCP-IP is provided in source form to registered licensees ONLY. It is * illegal to distribute this source code to any third party unless you receive * written permission by an authorized Micrium representative. Knowledge of * the source code may NOT be used to develop a similar product. * * Please help us continue to provide the Embedded community with the finest * software available. Your honesty is greatly appreciated. * * You can contact us at www.micrium.com. ********************************************************************************************************* */ /* ********************************************************************************************************* * * NETWORK TCP LAYER * (TRANSMISSION CONTROL PROTOCOL) * * Filename : net_tcp.h * Version : V2.10 * Programmer(s) : ITJ ********************************************************************************************************* * Note(s) : (1) Supports Transmission Control Protocol as described in RFC #793 with the following * restrictions/constraints : * * (a) TCP Security & Precedence NOT supported RFC # 793, Section 3.6 * * (b) TCP Urgent Data NOT supported RFC # 793, Section 3.7 * 'The Communication of * Urgent Information' * * (c) The following TCP options NOT supported : * * (1) Window Scale RFC #1072, Section 2 * RFC #1323, Section 2 * (2) Selective Acknowledgement (SACK) RFC #1072, Section 3 * RFC #2018 * RFC #2883 * (3) TCP Echo RFC #1072, Section 4 * (4) Timestamp RFC #1323, Section 3.2 * (5) Protection Against Wrapped Sequences (PAWS) RFC #1323, Section 4 * * (d) #### IP-Options-to-TCP-Connection RFC #1122, Section 4.2.3.8 * Handling NOT supported * * (e) #### ICMP-Error-Message-to-TCP-Connection RFC #1122, Section 4.2.3.9 * Handling NOT currently supported * * (2) TCP Layer assumes/requires Network Socket Layer (see 'net_sock.h MODULE Note #1a2'). ********************************************************************************************************* */ /*$PAGE*/ /* ********************************************************************************************************* * MODULE * * Note(s) : (1) TCP Layer module is NOT required for UDP-to-Application API configuration. * * See also 'net_cfg.h TRANSPORT LAYER CONFIGURATION' * & 'net_cfg.h USER DATAGRAM PROTOCOL LAYER CONFIGURATION'. * * See also 'net_tcp.h Note #2'. * * (2) The following TCP-module-present configuration value MUST be pre-#define'd in * 'net_cfg_net.h' PRIOR to all other network modules that require TCP Layer * configuration (see 'net_cfg_net.h TCP LAYER CONFIGURATION Note #2b') : * * NET_TCP_MODULE_PRESENT ********************************************************************************************************* */ #ifdef NET_TCP_MODULE_PRESENT /* See Note #2. */ /* ********************************************************************************************************* * EXTERNS ********************************************************************************************************* */ #if ((defined(NET_TCP_MODULE)) && \ (defined(NET_GLOBALS_EXT))) #define NET_TCP_EXT #else #define NET_TCP_EXT extern #endif /*$PAGE*/ /* ********************************************************************************************************* * DEFINES ********************************************************************************************************* */ /* ********************************************************************************************************* * TCP HEADER DEFINES * * Note(s) : (1) The following TCP value MUST be pre-#define'd in 'net_def.h' PRIOR to 'net_buf.h' so that * the Network Buffer Module can configure maximum buffer header size (see 'net_def.h TCP * LAYER DEFINES' & 'net_buf.h NETWORK BUFFER INDEX & SIZE DEFINES Note #1') : * * (a) NET_TCP_HDR_SIZE_MAX 60 (NET_TCP_HDR_LEN_MAX * * NET_TCP_HDR_LEN_WORD_SIZE) * * (2) Urgent pointer & data NOT supported (see 'net_tcp.h Note #1b'). ********************************************************************************************************* */ #define NET_TCP_HDR_LEN_MASK 0xF000u #define NET_TCP_HDR_LEN_SHIFT 12u #define NET_TCP_HDR_LEN_NONE 0u #define NET_TCP_HDR_LEN_MIN 5u #define NET_TCP_HDR_LEN_MAX 15u #define NET_TCP_HDR_LEN_WORD_SIZE CPU_WORD_SIZE_32 #define NET_TCP_HDR_SIZE_MIN (NET_TCP_HDR_LEN_MIN * NET_TCP_HDR_LEN_WORD_SIZE) #if 0 /* See Note #1a. */ #define NET_TCP_HDR_SIZE_MAX (NET_TCP_HDR_LEN_MAX * NET_TCP_HDR_LEN_WORD_SIZE) #endif #define NET_TCP_HDR_SIZE_TOT_MIN (NET_IP_HDR_SIZE_TOT_MIN + NET_TCP_HDR_SIZE_MIN) #define NET_TCP_HDR_SIZE_TOT_MAX (NET_IP_HDR_SIZE_TOT_MAX + NET_TCP_HDR_SIZE_MAX) #define NET_TCP_PSEUDO_HDR_SIZE 12u /* = sizeof(NET_TCP_PSEUDO_HDR) */ #define NET_TCP_PORT_NBR_RESERVED NET_PORT_NBR_RESERVED #define NET_TCP_PORT_NBR_NONE NET_TCP_PORT_NBR_RESERVED #define NET_TCP_HDR_URG_PTR_NONE 0x0000u /* See Note #2. */ /*$PAGE*/ /* ********************************************************************************************************* * TCP HEADER FLAG DEFINES * * Note(s) : (1) See 'TCP HEADER Note #2' for flag fields. * * (2) Urgent pointer & data NOT supported (see 'net_tcp.h Note #1b'). ********************************************************************************************************* */ #define NET_TCP_HDR_FLAG_MASK 0x0FFFu #define NET_TCP_HDR_FLAG_NONE DEF_BIT_NONE #define NET_TCP_HDR_FLAG_RESERVED 0x0FE0u /* MUST be '0'. */ #define NET_TCP_HDR_FLAG_URGENT DEF_BIT_05 /* See Note #2. */ #define NET_TCP_HDR_FLAG_ACK DEF_BIT_04 #define NET_TCP_HDR_FLAG_PUSH DEF_BIT_03 #define NET_TCP_HDR_FLAG_RESET DEF_BIT_02 #define NET_TCP_HDR_FLAG_SYNC DEF_BIT_01 #define NET_TCP_HDR_FLAG_FIN DEF_BIT_00 #define NET_TCP_HDR_FLAG_CLOSE NET_TCP_HDR_FLAG_FIN /* ********************************************************************************************************* * TCP FLAG DEFINES ********************************************************************************************************* */ /* ------------------ NET TCP FLAGS ------------------- */ #define NET_TCP_FLAG_NONE DEF_BIT_NONE #define NET_TCP_FLAG_USED DEF_BIT_00 /* TCP conn cur used; i.e. NOT in free TCP conn pool. */ /* ------------------ TCP TX FLAGS ------------------- */ /* TCP tx flags copied from TCP hdr flags. */ #define NET_TCP_FLAG_TX_FIN NET_TCP_HDR_FLAG_FIN #define NET_TCP_FLAG_TX_CLOSE NET_TCP_FLAG_TX_FIN #define NET_TCP_FLAG_TX_SYNC NET_TCP_HDR_FLAG_SYNC #define NET_TCP_FLAG_TX_RESET NET_TCP_HDR_FLAG_RESET #define NET_TCP_FLAG_TX_PUSH NET_TCP_HDR_FLAG_PUSH #define NET_TCP_FLAG_TX_ACK NET_TCP_HDR_FLAG_ACK #define NET_TCP_FLAG_TX_URGENT NET_TCP_HDR_FLAG_URGENT #define NET_TCP_FLAG_TX_BLOCK DEF_BIT_07 /* ------------------ TCP RX FLAGS ------------------- */ #define NET_TCP_FLAG_RX_DATA_PEEK DEF_BIT_08 #define NET_TCP_FLAG_RX_BLOCK DEF_BIT_15 /*$PAGE*/ /* ********************************************************************************************************* * TCP TYPE DEFINES * * Note(s) : (1) NET_TCP_TYPE_&&& #define values specifically chosen as ASCII representations of the TCP * types. Memory displays of TCP types will display with their chosen ASCII names. ********************************************************************************************************* */ /* ------------------ NET TCP TYPES ------------------- */ #if (CPU_CFG_ENDIAN_TYPE == CPU_ENDIAN_TYPE_BIG) #define NET_TCP_TYPE_NONE 0x4E4F4E45u /* "NONE" in ASCII. */ #define NET_TCP_TYPE_CONN 0x54435020u /* "TCP " in ASCII. */ #else #if (CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_32) #define NET_TCP_TYPE_NONE 0x454E4F4Eu /* "NONE" in ASCII. */ #define NET_TCP_TYPE_CONN 0x20504354u /* "TCP " in ASCII. */ #elif (CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_16) #define NET_TCP_TYPE_NONE 0x4F4E454Eu /* "NONE" in ASCII. */ #define NET_TCP_TYPE_CONN 0x43542050u /* "TCP " in ASCII. */ #else /* Dflt CPU_WORD_SIZE_08. */ #define NET_TCP_TYPE_NONE 0x4E4F4E45u /* "NONE" in ASCII. */ #define NET_TCP_TYPE_CONN 0x54435020u /* "TCP " in ASCII. */ #endif #endif /* ********************************************************************************************************* * TCP SEQUENCE NUMBER DEFINES * * Note(s) : (1) TCP initial transmit sequence number is incremented by a fixed value, preferably a large * prime value or a large value with multiple unique factors. * * (a) One reasonable TCP initial transmit sequence number increment value example : * * 65527 = 37 * 23 * 11 * 7 * * * #### NET_TCP_TX_SEQ_NBR_CTR_INC could be developer-configured in 'net_cfg.h'. * * See also 'NET_TCP_TX_GET_SEQ_NBR() Notes #1b2 & #1c2'. ********************************************************************************************************* */ #define NET_TCP_SEQ_NBR_NONE 0u #define NET_TCP_ACK_NBR_NONE NET_TCP_SEQ_NBR_NONE #define NET_TCP_TX_SEQ_NBR_CTR_INC 65527u /* See Note #1. */ #define NET_TCP_ACK_NBR_DUP_WIN_SIZE_SCALE 4 /*$PAGE*/ /* ********************************************************************************************************* * TCP DATA/TOTAL LENGTH DEFINES * * Note(s) : (1) (a) TCP total length #define's (NET_TCP_TOT_LEN) relate to the total size of a complete * TCP packet, including the packet's TCP header. Note that a complete TCP packet MAY * be fragmented in multiple Internet Protocol packets. * * (b) TCP data length #define's (NET_TCP_DATA_LEN) relate to the data size of a complete * TCP packet, equal to the total TCP packet length minus its TCP header size. Note * that a complete TCP packet MAY be fragmented in multiple Internet Protocol packets. ********************************************************************************************************* */ /* See Notes #1a & #1b. */ #define NET_TCP_DATA_LEN_MIN 0u #define NET_TCP_TOT_LEN_MIN (NET_TCP_HDR_SIZE_MIN + NET_TCP_DATA_LEN_MIN) #define NET_TCP_TOT_LEN_MAX (NET_IP_TOT_LEN_MAX - NET_IP_HDR_SIZE_MIN ) #define NET_TCP_DATA_LEN_MAX (NET_TCP_TOT_LEN_MAX - NET_TCP_HDR_SIZE_MIN) /*$PAGE*/ /* ********************************************************************************************************* * TCP SEGMENT SIZE DEFINES * * Note(s) : (1) (a) RFC # 879, Section 3 states that the TCP Maximum Segment Size "counts only * data octets in the segment, ... not the TCP header or the IP header". * * (b) RFC #1122, Section 4.2.2.6 requires that : * * (1) "The MSS value to be sent in an MSS option must be less than or equal to * * (A) MMS_R - 20 * * where MMS_R is the maximum size for a transport-layer message that can * be received." * * (2) "If an MSS option is not received at connection setup, TCP MUST assume a * default send MSS of 536 (576 - 40)." * * See also 'net_ip.h IP DATA/TOTAL LENGTH DEFINES Note #1'. ********************************************************************************************************* */ /* See Note #1. */ #define NET_TCP_MAX_SEG_SIZE_DFLT (NET_IP_MAX_DATAGRAM_SIZE_DFLT - NET_IP_HDR_SIZE_MIN - NET_TCP_HDR_SIZE_MIN) #define NET_TCP_MAX_SEG_SIZE_DFLT_RX NET_TCP_DATA_LEN_MAX /* See Note #1b1. */ #define NET_TCP_MAX_SEG_SIZE_DFLT_TX NET_TCP_MAX_SEG_SIZE_DFLT /* See Note #1b2. */ #define NET_TCP_MAX_SEG_SIZE_NONE 0u #define NET_TCP_MAX_SEG_SIZE_MIN NET_TCP_MAX_SEG_SIZE_DFLT #define NET_TCP_MAX_SEG_SIZE_MAX NET_TCP_DATA_LEN_MAX #define NET_TCP_SEG_LEN_MIN NET_TCP_DATA_LEN_MIN #define NET_TCP_SEG_LEN_MAX NET_TCP_DATA_LEN_MAX #define NET_TCP_SEG_LEN_SYNC 1u #define NET_TCP_SEG_LEN_FIN 1u #define NET_TCP_SEG_LEN_CLOSE NET_TCP_SEG_LEN_FIN #define NET_TCP_SEG_LEN_ACK 0u #define NET_TCP_SEG_LEN_RESET 0u #define NET_TCP_SEG_LEN_PROBE 0u #define NET_TCP_DATA_LEN_TX_SYNC 0u #define NET_TCP_DATA_LEN_TX_FIN 0u #define NET_TCP_DATA_LEN_TX_CLOSE NET_TCP_DATA_LEN_TX_FIN #define NET_TCP_DATA_LEN_TX_ACK 0u #define NET_TCP_DATA_LEN_TX_PROBE_NO_DATA 0u #define NET_TCP_DATA_LEN_TX_PROBE_DATA 1u #define NET_TCP_DATA_LEN_TX_RESET 0u #define NET_TCP_TX_PROBE_DATA 0x00u /* ********************************************************************************************************* * TCP WINDOW SIZE DEFINES * * Note(s) : (1) Although NO RFC specifies the absolute minimum TCP connection window size value allowed, * RFC #793, Section 3.7 'Data Communication : Managing the Window' states that for "the * window ... there is an assumption that this is related to the currently available data * buffer space available for this connection". ********************************************************************************************************* */ #define NET_TCP_WIN_SIZE_NONE 0u #define NET_TCP_WIN_SIZE_MIN NET_TCP_MAX_SEG_SIZE_MIN #define NET_TCP_WIN_SIZE_MAX DEF_INT_16U_MAX_VAL /*$PAGE*/ /* ********************************************************************************************************* * TCP HEADER OPTIONS DEFINES * * Note(s) : (1) See the following RFC's for TCP options summary : * * (a) RFC # 793, Section 3.1 'Header Format : Options' * (b) RFC #1122; Sections 4.2.2.5, 4.2.2.6 * * (2) TCP option types are encoded in the first octet for each TCP option as follows : * * -------- * | TYPE | * -------- * * The TCP option type value determines the TCP option format : * * (a) The following TCP option types are single-octet TCP options -- i.e. the option type * octet is the ONLY octet for the TCP option. * * (1) TYPE = 0 End of Options List * (2) TYPE = 1 No Operation * * * (b) All other TCP options MUST be multi-octet TCP options (see RFC #1122, Section 4.2.2.5) : * * ------------------------------ * | TYPE | LEN | TCP OPT | * ------------------------------ * * where * TYPE Indicates the specific TCP option type * LEN Indicates the total TCP option length, in octets, including * the option type & the option length octets * TCP OPT Additional TCP option octets, if any, that contain the remaining * TCP option information * * The following TCP option types are multi-octet TCP options where the option's second * octet specify the total TCP option length, in octets, including the option type & the * option length octets : * * (1) TYPE = 2 Maximum Segment Size See RFC # 793, Section 3.1 'Header Format : * Options : Maximum Segment Size'; * RFC #1122, Section 4.2.2.6; * RFC # 879, Section 3 * * (2) TYPE = 3 Window Scale See 'net_tcp.h Note #1c1' * (3) TYPE = 4 SACK Allowed See 'net_tcp.h Note #1c2' * (4) TYPE = 5 SACK Option See 'net_tcp.h Note #1c2' * (5) TYPE = 6 Echo Request See 'net_tcp.h Note #1c3' * (6) TYPE = 7 Echo Reply See 'net_tcp.h Note #1c3' * (7) TYPE = 8 Timestamp See 'net_tcp.h Note #1c4' * * (3) TCP header allows for a maximum option list length of 40 octets : * * NET_TCP_HDR_OPT_SIZE_MAX = NET_TCP_HDR_SIZE_MAX - NET_TCP_HDR_SIZE_MIN * * = 60 - 20 * * = 40 * * (4) 'NET_TCP_OPT_SIZE' MUST be pre-defined PRIOR to all definitions that require TCP option * size data type. ********************************************************************************************************* */ /*$PAGE*/ #define NET_TCP_HDR_OPT_END_LIST 0u #define NET_TCP_HDR_OPT_NOP 1u #define NET_TCP_HDR_OPT_MAX_SEG_SIZE 2u #define NET_TCP_HDR_OPT_WIN_SCALE 3u #define NET_TCP_HDR_OPT_SACK_PERMIT 4u #define NET_TCP_HDR_OPT_SACK 5u #define NET_TCP_HDR_OPT_ECHO_REQ 6u #define NET_TCP_HDR_OPT_ECHO_REPLY 7u #define NET_TCP_HDR_OPT_TS 8u #define NET_TCP_HDR_OPT_PAD NET_TCP_HDR_OPT_END_LIST #define NET_TCP_HDR_OPT_LEN_END_LIST 1u #define NET_TCP_HDR_OPT_LEN_NOP 1u #define NET_TCP_HDR_OPT_LEN_MAX_SEG_SIZE 4u #define NET_TCP_HDR_OPT_LEN_WIN_SCALE 3u #define NET_TCP_HDR_OPT_LEN_SACK_PERMIT 2u #define NET_TCP_HDR_OPT_LEN_ECHO_REQ 6u #define NET_TCP_HDR_OPT_LEN_ECHO_REPLY 6u #define NET_TCP_HDR_OPT_LEN_TS 10u #define NET_TCP_HDR_OPT_LEN_SACK_MIN 6u #define NET_TCP_HDR_OPT_LEN_SACK_MAX 38u #define NET_TCP_HDR_OPT_LEN_MIN 1u #define NET_TCP_HDR_OPT_LEN_MIN_LEN 2u #define NET_TCP_HDR_OPT_LEN_MAX 38u typedef CPU_INT32U NET_TCP_OPT_SIZE; /* TCP opt size data type (see Note #4). */ #define NET_TCP_HDR_OPT_SIZE_WORD (sizeof(NET_TCP_OPT_SIZE)) #define NET_TCP_HDR_OPT_SIZE_MAX (NET_TCP_HDR_SIZE_MAX - NET_TCP_HDR_SIZE_MIN) #define NET_TCP_HDR_OPT_NBR_MIN 0u #define NET_TCP_HDR_OPT_NBR_MAX (NET_TCP_HDR_OPT_SIZE_MAX / NET_TCP_HDR_OPT_SIZE_WORD) #define NET_TCP_HDR_OPT_IX NET_TCP_HDR_SIZE_MIN /*$PAGE*/ /* ********************************************************************************************************* * TCP OPTION CONFIGURATION TYPE DEFINES * * Note(s) : (1) NET_TCP_OPT_CFG_TYPE_&&& #define values specifically chosen as ASCII representations of * the TCP option configuration types. Memory displays of TCP option configuration buffers * will display the TCP option configuration TYPEs with their chosen ASCII names. ********************************************************************************************************* */ /* ---------------- TCP OPT CFG TYPES ----------------- */ #if (CPU_CFG_ENDIAN_TYPE == CPU_ENDIAN_TYPE_BIG) #define NET_TCP_OPT_CFG_TYPE_NONE 0x4E4F4E45u /* "NONE" in ASCII. */ #define NET_TCP_OPT_CFG_TYPE_MAX_SEG_SIZE 0x4D535320u /* "MSS " in ASCII. */ #define NET_TCP_OPT_CFG_TYPE_WIN_SCALE 0x57494E20u /* "WIN " in ASCII (see 'net_tcp.h Note #1c1'). */ #define NET_TCP_OPT_CFG_TYPE_SACK_PERMIT 0x53434B50u /* "SCKP" in ASCII (see 'net_tcp.h Note #1c2'). */ #define NET_TCP_OPT_CFG_TYPE_SACK 0x5341434Bu /* "SACK" in ASCII (see 'net_tcp.h Note #1c2'). */ #define NET_TCP_OPT_CFG_TYPE_ECHO_REQ 0x45524551u /* "EREQ" in ASCII (see 'net_tcp.h Note #1c3'). */ #define NET_TCP_OPT_CFG_TYPE_ECHO_REPLY 0x4543484Fu /* "ECHO" in ASCII (see 'net_tcp.h Note #1c3'). */ #define NET_TCP_OPT_CFG_TYPE_TS 0x54532020u /* "TS " in ASCII (see 'net_tcp.h Note #1c4'). */ #else #if (CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_32) #define NET_TCP_OPT_CFG_TYPE_NONE 0x454E4F4Eu /* "NONE" in ASCII. */ #define NET_TCP_OPT_CFG_TYPE_MAX_SEG_SIZE 0x2053534Du /* "MSS " in ASCII. */ #define NET_TCP_OPT_CFG_TYPE_WIN_SCALE 0x204E4957u /* "WIN " in ASCII (see 'net_tcp.h Note #1c1'). */ #define NET_TCP_OPT_CFG_TYPE_SACK_PERMIT 0x504B4353u /* "SCKP" in ASCII (see 'net_tcp.h Note #1c2'). */ #define NET_TCP_OPT_CFG_TYPE_SACK 0x4B434153u /* "SACK" in ASCII (see 'net_tcp.h Note #1c2'). */ #define NET_TCP_OPT_CFG_TYPE_ECHO_REQ 0x51455245u /* "EREQ" in ASCII (see 'net_tcp.h Note #1c3'). */ #define NET_TCP_OPT_CFG_TYPE_ECHO_REPLY 0x4F484345u /* "ECHO" in ASCII (see 'net_tcp.h Note #1c3'). */ #define NET_TCP_OPT_CFG_TYPE_TS 0x20205354u /* "TS " in ASCII (see 'net_tcp.h Note #1c4'). */ #elif (CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_16) #define NET_TCP_OPT_CFG_TYPE_NONE 0x4F4E454Eu /* "NONE" in ASCII. */ #define NET_TCP_OPT_CFG_TYPE_MAX_SEG_SIZE 0x534D2053u /* "MSS " in ASCII. */ #define NET_TCP_OPT_CFG_TYPE_WIN_SCALE 0x4957204Eu /* "WIN " in ASCII (see 'net_tcp.h Note #1c1'). */ #define NET_TCP_OPT_CFG_TYPE_SACK_PERMIT 0x4353504Bu /* "SCKP" in ASCII (see 'net_tcp.h Note #1c2'). */ #define NET_TCP_OPT_CFG_TYPE_SACK 0x41534B43u /* "SACK" in ASCII (see 'net_tcp.h Note #1c2'). */ #define NET_TCP_OPT_CFG_TYPE_ECHO_REQ 0x52455145u /* "EREQ" in ASCII (see 'net_tcp.h Note #1c3'). */ #define NET_TCP_OPT_CFG_TYPE_ECHO_REPLY 0x43454F48u /* "ECHO" in ASCII (see 'net_tcp.h Note #1c3'). */ #define NET_TCP_OPT_CFG_TYPE_TS 0x53542020u /* "TS " in ASCII (see 'net_tcp.h Note #1c4'). */ #else /* Dflt CPU_WORD_SIZE_08. */ #define NET_TCP_OPT_CFG_TYPE_NONE 0x4E4F4E45u /* "NONE" in ASCII. */ #define NET_TCP_OPT_CFG_TYPE_MAX_SEG_SIZE 0x4D535320u /* "MSS " in ASCII. */ #define NET_TCP_OPT_CFG_TYPE_WIN_SCALE 0x57494E20u /* "WIN " in ASCII (see 'net_tcp.h Note #1c1'). */ #define NET_TCP_OPT_CFG_TYPE_SACK_PERMIT 0x53434B50u /* "SCKP" in ASCII (see 'net_tcp.h Note #1c2'). */ #define NET_TCP_OPT_CFG_TYPE_SACK 0x5341434Bu /* "SACK" in ASCII (see 'net_tcp.h Note #1c2'). */ #define NET_TCP_OPT_CFG_TYPE_ECHO_REQ 0x45524551u /* "EREQ" in ASCII (see 'net_tcp.h Note #1c3'). */ #define NET_TCP_OPT_CFG_TYPE_ECHO_REPLY 0x4543484Fu /* "ECHO" in ASCII (see 'net_tcp.h Note #1c3'). */ #define NET_TCP_OPT_CFG_TYPE_TS 0x54532020u /* "TS " in ASCII (see 'net_tcp.h Note #1c4'). */ #endif #endif /*$PAGE*/ /* ********************************************************************************************************* * TCP CONNECTION TIMEOUT DEFINES * * Note(s) : (1) (a) (1) RFC #1122, Section 4.2.2.13 'DISCUSSION' states that "the graceful close algorithm * of TCP requires that the connection state remain defined on (at least) one end of * the connection, for a timeout period of 2xMSL ... During this period, the (remote * socket, local socket) pair that defines the connection is busy and cannot be reused". * * (2) The following sections reiterate that the TIME-WAIT state timeout scalar is two * maximum segment lifetimes (2 MSL) : * * (A) RFC #793, Section 3.9 'Event Processing : SEGMENT ARRIVES : * Check Sequence Number : TIME-WAIT STATE' * (B) RFC #793, Section 3.9 'Event Processing : SEGMENT ARRIVES : * Check FIN Bit : TIME-WAIT STATE' * * (b) (1) RFC #793, Section 3.3 'Sequence Numbers : Knowing When to Keep Quiet' states that * "the Maximum Segment Lifetime (MSL) is ... to be 2 minutes. This is an engineering * choice, and may be changed if experience indicates it is desirable to do so". * * (2) Microsoft Corporation's Windows XP defaults MSL to 15 seconds. ********************************************************************************************************* */ /* Max seg timeout (see Note #1b) : */ #define NET_TCP_CONN_TIMEOUT_MAX_SEG_MIN_SEC ( 0u ) /* ... min = 0 seconds */ #define NET_TCP_CONN_TIMEOUT_MAX_SEG_MAX_SEC ( 2u * DEF_TIME_NBR_SEC_PER_MIN) /* ... max = 2 minutes */ #define NET_TCP_CONN_TIMEOUT_MAX_SEG_DFLT_SEC ( 15u ) /* ... dflt = 15 seconds */ #define NET_TCP_CONN_TIMEOUT_MAX_SEG_SCALAR 2u /* ... scalar (see Note #1a). */ #define NET_TCP_CONN_TIMEOUT_CONN_DFLT_SEC (120u * DEF_TIME_NBR_SEC_PER_MIN) /* Dflt conn timeout = 120 minutes */ #define NET_TCP_CONN_TIMEOUT_USER_DFLT_SEC ( 30u * DEF_TIME_NBR_SEC_PER_MIN) /* Dflt user timeout = 30 minutes */ /*$PAGE*/ /* ********************************************************************************************************* * TCP CONNECTION STATES * * Note(s) : (1) See the following RFC's for TCP state machine summary : * * (a) RFC # 793; Sections 3.2, 3.4, 3.5, 3.9 * (b) RFC #1122; Sections 4.2.2.8, 4.2.2.10, 4.2.2.11, 4.2.2.13, 4.2.2.18, 4.2.2.20 * * (2) (a) #### Additional closing-data-available state used for closing connections to allow the * application layer to receive any remaining data. * * See also 'net_tcp.c NetTCP_RxPktConnHandlerFinWait1() Note #2f5A2', * 'net_tcp.c NetTCP_RxPktConnHandlerFinWait2() Note #2f5B', * 'net_tcp.c NetTCP_RxPktConnHandlerClosing() Note #2d2B2a1B', * & 'net_tcp.c NetTCP_RxPktConnHandlerLastAck() Note #2d2A1b'. ********************************************************************************************************* */ #define NET_TCP_CONN_STATE_NONE 0u #define NET_TCP_CONN_STATE_FREE 1u #define NET_TCP_CONN_STATE_CLOSED 10u #define NET_TCP_CONN_STATE_LISTEN 20u #define NET_TCP_CONN_STATE_SYNC_RXD 30u #define NET_TCP_CONN_STATE_SYNC_RXD_PASSIVE 31u #define NET_TCP_CONN_STATE_SYNC_RXD_ACTIVE 32u #define NET_TCP_CONN_STATE_SYNC_TXD 35u #define NET_TCP_CONN_STATE_CONN 40u #define NET_TCP_CONN_STATE_FIN_WAIT_1 50u #define NET_TCP_CONN_STATE_FIN_WAIT_2 51u #define NET_TCP_CONN_STATE_CLOSING 52u #define NET_TCP_CONN_STATE_TIME_WAIT 53u #define NET_TCP_CONN_STATE_CLOSE_WAIT 55u #define NET_TCP_CONN_STATE_LAST_ACK 56u #define NET_TCP_CONN_STATE_CLOSING_DATA_AVAIL 59u /* See Note #2a. */ /* ********************************************************************************************************* * TCP CONNECTION QUEUE STATES ********************************************************************************************************* */ #define NET_TCP_RX_Q_STATE_NONE 0u #define NET_TCP_RX_Q_STATE_CLOSED 100u #define NET_TCP_RX_Q_STATE_CLOSING 101u #define NET_TCP_RX_Q_STATE_SYNC 110u #define NET_TCP_RX_Q_STATE_CONN 111u #define NET_TCP_TX_Q_STATE_NONE 0u #define NET_TCP_TX_Q_STATE_CLOSED 200u #define NET_TCP_TX_Q_STATE_CLOSING 201u #define NET_TCP_TX_Q_STATE_SYNC 210u #define NET_TCP_TX_Q_STATE_CONN 211u #define NET_TCP_TX_Q_STATE_SUSPEND 215u #define NET_TCP_TX_Q_STATE_CLOSED_SUSPEND 220u #define NET_TCP_TX_Q_STATE_CLOSING_SUSPEND 221u /*$PAGE*/ /* ********************************************************************************************************* * TCP CONNECTION CODE DEFINES **************
上传时间: 2015-11-22
上传用户:the same kong
ESP8266 WiFi模块用户手册V1.0 ESP8266是一款超低功耗的UART-WiFi 透传模块,拥有业内极富竞争力的封装尺寸和超低能耗技术,专为移动设备和物联网应用设计,可将用户的物理设备连接到Wi-Fi 无线网络上,进行互联网或局域网通信,实现联网功能。 ESP8266封装方式多样,天线可支持板载PCB天线,IPEX接口和邮票孔接口三种形式; ESP8266可广泛应用于智能电网、智能交通、智能家具、手持设备、工业控制等领域。 更多资料,请访问安信可开源社区 www.ai-thinker.com
上传时间: 2017-07-07
上传用户:砚子儿*
Received: from mail.creditcard.cmbc.com.cn (unknown [111.205.122.39]) by newmx82.qq.com (NewMx) with SMTP id for <714620454@QQ.COM>; Fri, 20 Oct 2017 03:56:09 +0800 X-QQ-FEAT: nHaaMjwLeTyzuDp5C5V++RVfPHSVEqOujK0vwZroSro= X-QQ-MAILINFO: MjJD59SVx+LnQ1oU2sDuZ8tZJyZAOGTJaybWFAYRjurknrZoc6gjmnU06 o+pkiTJsdtxgA5CmtpN2ggrWb/T2GoG07QFXqgJtIk+5X1iaz4UykQ9M2a782+Fdn83doxC 4Ej1t99JoZcj8dDkeM5dzZTSR8uZGwHEnIK9Uim+NcaroB2EUWgclSmSzIxUHIbJ1nTLA8G B4/wa X-QQ-mid: mx82t1508442969ti70kc84u X-QQ-ORGSender: master@creditcard.cmbc.com.cn Received: from sedm([195.203.59.13]) by mail.creditcard.cmbc.com.cn(1.0) with SMTP id sedm587; Thu, 19 Oct 2017 17:48:11 +0800 Date:Thu, 19 Oct 2017 17:48:11 +0800 (CST) Message-ID:<0305-euid-31911508406491578> To:=?gbk?B?zsTS1SDFrsq/?=<714620454@QQ.COM> From:master<master@creditcard.cmbc.com.cn> Subject: =?gbk?B?w/HJ+tDF08O/qDIwMTfE6jEw1MK159fTttTVy7Wl?= X-Priority: 3 X-MSMail-Priority: Normal MIME-Version: 1.0 Content-Type: multipart/related; boundary="****MAIN_BOUNDARY****2727BD00F7949069C75FEDD44F1F2988" This is a multi-part message in MIME format. --****MAIN_BOUNDARY****2727BD00F7949069C75FEDD44F1F2988 Content-Type: multipart/alternative; boundary="****SUB_BOUNDARY****2727BD00F7949069C75FEDD44F1F2988" --****SUB_BOUNDARY****2727BD00F7949069C75FEDD44F1F2988 Content-Type: text/html; charset="gb2312" Content-Transfer-Encoding: base64
标签: 源代码
上传时间: 2017-11-17
上传用户:wendingchang
SharpMap是一个基于.net 2.0使用C#开发的Map渲染类库,可以渲染各类GIS数据(目前支持ESRI Shape和PostGIS格式),可应用于桌面和Web程序。 它的优点有: 1、占用资源较少,响应比较快。在对于项目中如果只需要简单的地图功能的话,是一个比 较好的选择 。 2、它是基于.NET 2.0环境下开发的,对于.NET环境支持较好。 3、使用简单,只要在.NET项目中引用相应的dll文件即可,没有复杂的安装步骤。 支持B/S及C/S两种方式的DLL调用,支持地图渲染效果 SharpMap最新版基于.NET Framework 4,采用C#开发的地图渲染引擎,非常易于使用。我这次给出的是比较稳定发布的V1.0版本和demo。
上传时间: 2018-01-09
上传用户:mawenyao
产品型号:TTP233D-SB6 封装形式:DFN-6 产品年份:新年份 联 系 人:许先生 联 系 QQ:1918885898 联系手机:18898582398 台湾通泰一级代理,原装现货更有优势!工程服务,技术支持,让您的生产高枕无忧。 单按键触摸检测 IC 概 述 ● TTP233D-SB6 TonTouchTM 是单按键触摸检测芯片, 此触摸检测芯片内建稳压电路, 提供 稳定的电压给触摸感应电路使用, 稳定的触摸检测效果可以广泛的满足不同应用的需求, 此触摸检测芯片是专为取代传统按键而设计, 触摸检测 PAD 的大小可依不同的灵敏度设 计在合理的范围内, 低功耗与宽工作电压, 是此触摸芯片在 DC 或 AC 应用上的特性。 特 点 ● 工作电压 2.4V ~ 5.5V ● 内建稳压电路提供稳定的电压给触摸检电路使用 ● 内建低压重置(LVR)功能 ● 工作电流 @VDD=3V﹐无负载 快速模式下典型值 4uA、更大值 8uA ● 输出响应时间大约为快速模式下 46mS @VDD=3V ● 可以由外部电容 (1~50pF) 调整灵敏度 ● 稳定的人体触摸检测可取代传统的按键开关 ● 提供快速模式 ● 提供输出模式选择 (TOG pin) 可选择直接输出或锁存 (toggle) 输出 ● 提供最长输出时间约 16 秒(±35% @ VDD=3.0V) ● Q pin 为 CMOS 输出﹐可由 (AHLB pin) 选择高电平输出有效或低电平输出有效 ● 上电后约有 0.5 秒的稳定时间﹐此期间内不要触摸检测点﹐此时所有功能都被禁止 ● 自动校准功能 刚上电的 8 秒内约每 1 秒刷新一次参考值﹐若在上电后的 8 秒内有触摸按键或 8 秒后仍未触摸 按键,则重新校准周期切换为 4 秒 应用范围 ● 各种消费性产品 ● 取代按钮按键 产品型号:VKD233DS 封装形式:DFN-6 产品年份:新年份 品牌:台湾元泰VINTEK 联 系 人:许先生 联 系 QQ:1918885898 联系手机:18898582398 台湾元泰独家代理,原装现货更有优势!原厂技术支持,让您的生产高枕无忧。 单按键触摸检测 IC 概 述 ● VKD233DS是单按键触摸检测芯片, 此触摸检测芯片内建稳压电路, 提供 稳定的电压给触摸感应电路使用, 稳定的触摸检测效果可以广泛的满足不同应用的需求, 此触摸检测芯片是专为取代传统按键而设计, 触摸检测 PAD 的大小可依不同的灵敏度设 计在合理的范围内, 低功耗与宽工作电压, 是此触摸芯片在 DC 或 AC 应用上的特性。 特 点 ● 工作电压 2.4V ~ 5.5V ● 内建稳压电路提供稳定的电压给触摸检电路使用 ● 内建低压重置(LVR)功能 ● 工作电流 @VDD=3V﹐无负载 快速模式下典型值 4uA、更大值 8uA ● 输出响应时间大约为快速模式下 46mS @VDD=3V ● 可以由外部电容 (1~50pF) 调整灵敏度 ● 稳定的人体触摸检测可取代传统的按键开关 ● 提供快速模式 ● 提供输出模式选择 (TOG pin) 可选择直接输出或锁存 (toggle) 输出 ● 提供最长输出时间约 16 秒(±35% @ VDD=3.0V) ● Q pin 为 CMOS 输出﹐可由 (AHLB pin) 选择高电平输出有效或低电平输出有效 ● 上电后约有 0.5 秒的稳定时间﹐此期间内不要触摸检测点﹐此时所有功能都被禁止 ● 自动校准功能 刚上电的 8 秒内约每 1 秒刷新一次参考值﹐若在上电后的 8 秒内有触摸按键或 8 秒后仍未触摸 按键,则重新校准周期切换为 4 秒 应用范围 ● 各种消费性产品 ● 取代按钮按键 我们的优势 1:我司为VINTEK/台湾元泰半导体股份有限公司/VINKA的授权大中华区代理商,产品渠道正宗,确保原装,大量库存现货! 2:公司工程力量雄厚,真诚技术服务支持,搭配原厂服务各种应用产品客户。 3:好价格源自连接原厂直销,你有量,我有价,确保原装的好价格。 VK原厂代理:许先生 QQ:191 888 5898 TEL:188 9858 2398 优势代理元泰VKD常用触控按键IC,简介如下: 标准触控IC-电池供电系列 VKD223EB --- 工作电压/电流:2.0V-5.5V/5uA-3V 感应通道数:1 通讯接口 更长响应时间快速模式60mS,低功耗模式220ms 封装:SOT23-6 VKD223B --- 工作电压/电流:2.0V-5.5V/5uA-3V 感应通道数:1 通讯接口 更长响应时间快速模式60mS,低功耗模式220ms 封装:SOT23-6 VKD232C --- 工作电压/电流: 2.4V-5.5V/2.5uA-3V 感应通道数:2封装:SOT23-6 通讯接口:直接输出,低电平有效 固定为多键输出模式,內建稳压电路 VKD233DH(更小体积2*2)---工作电压/电流: 2.4V-5.5V/2.5uA-3V 1按键 封装:DFN6L 通讯接口:直接输出,锁存(toggle)输出 有效键更长时间检测16S VKD233DB(推荐) --- 工作电压/电流: 2.4V-5.5V/2.5uA-3V 1感应按键 封装:SOT23-6 通讯接口:直接输出,锁存(toggle)输出 低功耗模式电流2.5uA-3V VKD233DH(推荐)---工作电压/电流: 2.4V-5.5V/2.5uA-3V 1感应按键 封装:SOT23-6 通讯接口:直接输出,锁存(toggle)输出 有效键更长时间检测16S 标准触控IC-多键触摸按钮系列 VKD104SB/N --- 工作电压/电流:2.4V-5.5V/13uA-3V 感应通道数/按键数:4 通讯接口:直接输出,锁存输出,开漏输出 封装:SSOP-16 VKD104BC --- 工作电压/电流:2.4V-5.5V/13uA-3V 感应通道数/按键数:4 通讯接口:直接输出,锁存输出,开漏输出 封装:SOP-16 VKD104BR --- 工作电压/电流:2.4V-5.5V/13uA-3V 感应通道数/按键数:2 通讯接口:直接输出, toggle输出 封装:SOP-8 VKD104QB --- 工作电压/电流:2.4V-5.5V/13uA-3V 感应通道数/按键数:4 通讯接口:直接输出,锁存输出,开漏输出 封装:QFN-16 VKD1016B --- 工作电压/电流:2.4V-5.5V/20uA-3V 感应通道数/按键数:16-8 通讯接口:直接输出,锁存输出,开漏输出 封装:SSOP-28 VKD1016L --- 工作电压/电流:2.4V-5.5V/20uA-3V 感应通道数:16-8 通讯接口:直接输出,锁存输出,开漏输出 封装:SSOP-28 (元泰原厂授权 原装保障 工程技术支持 大量现货库存) 标准触控IC-VK36系列 VK3601SS --- 工作电压/电流:2.4V-5.5V/1mA-5.0V 感应通道数:1 通讯接口:1 INPUT/1PWM OUT 封装:SOP-8 VK3601S --- 工作电压/电流:2.4V-5.5V/4mA-3.3V 感应通道数:1 通讯接口:1 INPUT/1PWM OUT 封装:SOP-8 VK3602XS --- 工作电压/电流:2.4V-5.5V/ 60uA-3V 感应通道数:2 通讯接口:2对2 toggle输出 封装:SOP-8 VK3602K --- 工作电压/电流:2.4V-5.5V/ 60uA-3V 感应通道数:2 通讯接口:2对2 toggle输出 封装:SOP-8 VK3606DM --- 工作电压/电流:3.1V-5.5V/ 3mA-5V 感应通道数:6 通讯接口:1对1直接输出 封装:SOP-16 VK3606OM --- 工作电压/电流:3.1V-5.5V/ 3mA-5V 感应通道数:6 通讯接口:1对1开漏输出 封装:SOP-16 VK3608BM --- 工作电压/电流:3.1V-5.5V/ 3mA-5V 感应通道数:6 通讯接口:BCD码直接输出 封装:SOP-16 VK3610IM --- 工作电压/电流:3.1V-5.5V/ 3mA-5V 感应通道数:6 通讯接口:SCL/SDA/INT通讯口 封装:SOP-16 标准触控IC-VK37系列 VK3702DM --- 工作电压/电流:3.1V-5.5V/ 3mA-5V 感应通道数:2 通讯接口:1对1直接输出 封装:SOP-8 VK3702OM --- 工作电压/电流:3.1V-5.5V/ 3mA-5V 感应通道数:2 通讯接口:1对1开漏输出 封装:SOP-8 VK3702TM --- 工作电压/电流:3.1V-5.5V/ 3mA-5V 感应通道数:2 通讯接口:1对1toggle输出 封装:SOP-8 VK3706DM --- 工作电压/电流:3.1V-5.5V/ 3mA-5V 感应通道数:6 通讯接口:1对1直接输出 封装:SOP-16 VK3706OM --- 工作电压/电流:3.1V-5.5V/ 3mA-5V 感应通道数:6 通讯接口:1对1开漏输出 封装:SOP-16 VK3708BM --- 工作电压/电流:3.1V-5.5V/ 3mA-5V 感应通道数:8 通讯接口:BCD码直接输出 封装:SOP-16 VK3710IM --- 工作电压/电流:3.1V-5.5V/ 3mA-5V 感应通道数:10 通讯接口:SCL/SDA/INT通讯口 封装:SOP-16 标准触控IC-VK38系列 VK3809IP --- 工作电压/电流:2.5V-5.5V/1.1mA-3V 感应通道数:9 通讯接口:IIC/INT通讯口 封装:SSOP-16 VK3813IP --- 工作电压/电流:2.5V-5.5V/1.1mA-3V 感应通道数:13 通讯接口:IIC/INT通讯口 封装:SSOP-20 VK3816IP --- 工作电压/电流:2.5V-5.5V/1.1mA-3V 感应通道数:16 通讯接口:IIC/INT通讯口 封装:SSOP-28 VK3816IP-A --- 工作电压/电流:2.5V-5.5V/1.1mA-3V 感应通道数:16 通讯接口:IIC/INT通讯口 封装:SSOP-28 (所有型号全部封装均有现货,欢迎加Q查询 191 888 5898 许生) 以上介绍内容为IC参数简介,难免有错漏,且相关IC型号众多,未能一一收录。欢迎联系索取完整资料及样品! 请加许先生 QQ:191 888 5898联系!谢谢 生意无论大小,做人首重诚信!本公司全体员工将既往开来,再接再厉。争取为各位带来更专业的技术支持,更优质的销售服务,更高性价比的好产品.竭诚希望能与各位客户朋友深入沟通,携手共进,共同成长,合作共赢!谢谢。 联 系 人:许先生 联 系 QQ:1918885898 联系手机:18898582398 http://www.szvinka.com
标签: D-SB TTP 233 台湾原厂 技术支持 单键触摸IC 高灵敏度 超小体积 封装薄
上传时间: 2018-11-24
上传用户:szqxw1688
无线电CW通联 基本Q短语,通联实例 A: CQCQCQ DE BA4ALC/5 BA4ALC/5 BA4ALC/5 PSE K B:BA4ALC/5 DE BD4IZL BD4IZL K A:BD4IZL DE BA4ALC/5 GM TNX FER CALL DR OM UR RST 559 55N K B:RR BA4ALC/5 DE BD4IZL GM DR OM TNX 55N RPRT UR 599 5NN FB MY NAME IS YU YU QTH JINAN JINAN BA4ALC/5 DE BD4IZL K A: DR YU OM TNX FB RPRT OP JACK JACK QTH NINGBO NINGBO WX HR IS FINE ES WARM TEMP 20C 20C HW? DE BA4ALC/5 K B:R DR JACK OM WX CLOUDY CLOUDY ES TEMP 15C 15C BT RIG FT80C FT80C ANT DIPOLE DP PWR 100WATTS 1TTW BA4ALC/5 DE BD4IZL K A: BD4IZL DE BA4ALC/5 MY RIG IS IC746PRO IC746PRO ES PWR 100W 1OOW BT ANT 2 ELE YAGI 2ELE YAGI 12MH TNX FER NICE QSO QSL VIA BURO HPE CUAGN BD4IZL DE BA4ALC/5 73 73 GL ES GB TU TU SK.. B:TNX FB CW QSO QSL QRZ.COM CUAGN BA4ALC/5 DE BD4IZL 73 DR JACK TU SK.. A:. B:.
上传时间: 2019-03-05
上传用户:shuyinglee
#include<stdio.h> #include<string.h> #include<stdlib.h> #define N 100 int iNumOfStu=0; struct score { float math; float english; float computer; }; struct student { int number; char name[20]; struct score sco; float average; }; struct student stu[N]; void print_menu(void);//输出菜单 void choosemenu(void);//菜单选择 void input_student1(int);//输入学生信息 void input_student2(void);//输入总函数 void input_student3(int &,int);//判断学号是否重复 void input_student4(int,int);//覆盖原信息 void sort_student3(student s[],int);//按照英语成绩排序 void sort_student4(student s[],int);//按照计算机成绩排序 void sort_student2(student s[],int);//按照数学成绩排序 void sort_student5(student s[],int);//按照平均成绩排序 float input_score2(int);//计算学生平均成绩 void print_student2(void);//显示表头 void print_student3(int);//显示学生信息 void print_student1(int);//显示全部学生资料 void sort_student1(void);//排序总函数 void menu(void);//菜单调度总函数 int search_student2(int);//按学号查询学生信息并输出 void search_student3(int);//按平均分最高查询并输出 void search_student1(void);//查询总函数 void delete_student2(int,int);//删除学生信息 void delete_student1(void);//删除总函数 void change_student2(int);//修改学生资料 void change_student1(void);//修改总函数 void input_score3(int);//统计成绩 void input_score1(void);//统计成绩总函数 void print_help(void);//输出帮助信息 void exit_student(void);//退出系统 void save_student(student *,int);//保存学生信息 void main() { menu(); } void save_student(student *s,int a)//保存学生信息 { FILE *fp; if((fp=fopen("d:\\学生信息.txt","wb"))==NULL) { printf("不能打开文件!\n"); } else { printf("保存信息到D盘\n"); fprintf(fp,"本班所有学生具体信息如下:\r\n"); fprintf(fp," 学号 姓名 数学成绩 英语成绩 计算机成绩 平均成绩\r\n"); for(int i=0;i<a;i++) { fprintf(fp,"%8d%12s%14.2f%14.2f%14.2f%14.2f\n",stu[i].number,stu[i].name,stu[i].sco.math,stu[i].sco.english,stu[i].sco.computer,stu[i].average); fprintf(fp,"\r\n"); } fclose(fp); printf("信息保存成功!\n"); } } void exit_student(void)//退出系统 { exit(1); } void print_help(void)//输出帮助信息 { printf("本系统所能容纳的最大学生数为%d人\n学生信息保存在D盘根目录下,保存文件为“学生信息.txt”。\n感谢使用!\n",N); } void input_score1(void)//统计成绩总函数 { int c; c=search_student2(iNumOfStu); printf("学号:%d\n",stu[c].number); printf("姓名:%s\n",stu[c].name); input_score3(c); printf("新成绩录入成功!\n"); stu[c].average=input_score2(c); } void input_score3(int a)//统计成绩 { printf("数学新成绩:"); scanf("%f",&stu[a].sco.math); printf("英语新成绩:"); scanf("%f",&stu[a].sco.english); printf("计算机新成绩:"); scanf("%f",&stu[a].sco.computer); } void change_student2(int a)//修改学生资料 { printf("学号:%d----修改为:",stu[a].number); scanf("%d",&stu[a].number); getchar(); printf("姓名:%s----修改为:",stu[a].name); gets(stu[a].name); printf("数学成绩:%.2f----修改为:",stu[a].sco.math); scanf("%f",&stu[a].sco.math); printf("英语成绩:%.2f----修改为:",stu[a].sco.english); scanf("%f",&stu[a].sco.english); printf("计算机成绩:%.2f----修改为:",stu[a].sco.computer); scanf("%f",&stu[a].sco.computer); } void change_student1(void)//修改总函数 { int c; c=search_student2(iNumOfStu); getchar(); printf("是否要修改此学生信息?(“y”代表是)"); char d; scanf("%c",&d); if(d=='y'||d=='Y') { change_student2(c); stu[c].average=input_score2(c); printf("信息修改成功!\n"); } } void delete_student1(void)//删除总函数 { int c; c=search_student2(iNumOfStu); getchar(); printf("是否删除此条记录?(“y”代表是)"); char d; scanf("%c",&d); if(d=='y'||d=='Y') { delete_student2(c,iNumOfStu); printf("记录已删除!\n"); } } void delete_student2(int a,int b)//删除学生信息 { for(int i=a;i<b-1;i++) { stu[i]=stu[i+1]; } --iNumOfStu; } void search_student1(void)//查询总函数 { printf("1、按学号查询\n2、按平均分最高查询\n请选择:"); int c; scanf("%d",&c); switch(c) { case 1: { search_student2(iNumOfStu); break; } case 2: { search_student3(iNumOfStu); break; } default: break; } } void menu(void)//菜单调度总函数 { print_menu(); choosemenu(); } void sort_student1(void)//排序总函数 { printf("1、按数学成绩排序\n2、按英语成绩排序\n3、按计算机成绩排序\n4、按平均成绩排序\n请选择:"); int c; scanf("%d",&c); switch(c) { case 1: { sort_student2(stu,iNumOfStu); break; } case 2: { sort_student3(stu,iNumOfStu); break; } case 3: { sort_student4(stu,iNumOfStu); break; } case 4: { sort_student5(stu,iNumOfStu); break; } default: break; } } void print_student1(int a)//显示全部学生资料 { printf("本班所有学生具体信息如下\n"); print_student2(); for(int i=0;i<a;i++) { print_student3(i); } } void print_student3(int a)//显示学生信息 { printf("%8d%12s%14.2f%14.2f%14.2f%14.2f\n",stu[a].number,stu[a].name,stu[a].sco.math,stu[a].sco.english,stu[a].sco.computer,stu[a].average); } void print_student2(void)//显示表头 { printf(" 学号 姓名 数学成绩 英语成绩 计算机成绩 平均成绩\n"); } void input_student4(int a,int b)//覆盖原信息 { stu[a]=stu[b-1]; --iNumOfStu; } void input_student3(int &a,int b)//判断学号是否重复 { if(a!=0) { int i=0; do { if(stu[a].number==stu[i].number) { printf("此学号代表的学生已录入\n1、覆盖原信息\n2、重新输入\n请选择:"); int c; scanf("%d",&c); switch(c) { case 1: { input_student4(i,iNumOfStu); a=iNumOfStu-1; printf("信息已替换!\n"); break; } case 2: { printf("请重新输入学生信息:\n"); input_student1(iNumOfStu-1); break; } default: break; } break; } ++i; } while(i<b-1); } } void print_menu(void)//输出菜单 { printf("======欢迎来到学生信息管理系统======\n"); printf(" 1、输入学生资料\n"); printf(" 2、删除学生资料\n"); printf(" 3、查询学生资料\n"); printf(" 4、修改学生资料\n"); printf(" 5、显示学生资料\n"); printf(" 6、统计学生成绩\n"); printf(" 7、排序学生成绩\n"); printf(" 8、保存学生资料\n"); printf(" 9、获取帮助信息\n"); printf(" 10、退出系统\n"); printf("====================================\n"); printf("请选择:"); } void input_student2(void)//输入总函数 { char end; printf("请输入学生信息(在最后一个学生信息录入完成后以“/”结束录入):\n"); for(int i=0;(end=getchar())!='/';i++) { input_student1(i); ++iNumOfStu; input_student3(i,iNumOfStu); } for(int j=0;j<iNumOfStu;j++) { stu[j].average=input_score2(j); } } void input_student1(int a)//输入学生信息 { printf("学号:"); scanf("%d",&stu[a].number); getchar(); printf("姓名:"); gets(stu[a].name); printf("数学成绩:"); scanf("%f",&stu[a].sco.math); printf("英语成绩:"); scanf("%f",&stu[a].sco.english); printf("计算机成绩:"); scanf("%f",&stu[a].sco.computer); } float input_score2(int a)//计算学生平均成绩 { return (stu[a].sco.math+stu[a].sco.english+stu[a].sco.computer)/3; } void search_student3(int a)//按平均分最高查询并输出 { int max=0; for(int i=0;i<a;i++) { if(stu[max].average<stu[i].average) { max=i; } } print_student2(); print_student3(max); } void sort_student2(student s[],int a)//按照数学成绩排序 { struct student temp; for(int i=0;i<a-1;i++) { int max=i; for(int j=i+1;j<a;j++) if(stu[j].sco.math>stu[max].sco.math) { max=j; } if(max!=i) { temp=stu[max]; stu[max]=stu[i]; stu[i]=temp; } } print_student2(); for(int k=0;k<a;k++) { print_student3(k); } } void sort_student3(student s[],int a)//按照英语成绩排序 { struct student temp; for(int i=0;i<a-1;i++) { int max=i; for(int j=i+1;j<a;j++) if(stu[j].sco.english>stu[max].sco.english) { max=j; } if(max!=i) { temp=stu[max]; stu[max]=stu[i]; stu[i]=temp; } } print_student2(); for(int k=0;k<a;k++) { print_student3(k); } } void sort_student4(student s[],int a)//按照计算机成绩排序 { struct student temp; for(int i=0;i<a-1;i++) { int max=i; for(int j=i+1;j<a;j++) if(stu[j].sco.computer>stu[max].sco.computer) { max=j; } if(max!=i) { temp=stu[max]; stu[max]=stu[i]; stu[i]=temp; } } print_student2(); for(int k=0;k<a;k++) { print_student3(k); } } void sort_student5(student s[],int a)//按照平均成绩排序 { struct student temp; for(int i=0;i<a-1;i++) { int max=i; for(int j=i+1;j<a;j++) if(stu[j].average>stu[max].average) { max=j; } if(max!=i) { temp=stu[max]; stu[max]=stu[i]; stu[i]=temp; } } print_student2(); for(int k=0;k<a;k++) { print_student3(k); } } int search_student2(int a)//按照学号查找学生并输出 { int num; int c; printf("请输入要查询的学号:"); scanf("%d",&num); for(int i=0;i<a;i++) { if(num==stu[i].number) { c=i; } } printf("此学生的信息是:\n"); print_student2(); print_student3(c); return c; } void choosemenu(void)//菜单选择 { int i; scanf("%d",&i); switch(i) { case 1: { input_student2(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 2: { delete_student1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 3: { search_student1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 4: { change_student1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 5: { print_student1(iNumOfStu); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 6: { input_score1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 7: { sort_student1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 8: { save_student(stu,iNumOfStu); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 9: { print_help(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 10: { exit_student(); } default: break; } } 运行结果: 源文件下载地址: http://115.com/file/clnq138g#一个简单的学生成绩管理系统.rar (请将此地址复制到浏览器地址栏中访问下载页面)
标签: 成绩查询系统
上传时间: 2019-06-08
上传用户:啊的撒旦
#include<stdio.h> #include<string.h> #include<stdlib.h> #define N 100 int iNumOfStu=0; struct score { float math; float english; float computer; }; struct student { int number; char name[20]; struct score sco; float average; }; struct student stu[N]; void print_menu(void);//输出菜单 void choosemenu(void);//菜单选择 void input_student1(int);//输入学生信息 void input_student2(void);//输入总函数 void input_student3(int &,int);//判断学号是否重复 void input_student4(int,int);//覆盖原信息 void sort_student3(student s[],int);//按照英语成绩排序 void sort_student4(student s[],int);//按照计算机成绩排序 void sort_student2(student s[],int);//按照数学成绩排序 void sort_student5(student s[],int);//按照平均成绩排序 float input_score2(int);//计算学生平均成绩 void print_student2(void);//显示表头 void print_student3(int);//显示学生信息 void print_student1(int);//显示全部学生资料 void sort_student1(void);//排序总函数 void menu(void);//菜单调度总函数 int search_student2(int);//按学号查询学生信息并输出 void search_student3(int);//按平均分最高查询并输出 void search_student1(void);//查询总函数 void delete_student2(int,int);//删除学生信息 void delete_student1(void);//删除总函数 void change_student2(int);//修改学生资料 void change_student1(void);//修改总函数 void input_score3(int);//统计成绩 void input_score1(void);//统计成绩总函数 void print_help(void);//输出帮助信息 void exit_student(void);//退出系统 void save_student(student *,int);//保存学生信息 void main() { menu(); } void save_student(student *s,int a)//保存学生信息 { FILE *fp; if((fp=fopen("d:\\学生信息.txt","wb"))==NULL) { printf("不能打开文件!\n"); } else { printf("保存信息到D盘\n"); fprintf(fp,"本班所有学生具体信息如下:\r\n"); fprintf(fp," 学号 姓名 数学成绩 英语成绩 计算机成绩 平均成绩\r\n"); for(int i=0;i<a;i++) { fprintf(fp,"%8d%12s%14.2f%14.2f%14.2f%14.2f\n",stu[i].number,stu[i].name,stu[i].sco.math,stu[i].sco.english,stu[i].sco.computer,stu[i].average); fprintf(fp,"\r\n"); } fclose(fp); printf("信息保存成功!\n"); } } void exit_student(void)//退出系统 { exit(1); } void print_help(void)//输出帮助信息 { printf("本系统所能容纳的最大学生数为%d人\n学生信息保存在D盘根目录下,保存文件为“学生信息.txt”。\n感谢使用!\n",N); } void input_score1(void)//统计成绩总函数 { int c; c=search_student2(iNumOfStu); printf("学号:%d\n",stu[c].number); printf("姓名:%s\n",stu[c].name); input_score3(c); printf("新成绩录入成功!\n"); stu[c].average=input_score2(c); } void input_score3(int a)//统计成绩 { printf("数学新成绩:"); scanf("%f",&stu[a].sco.math); printf("英语新成绩:"); scanf("%f",&stu[a].sco.english); printf("计算机新成绩:"); scanf("%f",&stu[a].sco.computer); } void change_student2(int a)//修改学生资料 { printf("学号:%d----修改为:",stu[a].number); scanf("%d",&stu[a].number); getchar(); printf("姓名:%s----修改为:",stu[a].name); gets(stu[a].name); printf("数学成绩:%.2f----修改为:",stu[a].sco.math); scanf("%f",&stu[a].sco.math); printf("英语成绩:%.2f----修改为:",stu[a].sco.english); scanf("%f",&stu[a].sco.english); printf("计算机成绩:%.2f----修改为:",stu[a].sco.computer); scanf("%f",&stu[a].sco.computer); } void change_student1(void)//修改总函数 { int c; c=search_student2(iNumOfStu); getchar(); printf("是否要修改此学生信息?(“y”代表是)"); char d; scanf("%c",&d); if(d=='y'||d=='Y') { change_student2(c); stu[c].average=input_score2(c); printf("信息修改成功!\n"); } } void delete_student1(void)//删除总函数 { int c; c=search_student2(iNumOfStu); getchar(); printf("是否删除此条记录?(“y”代表是)"); char d; scanf("%c",&d); if(d=='y'||d=='Y') { delete_student2(c,iNumOfStu); printf("记录已删除!\n"); } } void delete_student2(int a,int b)//删除学生信息 { for(int i=a;i<b-1;i++) { stu[i]=stu[i+1]; } --iNumOfStu; } void search_student1(void)//查询总函数 { printf("1、按学号查询\n2、按平均分最高查询\n请选择:"); int c; scanf("%d",&c); switch(c) { case 1: { search_student2(iNumOfStu); break; } case 2: { search_student3(iNumOfStu); break; } default: break; } } void menu(void)//菜单调度总函数 { print_menu(); choosemenu(); } void sort_student1(void)//排序总函数 { printf("1、按数学成绩排序\n2、按英语成绩排序\n3、按计算机成绩排序\n4、按平均成绩排序\n请选择:"); int c; scanf("%d",&c); switch(c) { case 1: { sort_student2(stu,iNumOfStu); break; } case 2: { sort_student3(stu,iNumOfStu); break; } case 3: { sort_student4(stu,iNumOfStu); break; } case 4: { sort_student5(stu,iNumOfStu); break; } default: break; } } void print_student1(int a)//显示全部学生资料 { printf("本班所有学生具体信息如下\n"); print_student2(); for(int i=0;i<a;i++) { print_student3(i); } } void print_student3(int a)//显示学生信息 { printf("%8d%12s%14.2f%14.2f%14.2f%14.2f\n",stu[a].number,stu[a].name,stu[a].sco.math,stu[a].sco.english,stu[a].sco.computer,stu[a].average); } void print_student2(void)//显示表头 { printf(" 学号 姓名 数学成绩 英语成绩 计算机成绩 平均成绩\n"); } void input_student4(int a,int b)//覆盖原信息 { stu[a]=stu[b-1]; --iNumOfStu; } void input_student3(int &a,int b)//判断学号是否重复 { if(a!=0) { int i=0; do { if(stu[a].number==stu[i].number) { printf("此学号代表的学生已录入\n1、覆盖原信息\n2、重新输入\n请选择:"); int c; scanf("%d",&c); switch(c) { case 1: { input_student4(i,iNumOfStu); a=iNumOfStu-1; printf("信息已替换!\n"); break; } case 2: { printf("请重新输入学生信息:\n"); input_student1(iNumOfStu-1); break; } default: break; } break; } ++i; } while(i<b-1); } } void print_menu(void)//输出菜单 { printf("======欢迎来到学生信息管理系统======\n"); printf(" 1、输入学生资料\n"); printf(" 2、删除学生资料\n"); printf(" 3、查询学生资料\n"); printf(" 4、修改学生资料\n"); printf(" 5、显示学生资料\n"); printf(" 6、统计学生成绩\n"); printf(" 7、排序学生成绩\n"); printf(" 8、保存学生资料\n"); printf(" 9、获取帮助信息\n"); printf(" 10、退出系统\n"); printf("====================================\n"); printf("请选择:"); } void input_student2(void)//输入总函数 { char end; printf("请输入学生信息(在最后一个学生信息录入完成后以“/”结束录入):\n"); for(int i=0;(end=getchar())!='/';i++) { input_student1(i); ++iNumOfStu; input_student3(i,iNumOfStu); } for(int j=0;j<iNumOfStu;j++) { stu[j].average=input_score2(j); } } void input_student1(int a)//输入学生信息 { printf("学号:"); scanf("%d",&stu[a].number); getchar(); printf("姓名:"); gets(stu[a].name); printf("数学成绩:"); scanf("%f",&stu[a].sco.math); printf("英语成绩:"); scanf("%f",&stu[a].sco.english); printf("计算机成绩:"); scanf("%f",&stu[a].sco.computer); } float input_score2(int a)//计算学生平均成绩 { return (stu[a].sco.math+stu[a].sco.english+stu[a].sco.computer)/3; } void search_student3(int a)//按平均分最高查询并输出 { int max=0; for(int i=0;i<a;i++) { if(stu[max].average<stu[i].average) { max=i; } } print_student2(); print_student3(max); } void sort_student2(student s[],int a)//按照数学成绩排序 { struct student temp; for(int i=0;i<a-1;i++) { int max=i; for(int j=i+1;j<a;j++) if(stu[j].sco.math>stu[max].sco.math) { max=j; } if(max!=i) { temp=stu[max]; stu[max]=stu[i]; stu[i]=temp; } } print_student2(); for(int k=0;k<a;k++) { print_student3(k); } } void sort_student3(student s[],int a)//按照英语成绩排序 { struct student temp; for(int i=0;i<a-1;i++) { int max=i; for(int j=i+1;j<a;j++) if(stu[j].sco.english>stu[max].sco.english) { max=j; } if(max!=i) { temp=stu[max]; stu[max]=stu[i]; stu[i]=temp; } } print_student2(); for(int k=0;k<a;k++) { print_student3(k); } } void sort_student4(student s[],int a)//按照计算机成绩排序 { struct student temp; for(int i=0;i<a-1;i++) { int max=i; for(int j=i+1;j<a;j++) if(stu[j].sco.computer>stu[max].sco.computer) { max=j; } if(max!=i) { temp=stu[max]; stu[max]=stu[i]; stu[i]=temp; } } print_student2(); for(int k=0;k<a;k++) { print_student3(k); } } void sort_student5(student s[],int a)//按照平均成绩排序 { struct student temp; for(int i=0;i<a-1;i++) { int max=i; for(int j=i+1;j<a;j++) if(stu[j].average>stu[max].average) { max=j; } if(max!=i) { temp=stu[max]; stu[max]=stu[i]; stu[i]=temp; } } print_student2(); for(int k=0;k<a;k++) { print_student3(k); } } int search_student2(int a)//按照学号查找学生并输出 { int num; int c; printf("请输入要查询的学号:"); scanf("%d",&num); for(int i=0;i<a;i++) { if(num==stu[i].number) { c=i; } } printf("此学生的信息是:\n"); print_student2(); print_student3(c); return c; } void choosemenu(void)//菜单选择 { int i; scanf("%d",&i); switch(i) { case 1: { input_student2(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 2: { delete_student1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 3: { search_student1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 4: { change_student1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 5: { print_student1(iNumOfStu); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 6: { input_score1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 7: { sort_student1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 8: { save_student(stu,iNumOfStu); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 9: { print_help(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 10: { exit_student(); } default: break; } } 运行结果: 源文件下载地址: http://115.com/file/clnq138g#一个简单的学生成绩管理系统.rar (请将此地址复制到浏览器地址栏中访问下载页面) #include<stdio.h> #include<string.h> #include<stdlib.h> #define N 100 int iNumOfStu=0; struct score { float math; float english; float computer; }; struct student { int number; char name[20]; struct score sco; float average; }; struct student stu[N]; void print_menu(void);//输出菜单 void choosemenu(void);//菜单选择 void input_student1(int);//输入学生信息 void input_student2(void);//输入总函数 void input_student3(int &,int);//判断学号是否重复 void input_student4(int,int);//覆盖原信息 void sort_student3(student s[],int);//按照英语成绩排序 void sort_student4(student s[],int);//按照计算机成绩排序 void sort_student2(student s[],int);//按照数学成绩排序 void sort_student5(student s[],int);//按照平均成绩排序 float input_score2(int);//计算学生平均成绩 void print_student2(void);//显示表头 void print_student3(int);//显示学生信息 void print_student1(int);//显示全部学生资料 void sort_student1(void);//排序总函数 void menu(void);//菜单调度总函数 int search_student2(int);//按学号查询学生信息并输出 void search_student3(int);//按平均分最高查询并输出 void search_student1(void);//查询总函数 void delete_student2(int,int);//删除学生信息 void delete_student1(void);//删除总函数 void change_student2(int);//修改学生资料 void change_student1(void);//修改总函数 void input_score3(int);//统计成绩 void input_score1(void);//统计成绩总函数 void print_help(void);//输出帮助信息 void exit_student(void);//退出系统 void save_student(student *,int);//保存学生信息 void main() { menu(); } void save_student(student *s,int a)//保存学生信息 { FILE *fp; if((fp=fopen("d:\\学生信息.txt","wb"))==NULL) { printf("不能打开文件!\n"); } else { printf("保存信息到D盘\n"); fprintf(fp,"本班所有学生具体信息如下:\r\n"); fprintf(fp," 学号 姓名 数学成绩 英语成绩 计算机成绩 平均成绩\r\n"); for(int i=0;i<a;i++) { fprintf(fp,"%8d%12s%14.2f%14.2f%14.2f%14.2f\n",stu[i].number,stu[i].name,stu[i].sco.math,stu[i].sco.english,stu[i].sco.computer,stu[i].average); fprintf(fp,"\r\n"); } fclose(fp); printf("信息保存成功!\n"); } } void exit_student(void)//退出系统 { exit(1); } void print_help(void)//输出帮助信息 { printf("本系统所能容纳的最大学生数为%d人\n学生信息保存在D盘根目录下,保存文件为“学生信息.txt”。\n感谢使用!\n",N); } void input_score1(void)//统计成绩总函数 { int c; c=search_student2(iNumOfStu); printf("学号:%d\n",stu[c].number); printf("姓名:%s\n",stu[c].name); input_score3(c); printf("新成绩录入成功!
标签: c语言
上传时间: 2019-06-09
上传用户:啊的撒旦
Windows7下IE 8使用技巧5则 IE几乎是各位菜鸟、大虾上网时的首选浏览器,有关它的常规使用技巧,相信各位早已是耳熟能详了。只要你足够用心、细心,就一定会不断“挖掘”出IE新的使用技巧来。不信,就来看看下面的几则新鲜用法吧,相信会让各位有耳目一新之感! 1.寻找失落的IE启动按钮 正常情况下,IE浏览器的快速启动按钮会在系统任务栏中“安家落户”,可是一旦操作不小心,往往会导致IE浏览器的快速启动按钮在任务栏中“消失”。那么 你面对IE启动按钮从系统任务栏中消失时,你该如何去将它寻找回来呢?其实方法很简单,只要你按照下面的步骤来进行操作就可以了。 首先用鼠标右键单击桌面中的IE浏览器图标,从弹出的快捷菜单中执行“创建快捷方式”命令,这样就能为IE浏览器创建好一个对应的快捷方式。 接着打开系统资源管理窗口,依次双击C盘中的“Windows”文件夹、“ApplicationData”文件夹、“Microsoft”文件夹、 “InternetExplorer”文件夹、“QuickLaunch”文件夹;然后将桌面中创建好的IE快捷方式,直接拖动到 “QuickLaunch”文件夹窗口中。 当然还有更简洁的方法,那就是直接将系统桌面中的IE浏览器图标,用鼠标左键拖动到系统任务栏中,不过在拖放时一定要在出现虚线图标之后才可以。 2.让IE也能断点续传 大家知道,单击IE页面中的某个下载链接地址时,IE就会自动调用其内置的下载功能来下载文件;不过这种功能一旦遇到网络堵塞而掉线的情况时,就会将已经下载好的内容全部丢失,以后再次下载时还需要从头再来,显然IE内置的下载功能容易耽误下载时间。 那么我们有没有办法让IE的下载功能也支持断点续传呢?答案是肯定的。只要你使用IE来下载文件出现意外掉线时,或者发现IE下载进度条长时间没有任何反 应时,请不要单击该下载对话框中的“取消”按钮,而应该直接单击该窗口中的“x”按钮,来暂时退出下载状态;接着重新单击网页中的这个下载链接地址,然后 再单击“保存”按钮,在弹出的保存对话框中,将文件名和保存路径都设置为与上次没下载完时的文件相同,这样IE就能接着上次没下载完的位置,继续下载余下 的内容;当然这种IE断点续传功能只适合HTTP下载方式,而不适合FTP下载方式。 3.将IE选项设置“架空” 倘若允许其他人随意对IE的上网参数进行设置的话,那么IE的安全、甚至系统的安全都会受到威胁,例如一旦非法用户打开IE浏览器的“Internet选 项”设置框,将上网安全级别降低的话,那么网络中的各种病毒、木马,都有可能就会随之而来。为了确保安全,你有时必须“架空”IE浏览器中的 Internet选项,让非法用户无法自行设置IE上网参数: 首先打开Windows系统的资源管理器窗口,找到并进入到“system32”文件夹窗口,选中其中的“inetcpl.cpl”文件,并用鼠标右键单 击之,从弹出的右键菜单中,单击“重命名”选项,将“inetcpl.cpl”的文件名称更名为“inetcplnew.cpl”,当然你也能将其换成其 他名称,不过你一定要将更名后的文件名称记得,以后需要恢复时以便能快速找到。完成重命名操作后,再单击IE浏览器中的“Internet选项”命令时, 就不能进入到选项设置窗口了。 4.不用工具也能修复IE 在网上尽情冲浪时,IE难免会遭遇恶意攻击;那么面对被恶意修改的IE,你该如何去恢复它呢?大多数人都会去选用各种专业的IE修复工具,来对付IE的恶意攻击;也有水平高一些的“大虾”,通过手工修改注册表的方法,来恢复IE的本来“面貌”。可是当你手头没有专业的IE修复工具可以利用时,或者自己对注册表了解不深时,你该如何去修复IE呢?为此,本文为你提供一则非常便利的解决方法,不过该方法只能适合Windows2000或WindowsXP操作系统,下面就是该方法的具体实现步骤: 依次单击“开始”/“设置”/“控制面板”命令,然后依次双击“管理工具”/“计算机管理”图标,在随后弹出的窗口中,依次展开“系统工具”/“本地用户 和组”文件夹,再单击“用户”选项,在对应的右边子窗口中,右击空白区域,执行快捷菜单中的“新用户”命令,将新用户命名为“newusr”,同时设置好 该账号的访问密码; 完成新用户的创建任务后,依次单击“开始”/“关机”命令,然后执行“注销Administrator”操作,再改用“newusr”账号重新进入到 Windows2000系统;接着打开系统注册表编辑界面,依次展开注册表分支HKEY_CURRENT_USER\Software \Microsoft\InternetExplorer,并将“InternetExplorer”主键选中,再依次单击注册表菜单栏中的“注册表”/ “导出注册表文件”命令,将有关IE部分的注册表分支内容导出,例如保存为“ienew.reg”文件,如此一来你就能将“newusr”账号下关于IE 的正确设置全部导出来了;由于“newusr”账号是刚刚新建的,因此该账号下的IE设置都是系统默认的正确设置,也就是说它是没有被攻击过的; 下面注销“newusr”账号,再以“Administrator”账号登录系统;然后打开注册表编辑窗口,依次执行菜单栏中的 “注册表”/“导入注册表文件”命令,在弹出的文件选择对话框中,将前面导出的“ienew.reg”文件导入到注册表中,就能使IE恢复本来“面貌” 了。 当然,这样的方法比较麻烦,因此我们推荐IE一键修复 0.3(点击官方下载)167K ,中文绿色免费软件,可以一键修复被恶意篡改的IE浏览器。此外,在魔方(点此下载)中,也将加入IE的修复功和监控恶意软件等安全功能。 5. 找回Windows 7中的IE 8桌面图标 在Windows 7中,由于超级任务栏的存在,微软取消了IE 8的桌面图标设置,也就是说,在Windows 7中,无法在桌面显示IE 8图标,当然,快捷方式是不能算的。不过近来有会员在论坛为我们提供了一个很好的办法,可以以"曲线"的方式实现IE 8图标桌面显示。尽管还不完美,但基本的功能都具备了,大家可以通过Windows7优化大师 - 美化大师 - 系统外观来自行设置。 善用快捷键,玩转Windows 7 便签程序 便笺是一种可以粘贴在任意位置的正方形或长条形纸条,方便我们随时记录一些信息,或是安排日常工作,随写随记,非常方便。在 Windows 中为我们提供了和实物便笺一样功能的小程序,本人非常喜欢。在 Vista 中,这个小程序作为边栏小工具出现,但在 Windows 7 中已经成为了一个标准的Windows附件程序。 依次点击Windows7的开始菜单按钮 -》所有程序 -》附件 -》,点击打开便签,如下图所示: 不用软件,非会员彻底去除QQ2009/2010广告 昨天谈到了《不是VIP用户也不怕 不需任何补丁屏蔽迅雷广告》,用户反馈非常的多,如果没能设置成功的,请仔细阅读步骤,100%的可以搞定的,当然,如果迅雷再发新版升级后,就不保证了,有任何新的变化,请随时关注Windows7之家和Vista之家首页。 说完了迅雷,我们再来说下QQ吧,QQ的免费用户数量除了Windows外,就属它大了。 屏蔽广告除了更干净洁爽之外,更大的好处是不用随时下载体积大的flash动画和gif动画图片了,QQ登陆速度显著提升,同时,也少了带宽消耗。 非QQ会员彻底屏蔽QQ2009正式版广告: 在QQ2009 Beta版的时候,可以通过删除一些文件让非会员也能实现去广告的目的,可惜从QQ2009正式版起增加了文件完整性检查,删除文件会导致QQ无法启动,并要求重新安装。 那么对于非会员来说,QQ2009正式版(包括之后的SP6、SP5、SP4、SP3、SP2、SP1等)就不能手动去广告了吗? 其实还是有办法的,而且做起来也不难,你说是用第三方工具? 不需要!只要你对Windows操作系统稍有了解就可以轻松搞定,除了QQ2009,您也可以把这些招数用在QQ2010的测试版中,几乎完全一样。 下面,就把找到的方法共享给大家吧! 在开始之前,请先退出您正在运行中的QQ。 1、去除腾讯迷你首页: 对于每次启动QQ后,都弹出的“腾讯迷你首页”,很多人一定感到不爽,就让我们先拿它开刀吧。 首先进入QQ的安装文件夹,接着进入 Plugin\Com.Tencent.Advertisement\bin 文件夹,这里你会看到一个Advertisement.dll文件,它就是迷你首页的关键所在,只需将这个文件改成只读属性,以后启动QQ就不会再看到迷你首页了。在这个文件上面点击鼠标右键,点击属性,勾选只读,确定退出。 2、去除聊天窗口右上角广告: 这个操作针对XP、Win2003系统用户和Vista、Windows7、Win2008略有不同,主要是文件夹路径上的。 1)XP、Win2003系统用户操作方法: 进入 X:\Documents and Settings\用户名\Application Data\Tencent\QQ\Misc\com.tencent.advertisement (注意,X指的系统所在盘盘符,一般是C),首先删除这个文件夹里面的所有文件,注意文件夹本身不能删除,然后把当前用户的写入权限给拒绝掉(需要当前分区为NTFS格式)。 方法:文件夹上右键,属性 - 安全标签,选中当前登录用户,接着在下方“写入”权限里,拒绝上打勾。 2)Vista、Windows7、Win2008用户的操作: 进入 X:\users\用户名\appdata\Roaming\Tencent\QQ\Misc\com.tencent.advertisement,在这个文件上面点击鼠标右键,点击属性,然后点击安全标签, 选中你的当前用户,如下图示例中的Ruamei.com,然后点击“编辑”按钮,OK,写入那儿设置下拒绝吧。 这样,无论是会员还是非会员,你都不会有任何的广告图片下载了。 3、去除QQ2009/QQ2010聊天窗口的左下角广告 如今的聊天窗口,除了右上角的图片广告外,左下角还多了一条文字广告,既然要去广告,那么这块自然也不能遗忘。同样操作针对XP、Win2003系统用户和Vista、Windows7、Win2008而有所不同。 1)XP、Win2003系统用户操作方法: 再次提醒您修改前首先要关闭QQ,然后进入X:\Documents and Settings\用户名\Application Data\Tencent\Users\你的QQ号\QQ\(注意,X指的系统所在盘盘符,一般是C),删除其中的Misc.db,接着新建一个文件夹并命名为Misc.db(是不是和防止U盘自动运行病毒的方法很像)。 2)Vista、Windows7、Win2008用户的操作: 关闭QQ后,进入X:\users\用户名\appdata\Roaming\Tencent\Users\你的QQ号码\QQ\,然后操作同上。 搞定,如此一来,这几个地方都没广告了吧! 好吧,打开一个标签窗口如下图所示,当然,你可以多点多开。 如果你正在使用这个程序,是否觉得它的功能太简单了,点点右键,弹出的菜单中只能切换便笺的颜色,没有其他基本的格式编辑功能。 其实,除了标准的 Ctrl 加 XCVA 的剪切/复制/粘贴/全选快捷键之外,其实便笺程序还有一些快捷键可以使用: 快捷键 功能 Ctrl+N 新建一张便笺 Ctrl+D 删除当前便笺 Ctrl+E 居中对齐 Ctrl+R 右对齐 Ctrl+J 左对齐 Ctrl+I 斜体 Ctrl+B 粗体 Ctrl+U 下划线 Ctrl+T 删除线 Ctrl+Shift+> 加大选中文字的字号 Ctrl+Shift+< 缩小选中文字的字号 Ctrl+Shift+L 在文字前添加项目符号和编号(反复按可循环切换)。其中编号包括数字、大小写字母、大小写罗马数字几种形式。连按两次回车可取消。 知道了这些快捷键,我们就可以做出一些满足日常需要的格式了: 像 Windows 这种应用广泛的软件或硬件,由于全球数十亿人都会使用到,因此一个小小的功能特性都可以对世界造成很大的影响。 想想看,如果所有人都利用好这个小程序而不去买便笺,往小了说是省钱,往大了说可是环保了,能节约很多制作便笺的自然资源消耗。
上传时间: 2019-06-22
上传用户:yerbol
型号: VK36W8I 封装:SOP16/QFN16 产品品牌:VINTEK/元泰 产品年份:新年份 深圳永嘉微电原厂直销,大量现货更有优势!让您的生产高枕无忧。 1.概述: VK36W8I是一款抗干扰能力强,穿透能力高的水位检测专用触摸芯片。 封装为SOP16 上电就能检测水位点是否有水,水从无水到有水,从有水到无水,都可以检测出来。 检测时可以不接触到水在水箱外面检测到水位,也可以用金属探针接触到水来检测水位。 在高干扰或者AC开关电源的应用中也可以正常工作。 2. 特性: - 工作电压范围:2.2V-5.5V。 - 待机模式;3V无负载功耗典型值7uA。 - 低压复位(LVR)电压为2.0V。 - 专用管脚外接电容CS(10nF-47nF)调灵敏度,电容越大灵敏度越高。 - 无键触摸4S后进入待机模式 3. 应用: - 雾化器,加湿器。 - 咖啡机,饮水机。 - 鱼缸,浮水器。 - 浴缸,洁具。 型号: VK36W6D 封装:SOP16/QFN16 产品品牌:VINTEK/元泰 产品年份:新年份 深圳永嘉微电原厂直销,大量现货更有优势!让您的生产高枕无忧。 1.概述: VK36W6D是一款抗干扰能力强,穿透能力高的水位检测专用触摸芯片。 封装为SOP16 上电就能检测水位点是否有水,水从无水到有水,从有水到无水,都可以检测出来。 检测时可以不接触到水在水箱外面检测到水位,也可以用金属探针接触到水来检测水位。 在高干扰或者AC开关电源的应用中也可以正常工作。 2. 特性: - 工作电压范围:2.2V-5.5V。 - 待机模式;3V无负载功耗典型值7uA。 - 低压复位(LVR)电压为2.0V。 - 专用管脚外接电容CS(10nF-47nF)调灵敏度,电容越大灵敏度越高。 - 无键触摸4S后进入待机模式 3. 应用: - 雾化器,加湿器。 - 咖啡机,饮水机。 - 鱼缸,浮水器。 - 浴缸,洁具 型号: VK36W4D 封装:SOP16/QFN16 产品品牌:VINTEK/元泰 产品年份:新年份 深圳永嘉微电原厂直销,大量现货更有优势!让您的生产高枕无忧。 1.概述: VK36W4D是一款抗干扰能力强,穿透能力高的水位检测专用触摸芯片。 封装为SOP16 上电就能检测水位点是否有水,水从无水到有水,从有水到无水,都可以检测出来。 检测时可以不接触到水在水箱外面检测到水位,也可以用金属探针接触到水来检测水位。 在高干扰或者AC开关电源的应用中也可以正常工作。 2. 特性: - 工作电压范围:2.2V-5.5V。 - 待机模式;3V无负载功耗典型值7uA。 - 低压复位(LVR)电压为2.0V。 - 专用管脚外接电容CS(10nF-47nF)调灵敏度,电容越大灵敏度越高。 - 无键触摸4S后进入待机模式 3. 应用: - 雾化器,加湿器。 - 咖啡机,饮水机。 - 鱼缸,浮水器。 - 浴缸,洁具 型号: VK36W2D 封装:SOP8 产品品牌:VINTEK/元泰 产品年份:新年份 深圳永嘉微电原厂直销,大量现货更有优势!让您的生产高枕无忧。 1.概述: VK36W2D是一款抗干扰能力强,穿透能力高的水位检测专用触摸芯片。 封装为SOP8 上电就能检测水位点是否有水,水从无水到有水,从有水到无水,都可以检测出来。 检测时可以不接触到水在水箱外面检测到水位,也可以用金属探针接触到水来检测水位。 在高干扰或者AC开关电源的应用中也可以正常工作。 2. 特性: - 工作电压范围:2.2V-5.5V。 - 待机模式;3V无负载功耗典型值7uA。 - 低压复位(LVR)电压为2.0V。 - 专用管脚外接电容CS(10nF-47nF)调灵敏度,电容越大灵敏度越高。 - 无键触摸4S后进入待机模式 3. 应用: - 雾化器,加湿器。 - 咖啡机,饮水机。1.概述: VK36W1D是一款抗干扰能力强,穿透能力高的单点水位检测专用触摸芯片。 封装为SOT23-6L 上电就能检测水位点是否有水,水从无水到有水,从有水到无水,都可以检测出来。 检测时可以不接触到水在水箱外面检测到水位,也可以用金属探针接触到水来检测水位。 在高干扰或者AC开关电源的应用中也可以正常工作。 2. 特性: - 工作电压范围:2.2V-5.5V。 - 待机模式;3V无负载功耗典型值7uA。 - 低压复位(LVR)电压为2.0V。 - 专用管脚外接电容CS(10nF-47nF)调灵敏度,电容越大灵敏度越高。 - 无键触摸4S后进入待机模式 3. 应用: - 雾化器,加湿器。 - 咖啡机,饮水机。 - 鱼缸,浮水器。 - 浴缸,洁具 型号: VK36W1D 封装;SOT23-6 产品品牌:VINTEK/元泰 产品年份:新年份 深圳永嘉微电原厂直销,大量现货更有优势!让您的生产高枕无忧。 1.概述: VK36W1D是一款抗干扰能力强,穿透能力高的单点水位检测专用触摸芯片。 封装为SOT23-6L 上电就能检测水位点是否有水,水从无水到有水,从有水到无水,都可以检测出来。 检测时可以不接触到水在水箱外面检测到水位,也可以用金属探针接触到水来检测水位。 在高干扰或者AC开关电源的应用中也可以正常工作。 2. 特性: - 工作电压范围:2.2V-5.5V。 - 待机模式;3V无负载功耗典型值7uA。 - 低压复位(LVR)电压为2.0V。 - 专用管脚外接电容CS(10nF-47nF)调灵敏度,电容越大灵敏度越高。 - 无键触摸4S后进入待机模式 3. 应用: - 雾化器,加湿器。 - 咖啡机,饮水机。 - 鱼缸,浮水器。 - 浴缸,洁具 联系人:许先生 联系手机:188 9858 2398 (微) 联系QQ:191 888 5898 E-mail:zes1688@163.com
标签: 水位检测 36W SOP VK 36 16 8I W8 电容式 八通道
上传时间: 2019-11-11
上传用户:szqxw1688