基于VB实现短信息收发功能

更新时间:2024-07-07 02:48:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

摘要

本论文主要介绍了利用VB来开发一套实现短信息收发功能的信息系统,并给出了短信息发送系统的软、硬件及设计过程,以及当前无线控制的发展趋势,与目前无线通信的紧密连接。该系统基于GSM 原理利用手机通信的远程信息检视系统.该系统利用了手机短信的远距离收发与单片机的有效结合,最大特点是可实现安全远距离实时监控,并记录监控结果,由于利用了TC35模块,所以硬件相对简单,主要有PC机、TC35模块、单片机以及它们之间的串行接口,并进行编程来控制。PC机与TC35模块之间的通信协议采GSM通用通信协议,利用VB语言的MSC0MM控件实现两者之间的通信,单片机部分采用了上位机,使检测和检控在不同的地点,确保人员的安全,硬件看门狗使系统运行更可靠。 关键词:VB;MSCOMM控件;串口通信;短信息收发

0

目 录

1 绪论 ............................................................... 0

1.1 无线MODEM的现状及应用领域 ................................... 0 1.2 无线MODEM的发展趋势 ......................................... 0 1.3 本次毕业设计的主要内容 ....................................... 1 2 无线MODEM设计的方案 ............................................... 1

2.1无线MODEM硬件电路的总体思路 ................................. 1 2.2无线MODEM设计软件工程实现的总体思路 ......................... 1 3 短信息系统 ......................................................... 3

3.1短信通信服务 ................................................. 3 3.2基于短信息的远程控制系统 ..................................... 5 3.3与短信息通信相关的AT指令 .................................... 5 3.4短信息传输的格式 ............................................. 6 4 系统硬件 ........................................................... 9

4.1西门子TC35模块的外围电路 .................................... 9 4.2 MSP430单片机介绍及外围电路 ................................. 11 4.3 RS-232的介绍及外围电路 ..................................... 12 4.4 复位电路 .................................................... 14 4.5 电源电路 .................................................... 15 5 Visusal Basic的编程环境 .......................................... 16

5.1 VB软件介绍 ................................................. 16 5.2 VB6.0的编程环境 ............................................ 17 5.3 MSCOMM控件 ................................................. 21 5.4 VB对英文和汉字的处理 ....................................... 26 5.4短信息收发系统的实现 ........................................ 29 5.5 实现系统功能的调试 .......................................... 34 5.6 最终达到的结果 .............................................. 34 总结 ................................................................ 37 致谢 ................................................................ 38 参考文献 ............................................................ 39

0

1 绪论

1.1 无线MODEM的现状及应用领域

随着计算机通信技术的发展,计算机网络监控已成为各种重要现场监控的必要技术手段,对于远程监控使用无线远程监控已经成为控制领域的发展趋势。GSM网络由于其覆盖范围广、信号较稳定、无同频干扰、保密性好、可处理大量的短消息、数据和传真传送等业务功能,而GSM短消息具有随时在线(Always Online)﹑不需拨号﹑价格便宜﹑覆盖范围广等特点,特别适合于需传送小流量数据的应用,而,广泛应用于油田、气象、港监、水网水文、环保监测、车辆船舶、移动作业等场所。以往这些领域往往采用集群通讯﹑CDPD网或有线MODEM来进行通讯,但这些技术大多存在通讯范围有限﹑费用高﹑每次通讯需先拨号等缺点。使用无线MODEM,这些问题便迎刃而解。

GSM系统是目前基于时分多支技术的移动通信体系中比较成熟、完善、应用最广泛的一种系统。主要提供话音、短信息、数据等多种业务。基于GSM短信息功能可以做成传输各种监测、监控数据信号和控制命令的数据通信系统,能广泛应用于远程监控、定位导航、个人通信终端等。由于GSM网络实现了联网和漫游,这样利用GSM网络传输数据不需要再组建专用通信网络,因此采用段心系方式传输数据的系统应用将会越来越广泛。此次通过单片机控制手机模块来实现数据传输的系统,该系统采用短信息的方式传输数据,该系统具有使用灵活、运行可靠等特点。

1.2 无线MODEM的发展趋势

随着无线数据业务的快速发展,许多从来没有的应用从理想变成了现实,如车辆导航﹑远程监控﹑无线上网﹑无线POS﹑物流控制、社区安防等,越来越多的设备开始要求具备无线通讯能力。

无线MODEM无线通讯模块便是在这种背景下,由我们自己研发出的通讯产品。应用开发商通过它使自己的设备增添无线通讯能力,从而开发出各种各样的应用。该模块采用发展最成功的无线通讯技术,能提供短消息数据通讯功能,同时也可按照需求配备话音通讯功能。

在一些监控系统中需要将数据传向远端服务器,实现这种应用的主要有有线传输和无线传输两种方式。有线传输具有可靠性高、成本低的特点,但是有线传输需要有电话线,这样就很大程度限制了应用场合。无线传输有数传电台的方式,由于采用电台的方式受通信距离的入网许可证等方面的限制,因此采用电台方式

0

的无线数据传输系统在应用上也有很大的局限性。采用GSM网络传输数据具有介入方便、不需要组网等优点,加上短信息的广泛应用,因此采用短信息的方式传输数据将是一个实现远程传输数据的新的切入点。

1.3 本次毕业设计的主要内容

对于本次毕业设计的题目,主要设计是基于已有的硬件,利用VB来开发一套实现短信息收发功能的信息系统。

2 无线MODEM设计的方案

2.1无线MODEM硬件电路的总体思路

此次设计研究的是——无线MODEM工作原理与工程实现短信息收发功能的信息系统,此设计硬件电路:基于单片机实现数据传输系统。基本原理:采用TC35模块与单片机通过串口进行连接,再串口使PC机与单片机进行通信。其系统原理框图如图2-1所示。

图2-1 系统原理框图

2.2无线MODEM设计软件工程实现的总体思路

整个软件系统主要实现数据的传输。利用VB的编程,来编写一个工程界面,实现短信息收发系统。发送流程图如图2-2所示。

1

图2-2 发送流程图

接收短信息流程图如图2-3所示。

2

图2-3 接收系统流程图

