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

📄 main.~pas

📁 一个通过串口读写WAV语音文件的的小程序
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
                EarseCard := GetEarsecard(cardK_num);
                Re_Earsecard_bak := GetRe_Earsecard(cardk_num);
                sendtype := 3;
                ComPort.Write(Earsecard,16);
                ResetEvent(hevent);
                if WaitForSingleObject(hevent,1000) = WAIT_TIMEOUT then
                begin
                    memo1.Lines.Add('接收擦卡超时,重新发送'+inttostr(cardK_num));
                    Re_Earsecard := Re_Earsecard_bak;
                    ComPort.Write(Earsecard,16);
                    ResetEvent(hevent);
                    if WaitForSingleObject(hevent,1000) = WAIT_TIMEOUT then
                    begin
                        memo1.Lines.Add('接收擦卡超时,重新发送'+inttostr(cardK_num));

                        ComPort.Write(Earsecard,16);

                    end;

                end;
            end
            else inc(cardy_num,1);
            if cardk_num > 2048 then Break;
        end else inc(sendID,1);
    end;
    wavFile.Free;
    memo1.Lines.Add('发送语音文件成功!');
end;

procedure TForm1.ComPortAfterClose(Sender: TObject);
begin
    if sbtn_open <> nil then
       sbtn_open.Caption := '打开串口';
end;

procedure TForm1.ComPortAfterOpen(Sender: TObject);
begin
    sbtn_open.Caption := '关闭串口';
end;

function TForm1.GetDatasend(pMlh: byte; pdata : TparaArray): Tdatasend;
var sDataSend : Tdatasend;
begin
    Fillchar(sDataSend,16,0);
    with sdatasend do
    begin
        Sendpc := $78;
        Recpc  := $05;
        mlh    := pMlh;
        databuff := pdata;
        Rec := 0-(Recpc + Sendpc + mlh+databuff[0]+databuff[1]+databuff[2]+databuff[3]
              +databuff[4]+databuff[5]+databuff[6]+databuff[7]);
    end;
    Result := sDataSend;
end;

function TForm1.GetWritecard(pcard_k: smallint; pcard_y: byte): TWriteCard;
var sWritecard : TWriteCard;
begin
    Fillchar(sWritecard,16,0);
    with sWritecard do
    begin
        Sendpc := $78;
        Recpc  := $05;
        mlh    := $10;
        card_k := pcard_k;
        card_y := pcard_y;
        Rec := 0-(Recpc + Sendpc + mlh+ HiByte(card_k)+byte(card_k)+card_y);
    end;
    Result := sWritecard;
end;

function TForm1.GetReadcard(pcard_k: smallint; pcard_y: byte): TReadCard;
var sReadcard : TReadCard;
begin
    Fillchar(sReadcard,16,0);
    with sReadcard do
    begin
        Sendpc := $78;
        Recpc  := $05;
        mlh    := $11;
        card_k := pcard_k;
        card_y := pcard_y;
        Rec := 0-(Recpc + Sendpc + mlh+ HiByte(card_k)+byte(card_k)+card_y);
    end;
    Result := sReadcard;
end;

function TForm1.GetEarsecard(pcard_k: smallint): TEarseCard;
var sEarsecard : TEarseCard;
begin
    Fillchar(sEarsecard,16,0);
    with sEarsecard do
    begin

        Sendpc := $78;
        Recpc  := $05;
        mlh    := $12;
        card_k := pcard_k;
        Rec := 0-(Recpc + Sendpc + mlh+ HiByte(card_k)+byte(card_k));
    end;
    Result := sEarsecard;
end;

function TForm1.Getstopsound: TStopSound;
var sStopSound : TStopSound;
begin
    Fillchar(sStopSound,16,0);
    with sStopSound do
    begin
        Sendpc := $78;
        Recpc  := $05;
        mlh    := $13;
        Rec := 0-(Recpc + Sendpc + mlh);
    end;
    Result := sStopSound;
end;

function TForm1.Getopensound: TopenSound;
var sOpenSound : TopenSound;
begin
    Fillchar(sOpenSound,16,0);
    with sOpenSound do
    begin
        Sendpc := $78;
        Recpc  := $05;
        mlh    := $14;
        Rec := 0-(Recpc + Sendpc + mlh);
    end;
    Result := sOpenSound;
end;

procedure TForm1.sbtn_sendClick(Sender: TObject);
var pThread : Tcomsend;
begin
    pThread := Tcomsend.Create(False);
    sbtn_send.Enabled := False;
end;

{procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var pRe_stopsound : TRe_StopSound;
begin
  //  if count >= 16 then
 //   begin
    case sendtype of
       0 : begin comport.Read(DataRec,16);
                 if  CompareDataRec(DataRec,DataRec_bak) then
                 begin
                    // Memo1.Lines.Add('发送数据成功');
                     SetEvent(hevent);
                 end else
                 begin
                  //   ComPort.Write(datasend,16);
                 end;
           end;
       1 : begin comport.Read(Re_writecard,16);
                 if  CompareRe_writecard(Re_writeCard,Re_writeCard_bak) then
                 begin
                   //  Memo1.Lines.Add('写卡成功  第'+inttostr(WriteCard.card_k)+'块'+inttostr(Writecard.card_y)+'页');
                     SetEvent(hevent);
                 end;// else
                 //comport.Write(writecard,16);
           end;
       2 : begin comport.Read(Re_Readcard,16);
                 if  CompareRe_ReadCard(Re_ReadCard,Re_ReadCard_Bak)then
                 begin
                     SetEvent(hevent);
                 end //else
                 //comport.Write(Readcard,16);
           end;
       3 : begin comport.Read(Re_EarseCard,16);
                 if  compareRe_Earsecard(Re_Earsecard,Re_Earsecard_bak) then
                 begin
                     SetEvent(hevent);
                     Memo1.Lines.Add('擦卡成功第'+inttostr(Earsecard.card_k)+'块');

                 end //else
                // comport.Write(Earsecard,16);
           end;
       4 : begin comport.Read(Re_stopsound,16);
                 if  CompareRe_stopsound(Re_stopsound,Re_stopsound_Bak) then
                 begin
                     setEvent(hevent);
                     Memo1.Lines.Add('停止放音!');

                 end else
                 begin
                //  comport.Write(stopsound,16);
                 end;
           end;
       5 : begin comport.Read(Re_opensound,16);
                if  CompareRe_opensound(Re_opensound,Re_opensound_Bak) then
                 begin
                     SetEvent(hevent);
                     Memo1.Lines.Add('打开放音!');
                 end //else
                 //comport.Write(opnesound,16);
           end;
    end;
 //   end else Memo1.Lines.add('数据长度小于16,数据不完整');
end; }

function TForm1.GetdataRec(pMlh: byte; pdata: TparaArray): TdataRec;
var sDataRec : TdataRec;
begin
    Fillchar(sDataRec,16,0);
    with sDataRec do
    begin
        Recpc  := $05;
        mlh    := pMlh;
        databuff := pdata;
        Rec := 0-(Recpc  + mlh+databuff[0]+databuff[1]+databuff[2]+databuff[3]
              +databuff[4]+databuff[5]+databuff[6]+databuff[7]);
    end;
    Result := sDataRec;
end;

function TForm1.GetRe_Earsecard(pcard_k: smallint): TRe_EarseCard;
var sRe_Earsecard : TRe_EarseCard;
begin
    Fillchar(sRe_Earsecard,16,0);
    with sRe_Earsecard do
    begin
        Recpc  := $05;
        mlh    := $12;
        card_k := pcard_k;
        Rec := 0-(Recpc + mlh+ HiByte(card_k)+byte(card_k));
    end;
    Result := sRe_Earsecard;
end;

function TForm1.GetRe_opensound: TRe_openSound;
var sRe_OpenSound : TRe_openSound;
begin
    Fillchar(sRe_OpenSound,16,0);
    with sRe_OpenSound do
    begin
        Recpc  := $05;
        mlh    := $14;
        Rec := 0-(Recpc + mlh);
    end;
    Result := sRe_OpenSound;
end;

function TForm1.GetRe_Readcard(pcard_k: smallint;
  pcard_y: byte): TRe_ReadCard;
var sRe_Readcard : TRe_ReadCard;
begin
    Fillchar(sRe_Readcard,16,0);
    with sRe_Readcard do
    begin
        Recpc  := $05;
        mlh    := $11;
        card_k := pcard_k;
        card_y := pcard_y;
        Rec := 0-(Recpc  + mlh+ HiByte(card_k)+byte(card_k)+card_y);
    end;
    Result := sRe_Readcard;
end;

function TForm1.GetRe_stopsound: TRe_StopSound;
var sRe_StopSound : TRe_StopSound;
begin
    Fillchar(sRe_StopSound,16,0);
    with sRe_StopSound do
    begin
        Recpc  := $05;
        mlh    := $13;
        Rec := 0-(Recpc + mlh);
    end;
    Result := sRe_StopSound;
end;

function TForm1.GetRe_Writecard(pcard_k: smallint;
  pcard_y: byte): TRe_WriteCard;
var sRe_Writecard : TRe_WriteCard;
begin
    Fillchar(sRe_Writecard,16,0);
    with sRe_Writecard do
    begin
        Recpc  := $05;
        mlh    := $10;
        card_k := pcard_k;
        card_y := pcard_y;
        Rec := 0-(Recpc + mlh+ HiByte(card_k)+byte(card_k)+card_y);
    end;
    Result := sRe_Writecard;
end;

function TForm1.CompareDataRec(DataRec1, DataRec2: TdataRec): Boolean;
begin
    if (DataRec1.Recpc = DataRec2.Recpc) and (DataRec1.mlh = DataRec2.mlh) and
       (DataRec1.databuff[0] = DataRec2.databuff[0]) and (DataRec1.databuff[1] = DataRec2.databuff[1]) and
       (DataRec1.databuff[2] = DataRec2.databuff[2]) and (DataRec1.databuff[3] = DataRec2.databuff[3])and
       (DataRec1.databuff[4] = DataRec2.databuff[4]) and (DataRec1.databuff[5] = DataRec2.databuff[5])and
       (DataRec1.databuff[6] = DataRec2.databuff[6]) and (DataRec1.databuff[7] = DataRec2.databuff[7])and
       (DataRec1.Rec = DataRec2.Rec) then Result := True else Result := False;
end;

function TForm1.CompareRe_writecard(DataRec1,
  DataRec2: TRe_WriteCard): Boolean;
begin
    if (DataRec1.Recpc = DataRec2.Recpc) and (DataRec1.mlh = DataRec2.mlh) and
       (DataRec1.card_k = DataRec2.card_k) and (DataRec1.card_y = DataRec2.card_y) and
       (DataRec1.Rec = DataRec2.Rec) then Result := True else Result := False;
end;

function TForm1.compareRe_Earsecard(DataRec1,
  DataRec2: TRe_EarseCard): Boolean;
begin
    if (DataRec1.Recpc = DataRec2.Recpc) and (DataRec1.mlh = DataRec2.mlh) and
       (DataRec1.card_k = DataRec2.card_k) and (DataRec1.Rec = DataRec2.Rec) then
        Result := True else Result := False;
end;

function TForm1.CompareRe_opensound(DataRec1,
  DataRec2: TRe_openSound): Boolean;
begin
    if (DataRec1.Recpc = DataRec2.Recpc) and (DataRec1.mlh = DataRec2.mlh) and
       (DataRec1.Rec = DataRec2.Rec) then Result := True else Result := False;
end;

function TForm1.CompareRe_ReadCard(DataRec1,
  DataRec2: TRe_ReadCard): Boolean;
begin
    if (DataRec1.Recpc = DataRec2.Recpc) and (DataRec1.mlh = DataRec2.mlh) and
       (DataRec1.card_k = DataRec2.card_k) and (DataRec1.card_y = DataRec2.card_y) and
       (DataRec1.Rec = DataRec2.Rec) then Result := True else Result := False;
end;

function TForm1.CompareRe_stopsound(DataRec1,
  DataRec2: TRe_StopSound): Boolean;
begin
    if (DataRec1.Recpc = DataRec2.Recpc) and (DataRec1.mlh = DataRec2.mlh) and
       (DataRec1.Rec = DataRec2.Rec) then Result := True else Result := False;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
    Opnesound := Getopensound;
    sendtype := 5;
    Re_opensound_Bak := GetRe_opensound;
     ComPort.Write(opnesound,16);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    hevent := CreateEvent(nil,True,False,nil);
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
    Memo1.Lines.Add('停止发送');
  Exit;
end;

procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var pRe_stopsound : TRe_StopSound;
begin
    if count = 16 then
    begin
    case sendtype of
     {  0 : begin
                 Fillchar(DataRec,16,0);
                 comport.Read(DataRec,16);
         //  memo1.Lines.Add(inttostr(Count));
                 if  CompareDataRec(DataRec,DataRec_bak) then
                 begin
                    // Memo1.Lines.Add('发送数据成功');
                     SetEvent(hevent);
                 end else
                 begin
                  //   ComPort.Write(datasend,16);
                 end;
           end; }
       1 : begin comport.Read(Re_writecard,16);
           // memo1.Lines.Add(inttostr(Count));
                 if  CompareRe_writecard(Re_writeCard,Re_writeCard_bak) then
                 begin
                   //  Memo1.Lines.Add('写卡成功  第'+inttostr(WriteCard.card_k)+'块'+inttostr(Writecard.card_y)+'页');
                     SetEvent(hevent);
                 end;// else
                 //comport.Write(writecard,16);
           end;
       2 : begin comport.Read(Re_Readcard,16);
          // memo1.Lines.Add(inttostr(Count));
                 if  CompareRe_ReadCard(Re_ReadCard,Re_ReadCard_Bak)then
                 begin
                     SetEvent(hevent);
                 end //else
                 //comport.Write(Readcard,16);
           end;
       3 : begin comport.Read(Re_EarseCard,16);
             //   memo1.Lines.Add(inttostr(Count));
                 if (Re_Earsecard_bak.card_k = 256) or (Re_Earsecard_bak.card_k = 255) then
                 begin
                   //  Re_Earsecard := Re_Earsecard_bak;
                 end;
                 if  compareRe_Earsecard(Re_Earsecard,Re_Earsecard_bak) then
                 begin
                     SetEvent(hevent);
                     Memo1.Lines.Add('擦卡成功第'+inttostr(Earsecard.card_k)+'块');

                 end //else
                // comport.Write(Earsecard,16);
           end;
       4 : begin comport.Read(Re_stopsound,16);

                 if  CompareRe_stopsound(Re_stopsound,Re_stopsound_Bak) then
                 begin
                     setEvent(hevent);
                     Memo1.Lines.Add('停止放音!');

                 end else
                 begin
                //  comport.Write(stopsound,16);
                 end;
           end;
       5 : begin comport.Read(Re_opensound,16);
              //  memo1.Lines.Add(inttostr(Count));
                if  CompareRe_opensound(Re_opensound,Re_opensound_Bak) then
                 begin
                     SetEvent(hevent);
                     Memo1.Lines.Add('打开放音!');
                 end //else
                 //comport.Write(opnesound,16);
           end;
    end;
    end;

end;

procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
    WriteCard := GetWritecard(255,1);
    sendtype := 1;
    Re_writeCard_bak := GetRe_Writecard(255,1);
    ComPort.Write(writecard,16);
end;

end.

⌨️ 快捷键说明

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