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

📄 myprogdlg.cpp

📁 上位机软件 for avricp 根据功能设定熔丝
💻 CPP
📖 第 1 页 / 共 4 页
字号:
void CMYPROGDlg::OnCheck3(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck4(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck5(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck6(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck7(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck8(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck9(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck10(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck11(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck12(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck13(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck14(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck15(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck16(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck17(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck18(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck19(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck20(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck21(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck22(){ResultFuse();GetFuse();} 
void CMYPROGDlg::OnCheck23(){ResultFuse();GetFuse();} 
//功能更改后,更改熔丝位,计算熔丝数据,
void CMYPROGDlg::OnSelchangeComboFuse1(){SetFuse();	ResultFuse();} 
void CMYPROGDlg::OnSelchangeComboFuse2(){SetFuse();	ResultFuse();}
void CMYPROGDlg::OnSelchangeComboFuse3(){SetFuse();	ResultFuse();} 
void CMYPROGDlg::OnSelchangeComboFuse4(){SetFuse();	ResultFuse();} 

//FLASH编程
void CMYPROGDlg::OnButtonFprog() 
{
	// TODO: Add your control notification handler code here
	if(!avrp.hexf.openFileRead(m_hexfile))
	{
		AfxMessageBox( "打开文件错误! " );
		return;
	}
	if(!avrp.hexf.readHEXFile())
	{
		avrp.hexf.closeFile();	
		return;
	}
	
	CButton *flashGroup=(CButton*)GetDlgItem(IDC_STATIC_GROUPFLASH);     
	char s[30];
	sprintf(s,"Flash:%d/%d",avrp.hexf.getRangeLength(),avrp.device.getFlashSize());
	flashGroup->SetWindowText(s);
	
	if(avrp.hexf.getRangeLength()>avrp.device.getFlashSize())
	{
		avrp.hexf.closeFile();
		AfxMessageBox( "文件长度超出存储器! " );
		return;
	}
	if(!avrp.enterProgrammingMode())return;
	if (!avrp.isDeviceOK())
	{
		avrp.hexf.closeFile();
		avrp.leaveProgrammingMode();
		return;
	}
	if(avrp.chipErase())
	{
		UpdateData(TRUE);
		m_csMessage	= "擦除OK!";
		UpdateData(FALSE);
		
	}
	else 
	{
		UpdateData(TRUE);
		m_csMessage	= "擦除失败!";
		UpdateData(FALSE);
		avrp.leaveProgrammingMode();
		avrp.hexf.closeFile();
		return;
		
	}
	UpdateData(TRUE);
	m_csMessage	+= "写程序...";
	UpdateData(FALSE);
	CProgressCtrl *p=(CProgressCtrl *)GetDlgItem(IDC_PROGRESS1);
	if(avrp.writeFlash(p))
	{	
		UpdateData(TRUE);
		m_csMessage	+= "OK!";
		UpdateData(FALSE);
	}
	else 
	{	
		UpdateData(TRUE);
		m_csMessage	+= "失败!";
		UpdateData(FALSE);
		avrp.leaveProgrammingMode();
		avrp.hexf.closeFile();
		return;
	}
	UpdateData(TRUE);
	m_csMessage	+= "校验程序...";
	UpdateData(FALSE);
	Sleep(110);
	if(avrp.verifyFlash(p))
	{	
		UpdateData(TRUE);
		m_csMessage	+= "OK!";
		UpdateData(FALSE);
	}
	else 
	{	
		UpdateData(TRUE);
		m_csMessage	+= "失败!";
		UpdateData(FALSE);
		avrp.hexf.closeFile();
		avrp.leaveProgrammingMode();
		return;
	}
	if(avrp.device.getLockBytes())
	{
		if(avrp.writeLockBits(avrp.device.LockBits))
		{
			UpdateData(TRUE);
			m_csMessage	+= "锁定OK!";
			UpdateData(FALSE);
		}
		else
		{
			UpdateData(TRUE);
			m_csMessage	+= "锁定失败!";
			UpdateData(FALSE);
			avrp.leaveProgrammingMode();
			return;
		}
	}
	avrp.hexf.closeFile();	
	avrp.leaveProgrammingMode();
	
}

//FLASH读
void CMYPROGDlg::OnButtonFread() 
{
	// TODO: Add your control notification handler code here
	int f,r;
	if((f=avrp.hexf.fileExists(m_hexfile)) == true)r=AfxMessageBox("文件已存在,覆盖?",MB_YESNO);
	if((r==IDYES || !f) && m_hexfile.GetLength( ))
	{  
		
		if(!avrp.hexf.openFileWrite(m_hexfile,avrp.device.getFlashSize()))
		{
			AfxMessageBox( "打开文件错误! " );
			return;
		}
		if(!avrp.enterProgrammingMode())
		{
			avrp.hexf.closeFile();	
			return;
		}
		if (!avrp.isDeviceOK())
		{
			avrp.leaveProgrammingMode();
			return;
		}
		
		CButton *flashGroup=(CButton*)GetDlgItem(IDC_STATIC_GROUPFLASH);     
		char s[30];
		sprintf(s,"Flash:%d/%d",avrp.device.getFlashSize(),avrp.device.getFlashSize());
		flashGroup->SetWindowText(s);
		
		UpdateData(TRUE);
		m_csMessage	= "读程序...";
		UpdateData(FALSE);
		CProgressCtrl *p=(CProgressCtrl *)GetDlgItem(IDC_PROGRESS1);
		if(avrp.readFlash(p))
		{	
			avrp.hexf.simplifyData();
			
			flashGroup=(CButton*)GetDlgItem(IDC_STATIC_GROUPFLASH);     
			//char s[30];
			sprintf(s,"Flash:%d/%d",avrp.hexf.getRangeLength(),avrp.device.getFlashSize());
			flashGroup->SetWindowText(s);
			
			avrp.hexf.writeHEXFile() ;
			UpdateData(TRUE);
			m_csMessage	+= "OK!";
			UpdateData(FALSE);
		}
		else 
		{	
			//avrp.leaveProgrammingMode();
			UpdateData(TRUE);
			m_csMessage	+= "失败!";
			UpdateData(FALSE);
			//return;
		}
		avrp.hexf.closeFile();	
		avrp.leaveProgrammingMode();
	}
}
//FLASH校验
void CMYPROGDlg::OnButtonFveri() 
{
	if(!avrp.hexf.openFileRead(m_hexfile))
	{
		AfxMessageBox( "打开文件错误! " );
		return;
	}
	if(!avrp.hexf.readHEXFile())
	{
		avrp.hexf.closeFile();	
		return;
	}
	if(!avrp.enterProgrammingMode())return;
	if (!avrp.isDeviceOK())
	{
		avrp.leaveProgrammingMode();
		return;
	}
	CButton *flashGroup=(CButton*)GetDlgItem(IDC_STATIC_GROUPFLASH);     
		char s[30];
		sprintf(s,"Flash:%d/%d",avrp.hexf.getRangeLength(),avrp.device.getFlashSize());
		flashGroup->SetWindowText(s);
	UpdateData(TRUE);
	m_csMessage	= "校验程序...";
	UpdateData(FALSE);
	CProgressCtrl *p=(CProgressCtrl *)GetDlgItem(IDC_PROGRESS1);
	if(avrp.verifyFlash(p))
	{	
		UpdateData(TRUE);
		m_csMessage	= "校验程序...OK!";
		UpdateData(FALSE);
	}
	else 
	{	
		UpdateData(TRUE);
		m_csMessage	= "校验程序...失败!";
		UpdateData(FALSE);
	}
	avrp.hexf.closeFile();	
	avrp.leaveProgrammingMode();
	
}
//EEPROM编程
void CMYPROGDlg::OnButtonEprog() 
{
	if(!avrp.hexf.openFileRead(m_hexfile))
	{
		AfxMessageBox( "打开文件错误! " );
		return;
	}
	if(!avrp.hexf.readHEXFile())
	{
		avrp.hexf.closeFile();	
		return;
	}
	CButton *eepromGroup=(CButton*)GetDlgItem(IDC_STATIC_GROUPEEPROM);     
		char s[30];
		sprintf(s,"EEPROM:%d/%d",avrp.hexf.getRangeLength(),avrp.device.getEEPROMSize());
		eepromGroup->SetWindowText(s);
	if(avrp.hexf.getRangeLength()>avrp.device.getEEPROMSize())
	{
		AfxMessageBox( "文件长度超出EEPROM! " );
		return;
	}
	if(!avrp.enterProgrammingMode())return;
	if (!avrp.isDeviceOK())
	{
		avrp.leaveProgrammingMode();
		return;
	}
	UpdateData(TRUE);
	m_csMessage	= "写EEPROM...";
	UpdateData(FALSE);
	CProgressCtrl *p=(CProgressCtrl *)GetDlgItem(IDC_PROGRESS1);
	if(avrp.writeEEPROM(p))
	{	
		UpdateData(TRUE);
		m_csMessage	+= "OK!";
		UpdateData(FALSE);
	}
	else 
	{	
		UpdateData(TRUE);
		m_csMessage	+= "失败!";
		UpdateData(FALSE);
		avrp.leaveProgrammingMode();
		return;
	}
	UpdateData(TRUE);
	m_csMessage	+= "校验EEPROM...";
	UpdateData(FALSE);
	if(avrp.verifyEEPROM(p))
	{	
		UpdateData(TRUE);
		m_csMessage	+= "OK!";
		UpdateData(FALSE);
	}
	else 
	{	
		UpdateData(TRUE);
		m_csMessage	+= "失败!";
		UpdateData(FALSE);
	}
	avrp.hexf.closeFile();	
	avrp.leaveProgrammingMode();
	
}
//EEPROM读
void CMYPROGDlg::OnButtonEread() 
{
	int f,r;
	if((f=avrp.hexf.fileExists(m_hexfile)) == true)r=AfxMessageBox("文件已存在,覆盖?",MB_YESNO);
	if((r==IDYES || !f) && m_hexfile.GetLength( ))
	{  
		
		if(!avrp.hexf.openFileWrite(m_hexfile,avrp.device.getEEPROMSize()))
		{
			AfxMessageBox( "打开文件错误! " );
			return;
		}
		if(!avrp.enterProgrammingMode())return;
		if (!avrp.isDeviceOK())
		{
			avrp.leaveProgrammingMode();
			return;
		}
		CButton *eepromGroup=(CButton*)GetDlgItem(IDC_STATIC_GROUPEEPROM);     
		char s[30];
		sprintf(s,"EEPROM:%d/%d",avrp.device.getEEPROMSize(),avrp.device.getEEPROMSize());
		eepromGroup->SetWindowText(s);
		
		UpdateData(TRUE);
		m_csMessage	= "读EEPROM...";
		UpdateData(FALSE);
		CProgressCtrl *p=(CProgressCtrl *)GetDlgItem(IDC_PROGRESS1);
		if(avrp.readEEPROM(p))
		{	
			avrp.hexf.simplifyData();
			
			eepromGroup=(CButton*)GetDlgItem(IDC_STATIC_GROUPEEPROM);     
			//char s[30];
			sprintf(s,"EEPROM:%d/%d",avrp.hexf.getRangeLength(),avrp.device.getEEPROMSize());
			eepromGroup->SetWindowText(s);
			avrp.hexf.writeHEXFile() ;
			UpdateData(TRUE);
			m_csMessage	+= "OK!";
			UpdateData(FALSE);
		}
		else 
		{	
			UpdateData(TRUE);
			m_csMessage	+= "失败!";
			UpdateData(FALSE);
			//return;
		}
		avrp.leaveProgrammingMode();
		avrp.hexf.closeFile();	
	}
	
}
//EEPROM校验
void CMYPROGDlg::OnButtonEveri() 
{
	if(!avrp.hexf.openFileRead(m_hexfile))
	{
		AfxMessageBox( "打开文件错误! " );
		return;
	}
	if(!avrp.hexf.readHEXFile())
	{
		avrp.hexf.closeFile();	
		return;
	}
	if(!avrp.enterProgrammingMode())return;
	if (!avrp.isDeviceOK())
	{
		avrp.leaveProgrammingMode();
		return;
	}
	CButton *eepromGroup=(CButton*)GetDlgItem(IDC_STATIC_GROUPEEPROM);     
		char s[30];
		sprintf(s,"EEPROM:%d/%d",avrp.hexf.getRangeLength(),avrp.device.getEEPROMSize());
		eepromGroup->SetWindowText(s);
	UpdateData(TRUE);
	m_csMessage	= "校验EEPROM...";
	UpdateData(FALSE);
	CProgressCtrl *p=(CProgressCtrl *)GetDlgItem(IDC_PROGRESS1);
	if(avrp.verifyEEPROM(p))
	{	
		UpdateData(TRUE);
		m_csMessage	= "校验EEPROM...OK!";
		UpdateData(FALSE);
	}
	else 
	{	
		UpdateData(TRUE);
		m_csMessage	= "校验EEPROM...失败!";
		UpdateData(FALSE);
	}
	avrp.hexf.closeFile();	
	avrp.leaveProgrammingMode();
	
}

//读锁定位和熔丝位
bool CMYPROGDlg::ReadLockAndFuse()
{
	if(avrp.device.getLockBytes())
	{
		if(!avrp.readLockBits(&avrp.device.LockBits))return false;
	}
	AnalyseLock();
	GetLock();
	
	switch(avrp.device.getFuseBytes())
	{
	case 3:
		if(!avrp.readExtendedFuseBits(&avrp.device.ExtendedFuseBits))return false;
	case 2:	
	case 1:  
		if(!avrp.readFuseBits(&avrp.device.FuseBits))return false;
	case 0:
		break;
	default:
		break;
	}
	AnalyseFuse();
	GetFuse();
	return true;
}

void CMYPROGDlg::OnButtonSread() 
{
	//读器件标识
	ReadSignature();
	if(!avrp.enterProgrammingMode())
	{
		SetDlgItemText(IDC_STATIC_SIGNATURE, "");
		UpdateData(TRUE);
		m_csMessage	= "进入编程模式失败!";
		UpdateData(FALSE);
		return;
	}
	
	if (!avrp.isDeviceOK() )
	{
		avrp.leaveProgrammingMode();
		return;
	}
	
	if(ReadLockAndFuse())
	{
		UpdateData(TRUE);
		m_csMessage	= "读锁定位和熔丝...OK!";
		UpdateData(FALSE);
	}
	else
	{
		UpdateData(TRUE);
		m_csMessage	= "读锁定位和熔丝...失败!";
		UpdateData(FALSE);
	}
	avrp.leaveProgrammingMode();
	
}
//擦除
void CMYPROGDlg::OnButtonErase() 
{
	if(!avrp.enterProgrammingMode())
	{
		UpdateData(TRUE);
		m_csMessage	= "进入编程模式失败!";
		UpdateData(FALSE);
		return;
	}
	
	if (!avrp.isDeviceOK())
	{
		avrp.leaveProgrammingMode();
		return;
	}
	
	if(avrp.chipErase())
	{
		UpdateData(TRUE);
		m_csMessage	= "擦除...OK!";
		UpdateData(FALSE);
		
	}
	else 
	{
		UpdateData(TRUE);
		m_csMessage	= "擦除...失败!";
		UpdateData(FALSE);
		
	}
	ReadLockAndFuse();
	avrp.leaveProgrammingMode();
		

}

void CMYPROGDlg::OnButtonSprog() 
{
				UpdateData(TRUE);
				m_csMessage	= "";
				UpdateData(FALSE);
	if(!avrp.enterProgrammingMode())
	{
		UpdateData(TRUE);
		m_csMessage	= "进入编程模式失败!";
		UpdateData(FALSE);
		return;
	}
	if (!avrp.isDeviceOK())
	{
		avrp.leaveProgrammingMode();
		return;
	}
	
	if(avrp.device.getLockBytes() && 0)
	{
		long tempLockBits;
		if(!avrp.readLockBits(&tempLockBits))return;
		if((tempLockBits & 0x03 ) != 0x03)
		{
			AfxMessageBox("熔丝锁定,请先擦除OK!");
			UpdateData(TRUE);
			m_csMessage	= "熔丝锁定,不能写入!";
			UpdateData(FALSE);
			return;
			if(avrp.chipErase())
			{
				UpdateData(TRUE);
				m_csMessage	= "熔丝锁定,擦除OK!";
				UpdateData(FALSE);
			}
			else
			{
				UpdateData(TRUE);
				m_csMessage	= "熔丝锁定,不能擦除!";
				UpdateData(FALSE);
				return;
			}
		}
	}
	switch(avrp.device.getFuseBytes())
	{
	case 3:
		avrp.writeExtendedFuseBits(avrp.device.ExtendedFuseBits);
	case 2:	
	case 1:  
		if(avrp.writeFuseBits(avrp.device.FuseBits ))
		{
			UpdateData(TRUE);
			m_csMessage	+= "写熔丝OK!";
			UpdateData(FALSE);
		}
		else
		{
			UpdateData(TRUE);
			m_csMessage	+= "写熔丝失败!";
			UpdateData(FALSE);
			avrp.leaveProgrammingMode();
			return;
		}
	case 0:
		break;
	default:
		break;
	}
	if(avrp.device.getLockBytes())
	{
		if(avrp.writeLockBits(avrp.device.LockBits))
		{
			UpdateData(TRUE);
			m_csMessage	+= "写锁定位OK!";
			UpdateData(FALSE);
		}
		else
		{
			UpdateData(TRUE);
			m_csMessage	+= "写熔丝失败!";
			UpdateData(FALSE);
			avrp.leaveProgrammingMode();
			return;
		}
	}
	avrp.leaveProgrammingMode();
	return;
	
}

⌨️ 快捷键说明

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