基于嵌入式的室内环境信息采集控制演示系统设计.docx_第1页
基于嵌入式的室内环境信息采集控制演示系统设计.docx_第2页
基于嵌入式的室内环境信息采集控制演示系统设计.docx_第3页
基于嵌入式的室内环境信息采集控制演示系统设计.docx_第4页
基于嵌入式的室内环境信息采集控制演示系统设计.docx_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于嵌入式的室内环境信息采集控制演示系统设计摘要 基于嵌入式的无线传感网络是多学科的高度交叉,知识的高度集成的前沿热点研究领域。它通过各类集成化的微型传感器协作地实时监测,感知和采集各种环境或监测对象的信息,这些信息通过无线方式被发送,并以自组多跳的网络方式传送到用户终端无线传感器网络的特性决定了其不需要较高的传输带宽,而要求较低的传输延时和极低的功率消耗。IEEES02154ZigBee技术是近年来通信领域中的研究热点,具有低成本、低功耗、低速率、低复杂度的特点和高可靠性、组网简单、灵活等优势,逐渐成为无线传感器网络事实上的国际标准。此次课设设计并实现了用无线传感器网络构成的分布式温度湿度监控系统。关键词:嵌入式、信息采集、ZIGBEE、串口通信 前言嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可定制,适用于不同应用场合,对功能,可靠性,成本,体积,功耗有严格要求的专用计算机系统。随着生活水平的提高和科学技术发展的需求,人类对环境信息的感知上有了更高的要求,在某些特殊工业生产领域和室内存储场合对环境要求显得特别苛刻;随着嵌入式技术的发展,为环境环境检测提供了更进一步的保障。基于嵌入式的环境信息采集系统包含感知层、传输层、应用层三个层面;传输层常见的有温湿度、烟感、一氧化碳、压力等嵌入式传感器模块,传输层包括有线通信和无线通信两部分,应用层包括各种终端。在室内环境监测领域,以嵌入式技术为基础,结合ZigBee技术可以实现、准确、完整、可靠的反应环境信息,做到实时监控。基本原理:湿度传感器和温度传感器采集到数据后,通过给RS232串口增加ZigBee功能,替代设备电缆线进行无线传输,串口传输设计为双向全双工,无硬件流控制,强制允许OTA(多条)时间和丢包重传。本次课设采用的senser节点中烧写EndDeviceEB程序,在协调器中烧写CoordinatorEB程序。在设备绑定时先启动协调器绑定,后启动终端节点绑定,按键SW1用于设备之间绑定,SW2用于启动匹配描述符请求。 系统分析 详细设计:(包含总体软件结构图、编码) 此次课设温度湿度采集选用SHT10芯片,无线传输采用TI公司生产的cc2530单片机。各芯片的说明如下:SHT10是一款高度集成的温度湿度传感器芯片,提供全标定的数字输出。它采用专利的COMSens技术,确保了传感器具有极高的可靠性与卓越的长期稳定性。传感器包括包括一个电容性聚合体测湿敏感元件、一个能隙材料制成的测温元件,并在同一芯片上,与14位的A/D转换器以及串行接口电路进行连接。SH10引脚特性如下:1、 电源引脚SHT10的供电电压为2.45.5V。传感器上电后,要等待11ms以越过“休眠”状态。在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF的电容,用以去耦滤波。2、串行接口(两线双向) SHT10的串行接口,在传感器信号的读取及电源损耗方面,都做了优化处理;但与I2C接口不兼容.3、串行时钟输入(SCK) SCK用于微处理器与SHTxx之间的通讯同步。由于接口包含了完全静态逻辑,因而不存在最小SCK频率。4、串行数据(DATA) DATA三态门用于数据的读取。DATA在SCK时钟下降沿之后改变状态,并仅在SCK时钟上升沿有效。数据传输期间,在SCK时钟高电平时,DATA必须保持稳定。为避免信号冲突,微处理器应驱动DATA在低电平。需要一个外部的上拉电阻(例如:10k)将信号提拉至高电平(参见图2)。上拉电阻通常已包含在微处理器的I/O 电路中。5、串行时钟输入(SCK) SCK用于微处理器与SHTxx之间的通讯同步。由于接口包含了完全静态逻辑,因而不存在最小SCK频率。6、串行数据(DATA) DATA三态门用于数据的读取。DATA在SCK时钟下降沿之后改变状态,并仅在SCK时钟上升沿有效。数据传输期间,在SCK时钟高电平时,DATA必须保持稳定。为避免信号冲突,微处理器应驱动DATA在低电平。需要一个外部的上拉电阻(例如:10k)将信号提拉至高电平(参见图2)。上拉电阻通常已包含在微处理器的I/O 电路中。7、测量时序(RH 和T) 发布一组测量命令(00000101表示相对湿度RH,00000011表示温度T)后,控制器要等待测量结束。这个过程需要大约11/55/210ms,分别对应8/12/14bit测量。确切的时间随内部晶振速度,最多有15%变化。SHTxx通过下拉DATA至低电平并进入空闲模式,表示测量的结束。控制器在再次触发SCK时钟前,必须等待这个“数据备妥”信号来读出数据。检测数据可以先被存储,这样控制器可以继续执行其它任务在需要时再读出数据。接着传输2个字节的测量数据和1个字节的CRC奇偶校验。uC需要通过下拉DATA为低电平,以确认每个字节。所有的数据从MSB开始,右值有效(例如:对于12bit数据,从第5个SCK时钟起算作MSB;而对于8bit 数据,首字节则无意义)。用CRC数据的确认位,表明通讯结束。如果不使用CRC-8校验,控制器可以在测量值LSB后,通过保持确认位ack 高电平,来中止通讯。在测量和通讯结束后,SHTxx自动转入休眠模式。8、通讯复位时序如果与SHTxx通讯中断,下列信号时序可以复位串口:当DATA保持高电平时,触发SCK时钟9次或更多。在下一次指令前,发送一个“传输启动”时序。这些时序只复位串口,状态寄存器内容仍然保留。通讯复位时序图ZigBee部分1、简介CC2530 是用于2.4-GHzIEEE 802.15.4、ZigBee 和RF4CE 应用的一个真正的片上系统(SoC)解决方案。它能够以非常低的总的材料成本建立强大的网络节点。CC2530 结合了领先的RF 收发器的优良性能,业界标准的增强型8051 CPU,系统内可编程闪存,8-KB RAM 和许多其它强大的功能。CC2530 有四种不同的闪存版本:CC2530F32/64/128/256,分别具有32/64/128/256KB 的闪存。CC2530 具有不同的运行模式,使得它尤其适应超低功耗要求的系统。运行模式之间的转换时间短进一步确保了低能源消耗。CC2530F256 结合了德州仪器的业界领先的黄金单元ZigBee协议栈(Z-Stack),提供了一个强大和完整的ZigBee 解决方案。CC2530F64 结合了德州仪器的黄金单元RemoTI,更好地提供了一个强大和完整的ZigBee RF4CE远程控制解决方案。2、引脚描述引脚名称 引脚 引脚类型 描述AVDD1 28 电源(模拟) 2-V3.6-V 模拟电源连接AVDD2 27 电源(模拟) 2-V3.6-V 模拟电源连接AVDD3 24 电源(模拟) 2-V3.6-V 模拟电源连接AVDD4 29 电源(模拟) 2-V3.6-V 模拟电源连接AVDD5 21 电源(模拟) 2-V3.6-V 模拟电源连接AVDD6 31 电源(模拟) 2-V3.6-V 模拟电源连接DCOUPL 40 电源(数字) 1.8V 数字电源去耦。不使用外部电路供应。DVDD1 39 电源(数字) 2-V3.6-V 数字电源连接DVDD2 10 电源(数字) 2-V3.6-V 数字电源连接GND - 接地 接地衬垫必须连接到一个坚固的接地面。GND 1,2,3,4 未使用的引脚连接到GNDP0_0 19 数字I/O 端口0.0P0_1 18 数字I/O 端口0.1P0_2 17 数字I/O 端口0.2P0_3 16 数字I/O 端口0.3P0_4 15 数字I/O 端口0.4P0_5 14 数字I/O 端口0.5P0_6 13 数字I/O 端口0.6P0_7 12 数字I/O 端口0.7P1_0 11 数字I/O 端口1.0-20-mA 驱动能力P1_1 9 数字I/O 端口1.1-20-mA 驱动能力P1_2 8 数字I/O 端口1.2P1_3 7 数字I/O 端口1.3P1_4 6 数字I/O 端口1.4P1_5 5 数字I/O 端口1.5P1_6 38 数字I/O 端口1.6P1_7 37 数字I/O 端口1.7P2_0 36 数字I/O 端口2.0P2_1 35 数字I/O 端口2.1P2_2 34 数字I/O 端口2.2P2_3 33 数字I/O 模拟端口2.3/32.768 kHz XOSCP2_4 32 数字I/O 模拟端口2.4/32.768 kHz XOSCRBIAS 30 模拟I/O 参考电流的外部精密偏置电阻RESET_N 20 数字输入 复位,活动到低电平RF_N 26 RF I/O RX 期间负RF 输入信号到LNARF_P 25 RF I/O RX 期间正RF 输入信号到LNAXOSC_Q1 22 模拟I/O 32-MHz 晶振引脚1或外部时钟输入XOSC_Q2 23 模拟I/O 32-MHz 晶振引脚23、模块说明CPU和内存CC253x芯片系列中使用的8051 CPU内核是一个单周期的8051兼容内核。它有三种不同的内存访问总线(SFR,DATA 和CODE/XDATA),单周期访问SFR,DATA 和主SRAM。它还包括一个调试接口和一个18 输入扩展中断单元。中断控制器总共提供了18 个中断源,分为六个中断组,每个与四个中断优先级之一相关。当设备从活动模式回到空闲模式,任一中断服务请求就被激发。一些中断还可以从睡眠模式(供电模式1-3)唤醒设备。内存仲裁器位于系统中心,因为它通过SFR总线把CPU 和DMA 控制器和物理存储器以及所有外设连接起来。内存仲裁器有四个内存访问点,每次访问可以映射到三个物理存储器之一:一个8-KB SRAM、闪存存储器和XREG/SFR寄存器。它负责执行仲裁,并确定同时访问同一个物理存储器之间的顺序。8-KB SRAM映射到DATA存储空间和部分XDATA存储空间。8-KB SRAM是一个超低功耗的SRAM,即使数字部分掉电(供电模式2 和3)也能保留其内容。这是对于低功耗应用来说很重要的一个功能。32/64/128/256 KB闪存块为设备提供了内电路可编程的非易失性程序存储器,映射到XDATA存储空间。除了保存程序代码和常量以外,非易失性存储器允许应用程序保存必须保留的数据,这样设备重启之后可以使用这些数据。使用这个功能,例如可以利用已经保存的网络具体数据,就不需要经过完全启动、网络寻找和加入过程。时钟和电源管理数字内核和外设由一个1.8-V 低差稳压器供电。它提供了电源管理功能,可以实现使用不同供电模式的长电池寿命的低功耗运行。有五种不同的复位源来复位设备。外设CC2530 包括许多不同的外设,允许应用程序设计者开发先进的应用。调试接口执行一个专有的两线串行接口,用于内电路调试。通过这个调试接口,可以执行整个闪存存储器的擦除、控制使能哪个振荡器、停止和开始执行用户程序、执行8051内核提供的指令、设置代码断点,以及内核中全部指令的单步调试。使用这些技术,可以很好地执行内电路的调试和外部闪存的编程。设备含有闪存存储器以存储程序代码。闪存存储器可通过用户软件和调试接口编程。闪存控制器处理写入和擦除嵌入式闪存存储器。闪存控制器允许页面擦除和4字节编程。I/O控制器负责所有通用I/O引脚。CPU可以配置外设模块是否控制某个引脚或它们是否受软件控制,如果是的话,每个引脚配置为一个输入还是输出,是否连接衬垫里的一个上拉或下拉电阻。CPU 中断可以分别在每个引脚上使能。每个连接到I/O引脚的外设可以在两个不同的I/O 引脚位置之间选择,以确保在不同应用程序中的灵活性。系统可以使用一个多功能的五通道DMA控制器,使用XDATA存储空间访问存储器,因此能够访问所有物理存储器。每个通道(触发器、优先级、传输模式、寻址模式、源和目标指针和传输计数)用DMA 描述符在存储器任何地方配置。许多硬件外设(AES内核、闪存控制器、USART、定时器、ADC 接口)通过使用DMA 控制器在SFR 或XREG 地址和闪存/SRAM 之间进行数据传输,获得高效率操作。定时器1 是一个16 位定时器,具有定时器/PWM 功能。它有一个可编程的分频器,一个16 位周期值,和五个各自可编程的计数器/捕获通道,每个都有一个16 位比较值。每个计数器/捕获通道可以用作一个PWM输出或捕获输入信号边沿的时序。它还可以配置在IR产生模式,计算定时器3 周期,输出是ANDed,定时器3 的输出是用最小的CPU 互动产生调制的消费型IR 信号。MAC定时器(定时器2)是专门为支持IEEE 802.15.4 MAC或软件中其他时槽的协议设计。定时器有一个可配置的定时器周期和一个8 位溢出计数器,可以用于保持跟踪已经经过的周期数。一个16 位捕获寄存器也用于记录收到/发送一个帧开始界定符的精确时间,或传输结束的精确时间,还有一个16 位输出比较寄存器可以在具体时间产生不同的选通命令(开始RX,开始TX,等等)到无线模块。定时器3 和定时器4 是8 位定时器,具有定时器/计数器/PWM 功能。它们有一个可编程的分频器,一个8 位的周期值,一个可编程的计数器通道,具有一个8 位的比较值。每个计数器通道可以用作一个PWM 输出。睡眠定时器是一个超低功耗的定时器,计算32-kHz 晶振或32-kHz RC 振荡器的周期。睡眠定时器在除了供电模式3 的所有工作模式下不断运行。这一定时器的典型应用是作为实时计数器,或作为一个唤醒定时器跳出供电模式1 或2。ADC支持7到12位的分辨率,分别在30 kHz或4 kHz的带宽。DC和音频转换可以使用高达八个输入通道(端口0)。输入可以选择作为单端或差分。参考电压可以是内部电压、AVDD 或是一个单端或差分外部信号。ADC 还有一个温度传感输入通道。ADC 可以自动执行定期抽样或转换通道序列的程序。随机数发生器使用一个16 位LFSR 来产生伪随机数,这可以被CPU 读取或由选通命令处理器直接使用。例如随机数可以用作产生随机密钥,用于安全。AES加密/解密内核允许用户使用带有128位密钥的AES算法加密和解密数据。这一内核能够支持IEEE 802.15.4 MAC 安全、ZigBee 网络层和应用层要求的AES 操作。一个内置的看门狗允许CC2530 在固件挂起的情况下复位自身。当看门狗定时器由软件使能,它必须定期清除;否则,当它超时就复位它就复位设备。或者它可以配置用作一个通用32-kHz定时器。USART 0和USART 1每个被配置为一个SPI主/从或一个UART。它们为RX和TX提供了双缓冲,以及硬件流控制,因此非常适合于高吞吐量的全双工应用。每个都有自己的高精度波特率发生器,因此可以使普通定时器空闲出来用作其他用途。无线设备CC2530 具有一个IEEE 802.15.4 兼容无线收发器。RF 内核控制模拟无线模块。另外,它提供了MCU 和无线设备之间的一个接口,这使得可以发出命令,读取状态,自动操作和确定无线设备事件的顺序。无线设备还包括一个数据包过滤和地址识别模块。 1、Z-Stack设计为一个简单的操作系统,该操作系统采用一个循环, 具体执行流程图如下: macEventLoop处理本任务当前优先级最高的事件macTaskInit 注册相应事件 YES Nwk_event_loop处理本任务当前优先级最高的事件 nwk_init 注册相应事件 YESHal_InitHalProcessevet处理本任务当前优先级最高的事件开始 注册相应事件 YES MT_ProcessEventMT_TaskInit处理本任务当前优先级最高的事件硬件初始化osalInitTASKS系统初始化 注册相应事件 YES APS_event_loopAPS_Init处理本任务当前优先级最高的事件 注册相应事件 YES执行操作系统 ZDApp_InitZDAappeventlooppp处理本任务当前优先级最高的事件 注册相应事件 NO YES SAPI_ProcessEvent处理本任务当前优先级最高的事件 NOSAPI_Init 注册相应事件 YES2、无线接收串口转发程序流程图设计如下:SerialApp_ProcessEventOsal_msg_receive(SerialApp_Taskid)AF_INCOMING_MSG_CMDSerialApp_ProcessMSGCmdHalUARTWriteOsal_set_event(SerialApp_TaskID,SERIALAPP_RESP_EVT)SerialApp_Resp3、串口接收无线转发流程图如下:SerialApp_CallBackSerialApp_Send()HalUARTResdAF_DataResquest发送是否成功? 结束 YES Osal_Set_event(SerialApp_TaskID,SERIALAPP SEND EVT) NO 源代码如下: #include ZComDef.h#include OSAL.h#include OSAL_Nv.h#include OnBoard.h#include ZMAC.h#ifndef NONWK#include AF.h#endif/* Hal */#include hal_lcd.h#include hal_led.h#include hal_adc.h#include hal_drivers.h#include hal_assert.h#include hal_flash.h#include stdio.h/ Maximun number of Vdd samples checked before go on#define MAX_VDD_SAMPLES 3 /电压检测#define ZMAIN_VDD_LIMIT HAL_ADC_VDD_LIMIT_4 /正常电压极限值extern bool HalAdcCheckVdd (uint8 limit); /设备启动前的芯片电压检测函数static void zmain_dev_info( void );static void zmain_ext_addr( void );static void zmain_vdd_check( void );#ifdef LCD_SUPPORTEDstatic void zmain_lcd_init( void );#endif/* * fn main * brief First function called after startup. * return dont care */int main( void ) / Turn off interrupts osal_int_disable( INTS_ALL ); /关闭所有中断 EA=0/ Initialization for board related stuff such as LEDs HAL_BOARD_INIT(); /初始化系统时钟 、LED所使用的IO等/ Make sure supply voltage is high enough to runzmain_vdd_check(); /检测芯片电压是否正常/ Initialize board I/OInitBoard( OB_COLD ); /初始化LED的IO/ Initialze HAL driversHalDriverInit(); /初始化芯片各个硬件模块(包括LCD)/ Initialize NV Systemosal_nv_init( NULL ); /初始化FLASH存储 / Initialize the MAC ZMacInit(); /初始化MAC层 / Determine the extended address zmain_ext_addr(); /形成节点MAC地址/ Initialize basic NV items zgInit(); /初始化一些非易失变量#ifndef NONWK/ Since the AF isnt a task, call its initialization routineafInit(); /初始化应用框架层#endif/ Initialize the operating systemosal_init_system(); /初始化操作系统 / Allow interruptsosal_int_enable( INTS_ALL ); /使能全部中断/ Final board initializationInitBoard( OB_READY ); /初始化按键 / Display information about this devicezmain_dev_info(); /在液晶上显示设备IEEE信息/* Display the device info on the LCD */#ifdef LCD_SUPPORTED zmain_lcd_init(); /在LCD上显示该设备的信息#endif#ifdef WDT_IN_PM1/* If WDT is used, this is a good place to enable it. */WatchDogEnable( WDTIMX );#endifosal_start_system(); / No Return from herereturn 0; / Shouldnt get here. /* * fn zmain_vdd_check * brief Check if the Vdd is OK to run the processor. * return Return if Vdd is ok; otherwise, flash LED, then reset */static void zmain_vdd_check( void ) /检测设备电压 uint8 vdd_passed_count = 0; bool toggle = 0; / Repeat getting the sample until number of failures or successes hits MAX / then based on the count value, determine if the device is ready or not while ( vdd_passed_count MAX_VDD_SAMPLES ) /电压正常情况下,检查3次 if ( HalAdcCheckVdd (ZMAIN_VDD_LIMIT) ) /设置电压正常的极限值 并使用AD检测电压 vdd_passed_count+; / Keep track # times Vdd passes in a row MicroWait (10000); / Wait 10ms to try again else vdd_passed_count = 0; / Reset passed counter MicroWait (50000); / Wait 50ms MicroWait (50000); / Wait another 50ms to try again /* toggle LED1 and LED2 */ if (vdd_passed_count = 0) if (toggle = !(toggle) HAL_TOGGLE_LED1(); else HAL_TOGGLE_LED2(); /* turn off LED1 */ HAL_TURN_OFF_LED1(); HAL_TURN_OFF_LED2();/* * fn zmain_ext_addr * * brief Execute a prioritized search for a valid extended address and write the results * into the OSAL NV system for use by the *system. Temporary address not saved to NV. * input parameters * None. * output parameters * None. * return None.* */static void zmain_ext_addr(void) uint8 nullAddrZ_EXTADDR_LEN = 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF; uint8 writeNV = TRUE;/ First check whether a non-erased extended address exists in the OSAL NV. if (SUCCESS != osal_nv_item_init(ZCD_NV_EXTADDR, Z_EXTADDR_LEN, NULL) | (SUCCESS != osal_nv_read(ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, aExtendedAddress) | (osal_memcmp(aExtendedAddress, nullAddr, Z_EXTADDR_LEN) / Attempt to read the extended address from the location on the lock bits page/ where the programming tools know to reserve it. HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_IEEE_OSET, aExtendedAddress, Z_EXTADDR_LEN); if (osal_memcmp(aExtendedAddress, nullAddr, Z_EXTADDR_LEN) / Attempt to read the extended address from the designated location in the Info Page. if(!osal_memcmp(uint8 *)(P_INFOPAGE+HAL_INFOP_IEEE_OSET), nullAddr, Z_EXTADDR_LEN) osal_memcpy(aExtendedAddress, (uint8 *)(P_INFOPAGE+HAL_INFOP_IEEE_OSET), Z_EXTADDR_LEN); else / No valid extended address was found. uint8 idx; #if !defined ( NV_RESTORE ) writeNV = FALSE; / Make this a temporary IEEE address#endif/* Attempt to create a sufficiently random extended *address for expediency.* Note: this is only valid/legal in a test environment *and must never be used for a commercial product. */ for (idx = 0; idx (Z_EXTADDR_LEN - 2);) uint16 randy = osal_rand(); aExtendedAddressidx+ = LO_UINT16(randy); aExtendedAddressidx+ = HI_UINT16(randy); / Next-to-MSB identifies ZigBee devicetype.#if ZG_BUILD_COORDINATOR_TYPE & !ZG_BUILD_JOINING_TYPE aExtendedAddressidx+ = 0x10;#elif ZG_BUILD_RTRONLY_TYPE aExtendedAddressidx+ = 0x20;#else aExtendedAddressidx+ = 0x30;#endif / MSB has historical signficance. aExtendedAddressidx = 0xF8; if (writeNV) (void)osal_nv_write(ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, aExtendedAddress); / Set the MAC PIB extended address according to results /from above. (void)ZMacSetReq(MAC_EXTENDED_ADDRESS, aExtendedAddress);/* * fn zmain_dev_info * brief This displays the IEEE (MSB to LSB) on the LCD. * input parameters * None. * output parameters * None. * return None.* */static void zmain_dev_info(void)#ifdef LCD_SUPPORTED uint8 i; uint8 *xad; uint8 lcd_bufZ_EXTADDR_LEN*2+1; uint8 num; char s16; / Display the extended address. xad = aExtendedAddress + Z_EXTADDR_LEN - 1; for (i = 0; i 4) & 0x0F; lcd_bufi+ = ch + ( ch 10 ) ? 0 : 7); ch = *xad & 0x0F; lcd_bufi+ = ch + ( ch 10 ) ? 0 : 7); lcd_bufZ_EXTADDR_LEN*2 = 0;/HalLcdWriteString( IEEE: , HAL_LCD_LINE_1 );/HalLcdWriteString(char*)lcd_buf,HAL_LCD_LINE_2 );/ osal_nv_read(ZCD_NV_PANID, 0, 2, &zgConfigPANID); sprintf(s, (char*)%d%d%d%d%d , (UINT16)(uint16)zgConfigPANID/10000), (UINT16)(uint16)zgConfigPANID%10000/1000),(UINT16)(uint16)zgConfigPANID%1000/100), (UINT16)(uint16)zgConfigPANID%100/10),(UINT16)(uint16)zgConfigPANID%10); i = 0; do if(si = 0) si = ; num = 1; else num = 0; i+; while(num); GUI_SetColor(1,0);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论