整个信息接收系统是基于MSComm控件,利用收发AT指令进行数据交互,具体的实现是通过编码和解码的数据缓冲区来实现。

3 短信息系统

3.1短信通信服务

(1)短信中心服务

GSM(Global System for Mobile Communication)网络除了提供话音服务外,还提供面向字符的短信服务(SMS,Short Message Service)。SMS占用信道的时间短、费用小,可使得两个GSM用户方便地进行点对点通信。由于因特网开发的时间较长,而且已经具有大量的支持软件,并形成了丰富的资源,因此目前众多的短信服务厂商几乎都与国际因特网相结合而形成统一的短信服务中心。如图3-1是中国移动通信集团短信网络的结构,其中的简写短语意义如下:

SMPP:Short Message Peer to Peer,短信点对点协议。 CMPP:China Mobile Peer to Peer,中国移动点对点协议。 ISMG:Internet Short Message Gateway,因特网短信网关。

3

图3-1 中国移动通信短信息服务网络

(2)基于串行口的单机短信通信

GSM/GPRS/CDMA是目前商业化的移动通信网络,属于2.5G通信产品,都提供标准的短信服务。但由于其短信中心服务只授权给运营商,科研单位要想开展基于短信的应用研究,目前只能通过移动设备提供的与PC串行通信口来实现。其结构和原理如图3-2所示。

图3-2 通信结构原理图

(3) 基于串行口的短信通信

通过短信可实现有限字符的通信,也可实现用户与因特网服务器之间的有限字符传送。利用这一特点可实现用户通过无线移动网络与因特网之间的通信,进而实现远程控制的目的。这样的控制不受时间、地点和场所的限制。

4

3.2基于短信息的远程控制系统

internet

图3-3 基于短信的油田控制系统结构

3.3与短信息通信相关的AT指令

与SMS有关的GSM AT指令(from GSM07.05)如下表3-1所示:

AT 指令 AT+CMGC 功 能 Send an SMS command 发出一条短消息命令 AT+CMGD Delete SMS message 删除SIM卡内存的短消息 AT+CMGL List SMS message from preferred store 列出SIM卡中的短消息PDU/text: 0/“REC UNREAD”-未读,1/“REC READ”-已读,2/“STO UNSENT”-待发,3/“STO SENT”-已发,4/“ALL”-全部的 AT+CMGR Read SMS message 读短消息 AT+CMGS Send SMS message 发送短消息 AT+CMGW Write SMS message to memory 向SIM内存中写入待发的短消息 AT+CMSS Send SMS message from storage 从SIN|M内存中发送短消息 AT+CNMI New SMS message indications 5

显示新收到的短消息 AT+CPMS Preferred SMS message storage 选择短消息内存 AT+CMGF Select SMS message formate 选择短消息信息格式:0-PDU;1-文本 AT+CSCA SMS service center address 短消息中心地址 AT+CSCB Select cell broadcast messages 选择蜂窝广播消息 AT+CSMP Set SMS text mode parameters 设置短消息文本模式参数 AT+CSMS Select Message Service 选择短消息服务 表3-1与SMS有关的GSM AT指令

3.4短信息传输的格式

对短消息的控制共有三种模式: Block Mode

基于AT命令的PDU Mode 基于AT命令的Text Mode

使用Block模式需要手机生产厂家提供驱动支持,目前,PDU Mode 已取代 Block Mode, Text Mode比较简单,使用Text模式收发短信代码简单,实现起来十分容易,但是最大的缺点是不能收发中文短信,实在是有点美中不足.不过PDU模式完全可以解决这个问题,PDU模式不仅支持中文短信,也能发送英文短信,堪称完美无缺.PDU模式收发短信可以使用三种编码: 7-bit、8-bit和UCS2编码. 7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。

PDU数据格式分析:

例如,我们要将字符“Hi”字符发送到目的地“13677328099” PDU字符串为:

08 91 683108200805F0 11 00 0D 91 3176378290F9 00 00 00 02 C834 (1)08—短信息中心地址长度。指(91)+(683108200805F0)的长度。 (2)91—短信息中心号码类型。91是TON/NPI遵守International/E.164标准,指在号码前需加‘+’号;此外还有其它数值,但91最常用。

6

91—10010001

BIT Name 17 6 5 4 3 2 1 0数值类型 号码鉴别 数值类型(Type of Number):000—未知,001—国际,010—国内,111—留作扩展;

号码鉴别(Numbering plan identification):0000—未知,0001—ISDN/电话号码(E.164/E.163),1111—留作扩展;

(3)683108200805F0—短信息中心号码。由于位置上略有处理,实际号码应为:8613800280500(字母F是指长度减1)。这需要根据不同的地域作相应的修改。

(1)、(2)、(3)通称短消息中心地址(Address of the SMSC)。 (4)11—文件头字节。 11&h=00010001&b

BIT 7 6 5 4 3 2 1 0 Name TP-RP TP-UDHI TP-SPR TP-VFP TP-RD TP-MTI Value 0 0 0 1 0 0 01 应答路径—TP-RP(TP-Reply-Path):0—不设置; 1—设置;

用户数据头标识—TP-UDHL(TP-User-Data-Header-Indicator):0—不含任何头信息; 1—含头信息;

状态报告要求—TP-SPR(TP-Status-Report-Request):0—需要报告; 1—不需要报告;

有效期格式—TP-VPF(TP-Validity-Period-Format):00—不提供(Not present); 10—整型(标准); 01—预留; 11—提供8位字节的一半(Semi-Octet Represented)

拒绝复制—TP-RD(TP-Reject-Duplicates):0—接受复制; 1—拒绝复制; 信息类型提示—TP-MTI(TP-Message-Type-Indicator):00—读出(Deliver); 01—提交(Submit);

(5)00—信息类型(TP-Message-Reference) (6)0B—被叫号码长度。

(7)91—被叫号码类型(同(2))。

7

(8)3176378290F9—被叫号码,经过了位移处理,实际号码为“13677328099”。

(6)、(7)、(8)通称目的地址(TP-Destination-Address)。 (9)00—协议标识TP-PID(TP-Protocol-Identifier)。

BIT 7 6 5 4 3 2 1 0Bit No.7与Bit No.6: 00—如下面定义的分配Bit No.0—Bit No.5;01—参见GSM03.40协议标识完全定义;10—预留;11—为服务中心(SC)特殊用途分配Bit No.0—Bit No.5。

一般将这两位置为00

Bit No.5:0—不使用远程网络,只是短消息设备之间的协议;1—使用远程网络。

Bit No.0—Bits No.4:00000—隐含;00001—电传;00010—group 3 telefax;00100—语音;00101—欧洲无线信息系统(ERMES);00110—国内系统;10001—任何基于X.400的公用信息处理系统;10010—Email。

(10)00—数据编码方案TP-DCS(TP-Data-Coding-Scheme)

BIT 7 6 5 4 3 2 1 0Bit No.7与Bit No.6 :一般设置为00;Bit No.5:0—文本未压缩,1—文本用GSM标准压缩算法压缩;Bit No.4:0—表示Bit No.1、Bit No.0为保留位,不含信息类型信息,1—表示Bit No.1、Bit No.0含有信息类型信息;Bit No.3与Bit No.2:00—默认的字母表,01—8bit,10—USC2(16bit),11—预留;Bit No.1与Bit No.0:00—Class 0,01—Class 1,10—Class 2(SIM卡特定信息),11—Class 3

(11)00—有效期TP-VP(TP-Valid-Period)

VP value(&h) 00 to 8F 90 to A7 (VP+1)*5 分钟 12小时+(VP-143)*30分钟 A8 to C4 C5 to FF (VP-166)*1天 (VP-192)*1 周 相应的有效期 (12)02—用户数据长度TP-UDL(TP-User-Data-Length)。 (13)C834—用户数据TP-UD(TP-User-Data)“Hi”。

8

短消息编码:

设需要发送的短消息内容为“Hi”,使用的GSM字符集为7位编码。首先将字符转换为7位的二进制,然后,将后面字符的位调用到前面,补齐前面的差别。例如:H翻译成1001000,i翻译成1101001,显然H的二进制编码不足八位,那么就将i的最后一位补足到H的前面。那么就成了11001000(C8),i剩下六位110100,前面再补两个0,变成00110100(34),于是“Hi”就变成了两个八进制数 C8 34。

4 系统硬件

4.1西门子TC35模块的外围电路

TC35模块是siemens公司推出的一种无线通信GSM模块,可以快速安全可靠地实现系统方案中的数据传输、语音传输、短信息服务和传真服务。模块的工作电压为3.3V~5.5V,可以工作在900MHZ和1800MHZ两个频段,所在频段功耗分别为2W(900MHZ)和1W(1800MHZ)。模块有AT命令集接口,支持文本和PDU模式的短信息。此外,该模块还有电话簿功能、多方通话、漫游检测等功能。常见工作模式由省点模式、IDLE、TALK等模式。通过40管脚的zif连接器,可分别连接SIM卡支架和天线。

TC35模块主要有GSM基带处理器、GSM射频模块、供电模块、闪存、zif连接器和天线接口6部分组成。作为TC35的核心,基带处理器主要处理GSM终端内的语音、数据信号,并涵盖了蜂窝射频设备中的所有的模拟和数字功能。在不需要额外硬件电路的前提下,支持FR、HR和EFR和语音编码。

TC35模块主要通过串口与单片机进行连接,从而单片家实现对TC35模块的控制。虽然TC35模块的串口提供了许多控制线,但是由于考虑到接口的简单性,并且与单片机的UART进行连接,所以采用两线(TXD、RXD)连接。对于TC35模块通信的控制可以通过软件来实现,采用软件实现控制具有使用比较灵活的特点,也能很好避免了过多的硬件信号的监测。对于TC35的其他管脚再不使用的时候,如果该馆较为输出的话,一般让改管脚悬空,如果该管脚位输入管脚,需要将该管脚通过10K的电阻拉高。另由于/IGT管脚是控制TC35模块工作的管脚,所以需要将管脚上拉,并且将该管脚与单片机进行连接,从而可以通过单片机来控制TC35模块的工作状态。在此次连接是使将TC35的电源管脚全部连接在一起,由于TC35是一个功能完全的模块,因此不需要做任何的信号处理和射频处理。另外TC35模块还需要连接SIM卡座子,这样就实现了一个完整独立的GSM终端。TC35的接口电路如图4-1所示。

9

图4-1 TC35的接口电路

在进行串口连接时,虽然TC35模块的串口管脚的工作电瓶是COMS电平,单片机的串口管脚的工作电平是TTL电平,但是由于单片机的高电平和低电平的逻辑判断电平可以实现与TC35模块的管脚进行连接,因此TC35模块的串口线直接与单片机的串口进行连接。对于TC35模块的串口管脚中DTR0和RTS0两个管脚为输入管脚,因此分别通过一个10K的电阻将这两个管脚拉高。/IGT为TC35模块的工作状态控制管脚,该管脚首先通过一个电阻拉高,平时该管脚为高电平,处于不工作的状态;另外该管脚还同时与单片机的一般I/O口进行连接,这样通过单片机来实现对TC35模块工作状态的控制,当单片机在该管脚送低电平的好似后,则TC35模块工作。TC35模块的SYNC管脚用来指示GSM模块的工作状态,连接一个指示灯来指示工作状态。TC35模块的SIM卡座子采用的是MOLEX座子,该座子优 个管脚,而TC35模块的SIM管脚只有6个管脚,具体的电路如图4-2所示。

10

图4-2 SIM卡座子接口图

从图中可知,SIM座子只需要直接与TC35模块的ZIP连接器对应的SIM卡管脚进行连接,只是在需要的地方加电容进行滤波处理。对于跳线器JP不是必须的,图中加上主要是用来进行仿真模拟使用的。当SIM座子的管脚8与TC35模块的CCIN进行连接时,则用来模拟SIM卡插入的情况;当SIM座子的管脚8不与TC35模块的CCIN进行连接时,则用来模拟SIM卡没有插入的情况。

4.2 MSP430单片机介绍及外围电路

单片机电路作为整个系统的核心控制部分,主要是完成与TC35模块的通信,与上位机进行通信。单片机TC35模块与TC35模块的通信采用单片机的串口0(UART0)实现,虽然单片机与TC35模块的供电电压不同,但是他们的接口电平可以直接接口,因此不需要进行电平转换。单片机与上位机通信通过单片机的串口1(UART1)实现,由于单片机与上位机的接口电平不一致,所以需要通过串口芯片(SP3220)完成接口电平的转换。另外单片机还需要通过一个I/O管脚来控制TC35模块的工作,在该管脚上输出低电平来使TC35模块工作。整个系统的单片机电路图如图4-3所示。

11

图4-3 系统的单片机电路图

从上图可以看出,此单片机的时钟与其他单片机的时钟有一定的区别,MSP430单片机采用两个时钟输入,既一个32KHZ的时钟信号,一个8MHZ的时钟信号。该系统的时钟部分都是采用晶体振荡器来实现的。考虑到电源的输入纹波对单片机的影响,在电源的管脚增加一个0.1uF电容来实现滤波,以减小输入端受到的干扰。另外单片机还有模拟电源的输入端,因此在该系统中的干扰比较小,因此模拟地和信号地共地,模拟电源输入端增加一个滤波电容以减小干扰。利用单片机的串口0与TC35模块接口。为了控制单片机控制TC35模块传输数据的时刻,利用单片机的一般I/O口P1.5来作为启动通信的按键,由于P1.5可以作为中断口使用,这里使用低电平触发方式,需要将该管脚拉高。单片机的串口1与上位机进行通信,因此串口1与RS-232芯片进行连接。另外单片机的P1.0作为输出口,与TC35模块的/IGT管脚进行连接,实现控制TC35模块的工作,当/IGT管脚输出高电平的时候,TC35模块不工作,当/IGT管脚输出为低电平的时候,TC35模块工作。当TC35模块启动后,/IGT管脚可以是高电平。

4.3 RS-232的介绍及外围电路

在工业自动控制、智能仪器仪表中,单片机的应用越来越广泛。随着应用范围的扩大以及根据解决的问题的需要,对某些数据要做复杂的处理。由于单片机的运算功能较差,对数据进行较复杂的处理时,往往需要借助计算机系统。因此,单片机与PC机进行远程通信更具有实际意义。利用单片机的串口与PC机的串口

12

COM1或COM2进行串行通信,将单片机采集的数据传送到PC机中,由PC机的高级语言或数据库语言对数据进行整理及统计等复杂处理,或者实现PC机对远程前沿单片机进行控制。

在实现计算机与计算机、计算机与外设间的串口通信时,通常采用标准通信接口。这样就能很方便地把各种计算机、外部设备、测量仪器等有机的连接起来,进行串口通信。RS—232C是有美国电子工业协会(EIA)正式公布的,在异步串口通信中应用最广的标准总线(C表示此标准修改了3次)。它包括了按位串行通信的电气和机械方面的规定,适用于短距离或带调制解调器的通信场合。为了底稿数据传输率和通信距离,EIA又公布了RS—422,RS—423和RS—485串口总线接口标准。

RS—232C标准接口总线

EIA RS—232C是目前最常用的串行接口标准,用于实现计算机与计算机之间、计算机与外部之间的数据通信。该标准的目的是定义数据终端设备(DTE)之间接口的电气特性。一般的串行通信系统是指个人计算机和调制解调器(modem)。调制解调器叫数据电路终端设备(简称DCE)。RS—232C提供了单片机与单片机、单片机与PC机间串行数据通信的标准接口。通信距离可达到15m。

RS—232C接口的具体规定如下: (1)范围

RS—232C标准适用于DCE和DTE间的串行二进制通信,最高的数据速率为19.2kb/s。如果不增加其他设备的话,RS—232C标准的电缆长度最大为15m。

RS—232C不适于接口两边设备间要求绝缘的情况。 (2)RS—232C的信号特性

为了保证二进制数据能够正确传输,设备控制准确完成,有必要使所用的信号电平保持一致。为了满足此要求,RS—232C标准规定了数据和控制信号的电压范围。由于RS—232C是在TTL集成电路之前研制的,所以它的电平不是+5V和地,而是采用负逻辑,规定+3V~+15V之间的任意电压表示逻辑0电平,-3V~-15V之间的任意电压表示逻辑1电平。

信号电气特性与电平特性 (1)电气特性

为了增加信号在线路上的传输距离和提高抗干扰能力,RS—232C提高了信号的传输电平。该接口采用双极性信号、公共地线和负逻辑。

使用RS—232C,数据传输的波特率允许范围为0b/s~20kb/s。在使用19200b/s进行通信时,最大传输距离在20m之间。降低波特率可以增加传输距离。 (2)电平转换

RS—232C规定的逻辑电平与一般微处理器、单片机的逻辑电平是不一致的。

13

因此,在实际应用时,必须把微处理器的信号电平(TTL电平)转换为RS—232C电平,或者对两者进行逆转换。这两种转换是通过专用电平转换芯片实现的。

对于连接在RS—232C和单片机间的芯片很多,此次采用MAX232。MAX232芯片是MAXIM公司生产的、包含两路接收器和驱动器IC芯片,适用于各种EIA-232C和V。28/V。24的通信接口。MAX232芯片内部有一个电源电压变换器,可以把输入的+5V电源电压变成RS—232C输出电平所需要的±10V电压。所以,采用此芯片借口的串口通信系统只需单一的+5V电源就可以了。对于没有±12V电源的场合,其适用性更强。加之其价格适中,硬件接口简单。其接口电路如图4-4所示。

图4-4 RS-232C接口电路图

4.4 复位电路

在单片机系统里,单片机需要复位电路,复位电路可以采用R-C复位电路,也可以采用复位芯片来实现复位,R-C复位电路据具有经济性,但是可靠性不高,用复位芯片实现的复位电路具有很高的可靠性,因此为了保证复位电路的可靠性,该系统采用复位芯片来实现复位电路。该电路中采用MAX809芯片,复位电路如图4-5所示。

14

图4-5 复位电路

为了减小电源的干扰,还需要在复位芯片的电源输入端加一个0.1uF的电容来实现滤波,以减小输入端受到的干扰。

4.5 电源电路

整个系统采用5V供电。除了TC35外都采用3.3V电压供电,为了减小电源电路对整个系统的影响。电源电路采用TPS76033芯片来实现。电路图如图4-6所示。

15

图4-6 电源电路图

为了使3.3V输出电源的纹波小,在输出部分用了一个2.2Uf和0.1uF的电容,另外在芯片的输入端也放置一个0.1Uf的滤波电容,来减小输入端受到的干扰。

对于TC35模块采用3.6V电源供电,由于该电源部分的输出电流必须满足输出电流能达到2A,在此采用NATIONAL公司生产的LP3966芯片。该芯片的管脚2为shutdown管脚,在使用时必须通过一个10k的电阻拉高到5V。该芯片的输出位可调类型,该芯片通过电阻R2和R1实现输出电压的调节。输出电压调节换算公式为:

R2=R1(Vout/1.216-1

通过上式可以得知:只要给定电阻R1和确定输出电压Vout的情况下,就可以计算得到电阻R2的值。为了使3.6V输出电源的纹波小,在输出部分用了一个68Uf、33uF和0.1uf的电容,实现滤波。另外在芯片的输入端也放置一个68uF的滤波电容,减小输入端受到的 干扰。

5 Visusal Basic的编程环境

5.1 VB软件介绍

Basic语言是20世纪60年代美国Dartmouth学院的两位教授共同设计的计

16

算机程序设计语言,其含义是“初学者通用的符号指令代码”。它简单易学、人机对话方便、程序运行调试方便,因此很快得到了广泛的应用。

1988年,Microsoft公司推出的Windows操作系统,以其为代表的图形用户界面在微机上引起了很大的影响。在图形用户界面中,用户只要通过鼠标的点击和拖动便可以形象地完成各种操作,不必键入复杂的命令。但是对于程序员来说,可视化程序设计语言正式在这种背景下产生。

可视化程序设计语言除了提供常规的编程外,还提供一套可视化的设计工具,便于程序员建立图形对象。1991年Microsoft公司推出的Visusal Basic语言是以结构化Basic语言为基础,以事件驱动为运行机制。继而Visusal Basic经历了1.0版、2.0版、??6.0版的几次升级,他的功能也更加强大,更加完善。其主要的功能特点是:

a) 具有面向对象的可视化设计工具 b) 事件驱动的编程机制

c) 提供了易学易用的应用程序集成开发环境 d) 结构化的程序设计语言 e) 强大的数据库操纵功能 f) Active技术 g) 网络功能

h) 多个应用程序向导 i) 完备的Help联机帮助功能

5.2 VB6.0的编程环境

17

图5-1 VB6.0编程环境图

1、 标题栏

标题栏中的标题为“ Microsoft Visusal Basic [设计]”说明此时集成开发环境处于设计模式,在进入其他状态时,方括号中的文字将被做相应的变化。VB有三种工作模式:

设计模式:可进行用户界面的设计和代码的编制,来完成应用程序的开发。 运行模式:运行应用程序,这时不可编辑代码,也不可编辑界面。 中断模式:应用程序运行暂停中断,这时可以编辑代码,但是不可编辑界面。按F5键或单击“继续”按扭程序继续运行,单击“结束”按扭停止程序的运行。在此模式回弹出“立即”窗口,在窗口内可输入简短的命令,并立即执行。

2、菜单栏

VB6.0菜单栏中包括13个下拉式菜单,这是程序开发过程中需要的命令。 (1) 文件(FIle):用于创建、打开、保存、显示最近的工程以及生成可执行文件的命令。

(2) 编辑(Edit):用于程序源代码的编辑。

(3) 视图(View):用于集成开发环境下程序源代码、控件的查看。 (4) 工程(Project):用于控件、模块和窗体等对象的处理。 (5) 格式(Format):用于窗体控件的对齐等格式化的命令。 (6) 调试(Debug):用于程序的调试、查错的命令。

(7) 运行(Run):用于程序的启动、设置中断和停止的等程序运行的命令。 (8) 查询(Query):VB6.0新增,在设计数据库应用程序时用于设计SQL属性。

(9) 图表(Diagram):VB6.0新增,在设计数据库应用程序时编辑数据库的命令。

(10) 工具(Tools):用于集成开发环境下工具的扩展。 (11) 外接程序(Add-Ins):用于为工程增加或删除外接程序。

(12) 窗口(Windows):用于屏幕查的层叠、平铺等布局以及列出所有打开文档窗口。

(13) 帮助(Help):帮助用户系统学习掌握VB的使用方法及程序设计方法。 3、工具栏

18

工具栏可以迅速地访问常用的菜单命令。除了所有的标准工具栏外,还有编辑、窗体编辑器、调试等专用的工具栏。要显示或隐藏工具栏,可以选择“视图”菜单的“工具栏”命令或用鼠标在标准工具栏处单击右键选取所需的工具栏。

4、窗体窗口

窗口窗体在、如图5-2所示。

图5-2 窗口窗体图

窗体是VB应用程序的主要构成部分,用户通过与窗体上的控制部件可控制应用程序的运行,得到结果。每个窗体查必须有唯一的窗体名字。处于设计状态的窗体有网格点构成,网格点方便用户对控件的定位,网格点检举可以通过“工具”菜单的“选项”命令,在“通用”标签的“窗体设置网格”中输入“宽度”和“高度”来改变。运行时通过属性控制窗体的可见性一个应用程序至少有一个窗体窗口。

5、属性窗口

属性窗口如图5-3所示。

图5-3 属性窗口图

19

所有窗体或控件的属性,如颜色、字体、大小等,可以通过属性窗体来修改。属性窗口由以下部分组成:

对象列表框:单击其右边的下拉按扭可打开所选窗体所包含对象的列表。 属性显示排列方式:有“按字母序”和“按分类按扭”。属性列表有中间一条线把其分成两个部分,左边列出的是各种属性;右边列出的则是响应的属性值。用户可以选顶某一属性,然后对该属性值进行设置或修改。

属性含义说明:当在属性列表框选取某属性时,在该区显示所选属性的含义。 6、程资源管理器窗口如图5-4所示。

图5-4 程资源管理器窗口

工程资源管理器窗口有三个按扭,分别为:

“查看代码”按钮:切换到代码窗口,显示和编辑代码。 “查看对象”按钮:切换到窗体窗口,显示和编辑对象。

“切换文件夹”按钮:切换文件夹显示的方式。

工程资源管理器下面的列表窗口,以层次列表形式列出组成这个工程的文件。他包含两种主要类型的文件:

窗体文件(.frm文件):该文件存储窗体上使用的所有控件对象和有关的属性、对象相应的事件过程、程序代码。一个应用程序至少包含一个窗体文件。

标准模块文件(.bas文件):该文件存储所有模块级变量和用户自定义的通用过程。通用过程是指可以被应用程序各处条用的过程。

7、代码窗口:

代码窗口是专门用来进行程序设计的窗口,可显示和编辑程序代码,如5-5图所示。

20

图5-5 代码窗口

每个窗体都有各自的代码窗口,打开代码窗口有以下三种方法:

(1) 从工程窗口中选择一个窗体或标准模块,并选择“查看代码”按钮; (2) 从窗体窗口中打开代码窗口,可用鼠标双击一个控件或窗体本身; (3) 从“视图”菜单中选择“代码窗口”命令。 代码窗口主要包括:

(1)“对象”下拉式列表框:显示所选对象的名称。可以单击右边的下拉按钮,来显示此窗体中的对象名。其中“通用”表示与特定对象无关的通用代码,一般在次声明模块级变量或用户编写子定义过程。

(2)“过程”下拉式列表框:列出所有对象对应于“对象”列表框中对象的事件过程名称。在对象列表框选择对象名,在过程列表框中选择事件过程名,即可构成选中对象的事件过程模板,用户可在该摸板内输入代码。

(3)“代码”框:输入程序代码。

(4)“过程查看”按钮:只能显示所选的一个过程。 (5)“全模块查看”按钮:显示模块中全部过程。

5.3 MSCOMM控件

微软的软件系统中.提供了MSComm通讯控件。该控件在windows ystem 目录下,通讯控件是PC机通过串行端口与其它设备实现轻松连接的利器.Visual basic等开发人员都可以使用它通过使用MSComm通讯控件,可简单高效的实现设备之间的通讯,而不必调用低级的API函数,从而使编程效率大大提高.也降低了因编程不当导致系统不稳定。

利用Mscomm控件完成一般的数据通信,使用此控件还是非常方便的,在接收数据方面可通过OnComm事件响应从而用Input属性从此控件的接收缓存区获得数据,在发送数据方面是通过给此控件的Output属性赋值来实现。在发送和接收时

21

通过改变Output和Input的属性的类型来改变接收到的数据:若设置为字符串类型,则按文本方式发送或接收;若设置为字节数据,则按二进制数据格式发送或接收。

MSC0mm控件的主要属性:

1)commPorL:设置并返回通讯端口号,在设计时,value可以设置成从1到16的任何数(缺省值为 1),注意:必须在打开端口之前设置CommPort属性;

2)Settings:以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位,设置的格式为“BBBB,P,D,S”,BBBB为波特率,P为奇偶校验,D为数据位数,S为停止位数;

3)PortOpen:设置并返回通讯端口的状态。也可以打开和关闭端口.title表示串口打开;

4)Input:从接收缓冲区返回和删除字符; 5)Output:向传输缓冲区写一个字符串;

6)InputMode:设置发送和接收数据的类型,0表示文本的方式.1表示二进制的方式;

7)Rthreshold:设置CommEvent属性为comEvReceive并产生OnComm之前.设置并返回的要接收的字符数,若Rthreshold属性设置为0(缺省值)则不产生OnComm 事件;

8)SThreshold:MSComm 控件设置CommEvent属性为comEvSend.并产生OnComm事件之前.设置并返回传输缓冲区中允许的最小字符数.若设置Sthreshold属性为l,当传输缓冲区完全空时.MSComill控件产生OnComm事件。如果在传输缓冲区中的字符数小于value,CommEvent属性设置为comErSend.并产生0nComm 事件:

9)InputLen、Input:收缓和发送缓冲区字符数或字节数:

10)comEvent:该属性列出了控件触发事件的类型和具体的事件活错误MSCOMM只有一个OnComm事件.只要eomEvent的值一改变.就会触发该事件.这表示发生了一个通信错误或事件。 MSC0mm控件的主要事件:

OnComm事件:当CommEvent属性的值发生变化时,就触发此事件,标志发生了一个通信事件或错误。如果CommEvent属性值发生了变化,而通信事件又未发生,就必然出现错误。CommEvent属性中含有触发OnComm事件的真正错误或事件的标识代码。

MSComm控件进行串行通信的一般步骤为:

1)设置通信对象、通信端口号及其他属性; 2)设定通信协议;

3)打开通信端口,进行数据的传送;

22

4)关闭通信端口; MSComm控件通信方式的选择:

MSComm控件有两种处理通信的方式,即事件驱动和查询方式。事件驱动方式是处理串行通信的一种有效的方法,它可以利用OnComm事件捕获并处理通信中发生的事件或错误,实时性较强。而查询方式是在程序通过查询CommEvent属性的值来判断通信过程中的事件或错误.这种方式适合于应用程序较小、实时性要求不高的系统中 。

利用MSCOmm控件发送数据:

MSComm控件提供了一个Output属性.它能简化对数据的发送.Output属性可以往发送缓冲区中写入一串数据,它在设计阶段是无效的.在运行阶段也只能写入。其引用方法如下:

MSComm.Output[=value]

其中.Value参数表示一串要写入到发送缓冲区中的字符。Output属性可以发送文本数据,也可以发送二进制数据。如果要发送文本数据.Value就必须是含有字符串的Variant数据;如果要发送二进制数据,Value就必须是含有Byte数组的Variant数据。

下面的示例程序是利用MSComm控件的Output属性发送数据:

Private Sub RichTextBox— KeyPress(KeyAscii As Integer) ’将键盘键人的字符传给RichTextBox控件和MSComm1控件 Dim OutS as Variant MsComm 1.CommPort=1 MsComm 1.PortOpen=True OutS:Ch KevAscii1 MsComm 1.Output=OutS End Sub

利用MSComm控件接收数据:

利用MSComm控件的Input属性可以接收数据。

Input属性从接收缓冲区中返回一串数据,它在设计阶段是无效的,在运行阶段也只能读。Input属性的返回类型为Variant。

InputLen属性值决定着Input属性读取的字符个数。将InputLen设为0,意味着利用Input属性读出接收缓冲区中的所有内容。

InputMode属性值决定着Input属性接收的数据类型。如果InputMode设为ComInputModeText,就可利用Input属性返回文本数据;如果InputMode设为ComIn.

putModeBinary,则返回Byte数组中的二进制数据。 下面的示例程序是利用MSComm控件的Intput属性接收数据:

23

Private Sub Commandl— Click0

’用户单击Commandl按钮后读取输入缓冲区中的内容 Dim InS as String MsComm 1.InputLen=O

If MsComm 1.InBuferCount Then InS=MsComm 1.Input End If MsgBox InS

MsComm 1.PortOpen=False End Sub 开发步骤: 1、创建新的工程

① 启动Visual Basic 6.0

②在“文件”菜单中,单击“新建工程”,选择“标准.exe”. 单击确定 2、加人MSComm控件

① 在“工程”菜单中单击“部件”.显示“部件”对话框 ② 选定“Microsoft Comm Control 6.O”控件名称左边的复选框 ③ 单击”确定”关闭“部件”对话框,MSComm控件将出现在工具框中 ④ 将MSComm控件添加到窗体上 添加MSComm控件如图5-6所示。

图5-6 添加MSComm控件图

3、属性设置

下面通过一个实例具体说明。实例用于接收和发送不定长数据包,该仪器的通信协议如下。链路层:8位数据位、l位停止位、无奇偶校验、19200波特率CommPotr 设置并返回通讯端口号。l~16,设置:1为COM1口。

24

InBufferSize 设置并返回接收缓冲区的大小,以字节数为单位。设置:16 500。

InputMode 设置并返回数据输入方式。设置:comlnputModeBinary输入为二进制数据。

OutBufferSize 设置并返回输出缓冲区的大小,以字节数为单位。设置:512。 Rthreshold 设置并返回要接收的字符数。当接收缓冲区中的字符数大于等于该值时,将产生

OnComm事件。设置:1O

Setting 以字符串形式设置或返回波特率、奇偶校验、数据位和停止位。设置:19 200,n,8,1 4、编写代码

在窗体中加入一个组合框控件,名称为Comboport,用于选择设置通讯端口。加入一个命令按钮,用于控制通讯。加入一个通讯控件,名称为MSComml。加入一个文本框控件,名称为Textl,用于显示接收的数据。

实现的界面如图5-7所示。

图5-7 短信息收发界面

25

5.4 VB对英文和汉字的处理

英文的数据编码方式:

GSM只支持ASCII码值从0x00到0x7f的128个字符。这些值只需要7bit去定义,而SMS短信息是以8bit字节序列传输的,因此GSM使用一种编码方式将7bit ASCII码值序列压缩成8 bit字节序列。

数据编码过程事例如下:“TESTU”

英文短信息: “T” “E” “S” “T” “U” ASCII码值: 0x54 0x45 0x53 0x54 0x20 二进制表示: 101 0100 100 0101 101 0011 101 0100 010 0000

压缩码过程: 11010100 11100010 10010100 00001010 00000010 目标字节串: 0XD4 0XE2 0x94 0x0A 0x02

当原文长度达到8位时,经编码后长度只有7位,原文到第9位时又如第1位开始编码,所不同是位移的序号比原文减1,依次补齐8位。这样“TESTU “的8bit编码为D4E2940A02。 中文数据的编码方式:

对于中文的编码,即采用UCS2编码(Unicode(Universal Multiple Octet coded Character Set))是用两个字节表示每个字符的字符编码方案。它以ASCII为设计基础,而统一的编码方式。 中文转换成Unicode码函数:

因为短消息的发送是以PDU串的形式发送出去的,中文字符以Unicode码来表示,所以在发送中文短消息之前必须首先将中文字符转换为Unicode码,下面的函数将实现这个功能。这个函数主要应用到VB自带的一个格式转换函数:ChrW() 将中文转换为Unicode码。

Public Function chg(rmsg As String) As String Dim tep As String Dim temp As String Dim i As Integer Dim b As Integer tep = rmsg i = Len(tep) b = i / 4

If i = b * 4 Then b = b - 1

26

tep = Left(tep, b * 4) Else

tep = Left(tep, b * 4) End If chg = \ For i = 1 To b

temp = \ chg = chg & ChrW(CInt(Val(temp))) Next i End Function

短信中心手机号码的PDU串转换函数

同上,为了发送以PDU模式发送短消息,必须将手机号码和对方手机号码也转换为PDU格式,下面的函数就是为了实现这种转换: Public Function telc(num As String) As String Dim tl As Integer

Dim ltem, rtem, ttem As String Dim ti As Integer ttem = \ tl = Len(num)

If tl <> 11 And tl <> 13 Then MsgBox \ Exit Function End If

If tl = 11 Then tl = tl + 2 num = \ End If

For ti = 1 To tl Step 2 ltem = Mid(num, ti, 1) rtem = Mid(num, ti + 1, 1) If ti = tl Then rtem = \ ttem = ttem & rtem & ltem Next ti telc = ttem End Function

27

手机号码有两种表示方法:11位和13位(带国家码86),一般手机发送时都是以13位形式表示的,所以以上的函数还有一个功能是自动将11位格式手机号码转换为13位形式,然后再转换为PDU串。

短信的发送主要借助于VB的Mscomm控件实现,关于Mscomm控件,前面的技术介绍部分有详细介绍。短信的发送是由AT+CMGS指令完成的,采用PDU模式发送,函数代码如下: Const prex = \Const midx = \Const sufx = \

Public Function Sendsms(csca As String, num As String, msg As String) As _Boolean

Dim pdu, psmsc, pnum, pmsg As String Dim leng As String Dim length As Integer length = Len(msg) length = 2 * length leng = Hex(length)

If length < 16 Then leng = \ psmsc = Trim(telc(csca)) pnum = Trim(telc(num)) pmsg = Trim(ascg(msg))

pdu = prex & psmsc & midx & pnum & sufx & leng & pmsg sleep(1)

mobcomm.Output = \

mobcomm.Output = \ mobcomm.Output = pdu & Chr$(26) sleep(1) Sendsms = True End Function

Unicode码解码函数

