📄 testat24c08dlg.cpp
字号:
// TESTAT24C08Dlg.cpp : implementation file
//
#include "stdafx.h"
#include <winioctl.h>
//#include <Windev.h>
#include "TESTAT24C08.h"
#include "TESTAT24C08Dlg.h"
#include "i2c.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define ATC028_addr 0xa8 /*WRITE TO THE DEVICE ADDRESS*/
#define device_addr_read 0xa9 /*READ FROM THE DEVICE ADDRESS*/
#define I2C_MAX_ADDR 1023 //定义最大的word address
#define BLOCK_SIZE 16 //定义写块的大小
#define TESTADDR 1 //测试地址
/*for AT24C08A,the DEVICE ADDRESS BYTE configration is
D7 D6 D5 D4 D3 D2 D1 D0
+--+---+--+--+-+--+--+----+
|1 | 0 |1 |0 |A2|P1|P0|R/W|
+--+---+--+--+-+--+--+----+
P1,P0 are the word address the 10th,and 9th bits;
*/
/////////////////////////////////////////////////////////////////////////////
// CTESTAT24C08Dlg dialog
CTESTAT24C08Dlg::CTESTAT24C08Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CTESTAT24C08Dlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTestatc28Dlg)
m_editWrite = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_lenth=0;
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CTESTAT24C08Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestatc28Dlg)
DDX_Control(pDX, IDC_STATIC_READ, m_Stread);
DDX_Text(pDX, IDC_EDIT_WRITE, m_editWrite);
DDV_MaxChars(pDX, m_editWrite, 26);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTESTAT24C08Dlg, CDialog)
//{{AFX_MSG_MAP(CTestatc28Dlg)
ON_BN_CLICKED(IDC_BUTTON_WRITE, OnButtonWrite)
ON_BN_CLICKED(IDC_BUTTON_READ, OnButtonRead)
ON_BN_CLICKED(IDC_BUTTON_OPEN, OnButtonOpen)
ON_BN_CLICKED(IDC_BUTTON_CLOSE, OnButtonClose)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTESTAT24C08Dlg message handlers
BOOL CTESTAT24C08Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 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 CTESTAT24C08Dlg::OnButtonWrite()
{
// TODO: Add your control notification handler code here
UINT device_addr,word_addr;
UINT tmp,tmp1,tmp2,address;
tmp=I2C_MAX_ADDR;
address=6;
if (address>tmp)
{
MessageBox(TEXT("超越地址范围,写入不成功!"));
return ;//超越地址范围,写入不成功
}
tmp1=address/256;
tmp2= ATC028_addr;
device_addr= tmp2+ tmp1*2;
word_addr=address%256;
UpdateData(TRUE);
CHAR str[50];
DWORD dwMinSize;
dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,m_editWrite,-1,NULL,0,NULL,FALSE);
WideCharToMultiByte(CP_OEMCP,NULL,m_editWrite,-1,&str[0],dwMinSize,NULL,FALSE);
m_lenth=dwMinSize;
for(int i=0;i<26;i++)
{
BOOL bwrite=FALSE;
BYTE sla=device_addr;
DWORD outsize;
BOOL ret=DeviceIoControl(m_I2cHandle,IOCTL_SET_I2C_SLAVE,&sla,sizeof(BYTE),NULL,NULL,&outsize,NULL);
if(!ret)
MessageBox(TEXT("DeviceIoControl:错误!"));
sla=14;
ret=DeviceIoControl(m_I2cHandle,IOCTL_SET_SPEED_DIV,&sla,sizeof(BYTE),&outsize,sizeof(outsize),&outsize,NULL);
if(!ret)
MessageBox(TEXT("DeviceIoControl:错误!"));
BYTE buf[2];
DWORD number;
buf[0]=word_addr++;
if(m_lenth<26)
{
buf[1]=str[i];
}
else
{
buf[1]='\0';
}
bwrite=WriteFile(m_I2cHandle,buf,sizeof(buf),&number,NULL);
if (!bwrite)
{
MessageBox(TEXT("写文件错误,写入不成功!"));
CloseHandle(m_I2cHandle);
}
}
}
void CTESTAT24C08Dlg::OnButtonRead()
{
// TODO: Add your control notification handler code here
UINT device_addr,word_addr;
UINT tmp,tmp1,tmp2,address;
tmp=I2C_MAX_ADDR;
address=6;
if (address+m_lenth-1>tmp)
{
MessageBox(TEXT("超越地址范围,读取不成功!"));
return ;//超越地址范围,写入不成功
}
tmp1=address/256;
tmp2= ATC028_addr;
device_addr= tmp2+ tmp1*2;
word_addr=address%256;
CHAR str[50];
DWORD dwMinSize;
UCHAR *pchar=(UCHAR *)&str[0];
for(int i=0;i<26;i++)
{
BOOL bwrite=FALSE;
BYTE sla=device_addr;
DWORD outsize;
BOOL ret=DeviceIoControl(m_I2cHandle,IOCTL_SET_I2C_SLAVE,&sla,sizeof(BYTE),NULL,NULL,&outsize,NULL);
if(!ret)
MessageBox(TEXT("DeviceIoControl:错误!"));
CHAR buf;
DWORD number;
buf=word_addr++;
bwrite=WriteFile(m_I2cHandle,&buf,sizeof(buf),&number,NULL);
if (!bwrite)
{
MessageBox(TEXT("写文件错误,写入不成功!"));
CloseHandle(m_I2cHandle);
}
BOOL bRead=FALSE;
bRead=ReadFile(m_I2cHandle,&buf,1,&number,NULL);
if (!bRead)
{
MessageBox(TEXT("读文件错误,不成功!"));
CloseHandle(m_I2cHandle);
break;
}
str[i]=buf;
}
TCHAR wchar[100];
dwMinSize = MultiByteToWideChar (CP_ACP, 0, str, -1, NULL, 0);
MultiByteToWideChar (CP_ACP, 0, str, -1, wchar, dwMinSize);
m_Stread.SetWindowText(wchar);
}
void CTESTAT24C08Dlg::OnButtonOpen()
{
// TODO: Add your control notification handler code here
m_I2cHandle=CreateFile(_T("IIC0:"),GENERIC_READ|GENERIC_WRITE,NULL,
NULL,OPEN_EXISTING,NULL,NULL);
if (m_I2cHandle == INVALID_HANDLE_VALUE)
MessageBox(TEXT("createfile:错误!"));
}
void CTESTAT24C08Dlg::OnButtonClose()
{
// TODO: Add your control notification handler code here
CloseHandle(m_I2cHandle);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -