📄 myprogdlg.cpp
字号:
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 + -