Delphi串口来电显示问题 求教如何从串口中判断并读取来电号码?由于接手了一个程序但未接触过这方面,这块不明白,因此这里求教大家,原来程序就是一个字符一个字符来读的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 以前有用支持来电显示的MODEM有做过一个,不知你说的是不是这个。 首先,你要看手机又没有来电显示功能,其次发送AT+CNMI=1,1命令更改其为被动接受方式一般情况,你可以发送AT+CNMI? 查看其状态 这个应该是 Modem 支持才行的 使用AT指令集。你的程序只要正确打开Modem所连接的串口就行了,有呼入时,Modem会主动发送RING消息给你的程序的,RING后跟着主叫号码。 下面文章摘自http://www.kosen.com.cn/news/showatc.asp?id=92使用方法: (1) 下载控件包Component.zip (2) 先编译 CPortLib6.dpk ,已安装了CPortLib 控件组的可省略这一步骤 (3) 然后编译 TelePort.dpk ,并安装 (4) 安装完成后,在 kosenTools 控件页增加了一个控件:TeleComport (5) 使用示例请看 Project2.dpr --------------------------------------------------------------------------------示例源程序 --------------------------------------------------------------------------------unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CPort, TeleComportUnit; type TForm1 = class(TForm) TeleComport1: TTeleComport; Memo1: TMemo; Button1: TButton; Button2: TButton; Button3: TButton; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure TeleComport1Open(Sender: TObject); procedure TeleComport1Close(Sender: TObject); procedure TeleComport1Read(Sender: TObject; s: String; t: TDateTime); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button2Click(Sender: TObject); begin if TeleComport1.SetupPort then Memo1.Lines.Add('Port='+TeleComport1.Port); //设置来电管理器的连接端口,USB端口的设置为Port:="USB" end; procedure TForm1.Button1Click(Sender: TObject); begin TeleComport1.Open; end; procedure TForm1.Button3Click(Sender: TObject); begin TeleComport1.Close; end; procedure TForm1.TeleComport1Open(Sender: TObject); begin if TeleComport1.JDConnected then begin Memo1.Lines.Add('Connected'); //打开端口时读取来电管理器内缓存的号码 TeleComport1.ReadAllWhenOpen; end; end; procedure TForm1.TeleComport1Close(Sender: TObject); begin if not TeleComport1.JDConnected then Memo1.Lines.Add('not Connected'); end; //有来电时触发此事件 //s为来电号码,t为来电时间 procedure TForm1.TeleComport1Read(Sender: TObject; s: String; t: TDateTime); begin Memo1.Lines.Add(s+FormatDateTime(' yyyy-mm-dd hh:nn:ss', t)); end; 多维动态数组反复变更长度会明显影响运行速度吗? DES能不能用于图像加密? 各位大哥,如何获得给定图像(图标)的色彩数呢? 两个小问题~~~~~~~~~请教大家 请问高手:在DELPHI下如何用代码直接驱动打印机??? 请教delphi 的全局,局部变量怎么定义的,以及窗口间如何传递参数 普通Delphi程序员最大的缺陷是什么? 遇到了难题 createremotethread能否实现这个功能? 如何使这样的字段值自动加1? 关于modem来电显示的问题 网络中传输录制的声音文件,就像QQ的声频,应该怎么压缩该声音文件??
其次发送AT+CNMI=1,1命令更改其为被动接受方式
一般情况,你可以发送AT+CNMI? 查看其状态
你的程序只要正确打开Modem所连接的串口就行了,有呼入时,Modem会主动发送RING消息给你的程序的,RING后跟着主叫号码。
(1) 下载控件包Component.zip
(2) 先编译 CPortLib6.dpk ,已安装了CPortLib 控件组的可省略这一步骤
(3) 然后编译 TelePort.dpk ,并安装
(4) 安装完成后,在 kosenTools 控件页增加了一个控件:TeleComport
(5) 使用示例请看 Project2.dpr --------------------------------------------------------------------------------示例源程序 --------------------------------------------------------------------------------unit Unit2; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, CPort, TeleComportUnit; type
TForm1 = class(TForm)
TeleComport1: TTeleComport;
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure TeleComport1Open(Sender: TObject);
procedure TeleComport1Close(Sender: TObject);
procedure TeleComport1Read(Sender: TObject; s: String; t: TDateTime);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button2Click(Sender: TObject);
begin
if TeleComport1.SetupPort then
Memo1.Lines.Add('Port='+TeleComport1.Port);
//设置来电管理器的连接端口,USB端口的设置为Port:="USB"
end; procedure TForm1.Button1Click(Sender: TObject);
begin
TeleComport1.Open;
end; procedure TForm1.Button3Click(Sender: TObject);
begin
TeleComport1.Close;
end; procedure TForm1.TeleComport1Open(Sender: TObject);
begin
if TeleComport1.JDConnected then
begin
Memo1.Lines.Add('Connected');
//打开端口时读取来电管理器内缓存的号码
TeleComport1.ReadAllWhenOpen;
end;
end; procedure TForm1.TeleComport1Close(Sender: TObject);
begin
if not TeleComport1.JDConnected then
Memo1.Lines.Add('not Connected');
end; //有来电时触发此事件
//s为来电号码,t为来电时间
procedure TForm1.TeleComport1Read(Sender: TObject; s: String;
t: TDateTime);
begin
Memo1.Lines.Add(s+FormatDateTime(' yyyy-mm-dd hh:nn:ss', t));
end;