·通讯格式
    显示屏采用标准RS-232通讯接口,串行通讯格式
为“2400,8,N,1”。
    显示屏显示一行24点阵6个汉字或12个数字信息。·信息格式:
  11H +  显示信息 + 01H--------------------------------------------------  11H          ---- 表示地址码;
1号屏:11H,2号屏:22H,3号屏:33H  显示信息     ---- 使用汉字内码,共12个字节,
                    个数不足用空格填充;  01H          ---- 表示信息结束码;
1号屏:01H,2号屏:02H,3号屏:03H请问:
“信息格式”中通过com1口向显示屏传数据,怎么用Delphi语言写出来?(只列出关键的两三条语句即可),感激不尽.
11H + 显示信息 + 01H 为1号显示屏的格式,2号屏、3号屏相似,所以只写出一个即可了,但我不知代码怎么写?

解决方案 »

  1.   

    你这里关键的问题应该就是汉字内码的问题其它的都简单,建议你去下载个SPCOMM或COMPORT控件装了看看帮你顶
      

  2.   

    我已经装了spcomm,例如向一屏发,我是这样写的。
    SendStr:=chr($11)+str+chr($01);
    comm1.WriteCommData(pchar(SendStr),length(SendStr));
    但显示屏还是收不到,你给帮忙看一下,什么地方写的不对。
      

  3.   

    发送程序的模块为:procedure TForm1.Button1Click(Sender: TObject);
    var
      SendStr,str:string;
      i:integer;
    begin
      str:=edit1.Text;
      for i:=0 to 11-length(str) do
      begin
      str:=str+' ';
      end;
      if ComboBox3.Text='一号' then
        SendStr:=chr($11)+str+chr($01)
      else if ComboBox3.Text='二号' then
        SendStr:=chr($22)+str+chr($02)
      else if ComboBox3.Text='三号' then
        SendStr:=chr($33)+str+chr($03);
          
      if comm1.WriteCommData(pchar(SendStr),length(SendStr)) then
        showmessage(SendStr+inttostr(length(SendStr)))
      else
        showmessage('发送失败');  
    end;请问“信息格式”中的首尾控制字段是十六进制的,这条语句怎么写呢?也就是说如何传送十六进制的数给显示屏?
    汉字内码我也不知如何处理,多谢
      

  4.   

    如果用pchar(SendStr)的话,在你要发送的数据中如果包含字符串结束符$00的话,就会出错的,可以把你要发送的数据放到一个byte数组中然后用串口控件的SendBuf或类似的函数实现发送
      

  5.   

    发送了但显示屏接收不到,是不是我写的这段程序不符合显示屏的"信息格式"呢?
    这个格式中首尾控制字段,是十六进制的,显示信息为汉字内码.这个格式怎么去写呢?
    能给出大致的思路吗?(非得建立一个数组吗?难道将汉字也存入数组中吗?)我已经装上spcomm控件了,要怎么解决呢?多谢
      

  6.   

    显示信息如果也用十六进制的话,可以这样写
    s:显示信息(length=16)
    b:array of [1..12]byte
    for i:=1 to 12 do
    begin
      b[i]:=ord(s[i]);
    end;
    用头、尾再加上这十二个字节,发送给显示屏就好了
    也不知道对不对
      

  7.   

    发送程序的模块为:procedure TForm1.Button1Click(Sender: TObject);
    var
      SendStr,str:string;
      i:integer;
    begin
      str:=edit1.Text;
      for i:=0 to 11-length(str) do
      begin
      str:=str+' ';
      end;
      if ComboBox3.Text='一号' then
        SendStr:=chr($11)+str+chr($01)
      else if ComboBox3.Text='二号' then
        SendStr:=chr($22)+str+chr($02)
      else if ComboBox3.Text='三号' then
        SendStr:=chr($33)+str+chr($03);
          
      if comm1.WriteCommData(pchar(SendStr),length(SendStr)) then
        showmessage(SendStr+inttostr(length(SendStr)))
      else
        showmessage('发送失败');  
    end;请问“信息格式”中的首尾控制字段是十六进制的,这条语句怎么写呢?也就是说如何传送十六进制的数给显示屏?
    注明:也就是上述代码中传送数据时按"信息格式"所写的语句如何去写,就只两条:
    SendStr:=chr($33)+str+chr($03);
    showmessage(SendStr+inttostr(length(SendStr)))___________
    请问上述代码哪里出错了呢?依据"信息格式"的代码要如何去写呢?(我用的是SPCOMM控件)
      

  8.   

    var
      I: Integer;
      s:string;
      b:array [0..13] of byte;
    begin
      s:='显示测试    '; //补到12个
      b[0]:=$11;
      for I := 1 to 12 do    // Iterate
      begin
        b[i+1]:=ord(s[i]);
      end;    // for
      b[13]:=1;
      spcomm.WriteCommData(@b,14);
    end;我这里没装SPCOMM,估计代码问题应该不算太大(难说 :) )
    关于半角、数字、英文字母等内容你自己去完善吧,应该是可以的
      

  9.   

    To: aft_st_sd(浪子) 
    你给的代码运行没问题(我以前写的代码也能运行),可就是传送不到显示屏上,这是不是还需要专门的控制呢?(如告诉显示屏如何去接收数据呢?)
      

  10.   

    ·信息格式:
      11H +  显示信息 + 01H--------------------------------------------------  11H          ---- 表示地址码;
    1号屏:11H,2号屏:22H,3号屏:33H  显示信息     ---- 使用汉字内码,共12个字节,
                        个数不足用空格填充;  01H          ---- 表示信息结束码;
    1号屏:01H,2号屏:02H,3号屏:03H没有什么协议,只是通过计算机的com口传送数据给显示屏就行了,发送时的"信息格式"为以上所列出的,但不知如何去写这条语句?多谢!
      

  11.   

    以下是C++语言所写的代码,可以用,但我自己用Delphi编的调试程序就不行(能告诉我在Delphi中还要添加什么吗?)#include <stdlib.h>
    #include <dos.h>
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    #include <io.h>
    #include <bios.h>
    #define COM1     0
    #define COM2     1
    #define COM3     2
    #define COM4     3
    #define SETTINGS ( 0xa0 | 0x00 | 0x00 | 0x03)
    int main(int argc,char * argv[])
    {
    int status,i,j;
    int c=0,ph=1;
          if(argc==3)
          {
    c=atoi(argv[1]);
    ph=atoi(argv[2]);
          }
    bioscom(0,SETTINGS,c);
    status=bioscom(1,0x10+ph,c);
    if(0x8000&status)
    {
    printf("send no succeed!");
    return(1);
    }
    for(j=0;j<12;j++)
    {
    status=bioscom(1,0x30+j,c);
    }
    status=bioscom(1,ph,c);
    for(i=1;i<=3;i++)
    {
    sound(300+i*50);
    delay(150);
    }
    nosound();
    return(0);
    }
      

  12.   

    问题找到了,是显示屏厂家中的说明书给写错了,导致编程出错
    "显示格式"中
      11H          ---- 表示地址码;
    1号屏:11H,2号屏:22H,3号屏:33H应改为:
    1号屏:11H,2号屏:12H,3号屏:13H多谢各位朋友