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

📄 rwset.cpp

📁 单片机对FLASH芯片的烧写,源程序,原理图,PCB图
💻 CPP
字号:
// RWset.cpp : implementation file
//

#include "stdafx.h"
#include "prgx.h"
#include "RWset.h"
#include "math.h"
#include "Prg0.h"

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

/////////////////////////////////////////////////////////////////////////////
// CRWset dialog


CRWset::CRWset(CWnd* pParent /*=NULL*/)
	: CDialog(CRWset::IDD, pParent)
{
	//{{AFX_DATA_INIT(CRWset)
	m_AddrB0 = _T("");
	m_AddrB1 = _T("");
	m_AddrF0 = _T("");
	m_AddrF1 = _T("");
	//}}AFX_DATA_INIT
}


void CRWset::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRWset)
	DDX_Control(pDX, IDC_ADDRF1, m_Addrf1);
	DDX_Control(pDX, IDC_ADDRF0, m_Addrf0);
	DDX_Control(pDX, IDC_ADDRB1, m_Addrb1);
	DDX_Control(pDX, IDC_ADDRB0, m_Addrb0);
	DDX_Text(pDX, IDC_ADDRB0, m_AddrB0);
	DDX_Text(pDX, IDC_ADDRB1, m_AddrB1);
	DDX_Text(pDX, IDC_ADDRF0, m_AddrF0);
	DDX_Text(pDX, IDC_ADDRF1, m_AddrF1);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CRWset, CDialog)
	//{{AFX_MSG_MAP(CRWset)
	ON_EN_CHANGE(IDC_ADDRB0, OnChangeAddrb0)
	ON_EN_CHANGE(IDC_ADDRB1, OnChangeAddrb1)
	ON_BN_CLICKED(IDC_RESETX, OnResetx)
	ON_EN_CHANGE(IDC_ADDRF0, OnChangeAddrf0)
	ON_EN_CHANGE(IDC_ADDRF1, OnChangeAddrf1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRWset message handlers

void CRWset::OnChangeAddrb0() 
{
	UpdateData(TRUE);
	ChkAddr(&m_Addrb0,&m_AddrB0,&Addrb0);
}

void CRWset::OnChangeAddrb1() 
{
	UpdateData(TRUE);
	ChkAddr(&m_Addrb1,&m_AddrB1,&Addrb1);
}

void CRWset::OnChangeAddrf0() 
{
	UpdateData(TRUE);
	ChkAddr(&m_Addrf0,&m_AddrF0,&Addrf0);
}

void CRWset::OnChangeAddrf1() 
{
	UpdateData(TRUE);
	ChkAddr(&m_Addrf1,&m_AddrF1,&Addrf1);
}

int CRWset::ChkAddr(CEdit *z,CString *w,DWORD *Addr)
{
	int lenH,j;

	lenH=w->GetLength();
	if(!lenH)return 0;
	char x[100];
	strcpy(x,(LPCTSTR)*w);
//	int p=w->Find("0x");
//	if(p==-1)p=w->Find("0X");
//	if(p==-1)	//十进制
	if(lenH==1)
	{if(!isdigit(x[0]))
		{AfxMessageBox("输入的地址中有非数字字符!(如果地址为16进制,请以0x开头)"); 
		 goto ERR;
		}
	 else return 0;
	}
	if(x[0]=='0' && (x[1]=='x' || x[1]=='X'))	//16进制
	{*Addr=0;
//	  strcpy(x,(LPCTSTR)m_FileName);
	 DWORD y=0,tmp=0;
	 for(j=lenH-1;j>1;j--)
		{	tmp=0;
			if(isdigit(x[j])) tmp+=(x[j]-'0');	//每一字段的字符是否为x数字
			else if(islower(x[j]) && x[j]>='a' && x[j]<='f') tmp+=(x[j]-'a'+10);
			else if(isupper(x[j]) && x[j]>='A' && x[j]<='F') tmp+=(x[j]-'A'+10);
			else {AfxMessageBox("输入的地址中有非16进制字符!"); goto ERR;};
			*Addr+=(DWORD)(tmp*pow(16,y));
			y++;
		}
	}
	else// if(!(x[0]=='0' && (x[1]=='x' || x[1]=='X')))
	{for(j=0;j<(int)lenH;j++)
		{if(!isdigit(x[j]))
			{AfxMessageBox("输入的地址中有非数字字符!(如果地址为16进制,请以0x开头)"); 
			 goto ERR;
			}
		}
	 *Addr=atoi(x);
//	 sprintf(x,"\n请确认输入的地址:%d(10进制),0X%X(16进制)",i,i);
	}
//	else goto ERR;
//	sprintf(x,"\n请确认输入的地址:%d(10进制),0X%X(16进制)",*Addr,*Addr);
//	AfxMessageBox(x);
	return 0;
ERR:
	*w=_T("");
	UpdateData(FALSE);
	return 1;
}

BOOL CRWset::OnInitDialog() 
{
	CDialog::OnInitDialog();
	InitData();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CRWset::OnResetx() 
{
	InitData();	
}

void CRWset::InitData()
{
	Addrb0=Addrf0=0;
	Addrb1=0x1fffff;
	m_AddrB0=m_AddrF0=_T("0x000000");
	m_AddrB1=_T("0x1FFFFF");
	char s[50];
	sprintf(s,"0X%06x",Addrf1);
	m_AddrF1=_T(s);
	if(flag==1)SetWindowText("读取FLASH数据--参数设置");
	else if(flag==2)SetWindowText("FLASH编程--参数设置");// m_Addrb1.EnableWindow(FALSE);}
	UpdateData(FALSE);
}

void CRWset::OnOK() 
{
	UpdateData(TRUE);
	if(Addrb1<Addrb0 || Addrf1<Addrf0)
	{	AfxMessageBox("参数错误!!\n\n结束地址<起始地址");
		return;
	}
	if(Addrb0>MAXFILELEN || Addrf0>MAXFILELEN)
	{	AfxMessageBox("参数错误!!\n\n起始地址大于上限0x4C0000");
		return;
	}
	if((Addrb0+Addrf1-Addrf0)>MAXFILELEN)
	{	AfxMessageBox("参数错误!!\n\n导致缓冲区地址大于上限0x4C0000");
		return;
	}
	CDialog::OnOK();
}

⌨️ 快捷键说明

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