|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
一個關(guān)于串口的疑問 |
| 作者:ewolf 欄目:技術(shù)交流 |
在DELPHI 7.0中調(diào)用MSCOMM控件,發(fā)送一個命令后本來預(yù)定是返回1個的,結(jié)果卻返回2個相同的!另一個肯定是多余的,只是看不出來哪里錯了?遇到過的朋友請給指點迷津一下,謝謝!! 以下是源代碼: unit SerialDebug; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, OleCtrls, MSCommLib_TLB; type TMainForm = class(TForm) mmReceive: TMemo; Panel2: TPanel; Panel1: TPanel; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label6: TLabel; cmbbxComNum: TComboBox; cmbbxBaud: TComboBox; cmbbxDataNum: TComboBox; cmbbxStopBit: TComboBox; cmbbxCheckBit: TComboBox; btnSerial: TButton; shpSerial: TShape; mmSend: TMemo; btnSend: TButton; chckbxHexSend: TCheckBox; chckbxTimer: TCheckBox; edtTime: TEdit; Label7: TLabel; MSComm: TMSComm; tmrSend: TTimer; btnClear: TButton; chckbxHexShow: TCheckBox; Panel3: TPanel; chckbxRTS: TCheckBox; chckbxDTR: TCheckBox; Label5: TLabel; Label8: TLabel; Label9: TLabel; shpDSR: TShape; shpCTS: TShape; shpCD: TShape; procedure FormCreate(Sender: TObject); procedure btnSerialClick(Sender: TObject); procedure chckbxDTRClick(Sender: TObject); procedure chckbxRTSClick(Sender: TObject); procedure chckbxTimerClick(Sender: TObject); procedure MSCommComm(Sender: TObject); procedure chckbxHexShowClick(Sender: TObject); procedure chckbxHexSendClick(Sender: TObject); procedure btnSendClick(Sender: TObject); procedure btnClearClick(Sender: TObject); procedure tmrSendTimer(Sender: TObject); procedure Panel2Click(Sender: TObject); private { Private declarations } HexShow:Boolean; HexSend:Boolean; public { Public declarations } end; var MainForm: TMainForm; implementation {$R *.dfm} //該函數(shù)接收1個 //轉(zhuǎn)換成功.輸出字符對應(yīng)的數(shù) //轉(zhuǎn)換失敗.輸出-1 function hex(c:CHAR):Integer ; var x:integer; begin if c=' ' then x:=0 else if (Ord(c)>=ord('0')) and (Ord(c)<=ord('9')) then x:=Ord(c)-Ord('0') else if (Ord(c)>=ord('a')) and (Ord(c)<=ord('f')) then x:=Ord(c)-Ord('a')+10 else if (Ord(c)>=ord('A')) and (Ord(c)<=ord('F')) then x:=Ord(c)-Ord('A')+10 else //輸入錯誤 x:=-1; Result:=x; end; //該函數(shù)接收1個至2個字符 //轉(zhuǎn)換成功.輸出對應(yīng)16進(jìn)制數(shù)的值 //轉(zhuǎn)換失敗.輸出-1。 function HexToInt(S:String): Integer; var tmpInt1,tmpInt2:Integer ; begin if Length(S)=1 then begin Result:=hex(S[1]); end else if Length(S)=2 then begin tmpInt1:=hex(S[1]); tmpInt2:=hex(S[2]); if (tmpInt1=-1) or (tmpInt2=-1) then Result:=-1 else Result:= tmpInt1*16+tmpInt2; end else //輸入錯誤,轉(zhuǎn)換失敗 Result:=-1; end; //程序的初始化 procedure TMainForm.FormCreate(Sender: TObject); begin HexShow:=False; cmbbxComNum.ItemIndex:=0; shpSerial.Brush.Color:=clWhite; shpCD.Brush.Color:=clWhite; shpCTS.Brush.Color:=clWhite; shpDSR.Brush.Color:=clWhite; Panel1.Enabled:=True; end; //打開或者關(guān)閉串口,并變換指示燈的狀態(tài) procedure TMainForm.btnSerialClick(Sender: TObject); var ComSetting:String; begin if not MSComm.PortOpen then begin //打開串口 MSComm.CommPort :=cmbbxComNum.ItemIndex +1; //默認(rèn)值為 '9600,N,8,1' ComSetting:=cmbbxBaud.Text; ComSetting:=ComSetting+','+cmbbxCheckBit.Text; ComSetting:=ComSetting+','+cmbbxDataNum.Text; ComSetting:=ComSetting+','+cmbbxStopBit.Text; MSComm.Settings:=ComSetting; MSComm.PortOpen:=True; //變換各個組件的狀態(tài) shpSerial.Brush.Color:=clRed; //指示燈變紅 Panel1.Enabled:=False; btnSerial.Caption :='關(guān)閉串口'; chckbxHexShow.Enabled:=False; end else begin //關(guān)閉串口 //變換各個組件的狀態(tài) MSComm.PortOpen:=False; shpSerial.Brush.Color:=clWhite;//指示燈變白 Panel1.Enabled:=True; btnSerial.Caption :='打開串口'; chckbxHexShow.Enabled:=True; end; end; //設(shè)置DTR線狀態(tài) procedure TMainForm.chckbxDTRClick(Sender: TObje |
| 2樓: | >>參與討論 |
| 作者: EthanSybil 于 2006/3/24 15:05:00 發(fā)布:
串口 這個不是delphi串口通信書上的例子么 沒試過,不知道 對了,你的delphi從哪下載的,我的安裝上怎么TMSComm控件不能用啊 方便請聯(lián)系qq21874126,謝謝 |
|
| 3樓: | >>參與討論 |
| 作者: ewolf 于 2006/3/25 16:44:00 發(fā)布:
你引用一下看看,應(yīng)該可以的 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |