您的位置 首页 元件

单片机操控GPS/GSM原理(虚拟串口)

全球定位系统(GlobalPositioningSystem,GPS)是美国国防部于1973年提出,历时20年,耗资200多亿美元建立起来的,具有在海、陆、空进行…

全球定位体系(Global Positioning System,GPS)是美国国防部于1973年提出,历时20年,耗资200多亿美元树立起来的,具有在海、陆、空进行全方位实时三维导航与定位才能的新一代卫星导航与定位体系。GPS能为用户供给接连实时、高精度的三维方位、三维速度和时刻基准,是一种全球性、全天候、接连的卫星无线电导航体系。在现在世界上一切的卫星定位体系中,GPS是技能最老练,运用最为广泛的。

在长途方针定位中,需求将运用GPS技能取得的长途方针的定位信息发送到监控中心。这可运用无线电台进行发送,可是该办法简略遭到搅扰并且还遭到电台通讯间隔的约束。跟着移动通讯的开展和GSM网络的广泛掩盖,GSM短音讯事务也得到广泛运用,运用短音讯服务来传输GPS定位数据是具有优势的。GSM网络容量大,通讯盲区少,运用该办法不只能够战胜传输间隔的约束,并且适当便利、牢靠,费用也非常低价。结合GSM网络作为数据传输办法的各种长处和GPS这一老练的定位技能,本文研讨并完结了一种运用较少的资源就可完结的依据虚拟串口的GPS/GSM长途定位技能。

1 体系架构

体系构成框图如图1所示。在长途方针端,单片机经过GPS模块获取有用的信息,如经纬度、时刻、速度等信息,守时的以短音讯的办法操控GSM短音讯模块发送定位数据给监控中心。在监控中心部分,选用一个GSM模块与PC机通讯,编写一个PC上的软件完结收发短音讯、拨打电话、保存短音讯等功用,并显现出长途方针定位信息。一起,经过拨打长途方针处TC35i模块的电话可完结体系的一些扩展功用。

1.1 GPS模块

GPS模块选用的是Navman公司的Jupiter 21OEM板,它具有12通道,体积小、重量轻、功耗低;定位敏捷精确,抗搅扰功用杰出;操作简洁、易于开发,可经过串口与PC机进行通讯。能够依据通讯的波特率挑选输出NMEA-0183句子格局或许SIRF二进制格局的定位信息,默许情况下输出为NMEA-0183句子格局。该模块还具有1 PPS秒脉冲输出,且精度优于1μs,在本体系规划顶用对1 PPS秒脉冲计数的办法很好地完结了收发短信的守时。

1.2 GSM短音讯模块

GSM短音讯模块选用的是SIEMENS公司的TC35i模块,这是一个支撑中文短音讯的工业级GSM模块,作业在EGSM 900和GSM 1800双频段,电源规模为3.3~5.5 V,可传输语音和数据信息,能够运用AT指令经过接口电路对其进行操控。TC35i模块支撑以TEXT形式和PDU形式发送短音讯,运用TEXT形式发送短音讯代码简略,简略完结,但不能收发中文短信,而PDU格局完结较杂乱,但能够收发中文短信。体系规划中处于简略且能满意体系需求考虑,选用的TEXT形式收发短音讯。

1.3主控单元

主控单元选用AT89S52单片机作为操控器,单片机经过串口与GPS模块以及GSM模块进行通讯。在此需求两个串口,而AT89S52单片机自身只需一个串口,惯例的处理办法是选用具有双串口的单片机或许ARM等操控器,或许经过硬件来扩展串口。前者会使体系的硬件本钱大大提高,而后者不只会增加体系的本钱,还会增大体系硬件的体积。本文采纳的处理办法是,AT89S52单片机自身的串口用于跟GPS模块进行通讯,而运用I/O口P1.4和P3.2编程完结一个虚拟串口与TC35i模块进行通讯。因为单片机内部守时/计数器只能完结较小时刻的守时,所以奇妙运用了单片机的T2守时/计数器(P1.0)对Jupiter 21 OEM板的1 PPS秒脉冲输出进行计数便利地完结5 min守时,用于收发短信所需的守时。该部分还扩展了报警电路和操控开关通断等功用电路,这是由监控中心经过拨打长途方针端的电话来操控的。一起,还保留了单片机的剩下I/O口用于体系的进一步扩大。

2体系软件规划

2.1单片机部分软件规划

单片机部分的程序流程图如图2所示。该部分程序选用C言语编程完结,首要包括定位信息的提取、虚拟串口通讯以及短音讯的发送三个部分。

2.1.1 定位信息的提取

单片机选用4 800 b/s波特率与GPS模块进行异步串行通讯,从GPS模块输出的是NMEA-01183句子格局的数据。该句子格局的数据以“$”最初,包括$GPRMC,$GPGGA,$GPGSV,$GPVTG,$GPGSA,$GPGLL等句子。体系规划中只从中提取出$GPRMC句子,再进一步提取出里边包括的经纬度、速度、时刻等信息,现已能够满意体系的需求。该部分的软件流程图如图3所示。

2.1.2 虚拟串口

单片机与GSM模块之间经过虚拟串口.进行通讯,以处理AT89S52单片机固有串口缺乏的问题,通讯波特率取为9 600 b/s。虚拟串口便是运用单片机I/O编程完结一个串口的功用,这样就以较少的资源完结了体系的功用,战胜了传统的选用具有双串口的操控器或许运用硬件进行串口扩展的办法其本钱高、体积大的缺陷。程序中选用守时器作业于办法2进行一个数据位传输时刻的守时,用于严格操控一个数据位的传输时刻。单片机选用11.059 2 MHz晶振,这样守时器的初值为256—(1 000 000/9 600)/(12/11.059 2)=160,即十六进制的0xA0。试验成果证明,选用该办法进行串口通讯,数据传输安稳、牢靠。选用虚拟串口发送、接纳一个字符的程序流程图别离如图4,图5所示。

2.1.3发送短音讯

首要是由单片机依据发送短音讯的特定进程,选用AT指令操控GSM模块发送短音讯,是体系规划中最重要的内容之一。该部分程序规划中,因为会涉及到单片机与GSM模块的屡次交互进程,而GSM模块呼应较单片机来的慢,特别是涉及到FLASH或SIM卡的操作及网络的交互时,必需求考虑到GSM模块的呼应时刻问题。体系中选用TEXT形式发送短音讯,进程如下:

2.2监控中心软件规划

至此,英文短信发送成功,此进程中若模块回复呈现ERROR则短信发送不成功。以上进程1,3,4经设置后无需再设置,进程2在模块断电时需重设,进程5,6在每次发送短音讯时都要重复进行。

在监控中心的PC机上选用VB结合ACCESS数据库规划一个监控软件,该软件经过串口与GSM模块进行通讯,获取长途方针的定位信息,经过进一步处理后显现出来。因为电子地图制造杂乱、价格较贵,所以本体系示意性的运用由Google Earth软件上截图出来的图片作为电子地图,用于直观地显现出长途方针的具体方位。ACCESS数据库用于保存收发短音讯的内容,该软件还具有拨打电话等功用。

3试验成果及剖析

运用该软件进行试验得到的成果如图6所示。图中左半部分是软件的完结界面,右半部分是以GoogleEarth软件截图出来的图片作为虚拟的电子地图来示意性的阐明问题。试验中,GPS天线置于福州大学旗山校区电气学院楼顶,监控中心坐落电气学院南303试验室。由图中左半部分能够看到方针最近一次的定位信息:定位时刻:10:28:28;纬度:26°043.03N;经度:119°1142.57E;速度:0.048 m/s。右半部分图中的红、绿、蓝小圆圈代表近三次试验取得的定位方位成果(在地图上简直重合,为阐明方位在图中进行引出标示),赤色小圆点代表天线的实在方位(在图中也进行引出标示阐明),Google Earth软件中的地标,用GoogleEarth软件的测距东西测得试验成果与天线实在方位的差错约为12 m,这首要由GPS模块的定位精度所决议。

由试验成果能够看出,定位方位成果根本共同,但经纬度、速度存在很小的零漂移,这是正常的,零漂移的巨细取决于GPS模块的功用。经过长时刻试验证明,体系安稳、牢靠,定位差错较小,根本上可满意一般的运用要求。若要运用于对定位精度要求较高的场合,能够考虑选用定位精度更高的GPS模块等办法。

4结 语

试验成果表明,体系运转安稳、牢靠,能够完结无间隔约束的长途定位。因为选用了虚拟串口技能,所以以较少的资源完结了GPS/GSM长途定位技能,该定位技能能够运用于进行长途定位的多种范畴。可是,因为作为定位数据传输网络的GSM网络的固有问题,对体系的实时性有必定的影响。比方,有时会呈现收发短音讯延时的问题,特别是在网络拥堵的时分,有时还存在较小区域的通讯盲区,能够考虑与运营商树立一条专用短音讯传输通道来确保长途定位信息的牢靠传输。信任跟着定位技能、通讯技能以及GIS技能的不断开展,本文所评论的长途定位技能将会得到广泛的运用。

传统的通讯办法主 要有短波通讯、卫星通讯和超短波通讯[1]。短波通讯因为其固有缺 点且受气候的影响大,在实时收集数据传输体系用中很少选用。卫星通讯的传输质量好,传 输间隔不受约束,掩盖面积大,受地势、气候的影响小,组网灵敏,但现在运转费用偏高。 超短波通讯的信号传输比较安稳,质量较好,又具有必定的绕射才能,是我国现在运用最多 、技能上也比较老练的通讯办法,但归于视距传输,且受地势约束,在山地通讯时需求设置 中继站,这样会增加本钱。

实时收集数据传输频率较高,但数据信息量小。GSM(Global System for Mobile Commu nications)网络傍边的短音讯服务(SMS,Short Messaging Service)合适于实时收集数据 的传输。现在一条短音讯的信息量约束为140个字节[2],短音讯事务能够被以为 是GSM 体系 中最为简略和便利的数据通讯办法,它无需附加庞大和贵重的数据终端设备,仅运用GSM模 块就能够到达相互进行通讯的意图。再一个长处便是因为运用了现有的网络,用户无需别的 组网,所以节省了贵重的组成网费用和维护费用,一起,对用户的数量没有任何约束。
1 硬件电路及作业原理

GSM模块选用WAVECOM公司推出的wism02c,支撑AT指令。单片机选用AT89C51。

GSM模块数据线是专为衔接PC机9针串口而规划的,①信号电平为规范的RS232电平, 只需单片机的串口也转化为RS232电平,就可直接衔接。②9针串口的引脚界说是固定的, 即2脚为TXD(GSM模块发送)、3脚为RXD(GSM模块接纳)、5脚为GND。这样直接衔接这几个线也 能够。单片机输出的是TTL电平,即0~+5v的电压,而RS232输出的是-20V~20V的电压。所 以不能直接衔接,需求一个电压转化芯片MAX232。如图1所示。

单片机运用AT指令操控GSM模块,将数据传送出去。AT指令依照GSM模块支撑的AT指令 格局书写,经过单片机的串口发送出去。

740)this.width=740″ border=undefined zoom_img(event,this)”>
2 SMS

短音讯(Short Message ,SM)是GSM网络体系的首要增值事务之一,短音讯接纳和发送的 事务代码别离为T21和T22。申请了短音讯服务的用户,在手机上设置短音讯中心号码后即可 发送短音讯,接纳短音讯无需任何设置。一条短音讯的最大长度可为160个英文字符(7位编 码)或70个汉字(16位编码)。短音讯是经过操控信道传输的,不占事务信道,在通话的一起 也能够接纳短音讯。

按短音讯发送的办法可分为:块形式(Block Mode)、文本形式(Text Mode)和pdu 形式。
2.1 块形式(BLOCK Mode)

块形式是一个二进制协议,用于移动台和SMSC之间的 短音讯传输的PDU(Protocol Description Unit)封装
2.2 文本形式(TEXT Mode)

文本形式是在为GSM修正的AT指令集的基础上界说的依据字符的 协议。合适非智能终端或终端仿真器。运用软件把纯文本音讯传给GSM模块,由GSM模块来构 造TPDU(Transfer Protocol Data Unit ,传输协议数据单元)。文本形式供给的功用比块 形式和PDU形式供给的功用少。在文本形式下,短音讯对扩展字符的才能是有限的。
2.3 PDU形式(PDU Mode)

PDU形式和文本形式很类似,首要的区别是它将拼装短音讯的使命 留给运用体系完结。该形式使AT指令集能便利地组构更多杂乱的PDU,例如既能够传递二进 制数据又能够传送字符数据。这种形式给AT指令集带来了便利。

本体系可发送文本形式和pdu形式的短音讯。
3 AT指令

AT指令集是从TE(Terminal Equipment,终端设备)或DTE(Data Terminal .Equipmen t,数据终端设备)向TA(Terminal Adapter,终端适配器 )或DCE(Data Circuit Termin ating Equipment)发送的。经过TA、TE发送AT 指令来操控MS(Mobile Station,移动基 站)的功用与GSM网络事务进行交互[5]。短音讯相关的首要AT指令有[6]:

* AT+CMGF:挑选短音讯信息格局:0-PDU;1-文本

* AT+CMGS:发送短音讯

* AT+CMGD:删去SIM卡内存的短音讯

* AT+CMGR:读短音讯

以下是发送AT指令的进程(发送的数据都应该选用ASCII码):
3.1 挑选短音讯格局

AT+CMGF=1

1为挑选text mode;0为挑选PDU mode;
3.2 以文本形式发送短音讯

AT+CMGS=<手机号码><0X1A>;

例如:对方号码是13947178096,音讯内容是:123

则AT指令串是:A,T,+,C,M,G,S,=,0X22,0X31,0X33,0X39,0X34,0X37 ,0X31,0X37,0X38,

0X30,0X39,0X36,0X22,0X0D,0X0A,0x31,0x32,0x33,0x1a
3.3 以pdu形式发送短音讯

SMSC(短信中心)号码是+8613800471500,对方号码是13947178096,音讯内容是:“ 水位”。则手机发送的PDU串是08 91 68 31 08 40 17 05 F0 11 00 0D 91 68 31 49 17 87 90 F6 00 08 00 06 6C344F4D。
4 软件仿真
4.1 keil c 与proteus的衔接[4]

①检测TCP/IP(该协议一般没有问题,只需网络衔接正确即可)。

②仿制Proteus装置目录下MODELS文件夹里的vdm51.dll到keil c/c51/BIN目录下。

③修正Keil/c51/TOOLS中[c51]的内容,增加:TDRV4=BIN\ VDM51.DLL(“PROTEUS VSM MO NITOR 51 DRIVER”)。

④在keil c中挑选proteus仿真器。

⑤在proteus中挑选Debug下的Use Remote Debug Monitor。
4.2 单片机串口通讯

单片机晶振频率为11.0592MHz,挑选串行形式1,所以波特率为9600Kbit/s[7]。单片机 选用查询的办法发送数据,假如AT指令格局正确,GSM模块回来应对信息给单片机。将程序 绕录到单片机之前,能够运用超级终端和GSM模块的通讯确认AT指令的格局。
4.3 发送短信仿真图

图3为用文本形式发送内容“123”到手机号码13947178096的仿真图。

图4为用pdu形式发送短信“水位”到手机号码13947178096的仿真图。

740)this.width=740″ border=undefined zoom_img(event,this)”>

单片机与GSM之间的通讯调试成功。
————————————大局变量声明—————————————
Dim portno As Integer 端口号
Dim baudrate As Long 波特率
Const prex = “0891” 界说大局静态变量
Const midx = “0011000D91”
Const sufx = “000801”
Private Const EM_LINESCROLL = &HB6
—————————————————————————————-
发送信息
Private Declare Function SendMessage Lib “user32” Alias “SendMessageA”
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As
Any) As Long
—–Sleep函数(延时功用)
Private Declare Sub Sleep Lib “kernel32” (ByVal dwMilliseconds As Long)
GetWindowTextW 指明这是一个 Unicode API (ASSII<->unicode)
Private Declare Function GetWindowText Lib “user32” Alias “GetWindowTextW”
(ByVal hwnd As Long, ByVal lpString As Long, ByVal cch As Long) As
LongText2.Text = StrConv(StrConv(Text1.Text, vbUnicode),
vbFromUnicode)Private Sub NewSMSeting() 检测新信息
If Mobcomm.PortOpen = False Then
Mobcomm.PortOpen = True
End If
Mobcomm.Output = “AT+CNMI=1,1,0,0,1” + vbCr
Timer2.Enabled = True
End Sub
Private Function telc(num As String) As String 把电话号码转化成Unicode码
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 “电话号码有误!” & tl
Exit Function
End If
If tl = 11 Then
tl = tl + 2
num = “86” & num
End If
For ti = 1 To tl Step 2
ltem = Mid(num, ti, 1)
rtem = Mid(num, ti + 1, 1)
http://www.lwfree.com/ As Integer
Dim r As String
For i = 1 To Len(s) Step 4
r = r + ChrB(“&H” & Mid(s, i + 2, 2)) & ChrB(“&H” & Mid(s, i, 2))
Next
Unicode2AscII = r
End Function
Public Function AscII2Unicode(ByVal CS As String) 把信息转化成Unicode码
Dim Length As Integer
Dim temp As String
Dim i As Integer
Dim tempO As String
Dim tempN As String
tempN = “”
tempO = CS
Length = Len(tempO)
For i = 1 To Length
If AscW(Mid(CS, i, 1)) >= 0 And AscW(Mid(CS, i, 1)) < 128 Then
temp = “00” & Hex(AscW(Mid(CS, i, 1)))
Else
temp = Hex(AscW(Mid(CS, i, 1)))

End If
tempN = tempN & temp
Next i
AscII2Unicode = Trim(tempN)
End Function
Private Function ConTelc(teln As String) 电话号码译码
Dim i As Integer
Dim ltem, rtem, ttem As String
ttem = “”
For i = 1 To 14 Step 2
ltem = Mid(teln, i, 1)
rtem = Mid(teln, i + 1, 1)
If i = 13 Then ltem = “”
ttem = ttem & rtem & ltem
Next i
ConTelc = “+” + ttem
End Function
Private Function ConTimec(times As String) 时刻译码
Dim Timetem As String
Timetem = Mid(times, 2, 1) + Mid(times, 1, 1) + “/” + Mid(times, 4, 1) +
Mid(times, 3, 1) + “/” _
+ Mid(times, 6, 1) + Mid(times, 5, 1) + ” ” + Mid(times, 8, 1) +
Mid(times, 7, 1) + “:” + _
Mid(times, 10, 1) + Mid(times, 9, 1) + “:” + Mid(times, 12, 1) +
Mid(times, 11, 1)
ConTimec = Timetem
End Function
Private Sub SMSend(ML As Integer, MS As String) 信息发送函数
Dim Backstring As String
If Mobcomm.PortOpen = False Then
Mobcomm.PortOpen = True
End If
Mobcomm.InBufferCount = 0
Mobcomm.OutBufferCount = 0
Mobcomm.InputLen = 0
Backstring = “”
Sleep (100)
Mobcomm.Output = “AT+CMGF=0” + vbCr
Sleep (400)
If Mobcomm.InBufferCount > 0 Then
Backstring = Mobcomm.Input
Mobcomm.InBufferCount = 0
Mobcomm.OutBufferCount = 0 1116

If InStr(Backstring, “OK”) Then

Mobcomm.Output = “AT+CMGS=” + Str(ML) + Chr(13) + Chr(10)

Else
GoTo err
Exit Sub
End If
Backstring = “”
End If
Sleep (400)
If Mobcomm.InBufferCount > 0 Then
Backstring = Mobcomm.Input
Mobcomm.InBufferCount = 0
Mobcomm.OutBufferCount = 0
If InStr(Backstring, “>”) Then

Mobcomm.Output = MS + Chr(26)

Else
GoTo err
Exit Sub
End If
Backstring = “”
End If
Sleep (2000)
If Mobcomm.InBufferCount > 0 Then
Backstring = Mobcomm.Input
Mobcomm.InBufferCount = 0
Mobcomm.OutBufferCount = 0
If InStr(Backstring, “OK”) Then
MsgBox “信息发送成功!”, vbOKOnly, “体系提示”
Else

GoTo err
Exit Function
End If
Backstring = “”
End If
Sleep (1000)
Exit Sub
err:
MsgBox “信息发送成功!”, vbOKOnly, “体系提示”
MsgBox “传送呈现过错,请从头发送!”, vbOKOnly, “体系提示”
End Sub

Private Function Sendsms(num As String, msg As String) As Boolean 短信发送
Dim PDU, psmsc, pnum, pmsg, buf As String
Dim Leng As String
Dim Length As Integer
Length = Len(msg)
Length = 2 * Length
Leng = Hex(Length)
If Length < 16 Then Leng = "0" & Leng
psmsc = Trim(telc(“8613800758500”))
pnum = Trim(telc(num))
pmsg = Trim(StrConv(msg, vbUnicode))
PDU = prex & psmsc & midx & pnum & sufx & Leng & pmsg
Sleep (1)
Call Portopen_Test
Mobcomm.Output = “AT+CMGF=0” + vbCr
Mobcomm.Output = “AT+CMGS=” & Str(15 + Length) + vbCr
Sleep (500)
If Mobcomm.InBufferCount > 0 Then
Mobcomm.InputLen = 0
buf = Mobcomm.Input
If InStr(buf, “>”) Then
Mobcomm.Output = PDU & Chr$(26)
buf = “”
End If
End If
If Mobcomm.InBufferCount > 0 Then
Mobcomm.InputLen = 0
buf = Mobcomm.Input
If InStr(buf, “OK”) Then

buf = “”
Sendsms = True
End If
End If
End Function
Private Sub readsms(rnum As String) 接纳信息
Mobcomm.Output = “AT+CMGF=1” + vbCr
Mobcomm.Output = “AT+CMGR=” & rnum + vbCr
End Sub
Private Sub Command1_Click()
myActiveX.Active = False
myActiveX.ComPort = Combo1(1).Text
myActiveX.baudrate = Int(Val(Combo2(1).Text))
MsgBox “设置端口号为:” & Combo1(1).Text & “,波特率为:” & Combo2(1).Text & tl
myActiveX.Active = True
End Sub
Private Sub Command2_Click()
msg.Text = “”
End Sub
Private Sub Command3_Click()
DebugText “================= SIM卡信息 =====================”
DebugText ” SIM卡IMSI: ” + myActiveX.IMSI
DebugText ” 短信中心: ” + myActiveX.SCA
DebugText ” 所属网络: ” + myActiveX.Provider
DebugText ” 短信数目: ” + myActiveX.SMSMemUsed
DebugText ” 短信容量: ” + myActiveX.SMSMemTotal
= 0
Mobcomm.InputLen = 0
Sleep (100)
Mobcomm.Output = “AT+CMGF=1” + vbCr
Sleep (400)

Mobcomm.InBufferCount = 0
Mobcomm.Output = “AT+CMGD=” + index.Text + Chr(13) + Chr(10)
Sleep (400)
mobcomm.OutBufferCount = 0
mobcomm.Output = “13138529082” + vbCr
If Mobcomm.InBufferCount > 0 Then
Instring = Mobcomm.Input
If InStr(Instring, “OK”) Then
MsgBox “成功删去第” + index.Text + “条信息!”, vbOKOnly, “提示”
Else
MsgBox “信息删去不成功!”
End If
End If
rmsg.Text = Mid(Instring.Text, 1, InStr(Instring, Chr(13) + Chr(10)))
rmsg.Text = Unicode2AscII(stringdeal(Instring))
rmsg.Text = Mid(Instring, 11)
Sleep (100)
mobcomm.OutBufferCount = 0
mobcomm.Output = Text1.Text + Chr(26)
Sleep (100)
End If
If InStr(Instring, “OK”) Then
End If
If Mobcomm.PortOpen = True Then
Mobcomm.PortOpen = False
End If
myActiveX.Active = True
If Mobcomm.PortOpen = False Then
Mobcomm.PortOpen = True
End If
Mobcomm.Output = “AT+CMGD=” & index.Text + vbCr
Sleep (300)
If Mobcomm.InBufferCount > 0 Then
Mobcomm.InputLen = 0
temp$ = Mobcomm.Input
Mobcomm.InBufferCount = 0
If InStr(buf, “OK”) Then
MsgBox “该信息已删去!”
Else
MsgBox “信息删去不成功!”
End If
End If
End Sub
Private Sub Form_Load()
Combo1(1).ListIndex = 0 挑选端口和波特率
Combo2(1).ListIndex = 4
myActiveX.Active = True 翻开模块
End SubPrivate Sub msgsend_Click()
Dim MsgAdr As String
Dim TelNo As String
Dim Smsg As String
Dim PDU As String
Dim Leng As String
Dim Length As Integer
Dim AllLength As Integer
Length = 2 * Len(msg.Text)
Leng = Hex(Length)
If Len(Leng) = 1 Then
Leng = “0” & Leng
End If
AllLength = 15 + Length
MsgAdr = Trim(telc(“8613800758500”)) 肇庆动感地带短信信中心地址
TelNo = Trim(telc(teln.Text)) 手机号码
Smsg = Trim(AscII2Unicode(msg.Text)) 短信息内容
PDU = midx & TelNo & sufx & Leng & Smsg
PDU = “0011000D91683167006059F100080108828265E55FEB4E50”
AllLength = 23
myActiveX.Active = False
If Mobcomm.PortOpen = False Then
Mobcomm.PortOpen = True
SMSend AllLength, PDU 调用短信息发送程序
End If
If Mobcomm.PortOpen = True Then
Mobcomm.PortOpen = False
myActiveX.Active = True
End If
myActiveX.SendTextSMS Trim(teln.Text), Trim(msg.Text)
If Sendsms(Trim(teln.Text), Trim(msg.Text)) = True Then
If Sendsms = True Then
MsgBox “信息发送成功!”
End If
End Sub
Private Function stringdeal(ByVal st As String)
stringdeal = Mid(st, InStr(st, Chr(10)) + 16)
End Function
Private Sub rm_Click() 阅览信息
Dim N As Integer
Dim Instring As String
= 0
Mobcomm.InputLen = 0
Sleep (100)
Instring = “”
Mobcomm.Output = “AT+CMGF=0” + vbCr
Sleep (400)
If Mobcomm.InBufferCount > 0 Then
Instring = Mobcomm.Input
Mobcomm.InBufferCount = 0
Mobcomm.OutBufferCount = 0
If InStr(Instring, “OK”) Then
Mobcomm.Output = “AT+CMGR=” + index.Text + Chr(13) + Chr(10)
End If
Instring = “”
End IfSleep (500)If Mobcomm.InBufferCount > 0 Then
Instring = Mobcomm.Input

SMSdeal Instring
Sleep (100)
If InStr(Instring, “OK”) Then
MsgBox “成功读取第” + index.Text + “条信息!”, vbOKOnly, “体系提示”
Else
MsgBox “该信息为空!”, vbOKOnly, “体系提示”
End If
Instring = “”
End If
If Mobcomm.PortOpen = True Then
Mobcomm.PortOpen = False
myActiveX.Active = True
End If
End Sub
Private Function SMSdeal(SMS As String)
On Error Resume Next
Dim SM As String
Dim SN As String
Dim STIME As String
Dim SMG As String
Dim SLONG, N As Integer
If InStr(SMS, “0891”) Then
SM = Mid(SMS, InStr(SMS, “0891”))
SN = ConTelc(Mid(SM, 25, 14))
STIME = ConTimec(Mid(SM, 43, 14))
SLONG = CInt(Mid(SM, 57, 2))
N = SLONG * 4
SMG = Unicode2AscII(Mid(SM, 59, N))
rmsg.Text = ” 短信类型: ” + “已读信息” + vbCr + vbLf + ” 对方号码: ” + SN + vbCr
+ vbLf + ” 发送时刻: ” _
+ STIME + vbCr + vbLf + ” 短信长度: ” + Str(SLONG / 2) + “字节” + vbCr +
vbLf + ” 信息内容:” + SMG + vbCr + vbLf
ElseIf InStr(SMS, “018”) Then
SM = Mid(SMS, InStr(SMS, “018”))
SLONG = CInt(Mid(SM, 17, 2))
N = SLONG * 4
SMG = Unicode2AscII(Mid(SM, 19, N))
rmsg.Text = ” 短信类型: ” + “存储信息” + vbCr + vbLf + ” 信息内容:” + SMG + vbCr
+ vbLf
End If
End Function
Private Sub rpb_Click()
myActiveX.ReadPhoneBook “1”, myActiveX.PhoneBookCount
End Sub
Private Sub Timer1_Timer()
Dim buf As String
If Mobcomm.InBufferCount > 0 Then
Timer1.Enabled = False
Mobcomm.InputLen = 0
buf = Mobcomm.Input
If InStr(buf, “OK”) = 0 Then
MsgBox “端口翻开有误!” & tl
End If
End If
End Sub
Private Sub Timer2_Timer()
If Mobcomm.InBufferCount > 0 Then
MsgBox “你有新的信息,请查收!”
If IntChk$ = vbOK Then
Mobcomm.InputLen = 0
buf$ = Mobcomm.Input
Timer2.Enabled = False
remsg$ = StrConv(buf, vbFromUnicode)
DebugText remsg 信息显现函数
End If
End If
End Sub
Private Sub DebugText(Str) 设定输出格局
rmsg.Text = rmsg.Text + Str + Chr(13) + Chr(10) 输出音讯
SendMessage rmsg.hwnd, EM_LINESCROLL, 0, 1 向下卷行
End Sub
Private Sub myActiveX_OnNewSMS(ByVal ReadState As String, ByVal sDateTime
As String, ByVal sNum As String, ByVal sText As String, ByVal sSCA As
String)

收到新音讯
DebugText “================= 收到新音讯 ===================”
DebugText “时刻日期: ” + sDateTime
DebugText “电话号码: ” + sNum
DebugText “音讯内容: ” + sText
DebugText “================================================”

MsgBox “收到新音讯:” + sNum
End Sub
Private Sub myActiveX_OnPhoneBookList(ByVal PhoneBook As String)
phbook.Text = PhoneBook 显现电话本内容
End Sub
Private Sub Portopen_Test() 翻开端口并测验
If Mobcomm.PortOpen = False Then
Mobcomm.CommPort = True
End If
Mobcomm.Output = “AT” + vbCr
Timer1.Enabled = True
End Sub

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/268159.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部