⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readcarddlg.cpp

📁 不用控制器,对读卡头进行读写.可设置根据读卡器类型不同而进行长度的设置
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    serial.Setup(CSerial::EBaud19200,CSerial::EData8,CSerial::EParEven,CSerial::EStop1);
	SetDlgItemText(IDC_SNDDATA,OutBuffer);
    length=strlen(tmp);
	Ret=serial.Write(tmp,length,0,0,10);
	if (Ret!=ERROR_SUCCESS)
	{
		serial.Close();
		CString errcode;
		errcode.Format("写数据到串口失败.errcode=%d",Ret);		
		MessageBox(errcode);
		return;
	}  
	whil=serial.WaitEvent (0,180);
	if (whil==0)
	 {
		memset(tmp,0x00,sizeof(tmp));
		Sleep(50);
		Ret=serial.Read(tmp,length+10,0,0,10);   //取返回信息
		Sleep(50);
		length=strlen(tmp);
		if (Ret!=ERROR_SUCCESS)
		{
			CString errcode;
			errcode.Format("读取串口数据失败.errcode=%d",Ret);		
			MessageBox(errcode);
			return;
		}
		if (length > 7  )
		{
			char card[18];
			memset(card,0,sizeof(card));
			memcpy(card,&tmp[4],8);
    		SetDlgItemText(IDC_EDIT1,card);//取要设置的读卡器ID号 
			(CButton *)GetDlgItem(IDC_BTN)->EnableWindow();
			readcard=FALSE;
		}	
	 }
	else
	{
			CString errcode;
			errcode.Format("等待串口数据失败.errcode=%d",whil);		
			MessageBox(errcode);
	}
	}
	else
	{
			CString errcode;
			errcode.Format("打开串口失败.errcode=%d",Ret);		
			MessageBox(errcode);			
	}
	serial.Close();
}

void CReadcardDlg::OnRRead() 
{
   //读卡
	CString port,OutBuffer;
	LONG Ret=0,whil=0,length=0,datalength=0;
	char bcc=0,tmp[50],*point;
	BOOL readcard=TRUE,mmt=((CButton *)GetDlgItem(IDC_MMT))->GetCheck();
	CSerial serial;
	memset(tmp,0x00,sizeof(tmp));
	GetDlgItemText(IDC_COM,port);
    Ret=serial.Open(_T(port));
	if (Ret ==ERROR_SUCCESS)
    {
    bcc=tmp[0]=9;
	if (!mmt)//普通头
	   tmp[1]='A';
	else    //密码头
       tmp[1]='H';
	GetDlgItemText(IDC_COMBO1,OutBuffer); //读卡器编号ID
	tmp[2]=OutBuffer[0];
	tmp[3]='G';
	for(int i=1;i<=3;i++)
		bcc^=tmp[i];
    if ((tmp[4] = (bcc&0xf0)>>4|0x30) > '9')
		tmp[4]+=7;
    if ((tmp[5] = (bcc&0x0f)|0x30) > '9')
		tmp[5]+=7;
	tmp[6]=0x0d;
	tmp[7]=0;
    OutBuffer.Format("09 %02x %02x %02x %02x %02x 0D",tmp[1],tmp[2],tmp[3],tmp[4],tmp[5]);
    serial.Setup(CSerial::EBaud19200,CSerial::EData8,CSerial::EParEven,CSerial::EStop1);
    SetDlgItemText(IDC_SNDDATA,OutBuffer);
    datalength=strlen(tmp);
	Ret=serial.Write(tmp,datalength,0,0,10);
	if (Ret!=ERROR_SUCCESS)
	{
		serial.Close();
		CString errcode;
		errcode.Format("写数据到串口失败.errcode=%d",Ret);		
		MessageBox(errcode);
		return;
	}  
	whil=serial.WaitEvent (0,180);
	if (whil==0)
	 {
        char lencard[2];
		GetDlgItemText(IDC_CARDLEN,OutBuffer);
		strcpy(lencard,OutBuffer);
		memset(tmp,0x00,sizeof(tmp));
		Sleep(50);
		Ret=serial.Read(tmp,30,0,0,10);   //取返回信息
		Sleep(50);
		length=0;
		while (tmp[length]!=0)
		{
			if(tmp[length]==13)
				break;
			else
			{
				if(tmp[length]>9)
					length++;
				else
					tmp[length]=0x00;
			}
		}
		if (Ret!=ERROR_SUCCESS)
		{
			CString errcode;
			errcode.Format("读取串口数据失败.errcode=%d",Ret);		
			MessageBox(errcode);
			return;
		}
		if (length > 8 && tmp[4]!='c')
		{
			
			char card[18];
			memset(card,0,sizeof(card));
			memcpy(card,&tmp[5],length-4-3);
			////////////////////////////////////////////////////////////////////////// 去前面为0的部份
			int sit=0;
			while (card[sit]=='0')
				sit++;
			memset(tmp,0x00,sizeof(tmp));
			strcpy(tmp,&card[sit]);
			strcpy(card,tmp);
			////////////////////////////////////////////////////////////////////////// 去前面为0的部份
			if(((CButton *)GetDlgItem(IDC_DCHK))->GetCheck()==true)
			{
				memset(tmp,0x00,sizeof(tmp));
				sprintf(tmp,"%lf",hextodec(card));
				point=strchr(tmp,'.');				
				sit=point-tmp;
				tmp[sit]=0x00;
				memcpy(card,tmp,sit+1);
				memcpy(card,tmp,sit);
			}
    		SetDlgItemText(IDC_CARDINFO,card);//取要设置的读卡器ID号 
		}	
	 }
	else
	{
			CString errcode;
			errcode.Format("等待串口数据失败.errcode=%d",whil);		
			MessageBox(errcode);
	}
	serial.Close();
	}
	else
	{
			CString errcode;
			errcode.Format("打开串口失败.errcode=%d",Ret);		
			MessageBox(errcode);
			return;
	}
}

void CReadcardDlg::OnBtnID() 
{
	//取读卡器的ID号
	CString port,OutBuffer;
	LONG Ret=0,whil=0,length=0,datalength=0;
	BOOL mmt=((CButton *)GetDlgItem(IDC_MMT))->GetCheck();
    char bcc=0,tmp[50];
	CSerial serial;
    GetDlgItemText(IDC_EDIT1,OutBuffer);
    if (OutBuffer.GetLength()>=8)
	{
	memset(tmp,0x00,sizeof(tmp));
	GetDlgItemText(IDC_COM,port);
    Ret=serial.Open(_T(port));
	if (Ret == ERROR_SUCCESS)
    {
    bcc=tmp[0]=9;
	if (!mmt)//普通头
	   tmp[1]='A';
	else    //密码头
       tmp[1]='H';
	tmp[2]='0';
	tmp[3]='D';
	for(int i=1;i<=3;i++)
		bcc^=tmp[i];

	GetDlgItemText(IDC_EDIT1,OutBuffer);
	memcpy(&tmp[4],OutBuffer,8);
	for(;i<8+4;i++)
		bcc^=OutBuffer[i-4];

    if ((tmp[12] = (bcc&0xf0)>>4|0x30) > '9')
		tmp[12]+=7;
    if ((tmp[13] = (bcc&0x0f)|0x30) > '9')
		tmp[13]+=7;
	tmp[14]=0x0d;
	tmp[15]=0x00;
    OutBuffer.Format("09 %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x 0D",tmp[1],tmp[2],tmp[3],
		tmp[4],tmp[5],tmp[6],tmp[7],tmp[8],tmp[9],tmp[10],tmp[11],tmp[12],tmp[13]);
	SetDlgItemText(IDC_SNDDATA,OutBuffer);
    datalength=strlen(tmp);
    serial.Setup(CSerial::EBaud19200,CSerial::EData8,CSerial::EParEven,CSerial::EStop1);
	Sleep(50);
	Ret=serial.Write(tmp,datalength,0,0,10);
	Sleep(50);
	if (Ret!=ERROR_SUCCESS)
	{
		serial.Close();
		CString errcode;
		errcode.Format("写数据到串口失败.errcode=%d",Ret);		
		MessageBox(errcode);
		return;
	}  
	whil=serial.WaitEvent (0,180);
	if (whil==0)
	 {
		int len=4+1+3;
		memset(tmp,0x00,sizeof(tmp));
		Sleep(50);
		Ret=serial.Read(tmp,len,0,0,10);   //取返回信息
		Sleep(50);
		length=strlen(tmp);
		if (Ret!=ERROR_SUCCESS)
		{
			CString errcode;
			errcode.Format("读取串口数据失败.errcode=%d",Ret);		
			MessageBox(errcode);
			return;
		}
		if (length > 4  )
		{
			char card[18];
			memset(card,0,sizeof(card));
			memcpy(card,&tmp[4],1);
    		SetDlgItemText(IDC_COMBO1,card);//取要设置的读卡器ID号 
		}	
	 }
	else
	{
			CString errcode;
			errcode.Format("等待串口数据失败.errcode=%d",whil);		
			MessageBox(errcode);
	}
	serial.Close();
	}
	else
	{
			CString errcode;
			errcode.Format("打开串口失败.errcode=%d",Ret);		
			MessageBox(errcode);
			return;
	}
	}
	else
	{
	MessageBox("请先读取读卡器模块编号!");
	}
}

