📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, SPComm, Validat;
type
TForm1 = class(TForm)
Comm1: TComm;
Button1: TButton;
Memo1: TMemo;
Edit_HPNO: TValidatorEdit;
Label1: TLabel;
Memo_Msg: TMemo;
procedure Button1Click(Sender: TObject);
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
private
procedure send(Var_str: Pchar);
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function Encode_en(var s:String):String;
var
i,j,len:Integer;
cur:Integer;
t:String;
begin
Result:='';
len:=Length(s);
//j 用于移位计数
i:=1;j:=0;
while i<=len do
begin
if i<len then
//数据变换
cur:=(ord(s[i]) shr j) or ((ord(s[i+1]) shl (7-j)) and $ff)
else
cur:=(ord(s[i]) shr j) and $7f;
FmtStr(t,'%2.2X',[cur]);
Result:=Result+t;
inc(i);
//移位计数达到7位的特别处理
j:=(j+1) mod 7;if j=0 then inc(i);
end;
end;
function Encode_cn(var s:WideString):String;
var
i,len:Integer;
cur:Integer;
t:String;
begin
Result:='';
len:=Length(s);
i:=1;
while i<=len do
begin
cur:=ord(s[i]);
//BCD转换
FmtStr(t,'%4.4X',[cur]);
Result:=Result+t;
inc(i);
end;
end;
procedure TForm1.send(Var_str:Pchar);
begin
comm1.WriteCommData(Var_str,length(Var_str));
end;
procedure TForm1.Button1Click(Sender: TObject);
var Msg_cn :widestring;
Msg_cn_encode:string;
Msg_cn_length:string;
SMS_USER_DATA:string;
SMS_USER_DATA_Length:string;
SMS_Address:String;
SMS_Address_length:string;
i:integer;
tmp_char: char;
Buf : Array[0..159] of char;
begin
if length(trim(edit_hpno.text)) mod 2 =1 then
SMS_Address:= trim(edit_hpno.text)+'F'
else
SMS_Address:= trim(edit_hpno.text);
i:=1;
while i<=length(SMS_Address) do
begin
tmp_char:=SMS_Address[i];
SMS_Address[i]:=SMS_Address[i+1];
SMS_Address[i+1]:=tmp_char;
i:=i+2;
end;
FmtStr(SMS_Address_length,'%2.2X',[length(SMS_Address)]);
Comm1.StartComm;
send('AT'+#13);
SLEEP(200);
send('AT+CMGF=0'+#13);
SLEEP(200);
send('AT+CSMS=0'+#13);
SLEEP(200);
Memo_Msg.GetTextBuf(Buf, 160);
Msg_cn:=widestring(buf);
Msg_cn_encode:=encode_cn(Msg_cn);
FmtStr(Msg_cn_length,'%2.2X',[length(Msg_cn_encode) div 2]);
SMS_USER_DATA:='001100'+SMS_Address_length+'91'+ SMS_Address +'0008AA'+ Msg_cn_length + Msg_cn_encode;
FmtStr(SMS_USER_DATA_Length,'%2.2D',[(length(SMS_USER_DATA) div 2) -1]);
send(pchar('AT+CMGS='+ SMS_USER_DATA_Length +#13));
SLEEP(200);
send(pchar(SMS_USER_DATA+#$1A)); //Ctl+z
SLEEP(1000);
Comm1.StopComm;
end;
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
s: string;
begin
SetLength(S, BufferLength); //接收RS232的数据并显示Memo1上。
Move(Buffer^, PChar(S)^, BufferLength);
Memo1.Lines.Add(S);
Memo1.Invalidate;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -