⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 长短信发送例程
💻 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 + -