void CReadcardDlg::OnButton4() 
{
	CString port,OutBuffer;
	LONG Ret=0,whil=0,length=0,datalength=0;
	BOOL mmt=((CButton *)GetDlgItem(IDC_MMT))->GetCheck();
    char bcc=0,tmp[50];
	CSerial serial;
    GetDlgItemText(IDC_EDIT1,OutBuffer);
    if (OutBuffer.GetLength()>=8)
	{
	memset(tmp,0x00,sizeof(tmp));
	GetDlgItemText(IDC_COM,port);
	Ret = serial.Open(_T(port));
	if (Ret == ERROR_SUCCESS)
	{
    bcc=tmp[0]=9;
	if (!mmt)//普通头
	   tmp[1]='A';
	else    //密码头
       tmp[1]='H';
	tmp[2]='0';
	tmp[3]='C';
	GetDlgItemText(IDC_EDIT1,OutBuffer);
	memcpy(&tmp[4],OutBuffer,8);
	GetDlgItemText(IDC_COMBO1,port);
	tmp[12]=port[0];

	for(int i=1;i<=3;i++)
		bcc^=tmp[i];

	for(;i<(OutBuffer.GetLength()+4);i++)
		bcc^=OutBuffer[i-4];
	bcc^=tmp[i];
    
    if ((tmp[13] = (bcc&0xf0)>>4|0x30) > '9')
		tmp[13]+=7;
    if ((tmp[14] = (bcc&0x0f)|0x30) > '9')
		tmp[14]+=7;
	tmp[15]=0x0d;
	tmp[16]=0x00;
    OutBuffer.Format("09 %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x 0D",tmp[1],tmp[2],tmp[3],
		tmp[4],tmp[5],tmp[6],tmp[7],tmp[8],tmp[9],tmp[10],tmp[11],tmp[12],tmp[13],tmp[14]);
	SetDlgItemText(IDC_SNDDATA,OutBuffer);
    serial.Setup(CSerial::EBaud19200,CSerial::EData8,CSerial::EParEven,CSerial::EStop1);
    datalength=strlen(tmp);
	Sleep(50);
	Ret=serial.Write(tmp,datalength,0,0,10);
	Sleep(50);
	if (Ret!=ERROR_SUCCESS)
	{
		serial.Close();
		CString errcode;
		errcode.Format("写数据到串口失败.errcode=%d",Ret);		
		MessageBox(errcode);
		return;
	}  
	whil=serial.WaitEvent (0,180);
	if (whil!=0)
	{
			CString errcode;
			errcode.Format("等待串口数据失败.errcode=%d",whil);		
			MessageBox(errcode);
	}
	serial.Close();
	}
	else
	{
			CString errcode;
			errcode.Format("打开串口失败.errcode=%d",Ret);		
			MessageBox(errcode);
			return;
	}
	}
	else
	{
		MessageBox("请输入读卡器模块编号!");
	}
}

/////////////////////////////////////////////

/////////////////////////////////////////////

void CReadcardDlg::OnButton5() 
{
    
	CString card,decstr;
	GetDlgItemText(IDC_CARDINFO,card);
	decstr.Format("%lf",hextodec(card.GetBuffer(0)));
	SetDlgItemText(IDC_CARDINFO,decstr);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -