?? unit1.cpp
字號:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void TForm1::BuildTable16( unsigned short aPoly )
{
unsigned short i, j;
unsigned short nData;
unsigned short nAccum;
for ( i = 0; i < 256; i++ )
{
nData = ( unsigned short )( i << 8 );
nAccum = 0;
for ( j = 0; j < 8; j++ )
{
if ( ( nData ^ nAccum ) & 0x8000 )
nAccum = ( nAccum << 1 ) ^ aPoly;
else
nAccum <<= 1;
nData <<= 1;
}
Table_CRC[i] = ( unsigned long )nAccum;
}
}
//---------------------------------------------------------------------------
/*-------------------------------------
CRC-16 或 CRC-CCITT校驗
Input:
*aData --被校驗數據地址指針
aSize --數據長度
Output:
nAccum --CRC校驗碼
-------------------------------------*/
unsigned short TForm1::CRC_16( unsigned char * aData, unsigned long aSize )
{
const unsigned short cnCRC_16 = 0x8005;
unsigned long i;
unsigned short nAccum = 0;
BuildTable16( cnCRC_16 ); // or cnCRC_CCITT
for ( i = 0; i < aSize; i++ )
nAccum = ( nAccum << 8 ) ^ ( unsigned short )Table_CRC[( nAccum >> 8 ) ^ *aData++];
return nAccum;
}
//---------------------------------------------------------------------------
void TForm1::opencom()
{
char *ComNo;
String Temp;
Temp = "COM"+IntToStr(ComboBox1->ItemIndex+1);
ComNo = Temp.c_str();
hComm = CreateFile(ComNo,GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, 0);
if (hComm == INVALID_HANDLE_VALUE)
{
ShowMessage("未發現此串口或已被占用!!");
BitBtn2->Enabled=0;
BitBtn1->Enabled=1;
return;
}
GetCommState(hComm,&dcb);
dcb.BaudRate = bt;
dcb.ByteSize = sj;
dcb.Parity = jy;
dcb.StopBits = tz;
if (!SetCommState(hComm, &dcb))
{
ShowMessage ("通信端口設置錯誤!!!");
CloseHandle(hComm);
BitBtn2->Enabled=0;
BitBtn1->Enabled=1;
return;
}
Label12->Caption="串口打開";
BitBtn2->Enabled=1;
BitBtn1->Enabled=0;
}
//---------------------------------------------------------------------------
char TForm1::HexChar(char ch)
{
if((ch>='0')&&(ch<='9'))
return ch-0x30;
else if((ch>='A')&&(ch<='F'))
return ch-'A'+10;
else if((ch>='a')&&(ch<='f'))
return ch-'a'+10;
else return 0x10;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
//TForm1 *form=new TForm1(Application); //系統登陸模塊
//form->ShowModal();
ComboBox1->ItemIndex=0;
ComboBox2->ItemIndex=5;
ComboBox3->ItemIndex=0;
ComboBox4->ItemIndex=0;
ComboBox5->ItemIndex=0;
/* DateTimePicker1->Date=DateTimePicker1->Date.CurrentDate();
DateTimePicker2->Date=DateTimePicker2->Date.CurrentDate();
DateTimePicker3->Date=DateTimePicker3->Date.CurrentDate();
DateTimePicker4->Date=DateTimePicker4->Date.CurrentDate();
DateTimePicker5->Date=DateTimePicker5->Date.CurrentDate();
DateTimePicker6->Date=DateTimePicker6->Date.CurrentDate();
DateTimePicker7->Date=DateTimePicker7->Date.CurrentDate();*/
String Temp;
char *ComNo;
bt=CBR_4800;
sj=8;
jy=NOPARITY;
tz=ONESTOPBIT;
opencom();
flagA="0";
//delete form;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
opencom();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
CloseHandle(hComm);
Label12->Caption="串口關閉";
BitBtn2->Enabled=0;
BitBtn1->Enabled=1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
if(BitBtn1->Enabled==0)
{
CloseHandle(hComm);
opencom();
}
else
{
opencom();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox2Change(TObject *Sender)
{
switch(ComboBox2->ItemIndex)
{case 0:bt=CBR_110;break;
case 1:bt=CBR_300;break;
case 2:bt=CBR_600;break;
case 3:bt=CBR_1200;break;
case 4:bt=CBR_2400;break;
case 5:bt=CBR_4800;break;
case 6:bt=CBR_9600;break;
case 7:bt=CBR_19200;break;
case 8:bt=CBR_38400;break;
case 9:bt=CBR_56000;break;
case 10:bt=CBR_57600;break;
case 11:bt=CBR_115200;break;
case 12:bt=CBR_128000;break;
}
if(BitBtn1->Enabled==0)
{
CloseHandle(hComm);
opencom();
}
else
{
opencom();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox3Change(TObject *Sender)
{
switch(ComboBox3->ItemIndex)
{
case 0:jy=NOPARITY;break;
case 1:jy=ODDPARITY;break;
case 2:jy=EVENPARITY;break;
}
if(BitBtn1->Enabled==0)
{
CloseHandle(hComm);
opencom();
}
else
{
opencom();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox4Change(TObject *Sender)
{
switch(ComboBox3->ItemIndex)
{ case 0:sj=8;break;
case 1:sj=7;break;
case 2:sj=6;break;
case 3:sj=5;break;
}
if(BitBtn1->Enabled==0)
{
CloseHandle(hComm);
opencom();
}
else
{
opencom();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox5Change(TObject *Sender)
{
switch(ComboBox1->ItemIndex)
{
case 0:tz=ONESTOPBIT;break;
case 1:tz=TWOSTOPBITS;break;
}
if(BitBtn1->Enabled==0)
{
CloseHandle(hComm);
opencom();
}
else
{
opencom();
}
}
//---------------------------------------------------------------------------
void TForm1::senddata(String s)
{
Memo2->Text="";
Memo1->Text="";
Memo1->Text=s;
String Temp,T;
Temp="";
unsigned long lrc,BS;
int length,t,t1,k,ln;
char *SendData,l,h;
int rlen=0,len=tex16.Length();
if (hComm==0)
return;
if (!ChB2->Checked)
{
Temp = s;
SendData = Temp.c_str();
BS = Temp.Length();
WriteFile(hComm,SendData,BS, &lrc,NULL);
}
if (ChB2->Checked)
{
for(int i=1;i<=len;)
{
h=tex16[i];
if(h==' ')
{
i++;
continue;
}
if(i>=len) break;
for(int k=i+1;k<=len;)
{
if (tex16[k]==' ')
{
k++;
continue;
}
l=tex16[k];
t=HexChar(h);
t1=HexChar(l);
if((t==16)||(t1==16))
break;
t=t*16+t1;
i=k+1;
rlen++;
data[rlen]=(char)t;
break;
}
}
if(ChB3->Checked)
{
for(int j=0;j<=rlen-1;j++)
{
buf[j]=data[j+1];
}
length=CRC_16(buf,rlen);
T=IntToHex(length,4);
Edit2->Text=T;
for(int i=1;i<=4;)
{
h=T[i];
for(int k=i+1;k<=4;)
{
l=T[k];
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -