亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

Delphi中串口通信的實現

2019-11-18 18:51:04
字體:
來源:轉載
供稿:網友
Delphi是一種具有功能強大、簡便易用和代碼執行速度快等優點的可視化快速應用開發工具,它在構架企業信息系統方面發揮著越來越重要的作用,許多程序員愿意選擇 Delphi作為開發工具編制各種應用程序。但是,美中不足之處是 Delphi沒有自帶的串口通信控件,在它的幫助文檔里也沒有提及串口通信,這就給編制通信程序的開發人員帶來許多不便?!?BR>
目前,利用 Delphi實現串口通信的常用的方法有 3種:一是利用控件,如 MSCOMM控件和 SPCOMM控件;二是使用 API函數;三是調用其他串口通信程序。其中利用 API編寫串口通信程序較為復雜,需要掌握大量的通信知識。相比較而言,利用 SPCOMM控件則相對較簡單,并且該控件具有豐富的與串口通信密切相關的屬性及事件,提供了對串口的各種操作,而且還支持多線程。下面本文結合實例詳細介紹 SPCOMM控件的使用。 

SPCOMM的安裝 

1.選擇下拉菜單 Component中的 Install Component選項,在 Unit file name處填寫 SPCOMM控件所在的路徑,其他各項可用默認值,點擊 OK按鈕?!?BR>
2.安裝后,在 System控件面板中將出現一個紅色控件 COM?,F在就可以像 Delphi自帶控件一樣使用 COM控件了。 

SPCOMM的屬性、方法和事件 

1.屬性 

●CommName:表示 COM1、 COM2等串口的名字; 

●BaudRate:根據實際需要設定的波特率,在串口打開后也可更改此值,實際波特率隨之更改; 

●ParityCheck:表示是否需要奇偶校驗; 

●ByteSize:根據實際情況設定的字節長度; 

●Parity:奇偶校驗位; 

●StopBits:停止位; 

●SendDataEmpty:這是一個布爾型屬性,為 true時表示發送緩存為空,或者發送隊列里沒有信息;為 false時表示發送緩存不為空,或者發送隊列里有信息?!?BR>
2.方法 

●Startcomm方法用于打開串口,當打開失敗時通常會報錯。錯誤主要有 7種:⑴串口已經打開;⑵打開串口錯誤;⑶文件句柄不是通信句柄;⑷不能夠安裝通信緩存;⑸不能產生事件;⑹不能產生讀進程;⑺不能產生寫進程; 

●StopComm方法用于關閉串口,沒有返回值; 

●WriteCommData(pDataToWrite: PChar;dwSizeofDataToWrite:Word )方法是個帶有布爾型返回值的函數,用于將一個字符串發送到寫進程,發送成功返回 true,發送失敗返回 false。執行此函數將立即得到返回值,發送操作隨后執行。該函數有兩個參數,其中 pDataToWrite是要發送的字符串, dwSizeofDataToWrite是發送字符串的長度?!?BR>
3.事件 

●OnReceiveData :PRocedure (Sender: TObject;Buffer: Pointer;BufferLength: Word) of object 

當有數據輸入緩存時將觸發該事件,在這里可以對從串口收到的數據進行處理。 Buffer中是收到的數據, BufferLength是收到的數據長度?!?BR>
●OnReceiveError : procedure(Sender: TObject; EventMask : DWORD) 

當接收數據出現錯誤時將觸發該事件?!?BR>
SPCOMM的使用 

下面是一個利用 SPCOMM控件的串口通信的例子?!?BR>
以實現 PC機與單片機 8051之間的通信為例,首先要調通它們之間的握手信號。假定它們之間的通信協議是: PC到 8051一幀數據 6個字節, 8051到 PC一幀數據也為 6個字節。當 PC發出( F0,01,FF,FF,01,F0)后 8051能收到一幀( F0,01,FF,FF,01,F0),表示數據通信握手成功,兩者之間就可以按照協議相互傳輸數據。 

創建一個新的工程 COMM.DPR,把窗體的 NAME屬性定為 FCOMM,把窗體的標題定義為測試通信,添加相應的控件。

1.設定 COMM1屬性: 

●波特率: 4800; 

●奇偶校驗位:無; 

●字節長度: 8; 

●停止位: 1; 

●串口: COM1?!?BR>
Memo1中將顯示發送和接收的數據。將新的窗體存儲為 Comm.pas?!?BR>
2.編寫源代碼 

//變量說明 

var 

fcomm: TFCOMM; 

viewstring:string; 

i:integer; 

rbuf,sbuf:array[16] of byte; 

//打開串口 

procedure TFCOMM.FormShow(Sender: TObject); 

begin 

comm1.StartComm; 

end; 

//關閉串口 

procedure TFCOMM.FormClose(Sender: TObject; var Action: TCloseAction); 

begin 

comm1.StopComm; 

end; 

//自定義發送數據過程 

procedure senddata; 

var 

i:integer; 

commflg:boolean; 

begin 

viewstring:=‘’ ; 

commflg:=true; 

for i:=1 to 6 do 

begin 

if not fcomm.comm1.writecommdata(@sbuf[i],1) then 

begin 

commflg:=false; 

break; 

end; 

//發送時字節間的延時 

sleep(2); 

viewstring:=viewstring+ inttohex(sbuf[i],2)+‘’ ; end; 

viewstring:=‘發送’+ viewstring; 

fcomm.memo1.lines.add(viewstring); 

fcomm.memo1.lines.add(‘’ ); 

if not commflg then messagedlg(‘發送失敗 !’ ,mterror,[mbyes],0); 

end; 

//發送按鈕的點擊事件 

procedure TFCOMM.Btn_sendClick(Sender: TObject); 

begin 

sbuf[1]:=byte($ f0); //幀頭 

sbuf[2]:=byte($ 01); //命令號 

sbuf[3]:=byte($ ff); 

sbuf[4]:=byte($ ff); 

sbuf[5]:=byte($ 01); 

sbuf[6]:=byte($ f0); //幀尾 

senddata;//調用發送函數 

end; 

//接收過程 

procedure TFCOMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word); 

var 

i:integer; 

begin 

viewstring:=‘’ ; 

move(buffer^,pchar(@rbuf^),bufferlength); 

for i:=1 to bufferlength do 

viewstring:=viewstring+ inttohex(rbuf[i],2)+‘’ ; 

viewstring:=‘接收’+ viewstring; 

memo1.lines.add(viewstring); 

memo1.lines.add(‘’ ); 

end; 

如果 memo1上顯示發送 F0 01 FF FF 01 F0和接收到 F0 01 FF FF 01 F0,這表示串口已正確地發送出數據并正確地接收到數據,則串口通信成功。

上一篇:Delphi的TRegistry注冊表類方法詳解

下一篇:在DELPHI程序中自動設置ODBC數據源

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品偷拍各种wc美女嘘嘘| 成人免费网视频| 日韩欧美在线字幕| 久久久精品国产| 欧美精品videos| 亚洲xxxx做受欧美| 国产精品美女免费看| 日韩在线观看免费高清| 亚洲国产99精品国自产| 97超级碰在线看视频免费在线看| 日韩中文字幕视频在线观看| 久久91亚洲精品中文字幕| 欧美自拍大量在线观看| 有码中文亚洲精品| 亚洲一区二区三区视频| 黄色91在线观看| 亚洲天堂免费观看| 日韩国产高清污视频在线观看| 日韩美女毛茸茸| 久久97久久97精品免视看| 欧美精品久久久久久久久| 亚洲欧洲偷拍精品| 国产精品一区二区三区久久| 68精品国产免费久久久久久婷婷| 欧美视频国产精品| 96精品视频在线| 欧美一区二区大胆人体摄影专业网站| 国产69久久精品成人看| 中文字幕国产日韩| 亚洲天堂男人的天堂| 国产深夜精品福利| 亚洲自拍偷拍视频| 欧美另类交人妖| 亚洲精品理论电影| 亚洲国产精品久久精品怡红院| 国产mv久久久| 高清一区二区三区四区五区| 欧美大全免费观看电视剧大泉洋| 国产一区二区三区网站| 性亚洲最疯狂xxxx高清| 国产精品视频yy9099| 亚洲欧洲美洲在线综合| 国内精品一区二区三区| 欧美疯狂做受xxxx高潮| 国产欧美婷婷中文| 国产精品专区一| 欧美日韩美女视频| 国产精品视频地址| 91精品国产综合久久香蕉的用户体验| 自拍偷拍亚洲欧美| 亚洲精品www久久久久久广东| 韩国精品美女www爽爽爽视频| 久久久在线观看| 久久久国产视频| 亚洲欧美国产精品久久久久久久| 亚洲男女自偷自拍图片另类| 欧美视频免费在线观看| 久久999免费视频| 日韩在线视频国产| 欧美激情第三页| 欧美在线观看网站| 91精品视频观看| 九九视频直播综合网| 欧美性猛交xxxx乱大交极品| 中文字幕亚洲字幕| 色综合久久精品亚洲国产| 国产欧美一区二区三区四区| 日韩在线视频观看正片免费网站| 久久精品99无色码中文字幕| 久久久久久久久久av| 日韩电影中文字幕| 日韩黄色高清视频| 亚洲欧洲免费视频| 亚洲自拍偷拍福利| 欧美伊久线香蕉线新在线| 亚洲伦理中文字幕| 亚洲免费伊人电影在线观看av| 91精品国产色综合久久不卡98口| 久久精品视频中文字幕| 久久视频在线免费观看| 亚洲欧美日韩精品久久奇米色影视| 欧美日韩国产在线播放| 国产精品中文在线| 午夜精品理论片| 在线亚洲国产精品网| 亚洲女人被黑人巨大进入al| 91九色国产社区在线观看| 亚洲一区二区久久| 精品五月天久久| 欧美亚洲成人xxx| 久久91亚洲精品中文字幕奶水| 97涩涩爰在线观看亚洲| 亚洲精品国偷自产在线99热| 大伊人狠狠躁夜夜躁av一区| 欧美大肥婆大肥bbbbb| 国产一区欧美二区三区| 日本午夜精品理论片a级appf发布| 亚洲精品之草原avav久久| 91精品国产综合久久香蕉的用户体验| 中文字幕亚洲综合久久筱田步美| 日韩欧美国产高清91| 亚洲高清一二三区| 国产日韩欧美在线观看| 亚洲欧美制服中文字幕| 韩国精品美女www爽爽爽视频| 大桥未久av一区二区三区| 羞羞色国产精品| 91亚洲精品久久久久久久久久久久| 亚洲国产私拍精品国模在线观看| 国产精品三级久久久久久电影| 亚洲美女在线看| 国产精品亚洲综合天堂夜夜| 国产精品美女www爽爽爽视频| 免费不卡欧美自拍视频| 国产午夜精品久久久| 久久久影视精品| 久久精品国产一区二区三区| 国产精品青草久久久久福利99| 精品久久久91| 国产精品99蜜臀久久不卡二区| 欧美高清理论片| 日韩成人小视频| 人体精品一二三区| 69av视频在线播放| 国产精品白嫩美女在线观看| 国产精品入口日韩视频大尺度| 日韩中文字幕免费看| 欧美性xxxxx极品| 久久九九全国免费精品观看| 夜夜躁日日躁狠狠久久88av| 欧美在线观看网址综合| 国产精品99蜜臀久久不卡二区| 亚洲欧洲日产国码av系列天堂| 一二美女精品欧洲| 国产欧美精品一区二区| 日韩黄色在线免费观看| 成人精品一区二区三区电影黑人| 久久国产精品影视| 国产精品草莓在线免费观看| 午夜精品一区二区三区在线视频| 久久久噜噜噜久噜久久| 欧美大肥婆大肥bbbbb| 国产精品夫妻激情| 欧美日韩性视频| 丝袜情趣国产精品| 日韩视频在线观看免费| 国产精品久久一区| 精品免费在线观看| 欧美日韩999| 欧美日韩福利视频| 精品亚洲va在线va天堂资源站| 亚洲天堂av在线免费| 51午夜精品视频| 欧美国产亚洲视频| 国产精品aaa| 中文字幕免费精品一区| 日韩av电影中文字幕| 欧美日韩精品在线播放| 日韩资源在线观看| 久久久久中文字幕2018| 国产精品扒开腿做| 国产精品一香蕉国产线看观看| 日韩在线观看免费| www日韩中文字幕在线看|