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

📄 publicunitforcall.~pas

📁 关于手持机的LCD显示模块的设计LCD的显示固定为每行16个字符
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
unit PublicUnitForCall;

interface

uses


TYPE
 TReadDataFromComFunc= function(SendCommandForCom:string;ReadDelayTimeForReceive:integer):pchar;stdcall;
VAR
    Th:Thandle;
    Tf:TReadDataFromComFunc;
    Tp:TFarProc;
   CommandForSendToCard:array[0..40] of string;
   CommandForReturnStateDataTrue:array[0..40] of string;
   CommandForReturnStateDataFalse:array[0..40] of string;
   CommandForReturnStateDataOperator:array[0..40] of string;
   ComPortNumberStr:string;
   ComBaudrateSet:integer;
   SetComPortStateBool:boolean;
   ReturnReadDataState:string;
   ReadCommPortValueForBug:string;
   BaudRateValueIndex:integer;
   GivenDelayTimeForDll:integer;
   OperatorSectorAndBlockIndexStr:string;
   OperatorSendDataContentStr:string;

   ReadIniFile : TINIFile;
   ReadIniSectionStr:Tstrings;
   const strINIname = 'CommandIniliaze.ini';//INI文件的文件名,大家根据具体情况修改
//const  TheTwoComandHeadByte:string='AABB' ;

 function CommOpen(ComPortSet_PortString:string;RegComPortSet_BaudRate:integer):boolean;stdcall;external 'MF500_HY60.dll';
// function StrCommandForSendToComPort( SendCommandForCom:string;):pchar;stdcall;external 'MF500_HY60.dll';
 function StrCommandForSendToComPort(SendCommandForCom:string;ReadDelayTimeForReceive:integer):string;stdcall;external 'MF500_HY60.dll';
 procedure ColseCommPortHandle;stdcall;external 'MF500_HY60.dll';
 function Hex_Int(HexStr: String): Integer;
 function StringXorOperator(const s:string):string;
 function replacing(S,source,target:string):string;
 function SendDataAndReturnData(SendCommandString:string):Pchar;
 function ReceiveComDataFromCard(const ReceiveStr:string;DefineReturnData:String;falseReturndata:string):string;
 function SendWriteDataToCard(const SendWriteData:string;WriteDataLength:integer):string;
 procedure WriteDataReturnStatusBool(const ZhushiShuoMing:string;const ReceiveStr:string;ReturnDataTrueValue:String;ReturnDatafalseValue:String);
 procedure IniliazeDataForCommand;
 procedure IniReadCommandDataArrayString;
 procedure FileINICreate;
 procedure FileINIFree;
 
 Function HexToChar(HexStr:string):string;
 function ReadDataFromCardForShow(SendCommandIndex:integer;SelSectorAndBlockIndexStr:string):string;
 procedure ReadDataFromCardForState(SendCommandIndex:integer;OperatorTpyeForSend:string);
 procedure WriteDadaToCardFunction(OperatorType:string;SendCommandIndex:integer;WriteOtherData:string;WriteDataStr:string;WriteDataLen:integer);
implementation


procedure FileINICreate;
var
     strLocal:string;
     FilePathAndName:string;
begin
  getDir(0,strLocal);
  FilePathAndName:=strLocal+ '\' + strINIname;
  if  FileExists(FilePathAndName) then
    ReadIniFile := TINIFile.Create(strLocal + '\' + strINIname);
end;

procedure FileINIFree;
begin
  ReadIniFile.Free;
end;


//根据某个字符分割字符串的函数
procedure SeparateTerms(s : string;Separator : char;Terms : TStringList);
{ This browses a string and divide it into terms whenever the given
  separator is found. The separators will be removed }
  var
  hs : string;
  p : integer;
begin
  Terms.Clear; // First remove all remaining terms
  if Length(s)=0 then   // Nothin' to separate
    Exit;
  p:=Pos(Separator,s);
  while P<>0 do
  begin
    hs:=Copy(s,1,p-1);   // Copy term
    Terms.Add(hs);       // Add to list
    Delete(s,1,p);       // Remove term and separator
    p:=Pos(Separator,s); // Search next separator
  end;
  if Length(s)>0 then
    Terms.Add(s);        // Add remaining term
end;



function Hex_Int(HexStr: String): Integer;
//十六进制转为十进制  同样可以通过:StrToInt('$aaa')得到
var
  i: Integer;
begin
  Result := 0;
  for i := 1 to Length(HexStr) do
  begin
    case HexStr[i] of
      '0'..'9' : Result := Result * 16 + StrToInt(HexStr[i]);
      'a', 'A'  : Result := Result * 16 + 10;
      'b', 'B'  : Result := Result * 16 + 11;
      'c', 'C'  : Result := Result * 16 + 12;
      'd', 'D'  : Result := Result * 16 + 13;
      'e', 'E'  : Result := Result * 16 + 14;
      'f', 'F'  : Result := Result * 16 + 15;
    end;
  end;
end;

Function HexToChar(HexStr:string):string;
var
  StrLength:integer;
  i:integer;
  EachStrByte:byte;
  EachHexToCharStr:string;
  HexToCharStr:string;
begin
   StrLength:=length(HexStr);
   for i:=1 to (StrLength div 2) do
     begin
         EachStrByte:=hex_int(copy(HexStr,2*i-1,2));
         EachHexToCharStr:=(chr(EachStrByte));
         HexToCharStr:=HexToCharStr+ EachHexToCharStr;

     end;
     result:=HexToCharStr;
end;

function StringXorOperator(const s:string):string;
var
    i: integer;
    FirstByte,SecondByte:byte;
begin
    FirstByte:=0;
    for i:=1 to (length(s) div 2)   do
       begin
            SecondByte:=strtoint('$'+S[2*i-1]+S[2*i]);
            FirstByte:=FirstByte xor SecondByte;
       end;
      result :=inttohex(FirstByte,2);
end;

//替换字符串中子串的函数,他可以从字符串中找出指定子串,并替换为另一子串。
function replacing(S,source,target:string):string;
  var site,StrLen:integer;
begin
  site:=pos(source,s);     //source在S中出现的位置
  If site=0 then
    begin
      replacing:=s;
      exit;
    end;
  StrLen:=length(source);  //source的长度
  delete(s,site,StrLen);  //删除source字符串
  insert(target,s,site);    //插入target字符串到S中
  replacing:=s;     {返回新串}
end;

function SendDataAndReturnData(SendCommandString:string):pchar;
begin
    result:= Tf( SendCommandString,GivenDelayTimeForDll);
    if result='' then
      exit;
    ReadCommPortValueForBug:=result;
end;

function ReceiveComDataFromCard(const ReceiveStr:string;DefineReturnData:String;falseReturndata:string):string;
var
   tmpStr,ReturnCalibrationStr,ReadyForCalibrateReturnData:string;
   CaculateTheReturnCalibrationStr:string;
   TempReadDataStr:string;
begin
       if copy(ReceiveStr,5,4)=falseReturndata then
         begin
              ReturnReadDataState:='读取失败';
             exit;
         end;
       if copy(ReceiveStr,5,4)=DefineReturnData then
          begin
                  ReturnCalibrationStr:=copy(ReceiveStr,length(ReceiveStr)-1,2);
                  ReadyForCalibrateReturnData:=copy(ReceiveStr,5,length(ReceiveStr)-6);
                  CaculateTheReturnCalibrationStr:=StringXorOperator(ReadyForCalibrateReturnData);
                   if  ReturnCalibrationStr=CaculateTheReturnCalibrationStr then
                       begin
                          TempReadDataStr:= copy(ReceiveStr,9,length(ReceiveStr)-10);
                          result:=replacing(TempReadDataStr,'AA00BB','AABB');
                          ReturnReadDataState:='校验成功';
                       end
                    else
                        begin
                             result:=''; //显示不成功
                               ReturnReadDataState:='校验失败';
                             exit;
                     end;
       end;
end;


function SendWriteDataToCard(const SendWriteData:string;WriteDataLength:integer):string;
var
    i : integer;
    tempErrorstr:String;
begin
    tempErrorstr:='写入数据位数错误!应该是'+inttostr(WriteDataLength)+'长度字节';
   if SendWriteData='' then
    begin
           ShowMessage('数据不能为空,请输入一定长度的字节数据!');
           exit;
    end;

    if length(SendWriteData)<>WriteDataLength then
          begin
               ShowMessage('数据内容长度不对!');
            exit;
          end;
    for i:=1 to WriteDataLength do
            if not (SendWriteData[i] in ['0'..'9','A'..'F']) then
            begin
              ShowMessage('数据含有非法内容!');
                exit;
            end;
    result:=replacing(SendWriteData,'AABB','AA00BB');
end;


procedure WriteDataReturnStatusBool(const ZhushiShuoMing:string;const ReceiveStr:string;ReturnDataTrueValue:String;ReturnDatafalseValue:String);
begin
       if copy(ReceiveStr,5,4)=ReturnDataTrueValue then
         begin
           ReturnReadDataState:=ZhushiShuoMing+'成功!';
           exit;
         end
       else if copy(ReceiveStr,5,4)=ReturnDatafalseValue then
         begin
           ReturnReadDataState:=ZhushiShuoMing+'操作失败!';
           exit;
         end
       else  if length(ReceiveStr)=0 then
          begin
              ReturnReadDataState:=ZhushiShuoMing+'没有接收到数据!';
              exit;
          end
        else
          begin
              ReturnReadDataState:=ZhushiShuoMing+'接收非法字符!';
              exit;
       end;
 end;


procedure IniliazeDataForCommand;
begin

    RegisterFirstWriteForComSetUp('UserCardComSettingData','UserComPortSet_PortValue',ComPortNumberStr);
    RegisterFirstWriteForComSetUp('UserCardComSettingData','UserComPortSet_BaudValue',inttostr(ComBaudrateSet));
    ComPortNumberStr:=RegisterReadForComSetUp('UserCardComSettingData','UserComPortSet_PortValue');
    ComBaudrateSet:=strtoint(RegisterReadForComSetUp('UserCardComSettingData','UserComPortSet_BaudValue'));
    BaudRateValueIndex:=ComBaudrateSet div 4800;
    SetComPortStateBool:=CommOpen(ComPortNumberStr,ComBaudrateSet);
    if  SetComPortStateBool=true then
        begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -