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

📄 testat24c08dlg.cpp

📁 自己写的测试AT24C08的程序
💻 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 + -