相比于短信的发送而言,短信的接收主要的工作正好与之相反。短信的发送需要将待发送的短信内容转换为Unicode码,而短信的接收则需要将接收到的Unicode码转换成中文字符。下面的函数将实现解码功能。同短信发送的编码函数一样,这里也应用了一个VB内置的函数AscW()函数来将Unicode码转换为中文:Public Function ascg(smsg As String) As String

28

Dim si, sb As Integer Dim stmp As Integer Dim stemp As String sb = Len(smsg) ascg = \ For si = 1 To sb

stmp = AscW(Mid(smsg, si, 1)) If Abs(stmp) < 127 Then stemp = \ Else

stemp = Hex(stmp) End If

ascg = ascg & stemp Next si

ascg = Trim(ascg) End Function 短信接收函数

相对于短信的发送函数而言,短信的接收相当简单,只需要以下的三行代码就完成了。但是它使用的技术却决不比短信的发送少,这里主要用到了Mscomm控件的Output属性和AT+CMGR指令。

Public Sub readsms(rnum As String) mobcomm.Output = \ mobcomm.Output = \End Sub

5.4短信息收发系统的实现

通过VB6.0来实现短信息收发系统的源程序如下: ‘定义变量

Dim bb_b 'unicode转换变量 Dim vv(1) As Byte ' 换行符 Dim ac(0) As Byte '删除符 Dim av(0) As Byte '08 Dim adv(0) As Byte '0d Dim ert(0) As Byte Dim biai

29

Dim byu(5) Dim c_c Dim mma Dim ced Dim reah Dim ruc

Dim TOOP(2) Dim op Dim biao Dim opq Dim read

‘结束按钮

'''''''''''''''''''''''''''''''''''''' '使用命令按钮控件 '关闭通信端口 '结束系统

'''''''''''''''''''''''''''''''''''''' Private Sub cmdEnd_Click() MSComm1.PortOpen = False End End Sub

‘发送按钮

'''''''''''''''''''''''''''''''''''''' '使用命令按钮控件

'将定时器控件的启动/关闭状态作切换 '''''''''''''''''''''''''''''''''''''' Private Sub Command1_Click() Dim weq(0) As Byte biai = 0 Call aa

30

If biai = 4 Then

Me.MSComm1.Output = av '判断发送中文 End If

Me.MSComm1.Output = ac '发送FD Me.MSComm1.Output = ert

If ert(0) = 4 Then '判断目标码是否是4 Me.MSComm1.Output = adv

Me.MSComm1.Output = \电话号码 End If

If biai <> 4 Then Me.MSComm1.Output = bb_b Else

For a = 1 To Len(bb_b)

weq(0) = \Me.MSComm1.Output = weq a = a + 1 Next End If

Me.MSComm1.Output = vv End Sub

‘清除按钮

Private Sub Command2_Click() txtReceive.Text = \sendtext.Text = \End Sub

'''''''''''''''''''''''''''''''''''''' '窗体窗体的加载事件

'打开通信端口,通信端口的参数也可以在此指定之后 '再行打开通信端口

'''''''''''''''''''''''''''''''''''''' Private Sub Form_Load() MSComm1.PortOpen = True ac(0) = &HFD

31

vv(0) = &HD vv(1) = &HA av(0) = &H8 adv(0) = &HD ert(0) = &H4 End Sub

'''''''''''''''''''''''''''''''''''''' '定时器的Timer事件程序

'此事件会在每一个Interval属性值的间隔内被调用一次 '程序检查输入缓冲区中是否有数据,若有数据 '则将此数据读取后,指定给文本框的Text属性 '''''''''''''''''''''''''''''''''''''' Private Sub Timer1_Timer() Dim i As Long

inbyte = Me.MSComm1.Input

For i = LBound(inbyte) To UBound(inbyte) rty = Len(Hex(inbyte(i))) If rty = 1 Then

ruc = ruc & \Else

ruc = ruc & Hex(inbyte(i)) End If Next i

rcu = InStr(ruc, \If rcu > 2 Then

read = Left(ruc, rcu - 1) Call cu

ruc = Right(ruc, Len(ruc) - rcu - 3) End If End Sub

Public Sub cu() g = Len(read)

GC = InStr(read, \处理中文

32

gd = InStr(read, \处理英文 If gd > 2 Then

gg = Left(read, gd - 1) For v = 1 To Len(read)

a = a & Chr(\v = v + 1 Next gg = a

ElseIf GC > 2 Then

gg = Left(read, GC - 1 + 4) For v = 1 To Len(gg)

a = a & Chr(\v = v + 1 Next

read = Right(read, Len(read) - GC - 3) gg = a

For a = 1 To Len(read)

cc = cc & ChrW(\中文信息 a = a + 3 Next Else

For op = 1 To Len(read)

gg = gg & Chr(\op = op + 1 Next End If

Me.txtReceive.Text = Me.txtReceive.Text & gg & cc & Chr(13) & Chr(10) End Sub

'''''''''''''''''''''''''''''''''''''''' '中文处理成Unicode码 '英文不处理

''''''''''''''''''''''''''''''''''''''''''

Public Sub aa()

33

bb_b = \

cc = Me.sendtext.Text b = Len(cc) For bb = 1 To b b_b = Mid(cc, bb, 1) b_bb = AscW(b_b)

If b_bb > 0 And b_bb < 128 Then bbb = \Else

If biai <> 4 Then biai = 4 End If

bbb = Hex(AscW(b_b)) End If

bb_b = bb_b & bbb Next

If biai <> 4 Then bb_b = Me.sendtext.Text End If End Sub

5.5 实现系统功能的调试

对于VB的调试,此软件提供了两种方式:逐语句、逐过程。在调试时可以提供断点,来逐步检查一段一段的程序,这对庞大的系统程序非常有用,当有错误时光标将移动到错误行以方便调试,就这样直到全部程序无错误。调试成功后,可以点击运行按钮,来运行全部的程序,以实现其功能。

5.6 最终达到的结果

本次设计成功的利用了VB来开发了一套实现短信息收发功能的信息系统,能够通过PC机接收和发送短信。达到了预期的结果。

功能实现演示如下:

打开短信息收发界面如图所示。

34

发送信息界面如下图:

接收信息如下图:

35

本文来源:https://www.bwwdw.com/article/j3m.html

Top