有谁能够提供串口学习实例,帮助我学习了解串口编程,小弟在此谢过了!
解决方案 »
- (散分)祈祷:早点来电啊,从昨晚长沙河西这边就停电了,真TMD热,有时热的睡不着!
- 自考毕业设计(delphi)
- 双击DBGrid记录行时在DBGridDBLClick事件中弹出一个窗体,但是在双击标题行时并不触发这个dblClick事件,应该怎么写代码?
- 如何限制窗口移动?
- 怎样把用openDialog打开的文件名放到DataGrid中的FileName列里。(急!!!!)
- 哪有技术职称评定的软件、代码、资料(例如根据文章发表数、年龄、证书等评教授等职称)
- 请问DELPHI中有没有类似VFP中的宏代换命令(即&)?
- 音频和视频同时播放,怎样知道哪个后结束,且以该点延时5秒钟!
- GExperts和其它一些Delphi的插件哪有下载?GExperts.rog的官方网站我上不去
- 我需要帮助
- 百分相送!讨论一下关于网络监控问题
- [在线等]求教random()和Randomize;的用法
unit comdemou;
interface
uses
Windows, Messages, SysUtils, Classes,Graphics, Controls, Forms, Dialogs;const
Wm_commNotify=Wm_User+12;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
Procedure comminitialize;
Procedure MsgcommProcess(Var Message:Tmessage); Message Wm_commnotify;
{ Private declarations }
public
{ Public declarations }
end;//线程声明
TComm=Class(TThread)
protected
procedure Execute;override;
end;var
Form1: TForm1;
hcom,Post_Event:Thandle;
lpol:Poverlapped;
implementation{$R *.DFM}Procedure TComm.Execute; //线程执行过程
var
dwEvtMask:Dword;
Wait:Boolean;
Begin
fillchar(lpol,sizeof(toverlapped),0);
While True do Begin
dwEvtMask:=0;
Wait:=WaitCommEvent(hcom,dwevtmask,lpol);
//等待串行口事件;
if Wait Then Begin
waitforsingleobject(post_event,infinite);//等待同步事件置位;
resetevent(post_event); //同步事件复位;
PostMessage(Form1.Handle, WM_COMMNOTIFY,0,0);//发送消息;
end;
end;
end;procedure Tform1.comminitialize;
//串行口初始化
var
lpdcb:Tdcb;
Begin
hcom:=createfile('com2',generic_read or generic_write,0,nil,open_existing,
file_attribute_normal or file_flag_overlapped,0);//打开串行口
if hcom=invalid_handle_value then
else
setupcomm(hcom,4096,4096);//设置输入,输出缓冲区皆为4096字节
getcommstate(hcom,lpdcb);//获取串行口当前默认设置
lpdcb.baudrate:=2400;
lpdcb.StopBits:=1;
lpdcb.ByteSize:=8;
lpdcb.Parity:=EvenParity; //偶校验
Setcommstate(hcom,lpdcb);
setcommMask(hcom,ev_rxchar);//指定串行口事件为接收到字符;
end;Procedure TForm1.MsgcommProcess(Var Message:Tmessage);
var
Clear:Boolean;
Coms:Tcomstat;
cbNum,ReadNumber,lpErrors:Integer;
Read_Buffer:array[1..100]of char;
Begin
Clear:=Clearcommerror(hcom,lpErrors,@Coms);
if Clear Then Begin
cbNum:=Coms.cbInQue;
ReadFile(hCom,Read_Buffer,cbNum,ReadNumber,lpol);//处理接收数据
SetEvent(Post_Event);//同步事件置位
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
comminitialize;
post_event:=CreateEvent(nil,true,true,nil); //创建同步事件;
Tcomm.Create(False);
//创建串行口监视线程;
end;
end.