部分代码 : private { Private declarations } // function ConvertStr(tmpStr:String); public { Public declarations } end;var FormMain: TFormMain; KanBanDB: TiniFile; Sid,Username,Password:String; RecordCounter:integer; SendStr : array[0..99] of String; ArrayIndex : integer ; TimerSwitch : String; DisplayChar : array[0..36] of String = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P,','Q','R','S','T','U','V','W','X','Y','Z','-'); ActualVal : array[0..36] of String = ('10','11','12','13','14','15','16','17','18','19','21','22','23','24','25','26','27','28','29','2A','2B','2C','2D','2E','2F','30','31','32','33','34','35','36','37','38','39','3A','3F') ; implementationuses UserLogin;{$R *.dfm}procedure TFormMain.FormShow(Sender: TObject); begin StopBtn.Enabled:=false; Timer1.Enabled:=false; Timer2.Enabled:=false; TimerSwitch:='Timer1On'; // MSComm1.InputMode:=0 ; // 1 - comInputModeBinary // DisplayChar:=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P,','Q','R','S','T','U','V','W','X','Y','Z','-'); // ActualVal:=('10','11','12','13','14','15','16','17','18','19','21','22','23','24','25','26','27','28','29','2A','2B','2C','2D','2E','2F','30','31','32','33','34','35','36','37','38','39','3A','3F'); end; procedure TFormMain.Timer1Timer(Sender: TObject); var TmpArrayIndex:integer; SqlStr : String; MOStr:String; ModelStr:String; TargetStr:String; OutputStr:String; begin if TimerSwitch='Timer1On' then begin TmpArrayIndex:=0; SqlStr:='select mo_number,model_name ,target_qty, sum(output_qty) output_qty from sfism4.r_mo_base_t where mo_number in ' +' (select distinct rec.mo_number from sfism4.r_station_rec_t rec, sfism4.r_mo_base_t base ' +' where rec.work_date = ( select to_char(sysdate,''yyyymmdd'') from dual ) ' +' and rec.MO_NUMBER=base.MO_NUMBER and base.CLOSE_FLAG=2 ' +' and base.INPUT_QTY>=base.OUTPUT_QTY ) ' +' group by mo_number, model_name , target_qty ' ; with ADOQuery1 do begin close; sql.Clear; sql.Add(SqlStr); prepared; open; RecordCounter:=ADOQuery1.RecordCount; end; while not ADOQuery1.Eof do begin MOStr:=ADOQuery1.fieldByName('mo_number').AsString; ModelStr:=ADOQuery1.fieldByName('model_name').AsString; TargetStr:=IntToStr(ADOQuery1.fieldByName('target_qty').AsInteger); OutputStr:=IntToStr(ADOQuery1.fieldByName('output_qty').AsInteger); SendStr[TmpArrayIndex]:=MOStr+ModelStr+TargetStr+OutputStr; ADOQuery1.Next; TmpArrayIndex:=TmpArrayIndex+1; end; ArrayIndex:=TmpArrayIndex ; TimerSwitch:='Timer2On'; end; end;procedure TFormMain.Timer2Timer(Sender: TObject); var i:integer; COMLinkStr : String ; begin if TimerSwitch='Timer2On' then begin
if ArrayIndex>=0 then begin COMLinkStr:=''; for i:=0 to ArrayIndex do COMLinkStr:=COMLinkStr+SendStr[i] ; MSComm1.Output:=COMLinkStr ; // MSComm1.Output:='A1 5F' ; end; TimerSwitch:='Timer1On'; end; end; end.
i:Byte;
i:=Byte($01);
i:byte;
for i :=0 to length(str)/2-1 do
begin
i:=byte($str[i]+str[i+1]);
end;
我目前在写一个小程序 , 通过MSComm控件向一个LCD看板(点阵)发送数据 , LCD中采用的是5*7点阵西文字符库 , 对应的字符与16进制码分别是(举几个例子): 0代码”10”, 1代码”11” ….., 9代码”19” , …. ,A代码”21”, B代码”22” , …. , I代码”29” , J代码”2A” , …. O代码”2F” , P代码”30” , ……, Z代码”3A” , [ 代码”3B” . 现在需要显示的字符串已经从数据库中取出 , 比如 : “IBM 2510 FOX 3560“, 以上的字符如何显示在LCD上 . 我的想法 : 将字符串“IBM 2510 FOX 3560“ 先转化成5*7点阵西文字符库中对应的代码 , 但是通过
MSComm.output:=…… 在LCD上显示不出来 . 有好的建议请贴出代码 , 高分酬谢 !
{ Private declarations }
// function ConvertStr(tmpStr:String);
public
{ Public declarations }
end;var
FormMain: TFormMain;
KanBanDB: TiniFile;
Sid,Username,Password:String;
RecordCounter:integer;
SendStr : array[0..99] of String;
ArrayIndex : integer ;
TimerSwitch : String;
DisplayChar : array[0..36] of String = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P,','Q','R','S','T','U','V','W','X','Y','Z','-');
ActualVal : array[0..36] of String = ('10','11','12','13','14','15','16','17','18','19','21','22','23','24','25','26','27','28','29','2A','2B','2C','2D','2E','2F','30','31','32','33','34','35','36','37','38','39','3A','3F') ;
implementationuses UserLogin;{$R *.dfm}procedure TFormMain.FormShow(Sender: TObject);
begin
StopBtn.Enabled:=false;
Timer1.Enabled:=false;
Timer2.Enabled:=false;
TimerSwitch:='Timer1On';
// MSComm1.InputMode:=0 ; // 1 - comInputModeBinary
// DisplayChar:=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P,','Q','R','S','T','U','V','W','X','Y','Z','-');
// ActualVal:=('10','11','12','13','14','15','16','17','18','19','21','22','23','24','25','26','27','28','29','2A','2B','2C','2D','2E','2F','30','31','32','33','34','35','36','37','38','39','3A','3F');
end;
procedure TFormMain.Timer1Timer(Sender: TObject);
var
TmpArrayIndex:integer;
SqlStr : String;
MOStr:String;
ModelStr:String;
TargetStr:String;
OutputStr:String;
begin
if TimerSwitch='Timer1On' then
begin
TmpArrayIndex:=0;
SqlStr:='select mo_number,model_name ,target_qty, sum(output_qty) output_qty from sfism4.r_mo_base_t where mo_number in '
+' (select distinct rec.mo_number from sfism4.r_station_rec_t rec, sfism4.r_mo_base_t base '
+' where rec.work_date = ( select to_char(sysdate,''yyyymmdd'') from dual ) '
+' and rec.MO_NUMBER=base.MO_NUMBER and base.CLOSE_FLAG=2 '
+' and base.INPUT_QTY>=base.OUTPUT_QTY ) '
+' group by mo_number, model_name , target_qty ' ;
with ADOQuery1 do
begin
close;
sql.Clear;
sql.Add(SqlStr);
prepared;
open;
RecordCounter:=ADOQuery1.RecordCount;
end;
while not ADOQuery1.Eof do
begin
MOStr:=ADOQuery1.fieldByName('mo_number').AsString;
ModelStr:=ADOQuery1.fieldByName('model_name').AsString;
TargetStr:=IntToStr(ADOQuery1.fieldByName('target_qty').AsInteger);
OutputStr:=IntToStr(ADOQuery1.fieldByName('output_qty').AsInteger);
SendStr[TmpArrayIndex]:=MOStr+ModelStr+TargetStr+OutputStr;
ADOQuery1.Next;
TmpArrayIndex:=TmpArrayIndex+1;
end;
ArrayIndex:=TmpArrayIndex ;
TimerSwitch:='Timer2On';
end;
end;procedure TFormMain.Timer2Timer(Sender: TObject);
var
i:integer;
COMLinkStr : String ;
begin
if TimerSwitch='Timer2On' then
begin
if ArrayIndex>=0 then
begin
COMLinkStr:='';
for i:=0 to ArrayIndex do
COMLinkStr:=COMLinkStr+SendStr[i] ;
MSComm1.Output:=COMLinkStr ;
// MSComm1.Output:='A1 5F' ;
end;
TimerSwitch:='Timer1On';
end;
end;
end.