DELPHI 串口控制继电器


本文整理自网络,侵删。

 
串口编程...
1.条件:买一个40-~50元的继电器(支持5V电压之类);
2.动手:串口中的DTR针脚可以输出你需要的电压,你焊两根线,一跟连接诶tr(4号针脚),一跟连接地线(一般是五号针脚),然后你编程升高DTR的电位,就可以打开继电器(5V),降低就关闭;
3.代码说话:

给你个例子,串口编程控制诶tr和rts针脚电压,rts也可以输出一个5-8V的电压 

unit   Unit1; interface uses     Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,     StdCtrls,   ExtCtrls; type     TForm1   =   class(TForm)         rdCOM:   TRadioGroup;         Label1:   TLabel;         Label2:   TLabel;         btnOpenPort:   TButton;         btnEnd:   TButton;         spDTR:   TShape;         spRTS:   TShape;         btnDTR:   TButton;         btnRTS:   TButton;         procedure   btnOpenPortClick(Sender:   TObject);         procedure   btnEndClick(Sender:   TObject);         procedure   btnDTRClick(Sender:   TObject);         procedure   btnRTSClick(Sender:   TObject);         procedure   FormCreate(Sender:   TObject);     private         {   Private   declarations   }         DTRState:Boolean;         RTSState:Boolean;         DOValue:DWORD;     public         {   Public   declarations   }         procedure   OpenComm;     //打开通信端口     end; var     Form1:   TForm1;     hComm:   THandle; implementation {$R   *.DFM} //以下是打开通信端口的程序 procedure   TForm1.btnOpenPortClick(Sender:   TObject); begin //若通信端口已打开,则不需要再打开     if   (hComm <> 0)   then   begin         Messagedlg( '通信端口已打开,不需再开 ',mtError,[mbOK],0);         exit;     end;     OpenComm;   //打开通信端口的子程序     //先将DTR/RTS的电压降成低电压     EscapeCommFunction(   hComm,   CLRDTR);   //将DTR降为低电压     EscapeCommFunction(   hComm,   CLRRTS);   //将RTS降为低电压 end; //以下是打开通信端口的实际程序代码,采用API procedure   TForm1.OpenComm; var     cc:TCOMMCONFIG;   //定义通信组态变量     Temp:string; begin     //   选择所要打开的COM     Temp:= 'COM '+inttostr(rdcom.ItemIndex+1);     //   以Create函数打开COM     hComm:=CreateFile(PChar(Temp),   GENERIC_READ   or   GENERIC_WRITE,               0,   nil,   OPEN_EXISTING,   0,   0);     //   判断COM   是否顺利打开     if   (hComm   =   INVALID_HANDLE_VALUE)   then   begin         Messagedlg( '打开通信端口错误!! ',mtError,[mbOK],0);         exit;     end;     //以下设置通信端口的参数     GetCommState(hComm,cc.dcb);         //   得知目前COM   的状态     cc.dcb.BaudRate:=CBR_9600;           //   设置波特率为9600     cc.dcb.ByteSize:=8;                         //   字节为   8   bit     cc.dcb.Parity:=NOPARITY;               //   Parity   为   None     cc.dcb.StopBits:=ONESTOPBIT;       //   1   个Stop   bit     //若分别控制DTR、RTS,必须不能激活HandShaking     cc.dcb.Flags:=1;     //此动作可关闭HandShaking等设置     //以下将通信端口参数写入实际硬件     if   not   SetCommState(hComm,   cc.dcb)   then   begin   //   设置COM   的状态         MessageBox   (0,   '通信端口设置错误!!! ', ' ',MB_OK);         CloseHandle(hComm);         exit;     end; end; //以下是结束按钮的动作 procedure   TForm1.btnEndClick(Sender:   TObject); begin       CloseHandle(hComm);         //关闭通信端口       close;                                   //结束程序 end; //以下是控制DTR状态的按钮程序 procedure   TForm1.btnDTRClick(Sender:   TObject); begin         //若通信端口未打开,则不作动作,并跳出         if   (hComm=0)   then   begin               Messagedlg( '通信端口未打开!! ',mtError,[mbOK],0);               exit;         end;         //判断DTRState值,输出状态后,将原值作转态         if   DTRState   then             begin               DOValue:=CLRDTR;   //设置DTR为低电压               EscapeCommFunction(   hComm,   DOValue   );//输出DTR状态               spDTR.Brush.Color:=clWhite;   //变更灯号的颜色             end         else             begin               DOValue:=SETDTR;   //设置DTR为高电压               EscapeCommFunction(   hComm,   DOValue   );//输出DTR的状态               spDTR.Brush.Color:=clRed;   //变更灯号的颜色             end;         DTRState:=(not   DTRState);   //将DTRState转态 end; //以下是控制RTS状态的按钮程序 procedure   TForm1.btnRTSClick(Sender:   TObject); begin         //若通信端口未打开,则不作动作,并跳出         if   (hComm=0)   then   begin               Messagedlg( '通信端口未打开!! ',mtError,[mbOK],0);               exit;         end;         //判断RTSState值,输出状态后,将原值作转态         if   RTSState   then             begin               DOValue:=CLRRTS;   //设置RTS为低电压               EscapeCommFunction(   hComm,   DOValue   );//输出RTS状态               spRTS.Brush.Color:=$FFFFFF;//变更灯号             end         else             begin               DOValue:=SETRTS;   //设置RTS为高电压               EscapeCommFunction(   hComm,   DOValue   );//输出RTS状态               spRTS.Brush.Color:=$00FF00;//变更灯号             end;         RTSState:=(not   RTSState);   //将RTSState转态 end; //窗体建立时的初值设置 procedure   TForm1.FormCreate(Sender:   TObject); begin     RTSState:=False;   //默认是低电压     DTRState:=False;   //默认是低电压 end; end. 
 
 

相关阅读 >>

Delphi 实现qq窗体的缩入伸出功能

Delphi 7zip 示例调用7z.dll 压缩及解压.7z文件

Delphi system.net.httpclient 下载

Delphi cardpanel1 简单的切换

Delphi通过post传递参数给php

Delphi控制面板应用大全

Delphi里label显示多行文本的两种方法

Delphi编程之显示桌面分辨率

Delphi ado组件动态连接access数据库

Delphi xml解析、使用treeview呈现效果

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...