?? mscomm.txt
字號:
//Delphi+MSComm控件串口收發程序
//HotPower@126.com
procedure TForm1.FormCreate(Sender: TObject);
begin
if MSComm1.PortOpen then MSComm1.PortOpen := false;//關閉端口
MSComm1.CommPort := 2;//設置端口2
MSComm1.InBufferSize := 256;//設置接收緩沖區為256個字節
MSComm1.OutBufferSize := 256;//設置發送緩沖區為256個字節
MSComm1.Settings := '9600,n,8,1';//9600波特率,無校驗,8位數據位,1位停止位
MSComm1.InputLen := 32;//讀取緩沖區全部內容(32個字節)
MSComm1.InBufferCount := 0;// 清除接收緩沖區
MSComm1.OutBufferCount:=0;// 清除發送緩沖區
MSComm1.RThreshold := 32;//設置接收32個字節產生OnComm 事件
// MSComm1.InputMode := comInputModeText;//文本方式
MSComm1.InputMode := comInputModeBinary;//二進制方式
MSComm1.PortOpen := true;//打開端口
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if MSComm1.PortOpen then MSComm1.PortOpen := false;;//關閉端口
end;
procedure TForm1.MSComm1Comm(Sender: TObject);
var
buffer: Olevariant;//MSComm1.InputMode = comInputModeBinary
str: string;//MSComm1.InputMode = comInputModeText
i: integer;
begin
case MSComm1.CommEvent of
comEvReceive: //串行接收事件處理
begin
if MSComm1.InputMode = comInputModeText then //字符方式讀取
str := MSComm1.Input//讀出后會自動清除接收緩沖區,str[1]~str[32]
else //二進制方式讀取
buffer := MSComm1.Input;//讀出后會自動清除接收緩沖區,buffer[0]~buffer[31]
Edit3.Text := '';
for i := 0 to MSComm1.RThreshold - 1 do //32字節Hex轉換
begin
if MSComm1.InputMode = comInputModeText then //單行字符轉換
Edit3.Text := Edit3.Text + inttohex(byte(str[i + 1]), 2) + ' '
else //單行二進制數據轉換
Edit3.Text := Edit3.Text + inttohex(buffer[i], 2) + ' ';
end;
Memo2.Lines.Add(Edit3.Text);//加入一行顯示
end;
end;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i: integer;
begin
Edit4.Text := '';
for i := 0 to 31 do
begin
MSComm1.Output := char(i);//發送一個字符
Edit4.Text := Edit4.Text + inttohex(i, 2);//以十六進制字符顯示
end;
Memo1.Lines.Add(Edit4.Text);//加入一行顯示
end;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -