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

📄 t1302dlg.cpp

📁 WinCE平台下CAN总线收发数据程序
💻 CPP
字号:
// T1302Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "T1302.h"
#include "T1302Dlg.h"
#include "HT1302CE.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define  PORT1   0
#define  PORT2   1

HANDLE  hndCAN;                             //  CAN handle
CAN_A_MSG  CAN1, CAN2;                      //  CAN message
BYTE LoopSend[8]={0 , 1, 2 , 3 , 4 ,5 ,6 , 7};
/////////////////////////////////////////////////////////////////////////////
// CT1302Dlg dialog

CT1302Dlg::CT1302Dlg(CWnd* pParent /*=NULL*/)
	: CDialog(CT1302Dlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CT1302Dlg)
	m_SendByte1 = 0;
	m_SendByte2 = 0;
	m_SendByte3 = 0;
	m_SendByte4 = 0;
	m_SendByte5 = 0;
	m_SendByte6 = 0;
	m_SendByte7 = 0;
	m_SendByte8 = 0;
	m_ReceByte1 = 0;
	m_ReceByte2 = 0;
	m_ReceByte3 = 0;
	m_ReceByte4 = 0;
	m_ReceByte5 = 0;
	m_ReceByte6 = 0;
	m_ReceByte7 = 0;
	m_ReceByte8 = 0;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CT1302Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CT1302Dlg)
	DDX_Text(pDX, IDC_EDIT1, m_SendByte1);
	DDX_Text(pDX, IDC_EDIT2, m_SendByte2);
	DDX_Text(pDX, IDC_EDIT3, m_SendByte3);
	DDX_Text(pDX, IDC_EDIT4, m_SendByte4);
	DDX_Text(pDX, IDC_EDIT5, m_SendByte5);
	DDX_Text(pDX, IDC_EDIT6, m_SendByte6);
	DDX_Text(pDX, IDC_EDIT7, m_SendByte7);
	DDX_Text(pDX, IDC_EDIT8, m_SendByte8);
	DDX_Text(pDX, IDC_EDIT9, m_ReceByte1);
	DDX_Text(pDX, IDC_EDIT10, m_ReceByte2);
	DDX_Text(pDX, IDC_EDIT11, m_ReceByte3);
	DDX_Text(pDX, IDC_EDIT12, m_ReceByte4);
	DDX_Text(pDX, IDC_EDIT13, m_ReceByte5);
	DDX_Text(pDX, IDC_EDIT14, m_ReceByte6);
	DDX_Text(pDX, IDC_EDIT15, m_ReceByte7);
	DDX_Text(pDX, IDC_EDIT16, m_ReceByte8);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CT1302Dlg, CDialog)
	//{{AFX_MSG_MAP(CT1302Dlg)
	ON_BN_CLICKED(IDC_BUTTON1, OnInitCAN)
	ON_BN_CLICKED(IDC_BUTTON2, OnSendCAN)
	ON_BN_CLICKED(IDC_BUTTON4, OnStopLoop)
	ON_BN_CLICKED(IDC_BUTTON5, OnLoopSend)
	ON_WM_CLOSE()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CT1302Dlg message handlers


BOOL CT1302Dlg::OnInitDialog()
{
	CDialog::OnInitDialog();


	hndCAN=GetHandle(1);                  //  get CAN handle           
   

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen

	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}



void CT1302Dlg::OnInitCAN() 
{
	// TODO: Add your control notification handler code here
	CAN_A_STRUCT  PCAN1, PCAN2;
    bool InitOK1, InitOK2;
    
		
	PCAN1.acc_code = 0;
    PCAN2.acc_code = 0 ;
    PCAN1.acc_mask = 0xff ;
	PCAN2.acc_mask = 0xff ;
    PCAN1.bus_time0 = 3;
	PCAN2.bus_time0 = 3;
    PCAN1.bus_time1 = 0x1c; 
    PCAN2.bus_time1 = 0x1c;
    PCAN1.outp_ctrl = 0xfa;
    PCAN2.outp_ctrl = 0xfa;

	InitOK1=CANInitA(hndCAN , PORT1, &PCAN1);
	InitOK2=CANInitA(hndCAN , PORT2, &PCAN2);
	
	if( InitOK1 && InitOK2 )
		MessageBox(TEXT("初始化CAN控制器成功!"),NULL,MB_OK);
	else
	{
	    if(!InitOK1)
			MessageBox(TEXT("初始化CAN控制器1失败!"),NULL, MB_OK);
        if(!InitOK2)
			MessageBox(TEXT("初始化CAN控制器2失败!"),NULL, MB_OK);
	}
}



void CT1302Dlg::OnSendCAN() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);

	bool SendOK1 , ReceOK2 ;
    int  i ;

	CAN1.id = 1 ;
	CAN2.id = 2 ;
	CAN1.length = 8 ;
	CAN2.length = 8 ;
	CAN1.rtr = 0 ;
	CAN2.rtr = 0 ;

	CAN1.data[0]= m_SendByte1 ;
    CAN1.data[1]= m_SendByte2 ;
	CAN1.data[2]= m_SendByte3 ;
	CAN1.data[3]= m_SendByte4 ;
    CAN1.data[4]= m_SendByte5 ;
	CAN1.data[5]= m_SendByte6 ;
	CAN1.data[6]= m_SendByte7 ;
	CAN1.data[7]= m_SendByte8 ;

    SendOK1 = CANSendA(hndCAN , PORT1 , &CAN1);
	
	if (!SendOK1)
		MessageBox(TEXT("CAN通道1发送数据失败!"),TEXT("CAN Send"),MB_ICONINFORMATION );
    
    for( i =0 ; i<3000 ; i++)
	{
	  i++;
	  i--;
	}

    ReceOK2 = CANReceiveA(hndCAN , PORT2 , &CAN2);

	if(!ReceOK2)
	{
	    MessageBox(TEXT("CAN通道2接收数据失败!"),TEXT("CAN Receive"),MB_ICONINFORMATION);

	}
    else
	{
	    m_ReceByte1 = CAN2.data[0];
		m_ReceByte2 = CAN2.data[1];
		m_ReceByte3 = CAN2.data[2];
		m_ReceByte4 = CAN2.data[3];
		m_ReceByte5 = CAN2.data[4];
		m_ReceByte6 = CAN2.data[5];
		m_ReceByte7 = CAN2.data[6];
		m_ReceByte8 = CAN2.data[7];
		
	    UpdateData(false);
	}

	
}



void CT1302Dlg::OnStopLoop() 
{
	// TODO: Add your control notification handler code here
	

  	KillTimer(1);

}

void CT1302Dlg::OnLoopSend() 
{
	// TODO: Add your control notification handler code here
    int result;

	CAN1.id = 1 ;
	CAN2.id = 2 ;
	CAN1.length = 8 ;
	CAN2.length = 8 ;
	CAN1.rtr = 0 ;
	CAN2.rtr = 0 ;

	
	result=SetTimer(1,100,NULL);
	if(!result)
    	MessageBox(TEXT("定时器错误"),NULL,MB_OK);


}

void CT1302Dlg::OnClose() 
{
	// TODO: Add your message handler code here and/or call default

	CloseHnd(hndCAN);	
	CDialog::OnClose();
}



void CT1302Dlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
    bool SendOK1 , ReceOK2 ;
 
   int  i , temp;

     
	  m_SendByte1 = LoopSend[0];
	  m_SendByte2 = LoopSend[1];
	  m_SendByte3 = LoopSend[2];
	  m_SendByte4 = LoopSend[3];
	  m_SendByte5 = LoopSend[4];
	  m_SendByte6 = LoopSend[5];
	  m_SendByte7 = LoopSend[6];
	  m_SendByte8 = LoopSend[7];
	  
      for(i =0 ; i < 8 ; i++)
	  {
	      CAN1.data[i] = LoopSend[i];
	  }
	  
    
	  SendOK1 = CANSendA(hndCAN , PORT1 , &CAN1);
	
	if (!SendOK1)
		MessageBox(TEXT("CAN通道1发送数据失败!"),TEXT("CAN Send"),MB_ICONINFORMATION );
    
    for( temp =0 ; temp < 1000 ; temp++)                  // delay send or receive
	{
	  temp++;
	  temp--;
	}

    ReceOK2 = CANReceiveA(hndCAN , PORT2 , &CAN2);

	if(!ReceOK2)
	{
	    MessageBox(TEXT("CAN通道2接收数据失败!"),TEXT("CAN Receive"),MB_ICONINFORMATION);

	}
    else
	{
	    m_ReceByte1 = CAN2.data[0];
		m_ReceByte2 = CAN2.data[1];
		m_ReceByte3 = CAN2.data[2];
		m_ReceByte4 = CAN2.data[3];
		m_ReceByte5 = CAN2.data[4];
		m_ReceByte6 = CAN2.data[5];
		m_ReceByte7 = CAN2.data[6];
		m_ReceByte8 = CAN2.data[7];
		
	    UpdateData(false);
	}

	for( i =0 ; i< 8 ; i++)                    // LoopSend data add 
	{
	    if(LoopSend[i] == 255)
		{
		    LoopSend[i] = 0 ;
		}
        LoopSend[i] ++ ;
	
	}
	

	
	CDialog::OnTimer(nIDEvent);
}

⌨️ 快捷键说明

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