智能家居系统设计与实现样本_第1页
智能家居系统设计与实现样本_第2页
智能家居系统设计与实现样本_第3页
智能家居系统设计与实现样本_第4页
智能家居系统设计与实现样本_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

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

文档简介

论文核心词:智能家居嵌入式系统WindowsCEVisualC++Delphi论文摘要:本文讨论了基于WindowsCE.net5.0嵌入式操作系统,以使用IntelXScale270为CPUARM10嵌入式实验箱为硬件基本,以VisualStudio和Delphi为软件开发平台智能家居系统设计与实现。通过详细系统设计过程,开发了相应软件程序,涉及嵌入式操作系统WindowsCE5.0定制、应用程序界面设计、程序开发和单片机系统底层编程。本设计融合了嵌入式系统、通讯、单片机、软件开发等学科知识。系统测试成果表白,该系统设计基本满足规定,并有一定功能扩展空间。1绪论当前,科学技术发展迅速,借助飞速发展网络和信息技术,人们可以足不出户地纵览全球。为了适应信息化需求,科研机构将智能化理念引入社区管理,并进一步引入家庭,从而产生了智能家居概念。将手机通信和以太网通信技术引入智能家居设计,正好运用了既有良好通信条件,使在外业主能及时理解家中安全,提高业主安全感,并且通过手机实时控制家电,提高了业主生活舒服度。本文提出了基于嵌入式系统ARM10智能控制平台设计,功能涉及了短信控制家电,传感器探测非正常环境并且通过手机短信告知业主,以及以太网实时视频监控等功能。2系统设计方案2.1硬件总体设计框图依照上文功能需要,设计出由ARM10为控制核心,单片机控制家电控制模块和传感器报警模块,并且包括GSM通信模块智能家居系统,硬件构造框图如图2-1所示。

SHAPE

图2-1硬件设计框图2.2控制核心选取智能家居控制系统采用如图2-2所示XSBase270作为开发平台,该平台基于Intel®高性能PXA270解决器,支持WindowsCE和Linux等嵌入式操作系统,是针对教学和实验多功能实验平台。PXA270解决器最高主频可达520MHz,且该解决器被加入了WirelessMXX技术,大大提高了多媒体解决能力,并且加入了IntelSpeedStep动态电源管理技术,在保证CPU性能前提下,最大限度减少设备功耗[1]。XSBase270配备32MFLASHROM,64MSDRAM,并配备了触摸屏、以太网、USB、串口、CF/MMC、PCMCIA等接口。满足了智能家居系统控制中心硬件规定。图2-2XSBase270实验箱展开图2.3家电控制板家电控制板采用AT89C51为控制核心。扩展板元件布局如图2-3所示,其上有四盏LED分别模仿四种家电,三个按钮模仿三种传感器。其中四盏LED分别连接单片机P1.0、P1.1、P1.2、P1.3;三个按钮分别连接P2.0、P2.1、P2.2。图2-3家电控制模块2.3.1串行端口电路家电控制板采用串口与XSBase270实验箱进行通信,其采用了典型兼容RS-232原则MAX232芯片作为串口电平转换芯片。电路连接如图2-4所示:图2-4家电控制板串行接口电路如上图所示,家电扩展板采用是惯用DB9头作为串口接口,其针脚定义图如图2-5所示:图2-5RS-232DB9头针脚定义图其中2脚RxD为接受引脚,3脚TxD为发送引脚,GND为信号地引脚。普通状况下普通串口只接这几种引脚;特殊串口,如蓝牙串口除接上述三个脚之外,还接了DSR引脚和CTS引脚,是由于蓝牙串口数据流输出采用这两个脚信号控制;而其她引脚是跟MODEM有关。在智能家居系统中,家电控制板接普通串口,GSM模块接蓝牙串口。RS-232信号相对于信号地而言,在正负电平之间摆动。发送数据时,发送端输出正电平在+5V到+15V之间,负电平在-5V和-15V之间。无数据传播时,线上为TTL电平。接受器典型工作电平在+3V~+12V与-3V~-12V。由于发送电平和接受电平差仅为2~3V左右,因此其共模抑制能力差,加上双绞线分布电容,信号传播距离最大为15m,最高速率为20kb/s[2]。MAX232包括2个驱动器、2个接受器和一种电压发生器电路,提供TIA/EIA-232-F电平。该器件符合TIA/EIA-232-F原则,每一种接受器将TIA/EIA-232-F电平转换成5VTTL/CMOS电平。每一种发送器将TTL/CMOS电平转换成TIA/EIA-232-F电平。图2-6MAX232引脚图2.3.2家电控制电路图2-7

模仿家电控制电路家用电器控制接口电路如图2-7所示,K1~K4为继电器,分别控制四路家电闭合和断开,Q1~Q4为继电器线圈电流驱动,电路由单片机P1口进行控制,DD1~DD4发光二极管用于显示某路控制电路工作状况,重要为了调试电路而设立。2.3.3传感器接口电路图2-8

传感器接口电路图烟雾、煤气泄漏、红外等这些传感器报警信号通过光电耦合接入单片机P2口,如图2-8所示,在传感器没有报警信号时,光电耦合芯片处在截止状态,与之相接单片机端口为低电平;当传感器有报警,传感器输出高电平,此时光电耦合芯片导通,与之相接单片机端口为高电平,由单片机对报警信号进行采集并做出相应解决。2.4GSM通信模块GSM通信某些采用如图2-9所示西门子MC35GSM/GPRS无线模块作为通信工具。它支持EGSM900和GSM1800双频,支持数字、语音、短消息和传真,使用AT指令控制发送短消息。它采用9V直流电源供电,通过RS-232串行端口与XSBase270实验箱连接进行通信。图2-9

西门子MC352.5视频监控模块视频采集模块采用使用中星微(Vimicro)公司ZC0301P芯片摄像头,ZC0301P芯片可支持USB1.1接口,硬件最高支持VGA辨别率(640×480)。在VGA模式下可达到15帧/秒速率,在CIF(352×288)和SIF(320×240)模式下可达到30帧/秒速率。它通过USB接口连接到XSBase270实验箱。图2-10301P摄像头2.6总体软件设计方案依照智能家居硬件设计方案,设计出软件总体设计方案如图2-11所示:图2-11软件设计框图其中:、(1)家电控制系统和GSM网络通信各自独占一种RS-232串口。家电控制系统接XSBase270红外串口,GSM模块接蓝牙串口。如图2-12所示。(2)实时视频监控通过USB摄像头捕获图像,图像数据通过以太网发送到PC客户端进行图像还原。(3)以太网通信基于TCP/IP合同,测试环境为局域网,若投入到因特网应用,则需要在服务端、客户端所在局域网连接到因特网网关——即路由器上,要进行端口映射,才可以进行网络连接。图2-12红外串口与蓝牙串口智能家居系统软件基于WindowsCE5.0嵌入式操作系统。WindowsCE被设计成一种分层构造,从下而上一共分为了硬件层、OEM层、操作系统层和应用层共四个层[3]。这种层次构造将硬件和软件,操作系统和应用软件隔离开,以便于实现系统移植。智能家居软件设计重要是集中在应用层。3操作系统定制WindowsCE5.0嵌入式操作系统定制依托PlatformBuilder5.0完毕。PlatformBuilder是微软公司设计用于嵌入式操作平台定制与驱动程序开发工具。推出它目之一就是让顾客可以更好将嵌入式操作系统移植到特定目的平台上。3.1BSP安装为了让WindowsCE5.0能在实验箱上运营起来,还必要安装XSBase270板级支持包(BSP)。板级支持包是介于主板和操作系统中驱动程序之间一层,普通以为它属于操作系统一某些,重要是对操作系统支持,为上层驱动程序提供访问硬件设备寄存器函数包。在PC上安装好WindowsCE.net5.0和PlatformBuilder5.0后,打开实验箱附带光盘中BSP文献夹,运营XSBase270_V010106.msi文献,安装XSBase270BSP。如图3-1所示。图3-1BSP安装程序文献安装好BSP后,进入PlatformBuilder5.0中定制基于“EMDOORSYSTEMSXSBASE270:ARMV4I”因特网应用类型系统镜像设计[4]。如图3-2所示。图3-2

定制系统时选取BSP种类3.2添加平台特性和配备平台为了使系统在定制后可以满足基本应用,并保证对某些设备支持,就要向所设计平台中添加必要特性。(1)添加USBActiveSync(FileSync)组件。只有添加此组件,才干使用PCUSB接口与WindowsCE进行文献同步。这也是在应用软件调试过程中所必要条件。(Catalog->CoreOS->WindowsCEdevices->Applications-EndUser->ActiveSync->FileSync)(2)添加Chinese[Simplified]Font。安装中文简体字体后,才干正常显示中文。(Catalog->CoreOS->WindowsCEdevices->International->LocaleSpecificSupport->Chinese[Simpified]->Fonts)(3)添加文献系统支持。(Catalog->CoreOS->WindowsCEdevices->FileSystemsandDataStore->StorageManager->FATFileSystem)(4)添加分区管理(Catalog->CoreOS->WindowsCEdevices->FileSystemsandDataStore->StorageManager->PartitionDriver)(5)添加控制面板中存储器管理组件(Catalog->CoreOS->WindowsCEdevices->FileSystemsandDataStore->StorageManager->StorageManagerControlPanelApplet)(6)添加基于软件输入系统(软键盘等)(Catalog->CoreOS->WindowsCEdevices->ShellandUserInterface->UserInterface->SoftwareInputPanel->Software-basedInputPanel(SIP)(Choose1ormore)->SIPforLargeScreens)(7)添加平台管理器(PlatformManager)(Catalog->PlatformManager->PlatformManager)(8)添加UsbActiveSync(USBFunction)(Catalog->ThirdParty->BSPs->EmdoorSystemsXSBase270:ARMV4I->DeviceDrivers->USBFunction->USBFunctionBusDrivers->PXA27xUSBFunction)完毕特性添加后,设立平台属性。在“Platform”菜单下单击“Setting”,在Configuration下拉菜单中选取“EmdoorSystemsXSBase270:ARMV4IRelease”项,选取Locale选项卡,进行系统地理位置和环境语言支持设立。Locales列表中,为最下端“中文(中华人民共和国)”项打勾。在DefaultLanguage下拉菜单里选取“中文(中华人民共和国)”为系统默认语言。如图3-3所示。图3-3选取操作系统默认语言在BuildOption列表中,只选取EnableEbootSpaceinMemory(IMGEBOOT=1)和WriteRun-timeImagetoFlashMemory(IMGFLASH=1)两项。如图3-4所示。图3-4程序组建选项设立单击“BuildOS”菜单下“Sysgen”开始组建操作系统。如图3-5所示:图3-5生成操作系统镜像3.3红外串口与蓝牙串口打开经测试,在默认配备下生成系统镜像,只打开了位于XSBase270模块板上全功能调试串口,而位于接口扩展板上红外串口和蓝牙串口并没有被打开。为了可以与家电控制板和GSM模块连接,实现完整智能家居系统功能,必要将它们打开。(1)查找中断号中断号定义是在实验箱所提供板级支持包中被配备。打开C:\WINCE500\Platform\XSBase270\Src\inc\bsp_cfg.h文献。可以看到调试串口和通信串口中断号定义,如图3-6所示。图3-6

BSP中串口中断定义可以看到调试串口BFUART中断号是28,转化为16进制为0x1c;通信串口SFUART中断号27,转换为16进制是0x1b。(2)修改注册表打开如下文献夹,其中“F:\platform\270\”是在新建操作系统平台时所存储它磁盘位置。F:\Platform\270\RelDir\XSBase270_ARMV4I_Release\打开platform.reg注册表文献,在此文献中包括了对某些硬件初始化代码。在“IFBSP_NOSERIAL!”与“ENDBSP_NOSERIAL!”两句代码之间,可以看到蓝牙串口注册表初始化代码,下面只需要添加初始化红外串口代码:;OpentheIRSerialPort[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SerialIR]

"Irq"=dword:14

;20IRQ_STUART

"SysIntr"=dword:1b

;27SYSINTR_SFUART

"MemBase"=dword:40700000

;STUARTRegister

"MemLen"=dword:40

"DeviceArrayIndex"=dword:82

;STUARTobject

"Prefix"="COM"

"Index"=dword:3

"Order"=dword:1

"IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"

;

"Dll"="ms2_serial.dll"[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SerialIR\Unimodem]

"Tsp"="Unimodem.dll"

"DeviceType"=dword:0

"FriendlyName"="IRSerialCableonCOM3:"

"DevConfig"=hex:10,00,00,00,05,00,00,00,10,01,00,00,00,4B,00,00,00,00,08,00,00,00,00,00,00修改好注册表代码后来,保存platform.reg文献。打开刚才建立操作系统设计工程,选取BuildOS菜单下MakeRun-TimeImage命令,生成新内核文献NK.bin。3.4操作系统生成与下载定制并组建WindowsCE后,将会生成BootLoader——EBOOT.nb0文献和NK内核——nk.bin,将它们烧写进入XSBase270实验箱。4应用软件设计4.1应用程序编写环境开发环境:MicrosoftVisualStudio开发语言:MicrosoftVisualC++软件开发包:XSBase270SDK智能家居系统应用程序采用VisualStudio进行开发。VisualStudio是微软公司开发Windows平台上应用程序开发环境。VisualStudio可以创立Windows下Windows应用程序和网络应用程序,也可以用来创立网络服务、智能设备应用程序和Office插件[5]。VisualStudio面向.net框架(2.0版本),同步可以开发跨平台应用程序。图4-1VisualStudio4.2智能家居人机接口设计打开VisualStudio,创立一种基于MFCSmartDeviceApplicationVC++程序。如图4-2所示:图4-2新建智能家居应用程序到选取平台环节时选取XSBase270平台,删除默认PocketPC平台。如图4-3所示。图4-3选取软件开发包支持单击“Next”按钮进入选取应用程序类型和资源语言——程序界面上采用语言画面。如图4-4所示,选取“Dialogbased”(基于对话框)类型,资源语言选取“中文(中华人民共和国)”。其她项目保存默认选项。图4-4选取应用程序种类保持默认设立,始终到完毕新建项目向导。进入IDE环境。集成环境窗口分布如图4-5所示:图4-5VisualStudio集成环境将对话框设计成如图4-6所示:图4-6

智能家居操作界面设计表4-1智能家居应用软件界面控件配备控件类型控件名称功能按钮控件初始化GSM初始化GSM模块开始摄像打开摄像头,开始视频捕获停止摄像停止摄像头视频捕获开始监听打开ARM9000号端口,打开网络通信停止监听关闭端口,停止TCP通信冰箱打开家中冰箱设备灯光打开家中灯光设备微波炉打开家中微波炉设备空调打开家中空调设备关于咱们查看软件作者版权声明信息退出程序关闭未关闭线程,退出程序列表控件消息窗口用来显示顾客发回短信记录图片控件煤气煤气传感器报警信号,报警时红色,常态时绿色烟雾烟雾传感器报警信号,报警时红色,常态时绿色红外红外传感器报警信号,报警时红色,常态时绿色编辑框信息框实时显示系统运营状况4.3串口通信功能设计4.3.1串口通信合同串口通信合同采用CCESeries类实现,通过对此类成员函数调用,完毕对串口初始化、读写操作等,在不用串口状况下,还可以关闭串口。4.3.2软件实现在VisualStudio解决方案视图里添加类CCESeries,如图4-7所示。CCESeries类成员函数如表4-2所示。图4-7在VS中建立CCESeries类表4-2串口操作类CCESeries成员函数函数作用函数名称打开串口BOOLOpenPort(HWNDpPortOwner,UINTportNo

=1,UINTbaud=9600,UINTparity=NOPARITY,UINTdatabits=8,UINTstopbits=0);关闭串口VoidClosePort();设立串口超时BOOLSetSeriesTimeouts(COMMTIMEOUTSCommTimeOuts);读串口线程Static

DWORDWINAPIReadThreadFunc(LPVOIDlparam);写串口BOOLWritePort(LPCTSTRlpString);BOOLWritePort(char*buf,intnSize);BOOLWritePort(char*buf);关闭读线程VoidCloseReadThread();表4-3串口操作类CCESeries成员变量变量类型变量名称作用HANDLEm_hComm已打开串口句柄HWNDm_hWnd此串口类所属窗口句柄HANDLEm_hReadThread读串口线程句柄HANDLEm_hWriteThread写串口线程句柄DWORDm_dwReadThreadID读串口线程IDDWORDm_dwWriteThreadID写串口线程IDHANDLEm_hReadCloseEvent读串口线程退出事件HANDLEm_hWriteCloseEvent写串口线程退出事件打开串口与配备串口在WindowsCE中,驱动程序分为本地设备驱动和流设备驱动两种[6]。本地设备如键盘、触摸屏等,普通在设备生产后是不会再更换,相应驱动这些设备驱动程序也是必须。而流接口设备驱动程序可以由第三方提供,支持此外添加到系统中设备。而串口就属于流接口设备之一。流设备驱动在系统中是以三位字符串后跟一位数字表达,对于串口而言,这三位字符是“COM”(不涉及引号)。当引用一种流接口驱动程序时,除了三位字符后跟一位数字以外,还要紧跟一种冒号“:”(英文半角冒号),冒号是必须,是为了区别桌面Windows设备驱动程序命名规则。该函数流程图如图4-8所示:图4-8OpenPort函数流程图(1)串口打开所有流驱动程序都将采用CreateFile函数打开串口设备。在WindowsCE下,系统不支持设备重叠I/O,因此不能在参数dwFlagsAndAttributes中传递FILE_FLAG_OVERLAPPED标志,返回句柄要么是已打开串口端口句柄,或者是INVAILID_HANDLE_VALUE。CreateFile与大多数Windows函数不同样,打开失败时,不返回0。CreateFile函数原型如下:HANDLECreateFile(LPCTSTRlpFileName,

//对象途径名DWORDdwDesiredAccess,

//控制模式DWORDdwShareMode,

//共享模式LPSECURITY_ATTRIBUTESlpSecurityAttributes,

//安全属性(也即销毁方式)DWORDdwCreationDisposition,

//创立方式DWORDdwFlagsAndAttributes,

//对象属性HANDLEhTemplateFile

//一种文献模板句柄);在CCESeries类中,HANDLE类型全局变量m_hComm存储CreateFile函数打开串口成功时返回值,凭借此句柄可以控制打开串口对象;以读写方式打开串口。(2)串口设立打开串口后,还必要对端口配备好对的波特率、字符长度、停止位等等。在OpenPort函数中,使用两个函数GetCommState和SetCommState来配备串口。函数原型如下:BOOLSetCommState(HANDLEhRle,LPDCBlpDCB);BOOLGetCommState(HANDLEhFile,LPDCBlpDCB);这两个函数都包括了同样参数,即已打开串口句柄和指向DCB构造指针。DCB构造设立如表4-4所示。表4-4

OpenPort函数中串口DCB配备DCB定义项目设立值备注BaudRateBaud设立波特率为传入型参baud值fBinaryTRUE二进制模式有效fParityTRUE支持奇偶校验ByteSizeDatabits设立数据位为传入型参databits,范畴4~8ParityNOPARITY校验模式有效StopBitsStopbits设立停止位为传入型参stopbitsfOutxCtsFlowTRUE串口输出由端口CTS线控制fOutxDsrFlowTRUE串口输出由端口DSR线控制fDtrSensitivityDTR_CONTROL_ENABLE续表4-4

OpenPort函数中串口DCB配备DCB定义项目设立值备注fDsrSensitivityFALSEfTXContinueOnXoffTRUE串口接受缓冲区已满时,且驱动程序已传送了XOFF字符,则驱动程序停止传送字符fOutXFALSEXON/XOFF控制不用于控制串行输出fInXFALSEXON/XOFF控制不为输入串行流使用fErrorCharFALSEfNullFALSE串行驱动不忽视接受到空字节fRtsControlRTS_CONTROL_ENABLEfAbortOnErrorFALSE串口发生错误时,并不终结串口读写(3)串口超时设立设立好串口驱动操作配备后,一种必要环节是,设立端口超时值。所谓超时,是指WindowsCE.net在读串口和写串口自动返回前等待读或写操作时间长度。在程序中,用如下两个函数控制串行超时。BOOLGetCommTimeouts(HANDLEhFile,LPCOMMTIMEOUTSlpCommTimeouts);BOOLSetCommTimeouts(HANDLEhFile,LPCOMMTIMEOUTSlpCommTimeouts);这两个函数都包括了相应串行设备句柄和COMMTIMEOUTS构造指针,COMMTIMEOUTS构造定义为:typedefstruct_COMMTIMEOUTS{DWORDReadIntervalTimeout;DWORDReadTotalTimeoutMultiplier;DWORDReadTotalTimeoutConstant;DWRODWriteTotalTimeoutMultiplier;DWORDWriteTotalTimeoutConstant;}COMMTIMEOUTS;(4)其她函数设立串口输入输出缓冲区。原型如下BOOLSetupComm(HANDLEhFile,DWORDdwInQueue,DWORDdwOutQueue);设立串口检测事件集。SetCommMask(HANDLEhFile,DWORDdwEvtMask);通过这个函数,可以使线程等待如表4-5中常用串口驱动程序事件。表4-5

串口驱动程序事件事件标志表达意义EV_BREAK检测到中断EV_CTSCTS更改状态EV_DSRDataSetReady信号更改状态EV_ERR串行驱动程序检测到错误EV_RKSDReceiveLineSignalDetect行更改状态EV_RXCHAR接受到一种字符EV_RXFLAG接受到一种事件字符EV_TXEMPTY传播缓冲区为空关闭串口调用CloseHandle可以关闭一种串行端口,用关闭在打开串口时创立那个句柄即可关闭串口了。办法如下CloseHandle(m_hComm);关闭线程函数:BOOLTerminateThread(HANDLEhThread,DWORDdwExitCode);其中,hThread为要关闭线程句柄。dwExitCode普通为0。若成功关闭,则返回一种非零值。关闭串口函数工作流程如图4-9所示。

SHAPE

图4-9

ClosePort函数流程图串口读线程读串口ReadFile函数原形:BOOLReadFile(HANDLEhFile,

//文献句柄LPVOIDlpBuffer,

//用于保存读入数据一种缓冲区DWORDnNumberOfBytesToRead,

//要读入字符数LPDWORDlpNumberOfBytesRead,//从文献中实际读入字符数LPOVERLAPPEDlpOverlapped

//异步读取描述,在WindowsCE中为NULL);在该线程中,若串口读完一条信息,则发送一种系统消息到系统窗体,该消息名称为WM_RXCHAR_ALL,是一种顾客自定义消息。发送给系统窗体附带消息包括收到消息内容和消息长度。发送系统消息API函数SendMessage原型如下:LRESULTSendMessage(HWNDhWnd,UINTMsg,WPARAMwParam,LPARAMIParam);图4-10串口读线程流程图写串口在CCESeries类中,一共编写了三个写串口函数,为是以便不同状况下调用。如要向写已知长度字符串,可以采用WritePort(char*buf,intnSize)函数。写未知长度字符串时,采用WritePort(char*buf)函数,字符串长度将在函数内部进行计算。前者提高了写串口时间效率。这三个函数中,采用了一种共同API函数WriteFile(),它函数原型如下:BOOL

WriteFile(HANDLEhFile,

//文献句柄LPCVOIDlpBuffer,

//数据缓存区指针DWORDnNumberOfBytesToWrite,

//要写字节数LPDWORDlpNumberOfBytesWritten,//用于保存实际写入字节数存储区域指针LPOVERLAPPEDlpOverlapped

//OVERLAPPED构造体指针,CE里设为NULL);串口类调用在主程序中,必要调用此CCESeries类,以达到操作串口目。在定义智能家居窗口行为CSmartHomeDlg类头文献CSmartHomeDlg.h文献中,添加CCESeries.h头文献。并且新建一种public公共型变量m_BTSerial(蓝牙串口)和m_IRSeries进行对CCESeries类实例化。CCESeriesm_BTSerial;CCESeriesm_IRSerial;在用于CSmartHomeDlg类成员函数定义文献CSmartHomeDlg.cpp文献中,采用形如m_BTSerial.OpenPort(this->m_hWnd,1,9600)方式进行串口类成员函数调用。串口监听在读串口线程中,读完串口一条信息后发送名为WM_RXCHAR_ALL系统消息给系统窗体。在窗体程序中,必要对其进行响应。在CSmartHomeDlg.cpp文献中,添加一条消息响应声明:ON_MESSAGE(WM_RXCHAR_ALL,OnComRecvMsg)其中OnComRecvMsg为对其消息响应函数,函数声明如下:afx_msglongOnComRecvMsg(WPARAMwParam,LPARAMlParam);其中“afx_msg”阐明该函数是一消息响应函数。4.4GSM通信模块

智能家居以GSM网络作为数据无线传播网络,运用基于GSM网络上短信息服务,完毕智能家居远程安全监控和无线报警功能。4.4.1设计基本原理PDU编码规则自短信息技术被开发到当前,对短信息控制方式包括了BlockMode、基于ATTextMode基于AT指令PDUMode。使用Block模式需要厂家驱动支持,随着技术发展,后两种模式将其取代。Text模式比较简朴,但不能发送中文短信息。在智能家居软件设计中,采用是基于PDU模式,该模式支持各个国家语言,固然也涉及中文。在智能家居中,采用中文报警和中文指令。PDU数据包格式,是手机发送短信一种数据单位[7]。其中发送源手机号码、短消息服务中心号码(SMSC)、时间戳等都是用压缩BCD码表达,低位在前,高位在后。在PDU模式中,可采用Bit7、Bit8和UCS2编码方式对短消息发送内容进行编码。这三种编码方式可以发送最大字符数分别为160,140和70。其中Bit7编码发送普通ASCII字符,从0x00到0x7f,共可以表达128个字符。而短消息报文是以8位字节传播,因此就必要把8位码压缩成7位码。实现办法是:将第二个字符最后一位,补充到第一种字符前面第一位,第三个字符后两位,补充到第二个字符前两位,依次类推,就可得到相应字符串。最后转换成十六进制。Bit8编码通惯用于发送任何二进制数据。UCS2编码用于发送Unicode字符。它固定使用16位共两个字节来表达一种字符,共可以表达65535个字符。图4-11和图4-12分别是接受和发送短信报文格式。图4-11接受短信报文格式图4-12发送短消息报文格式实例一、发送短信时PDU码:0891683108200105F011000B913158812764F800000006C8329BFD0E01表4-6发送PDU包解析分段含义阐明08SMSC地址信息长度共8个八位字节(涉及91)91SMSC地址格式(TON/NPI)用国际格式号码(在前面加‘+’)683108200105F0SMSC地址86,补‘F’凑成偶数个11基本参数(TP-MTI/VFP)发送,TP-VF用相对格式00消息基准值(TP-MR)00B目的地址数字个数共11位,不涉及补足‘F’91目的地址格式(TON/NPI)用国际格式号码(在前面加‘+’)683118483146F9目的地址(TP-DA)86,补‘F’凑成偶数个00合同标记(TP-PID)是普通GSM类型,点到点方式00顾客信息编码方式(TP-DCS)7-bit编码00有效期(TP-VP)5分钟06顾客信息长度(TP-UDL)实际长度6个字节C8329BFD0E01顾客信息(TP-UD)“Hello!”结合发送短信报文格式,懂得短消息中心号码是:+86,对方号码是:,消息内容是“Hello!”。实例二、接受短信时PDU码0891683108200105F0840D91683158812764F8000830

30218063548006534E4E1C0021表4-7接受短消息PDU包解析分段含义阐明08SMSC地址信息长度共8个八位字节(涉及91)91SMSC地址格式(TON/NPI)用国际格式号码(在前面加‘+’)683108200505F0SMSC地址86,补‘F’凑成偶数位84基本参数(TP-MTI/MMS/RP)接受,无更多消息,有回答地址0B回答地址数字个数共11个十进制数(不涉及‘F’)91回答地址格式(TON/NPI)用国际格式号码(在前面加‘+’)683158812764F8回答地址(TP-RA)86,补‘F’凑成偶数位00合同标记(TP-PID)是普通GSM类型,点到点方式08顾客信息编码方(TP-DCS)UCS2编码30302180635480时间戳(TP-SCTS)-3-1208:36:45

+8时区06顾客信息长度(TP-UDL)实际长度6个字节534E4E1C0021顾客信息(TP-UD)“华东!”短消息中心号码是:+86,对方号码是,消息内容是“华东!”。AT指令在智能家居中,控制中心通过串口给MC35模块发送AT指令以达到控制它目。表4-8中是某些系统中采用AT指令。表4-8系统采用AT指令AT指令功能AT+CMGF=0选取短消息信息格式,等于0时为PDU格式,等于1时为文本模式,AT+CNMI=1,1,0,0,1设立为短信到达时自动提示AT+CMGS=?发送短消息,发送成功则返回OK字符串AT+CMGR=?读取短消息,读取成功则返回+CMGR:0,"",[id][content]AT+CMGD=?删除短消息4.4.2软件实现PDU编码解码短信PDU解码和编码功能由智能家居软件工程中CEncode类实现。CEncode类成员函数如表4-9所示:表4-9CEncode类办法办法备注IntgsmString2Bytes(constchar*pSrc,unsignedchar*pDst,intnSrcLength)可打印字符串转换为字节数据如:"C8329BFD0E01"-->{0xC8,0x32,0x9B,0xFD,0x0E,0x01}int

gsmBytes2String(constunsignedchar*pSrc,char*pDst,intnSrcLength)字节数据转换为可打印字符串如:{0xC8,0x32,0x9B,0xFD,0x0E,0x01}-->"C8329BFD0E01"intgsmEncode7bit(constchar*pSrc,unsignedchar*pDst,intnSrcLength)7bit编码intgsmDecode7bit(constunsignedchar*pSrc,char*pDst,intnSrcLength)7bit解码intgsmEncode8bit(constchar*pSrc,unsignedchar*pDst,intnSrcLength)8bit编码intgsmDecode8bit(constunsignedchar*pSrc,char*pDst,intnSrcLength)8bit解码intgsmEncodeUcs2(constchar*pSrc,unsignedchar*pDst,intnSrcLength)UCS2编码intgsmDecodeUcs2(constunsignedchar*pSrc,char*pDst,intnSrcLength)UCS2解码intgsmInvertNumbers(constchar*pSrc,char*pDst,intnSrcLength)正常顺序字符串转换为两两颠倒字符串,若长度为奇数,补'F'凑成偶数。如:"86"-->"F8"intgsmSerializeNumbers(constchar*pSrc,char*pDst,intnSrcLength)两两颠倒字符串转换为正常顺序字符串。如:"F8"-->"86"IntgsmDecodePdu(constchar*pSrc,SM_PARAM*pDst)PDU解码,用于接受、阅读短消息intgsmEncodePdu(constSM_PARAM*pSrc,char*pDst)PDU编码,用于编制、发送短消息

在该类中,核心函数为gsmDecodePdu函数与gsmEncodePdu函数,它们将在智能家居中对话框类CSmartHomeDlg中被调用。调用办法将在下文予以简介。gsmDecodePdu函数与gsmEncodePdu函数分别用来在发短信时依照PDU规范进行编码,以及对串口收到PDU编码进行解码。编码与解码依照在头文献中定义短消息构造体进行取值或填充。如下是定义关于编码方式常量和填充短消息数据构造。这些在接受与发送短信时是共用。#defineGSM_7BIT

0

//7Bit编码方式#defineGSM_8BIT

4

//8Bit编码方式#defineGSM_UCS2

8

//UCS2编码方式typedefstruct{

charSCA[16];

//短消息服务中心号码(SMSC地址)

charTPA[16];

//目的号码或回答号码(TP-DA或TP-RA)

charTP_PID;

//顾客信息合同标记(TP-PID)

charTP_DCS;

//顾客信息编码方式(TP-DCS)

charTP_SCTS[16];

//服务时间戳字符串(TP_SCTS),接受时用到

charTP_UD[161];

//原始顾客信息(编码前或解码后TP-UD)

charindex;

//短消息序号,在读取时用到}SM_PARAM;CEncode类各成员函数作用和工作流程:gsmDecodePdu()函数用于接受、阅读短消息。输入源PDU串指针,目的PDU参数指针,并返回顾客信息长度。源PDU串是可打印字符串,如“C8329BFD0E01”,目的PDU参数是字节数据,如“{0xC8,0x32,0x9B,0xFD,0x0E,0x01}”,在这个函数中,较多采用了同在一种类中可打印字符串转换为字节数据函数gsmString2Bytes;在短消息服务中心(SMSC)和回答号码字符解决过程中,依照PDU串编码规范,需要对描述SMSC字符串段进行两两颠倒,并且去掉经颠倒后字符串后最后一种字符——“F”,那就采用了同在一种类中gsmSerializeNumbers函数;通过数据分离,将PDU串中描述短信编码位TP-DCS跟规定数值进行对比,如表达7位码数值为0,8位码为4,UCS2编码为8等。对比完毕后,将顾客信息进行相应方式解码——如7位解码。它工作流程如图4-13所示。

SHAPE

图4-13

CEncode类gsmDecodePdu函数工作流程gsmEncodePdu()函数用于编制、发送短消息,输入源PDU参数指针,输出目的PDU串指针,并返回目的PDU串长度。源PDU参数是字节信息,如“{0xC8,0x32,0x9B,0xFD,0x0E,0x01},目的PDU参数是字节数据,如“C8329BFD0E01”,在这个函数中,较多采用了同在一种类中字节数据转换为可打印字符串函数gsmBytes2String;在短消息服务中心(SMSC)和回答号码字符解决过程中,依照PDU串编码规范,需要对描述SMSC号码进行两两颠倒,并且在经颠倒后字符串后加上一种字符——“F”,那就采用了同在一种类中gsmInvertNumbers函数;依照描述短信编码TP-DCS跟规定数值进行对比,如表达7位码数值为0,8位码为4,UCS2编码为8等。对比完毕后,将顾客信息进行相应方式编码——如7位编码。它工作流程如图4-14所示。

SHAPE

图4-14

CEncode类gsmEncodePdu函数工作流程gsmString2Bytes函数作用是将可打印字符串转换为字节数据,如"C8329BFD0E01"-->{0xC8,0x32,0x9B,0xFD,0x0E,0x01},输入源字符串指针和输出源字符串长度,输出目的数据指针,返回目的数据长度。流程图如图4-15所示:

SHAPE

图4-15

gsmString2Bytes函数工作流程其中每两个字符串要整合成一种字节数据,如“C8”要转化为“0xC8”,故第一种字符“C”经字符转化为十六进制后要左移四位,使其成为“0xC0”,再与通过转换低四位进行相或;然后计数器加2,源字符串和目的数据指针往后移一种单位,继续解决下面字符,直到计数器值大小等于要解决源字符串长度,则将解决好数据输出。字符转化为十六进制原理是:数字字符与0字符相减,得到它们ASCII码之差,这个差就是这个字符所要表达数字大小,如字符‘8’就转换成了数字类型8,用二进制表达就是1000。而A、B、C、D、E、F等字符是与‘A’ASCII码值相减,再加上10,就可以得到其表达十六进制数值。如‘F’减去‘A’得到5,再加10,得到15,实质上就是十六进制中F所相应十进制数15。gsmBytes2String函数功能与gsmString2Bytes函数相反,工作流程如图4-16所示。

SHAPE

图4-16

gsmBytes2String函数工作流程其中低四位是每个字节数据与0x0f位与得到。每四位表达数值为0~15,而在tab数组中,从tab[0]到tab[15],相应字符为‘0’到‘9’和‘A’到‘F’,通过此算法可以达到由数值型到字符型转换,最后完毕整条字节数据到字符串转换。gsmEncode7bit函数作用是7bit编码。输入源字符串指针和源字符串长度,输出目的字符串指针和目的编码串长度。工作流程图如图4-17所示。

SHAPE

图4-17

gsmEncode7bit函数流程gsmDecode7bit函数用于7位码解码,输入源编码串指针和源编码串长度,输出目的字符串指针和目的字符串长度。流程图如图4-8所示:

SHAPE

图4-18

gsmDecode7bit函数工作流程gsmEncode8bit函数用于8位码编码,由于计算机采用也是8位码,源编码串和目的字符串是一致,因此其编码工作用memcpy函数简朴复制即可完毕。gsmDecode8bit函数用于8位码解码,与gsmEncode8bit同样只需要采用简朴复制即可,区别在于在目的字符串末尾加一种“\0”结束字符。gsmEncodeUcs2函数用于UCS2编码,依照PDU编码规则,UCS2码采用是16位双字节编码方式。工作方式如图4-19所示。

SHAPE

图4-19

gsmEncodeUsc2函数工作流程gsmDecodeUsc2函数用于UCS2码解码。它工作流程如图4-20所示:

SHAPE

图4-20

gsmDecodeUcs2函数工作流程gsmEncodeUcs2函数和gsmDecodeUcs2函数分别用了作用相反两个API函数——MultiByteToWideChar和WideCharToMultiByte函数。它们作用分别为将短字符(用8位数据表达字符)转换为宽字符(16位数据表达字符,如Unicode编码),和将宽字符转换为短字符。gsmInvertNumbers函数作用是将形如“86”这样字符串两两颠倒成“F8”,其中源字符串长度为奇数时,补字符‘F’凑成偶数。流程图如图4-21所示。

SHAPE

图4-21gsmInvertNumbers函数工作流程收发短信(1)监听新短信GSM模块连接在串口上,对短信监听实质上是对串口监听。详细新短消息监听流程如图4-22所示:图4-22

新消息监听流程其中:1)AT+CMGF=0——设立短消息内容控制模式为PDU模式2)AT+CNMI=1,1,0,1,1——设立短消息到达自动提示功能。3)AT+CMGR=[index],其中index是短消息在SIM卡中地址。如果读取成功,既相应地址中存在信息,则返回CMGR:0,"",[id][content],当人工选取读信息时候,也可以采用此语法,只要将index值改成短消息在SIM卡中地址即可。若短消息不存在,则返回ERROR。(2)发送短消息在发送短信之前,要对数据构造体SM_PARAM进行数据填充。其中短消息服务中心和目的号码格式是不包括加号却包括国家代码国际原则格式号码,如86。在数据填充之前要将这些号码文本进行解决。在CSmartHomeDlg类中,必要对短信编码解码类CEncode和SM_PARAM构造体进行实例化。CEncodem_encode;SM_PARAMparam;在填充好机构体后来,用下面一句nPduLength=m_encode.gsmEncodePdu(¶m,pdu);对短消息构造体进行PDU编码,编码成果放入pdu数组中,PDU长度返回到nPduLength。流程图如图4-23所示:

SHAPE

图4-23

发送短信流程4.5图象采集模块中星微摄像头采用了中星微301PLUS迅速主控芯片。该芯片是一款高性能图像压缩芯片,输出MIPEG视频流数据。MIPEG(MotionJPEG)重要是基于静态视频压缩发展起来技术,特点是基本不考虑视频流中不同帧之间变化,只单独对某一帧进行压缩,普通可达到6:1压缩率。它误差稳定性非常好,可以获取清晰度很高视频图像,并且还可以灵活设立各路视频清晰度,压缩帧数。4.5.1摄像头驱动程序该摄像头官方提供了其在WindowsCE环境下驱动程序zc030x.dll和在VC下对其编程lib库文献zc030xlib.lib。只要在智能家居工程属性中,将其提供lib库文献导入即可使用它提供某些函数。环节:Project菜单->SmartHomeProperties,选取左边列表ConfigurationProperties->Linker->Input导入lib库文献操作截图如图4-24所示:图4-24在VS中添加lib库文献图像采集模块用到重要函数有:capInitCamera()用来初始化视频设备,并获取当前可用视频设备数目;capSetVideoFormat()设立视频格式和辨别率。本系统使用视频格式为RGB24,辨别率为320×240像素;capGetPicture()获取摄像头近来捕获一幅位图,存入指定缓存中capCloseCamera()关闭视频设备4.5.2视频捕获和视频信息传送摄像头工作流程通过了初始化摄像头和捕获视频和关闭摄像头等流程,详细流程如图4-25所示:

SHAPE

图4-25摄像头工作流程其中设立视频格式、捕获图象和发送图象等环节位于线程CaptureThreadProc中,该线程在点击智能家居系统应用程序界面上“打开摄像头”按钮后创立,在点击“关闭摄像头”后关闭。视频数据分包发送在视频监控功能中是核心一种环节。在这个环节里,系统将摄像头采集到视频数据存储在一种暂时数组中,通过对这个暂时数组数据分割,完毕数据分包存储。在系统中,每个视频数据包大小为1440字节。在系统运营测试中,通过断点调试方式,懂得摄像头通过capGetPicture()函数获取到一帧图象信息大小大概在4000字节到5000字节之间,因此持续发送四个到五个数据包即可将一幅画面数据发送到客户端。4.6以太网通信模块在智能家居中,嵌入式平台充当服务器角色,相应PC视频监控端充当客户端角色。服务器端与客户端之间通信基于TCP/IP合同。4.6.1TCP/IP合同Internet上使用一种核心底层合同是网际合同,普通称IP合同。通过这个共同遵守合同,可以使Internet成为可以连接不同层次计算机网络。IP合同是TCP/IP合同心脏,是计算机网络层中最重要合同,IP合同用来协助数据找到通往目计算机途径[8]。IP层接受从网络接口层发送过来数据包,并把该数据包发送到更高层——TCP层;相反,IP层也将从TCP层发送过来数据包发送到接口层——网络层更低层。而IP数据包是不可靠,由于IP合同并没有做任何事情来确认数据包顺序和它完整性。IP数据包中包括了发送数据包计算机IP地址(源地址)和接受数据包计算机IP地址(目的地址)。TCP合同重要是对IP数据包中被封装好TCP数据包进行排序和错误检查。TCP数据包涉及序号与确认,依照这些信息可以将未通过对的排序数据包进行排序,损坏包按规定进行重传。解决完后来将数据发送给更高层应用程序。应用程序轮流将信息发给TCP层,TCP层将数据发送给IP层,最后通过设备驱动和物理介质(网线)等发送到目的计算机。如图4-26所示。应用层合同(HTTP、FTP等)传播控制合同TCP网间合同IP以太网驱动程序硬件以太网接口图4-26IP层与以太网驱动器以及TCP层、应用程序层通信4.6.2软件实现所有TCP通信都发生在两个端点或两个套接字(Socket)之间[8]。每个Socket均有一种端标语与一种IP地址。Socket可以被当作在两个程序进行通讯连接中一种端点,一种程序将一段信息写入Socket中,该Socket将这段信息发送给此外一种Socket中,使这段信息能传送到其她程序中。在智能家居系统服务端,TCP编程流程如下:(1)TCP服务器声明一SOCKET类型全局变量m_Socket;(2)通过bind函数绑定本地地址;(3)用Listen函数进行监听客户端连接(4)当有客户端祈求时,套接字采用Accept函数接受客户端祈求(5)服务端新添加一种单独套接字与客户端进行通讯。若用流程图表达,如图4-27所示。基于以上流程和原理,在VS中新添加两个类——CTCPServer_CE和CTCPCustom_CE。其中CTCPServer_CE类用于启动与关闭TCP服务,以及打开监听套接字事件线程。CTCPCustom_CE用于打开套接字和关闭套接字,以及向客户端发送数据等。

SHAPE

图4-27TCP服务工作流程图在初始化阶段,调用WSAStartup()函数以在应用程序初始化WindowsSocketDLL,调用成功后,应用程序即可采用WindowsSocket中其她关于API函数。在此之后,在程序中建立一种用于监听网络Socket,并定义其采用通讯合同——TCP合同。完毕这一操作函数是socket()。它原型是:SOCKETPASCALFARsocket(intaf,inttype,intprotocol)其中第二个形参用于指定套接字通信类型,当type为SOCK_STREAM时,为遵从TCP合同通信,若要遵从UDP合同,应设立为SOCK_DGRAM;在智能家居中,采用前者。依照流程,接下来要绑定一种IP地址和端口,这个地址和端口是客户端将要连接目的,通过调用bind()函数可以完毕这一操作,如下是bind()函数原型。intPASCALFARbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);其中s为被操作Socket对象,name是ARM端IP地址。namelen为IP地址长度。在监听网络某些,ARM服务器端建立一种监听队列来接受客户端连接祈求。listen()函数可以完毕这一操作。intPASCALFARlisten(SOCKETs,intbacklog);s为要操作Socket;backlog为最大连接数,在系统中设立为8。在客户端发出连接祈求时,ARM客户端调用accept()函数,从而完毕完整连接操作。在智能家居系统软件设计中,将监听以太网通过一种线程来实现。

SHAPE

图4-28TCP读线程工作流程4.7PC端视频监控模块该模块采用Delphi7公司版编写,它是由Borland公司推出全新可视化编程环境,是迅速、以便桌面Windows应用程序开发工具之一[9]。它综合了Windows图形界面许多特性和设计思想,采用了面向对象编程语言。在Delphi中,提供了包括TCP通信控件在内许多控件使开发人员可以迅速构建和实现应用软件系统。基于这一特点,PC客户端采用Delphi编写。PC端处在TCP/IP网络中客户端,它网络通信依托Delphi中TCPClient控件完毕。TCPClient控件需要完毕操作是:1)

打开一种通信信道,连接到智能家居ARM服务器端特定端口。2)

向服务器发送服务祈求报文,等待并接受应答,如此重复3)

祈求结束后关闭通信通道并终结通讯。按照如下环节建立好PC端视频监控程序界面,如图4-29所示,图4-30所示是客户端工作流程。图4-29

PC端视频监控程序界面A、打开Delphi7集成环境,系统自动新建一种工程。B、在窗体中拖入Standard控件工具箱button控件三个,label控件2个,Edit控件两个,Groupbox一种,Additional工具箱里Image控件一种,Internet工具箱里TCPClient控件一种。C、设立各控件属性,如表4-10所示。表4-10

PC端视频监控软件控件设立状况控件种类名称属性设立窗体主窗体caption:“视频监控PC端”按钮设立caption:“设立”,name:“BtnSetting”启动视频caption:“启动视频”,name:“BtnOpenCamera”关闭视频caption:“关闭视频”,name:“BtnCloseCamera”标签对方IP:caption:“对方IP:”,name:“Label1”对方端口:caption:“对方端口:”,name:“Label2”编辑框IPname:“txtIP”,text:“6”端口name:“txtPort”,text:“9000”TCPClientHost:“6”,Port:“9000”图像框name:“VideoFrame”,height:“240”,width:“320”其中,Image控件用于显示视频,它一次只显示一帧静态图象,由于人眼有视觉暂留效应,图象更新也比较快,因此人眼看起来是动态图象。界面中文本框控件是为了能在对方IP地址和端标语变化状况下,通过输入不同IP号和端标语,再点击设立按钮,从而变化TCPClient控件Host属性(用于指定对方IP)和Port属性(用于指定对方端口),再打开以太网通信通道,向ARM服务端进行连接祈求。

SHAPE

图4-30PC客户端工作流程在程序设计中采用了Delphi中TJpegImage对象和TMemory对象。TMemory对象用于存储TCP层发送给应用层数据包包括数据,在接受完数据包后,程序创立TJpegImage类型对象jpg,jpg通过LoadFromStream()办法装载缓冲区中数据,最后在窗体上VideoFrame图片控件上显示出来。4.8家电控制及传感器模块在该模块中,家电控制以及传感器报警模块依托89C51单片机丰富I/O口完毕。传感器报警状态通过RS232串口向ARM发送相应字符串,由ARM端应用程序进行解析。类似,ARM端通过串口发送指定格式字符串到单片机串口,串口打开相应LED,以表达相应家电电源打开。4.8.1单片机串口配备在智能家居系统家电控制板中,单片机串行口通信采用10位为一帧工作方式1。这10位中,共涉及1个起始位、8位数据位和1个停止位[10]。起始位D0D1D2D3D4D5D6D7停止位图4-31

单片机串行工作方式1帧格式依照串口合同,串口工作方式1中数据发送办法是在往发送寄存器(SBUF)中发送一条8位数据后,由硬件自动地在它前面加入起始位和在背面加上一种停止位,构成完整帧格式。数据从串口TXD输出,输出完一帧数据后,TXD输出线保持高电平,并且SCON寄存器TI位被置位为1,告知CPU可以发送下一帧数据。接受数据时,SCON寄存器REN位被设为1,串口采样RXD针脚,当RXD从高电平向低电平状态跳变时,单片机辨认出起始位到达,在移位脉冲控制下,读完数据位并且将其存入接受寄存器中,直到停止位到达,置位RI中断标志位,单片机CPU即可将数据取走。在智能家居系统中,规定单片机波特率为9600bps,这是为了与在应用软件中串口设立相相应,使其可以与ARM正常通信。波特率大小由单片机定期(计数)器T1计数溢出率决定。在单片机扩展板中,采用是11.0592MHz晶振,计算定期器计数初值:

(4-1)其中smod=0,使波特率不倍增,PCON=00H。对于定期器1,选取方式2作为其工作方式。这种工作方式将16位计数器T1提成了两某些,其中高8位TH1作为预置寄存器,在初始化时,将计数初值分别存入TH1和TL1中,即两者内容相似,当计数溢出时,预置寄存器TH1将计数初值直接给TL1加载,这样就避免了在程序中重复地存储计数初值,进一步提高了定期精度,保证了串行接口波特率稳定,同步也是保证了串口通信稳定性。4.8.2串口通信自定义商定为了便于单片机与ARM之间通讯信息解析,特别定义了如下自定义信息交流格式商定。A传感器报警字符串,如图4-32所示。#$#1报头传感器编号图4-32传感器报警字符串格式该字符串为传感器报警时单片机向ARM串口发送字符串,共四位,不同传感器报警时,发送字符串区别在于第四位。在家电控制板上,有三个按钮模仿三个传感器,即传感器编号为1、2、3。如传感器2报警时,发送“#$#2”字符串到ARM。B家电控制字符串,如图4-33所示。%1111报头家电1标志位家电2标志位家电3标志位家电4标志位图4-33家电控制字符串格式该控制字符串共五位,包括报头‘%’字符和四位分别表达不同家电标志位。要控制家电电源开和关,只要在相应位上进行置位(设为1)或重置(设为0)即可。如要启动家电1和4,保持2和3关闭状态,则向单片机发送“%1001”字符串即可。4.8.3单片机程序流程单片机程序采用C语言编写。单片机工作主流程如图4-所示。其中单片机初始化涉及对定期方式控制寄存器初始化、对定期计数器1初始化,串口工作方式初始化以及波特率设立等。在传感器状态字符串信息发送过程中,采用逐字发送方式发送字符串。这是由于

温馨提示

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

最新文档

评论

0/150

提交评论