📄 t1302dlg.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 + -