📄 formmain.pas
字号:
unit FormMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Driver;
type
TfrmMain = class(TForm)
GroupBox1: TGroupBox;
btnSelectDevice: TButton;
labDeviceName: TLabel;
grpPWMConfiguration: TGroupBox;
chkPWMEnable0: TCheckBox;
chkPWMEnable1: TCheckBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
txtPeriod0: TEdit;
txtPeriod1: TEdit;
txtHiPeriod0: TEdit;
txtHiPeriod1: TEdit;
grpPluesOutCount: TGroupBox;
chkPluseEnable0: TCheckBox;
chkPluseEnable1: TCheckBox;
txtPluseCount0: TEdit;
txtPluseCount1: TEdit;
btnRun: TButton;
btnStop: TButton;
btnExit: TButton;
procedure btnSelectDeviceClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure chkPWMEnable0Click(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure btnRunClick(Sender: TObject);
procedure btnStopClick(Sender: TObject);
procedure chkPluseEnable0Click(Sender: TObject);
procedure chkPluseEnable1Click(Sender: TObject);
procedure chkPWMEnable1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
lDeviceNum : Longint;
lDeviceHandle : Longint;
szDescription : array[0..81] of Char;
ErrorNum: Longint;
ptDevFeatures: DevFeatures; { structure for device features }
ptDevGetFeatures: PT_DeviceGetFeatures;
ptCounterPWMSetting: PT_CounterPWMSetting;
end;
var
frmMain: TfrmMain;
implementation
{$R *.DFM}
{*************************************************************
* Function: Handle the error code. If the input error code > 0,
* it means some error apperent. This function can
* show the error message to a message box and stop
* this application.
* Input: The error code.
* return: none
************************************************************* }
Function DoesErr(var lErrCode: LongInt): integer;
var
szErrMsg : string[100];
pszErrMsg : PChar;
begin
{Check the pressed error code}
If (lErrCode <> 0) Then
Begin
pszErrMsg := @szErrMsg;
DRV_GetErrorMessage(lErrCode, pszErrMsg);
Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
DoesErr := 1;
End
Else
DoesErr := 0;
end;
procedure TfrmMain.btnSelectDeviceClick(Sender: TObject);
begin
DRV_SelectDevice(Handle, True, lDeviceNum, szDescription);
labDeviceName.Caption := szDescription;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
DRV_SelectDevice(Handle, True, lDeviceNum, szDescription);
labDeviceName.Caption := szDescription;
end;
procedure TfrmMain.chkPWMEnable0Click(Sender: TObject);
begin
If chkPWMEnable0.Checked Then
Begin
txtPeriod0.Enabled := True;
txtHiPeriod0.Enabled := True;
End
Else
Begin
txtPeriod0.Enabled := False;
txtHiPeriod0.Enabled := False;
End
end;
procedure TfrmMain.chkPWMEnable1Click(Sender: TObject);
begin
If chkPWMEnable1.Checked Then
Begin
txtPeriod1.Enabled := True;
txtHiPeriod1.Enabled := True;
End
Else
Begin
txtPeriod1.Enabled := False;
txtHiPeriod1.Enabled := False;
End
end;
procedure TfrmMain.btnExitClick(Sender: TObject);
begin
Close;
end;
procedure TfrmMain.btnRunClick(Sender: TObject);
var
code: Integer;
begin
ErrorNum := DRV_DeviceOpen(lDeviceNum, lDeviceHandle);
If ( DoesErr(ErrorNum) = 1 ) Then
Exit;
ptDevGetFeatures.buffer := @ptDevFeatures;
ptDevGetFeatures.size := sizeof(ptDevFeatures);
ErrorNum := DRV_DeviceGetFeatures(lDeviceHandle, ptDevGetFeatures);
If ( DoesErr(ErrorNum) = 1 ) Then
Begin
DRV_DeviceClose(lDeviceHandle);
Exit;
End;
{ check number of counter channels }
If ptDevFeatures.usMaxTimerChl = 0 Then
Begin
MessageBox(Handle, 'No Counter Channel', 'Driver Message', IDOK);
DRV_DeviceClose(lDeviceHandle);
Exit;
End;
{ Enable channel 0 PWM }
If chkPWMEnable0.Checked Then
Begin
ptCounterPWMSetting.Port := 0;
Val(txtPeriod0.Text, ptCounterPWMSetting.Period, code);
Val(txtHiPeriod0.Text, ptCounterPWMSetting.HiPeriod, code);
ptCounterPWMSetting.GateMode := 0;
If chkPluseEnable0.Checked Then
Val(txtPluseCount0.Text, ptCounterPWMSetting.OutCount, code)
Else
ptCounterPWMSetting.OutCount := 0;
ErrorNum := DRV_CounterPWMSetting(lDeviceHandle, ptCounterPWMSetting);
If ( DoesErr(ErrorNum) = 1 ) Then
Begin
DRV_DeviceClose(lDeviceHandle);
Exit
End;
End;
{ Enable channel 1 PWM }
If chkPWMEnable1.Checked Then
Begin
ptCounterPWMSetting.Port := 1;
Val(txtPeriod1.Text, ptCounterPWMSetting.Period, code);
Val(txtHiPeriod1.Text, ptCounterPWMSetting.HiPeriod, code);
ptCounterPWMSetting.GateMode := 0;
If chkPluseEnable1.Checked Then
Val(txtPluseCount1.Text, ptCounterPWMSetting.OutCount, code)
Else
ptCounterPWMSetting.OutCount := 0;
ErrorNum := DRV_CounterPWMSetting(lDeviceHandle, ptCounterPWMSetting);
If ( DoesErr(ErrorNum) = 1 ) Then
Begin
DRV_DeviceClose(lDeviceHandle);
Exit
End;
End;
{ Start Channel 0 PWM }
If chkPWMEnable0.Checked Then
Begin
ErrorNum := DRV_CounterPWMEnable(lDeviceHandle, 1);
If ( DoesErr(ErrorNum) = 1 ) Then
Begin
DRV_DeviceClose(lDeviceHandle);
Exit;
End;
End;
{ Start Channel 1 PWM }
If chkPWMEnable1.Checked Then
Begin
ErrorNum := DRV_CounterPWMEnable(lDeviceHandle, 2);
If ( DoesErr(ErrorNum) = 1 ) Then
Begin
DRV_DeviceClose(lDeviceHandle);
Exit;
End;
End;
grpPWMConfiguration.Enabled := False;
grpPluesOutCount.Enabled := False;
btnRun.Enabled := False;
btnStop.Enabled := True;
btnExit.Enabled := False;
end;
procedure TfrmMain.btnStopClick(Sender: TObject);
begin
{ Stop Channel 0 PWM }
If chkPWMEnable0.Checked Then
ErrorNum := DRV_CounterReset(lDeviceHandle, 1);
{ Stop Channel 1 PWM }
If chkPWMEnable1.Checked Then
ErrorNum := DRV_CounterReset(lDeviceHandle, 2);
DRV_DeviceClose(lDeviceHandle);
grpPWMConfiguration.Enabled := True;
grpPluesOutCount.Enabled := True;
btnRun.Enabled := True;
btnStop.Enabled := False;
btnExit.Enabled := True;
end;
procedure TfrmMain.chkPluseEnable0Click(Sender: TObject);
begin
If chkPluseEnable0.Checked Then
txtPluseCount0.Enabled := True
Else
txtPluseCount0.Enabled := False;
end;
procedure TfrmMain.chkPluseEnable1Click(Sender: TObject);
begin
If chkPluseEnable1.Checked Then
txtPluseCount1.Enabled := True
Else
txtPluseCount1.Enabled := False;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -