求教如何从串口中判断并读取来电号码?由于接手了一个程序但未接触过这方面,这块不明白,因此这里求教大家,原来程序就是一个字符一个字符来读的

解决方案 »

  1.   

    以前有用支持来电显示的MODEM有做过一个,不知你说的是不是这个。
      

  2.   

    首先,你要看手机又没有来电显示功能,
    其次发送AT+CNMI=1,1命令更改其为被动接受方式
    一般情况,你可以发送AT+CNMI? 查看其状态
      

  3.   

    这个应该是 Modem 支持才行的
      

  4.   

    使用AT指令集。
    你的程序只要正确打开Modem所连接的串口就行了,有呼入时,Modem会主动发送RING消息给你的程序的,RING后跟着主叫号码。
      

  5.   

    下面文章摘自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;