📄 myprogdlg.cpp
字号:
eprogButton->EnableWindow(FALSE);
everiButton->EnableWindow(FALSE);
ereadButton->EnableWindow(FALSE);
eepromGroup->SetWindowText("EEPROM");
}
}
//禁止锁定位和熔丝位操作
void CMYPROGDlg::DisableLockAndFuse()
{
int i;
SetDlgItemText(IDC_STATIC_SIGNATURE, "");
//锁位部分
lockGroup->EnableWindow(FALSE);
lock->ShowWindow(SW_HIDE);
for(i=0;i<8;i++)
lockb[i ]->ShowWindow(SW_HIDE);
lock1Combo->ShowWindow(SW_HIDE);
lock2Combo->ShowWindow(SW_HIDE);
lock3Combo->ShowWindow(SW_HIDE);
//熔丝部分
fuseGroup->EnableWindow(FALSE);
fuse0->ShowWindow(SW_HIDE);
fuse1->ShowWindow(SW_HIDE);
fuse2->ShowWindow(SW_HIDE);
for(i=0;i<24;i++)
check[i ]->ShowWindow(SW_HIDE);
fuse1Combo->ShowWindow(SW_HIDE);
fuse2Combo->ShowWindow(SW_HIDE);
fuse3Combo->ShowWindow(SW_HIDE);
fuse4Combo->ShowWindow(SW_HIDE);
//操作
sreadButton->EnableWindow(FALSE);
sprogButton->EnableWindow(FALSE);
eraseButton->EnableWindow(FALSE);
}
// 0-13位熔丝和ATmega16一样为true
//DEL bool CMYPROGDlg::isFuseATmeaga16compatibl()
//DEL {
//DEL bool isATmeaga16compatibl;
//DEL switch(avrp.device.getDeviceCode())
//DEL {
//DEL case ATMEGA8515:
//DEL case ATMEGA8535:
//DEL case ATMEGA8:
//DEL case ATMEGA16:
//DEL case ATMEGA32:
//DEL case ATMEGA64:
//DEL case ATMEGA128:
//DEL isATmeaga16compatibl = true;
//DEL break;
//DEL default:
//DEL isATmeaga16compatibl = false;
//DEL break;
//DEL }
//DEL return isATmeaga16compatibl;
//DEL }
//根据器件使能锁定位和熔丝位操作
void CMYPROGDlg::EnableLockAndFuse()
{
int i;
//锁位部分
while(lock1Combo->GetCount())lock1Combo->DeleteString(0);
while(lock2Combo->GetCount())lock2Combo->DeleteString(0);
while(lock3Combo->GetCount())lock3Combo->DeleteString(0);
bitmap *p=avrp.device.getLockMap();
long defaultmode=p->dwDefaultMode;
long prtectmode=p->dwProtectMode;
if(avrp.device.getLockBytes())
{
lock->ShowWindow(SW_SHOW);
}
if(p->dwNumber)
{
lockGroup->EnableWindow(TRUE);
for(i=0;i<p->dwNumber;i++)
{
lockb[i]->ShowWindow(SW_SHOW);
lockb[i]->SetWindowText(p->bitname[i]);
if((defaultmode&0x01))
lockb[i]->SetCheck(FALSE);
else
lockb[i]->SetCheck(TRUE);
if((prtectmode&0x01))
lockb[i]->EnableWindow(FALSE);
else
lockb[i]->EnableWindow(TRUE);
defaultmode>>=1;
prtectmode>>=1;
}
}
if(p->ucCompatible == LockCompatibleIsAT89C51)
{
//lockb[0 ]->SetWindowText("LB1");
//lockb[1 ]->SetWindowText("LB2");
lock1Combo->ShowWindow(SW_SHOW);
lock2Combo->ShowWindow(SW_HIDE);
lock3Combo->ShowWindow(SW_HIDE);
lock1Combo->AddString("模式1:未使能存储器保护");
lock1Combo->AddString("模式2:EA锁定.MOVC,再编程禁止");
lock1Combo->AddString("模式3:同模式2,且校验禁止");
lock1Combo->AddString("模式4:同模式2,且外部执行禁止");
lock1Combo->SetCurSel(0);
}
else if(p->ucCompatible == LockCompatibleIsAT90S1200)
{
//lockb[0 ]->SetWindowText("LB1");
//lockb[1 ]->SetWindowText("LB2");
lock1Combo->ShowWindow(SW_SHOW);
lock1Combo->AddString("模式1:存储器无保护");
lock1Combo->AddString("模式2:再编程禁止,熔丝锁定");
lock1Combo->AddString("模式3:再编程和校验禁止,锁定位和熔丝锁定");
lock1Combo->AddString("无效");
lock1Combo->SetCurSel(0);
}
else if(p->ucCompatible == LockCompatibleIsATmeaga16)
{
//lockb[0 ]->SetWindowText("LB1");
//lockb[1 ]->SetWindowText("LB2");
//lockb[2 ]->SetWindowText("BLB01");
//lockb[3 ]->SetWindowText("BLB02");
//lockb[4 ]->SetWindowText("BLB11");
//lockb[5 ]->SetWindowText("BLB12");
lock1Combo->ShowWindow(SW_SHOW);
lock2Combo->ShowWindow(SW_SHOW);
lock3Combo->ShowWindow(SW_SHOW);
lock1Combo->AddString("模式1:存储器无保护");
lock1Combo->AddString("模式2:再编程禁止,熔丝锁定");
lock1Combo->AddString("模式3:再编程和校验禁止,锁定位和熔丝锁定");
lock1Combo->AddString("无效");
lock1Combo->SetCurSel(0);
lock2Combo->AddString("BLB0:1应用区允许读写");
lock2Combo->AddString("BLB0:2应用区禁止写 ");
lock2Combo->AddString("BLB0:3应用区禁止读写");
lock2Combo->AddString("BLB0:4应用区禁止读 ");
lock2Combo->SetCurSel(0);
lock3Combo->AddString("BLB1:1引导区允许读写");
lock3Combo->AddString("BLB1:2引导区禁止写 ");
lock3Combo->AddString("BLB1:3引导区禁止读写");
lock3Combo->AddString("BLB1:4引导区禁止读 ");
lock3Combo->SetCurSel(0);
}
ResultLock();
GetLock();
//熔丝部分
while(fuse1Combo->GetCount())fuse1Combo->DeleteString(0);
while(fuse2Combo->GetCount())fuse2Combo->DeleteString(0);
while(fuse3Combo->GetCount())fuse3Combo->DeleteString(0);
while(fuse4Combo->GetCount())fuse4Combo->DeleteString(0);
//熔丝部分
switch(avrp.device.getFuseBytes())
{
case 3:
fuse2->ShowWindow(SW_SHOW);
case 2:
fuse1->ShowWindow(SW_SHOW);
case 1:
fuse0->ShowWindow(SW_SHOW);
case 0:
break;
default:
break;
}
p=avrp.device.getFuseMap();
defaultmode=p->dwDefaultMode;
prtectmode=p->dwProtectMode;
if(p->dwNumber)
{
fuseGroup->EnableWindow(TRUE);
for(i=0;i<p->dwNumber;i++)
{
check[i]->ShowWindow(SW_SHOW);
check[i]->SetWindowText(p->bitname[i]);
if((defaultmode&0x01))
check[i]->SetCheck(FALSE);
else
check[i]->SetCheck(TRUE);
if((prtectmode&0x01))
check[i]->EnableWindow(FALSE);
else
check[i]->EnableWindow(TRUE);
defaultmode>>=1;
prtectmode>>=1;
}
}
if(p->ucCompatible == FuseCompatibleIsATmeaga16)
{
fuse1Combo->ShowWindow(SW_SHOW);
fuse2Combo->ShowWindow(SW_SHOW);
fuse3Combo->ShowWindow(SW_SHOW);
fuse4Combo->ShowWindow(SW_SHOW);
fuse1Combo->AddString("外部时钟");
fuse1Combo->AddString("内部RC振荡器,1MHz(CKOPT不能编程)");
fuse1Combo->AddString("内部RC振荡器,2MHz(CKOPT不能编程)");
fuse1Combo->AddString("内部RC振荡器,4MHz(CKOPT不能编程)");
fuse1Combo->AddString("内部RC振荡器,8MHz(CKOPT不能编程)");
fuse1Combo->AddString("外部RC振荡器,0-0.9MHz");
fuse1Combo->AddString("外部RC振荡器,0.9MHz-3.0MHz");
fuse1Combo->AddString("外部RC振荡器,3.0MHz-8.0MHz");
fuse1Combo->AddString("外部RC振荡器,8.0MHz-12.0MHz");
fuse1Combo->AddString("外部低频晶振(如:32.768KHz)");
fuse1Combo->AddString("陶瓷谐振器,低频:0.4MHz-0.9MHz");
fuse1Combo->AddString("陶瓷谐振器,中频:0.9MHz-3.0MHz");
fuse1Combo->AddString("陶瓷谐振器,高频:3.0MHz-8.0MHz");
fuse1Combo->AddString("陶瓷谐振器,高频:1.0MHz-16.0MHz");
fuse1Combo->AddString("石英振荡器,低频:0.4MHz-0.9MHz(不适用)");
fuse1Combo->AddString("石英振荡器,中频:0.9MHz-3.0MHz");
fuse1Combo->AddString("石英振荡器,高频:3.0MHz-8.0MHz");
fuse1Combo->AddString("石英振荡器,高频:1.0MHz-16.0MHz");
fuse1Combo->SetCurSel(1);
fuse2Combo->AddString("BOD使能启动");
fuse2Combo->AddString("电源快速上升启动");
fuse2Combo->AddString("电源缓慢上升启动");
fuse2Combo->AddString("电源快速上升或BOD使能(外部RC或低频晶振)");
fuse2Combo->AddString("启动时频率已经稳定(外部低频晶振)");
fuse2Combo->AddString("保留");
fuse2Combo->SetCurSel(2);
fuse3Combo->AddString("无BOD功能");
fuse3Combo->AddString("BOD使能2.7V");
fuse3Combo->AddString("BOD使能4.0V");
fuse3Combo->SetCurSel(1);
fuse4Combo->AddString("BOOT块 1024 Words");
fuse4Combo->AddString("BOOT块 512 Words");
fuse4Combo->AddString("BOOT块 256 Words");
fuse4Combo->AddString("BOOT块 128 Words");
fuse4Combo->SetCurSel(0);
}
ResultFuse();
GetFuse();
//操作
sreadButton->EnableWindow(TRUE);
sprogButton->EnableWindow(TRUE);
eraseButton->EnableWindow(TRUE);
}
//计算锁定位
void CMYPROGDlg::ResultLock()
{
avrp.device.LockBits = -1;
//bitmap *p=avrp.device.getLockMap();
if(avrp.device.getLockMap()->ucCompatible == LockCompatibleIsAT89C51)
for(int i=7;i>=0;i--)
{
avrp.device.LockBits <<= 1;
if( lockb[i]->GetCheck())
avrp.device.LockBits |= 1;
}
else
for(int i=7;i>=0;i--)
{
avrp.device.LockBits <<= 1;
if( !lockb[i]->GetCheck())
avrp.device.LockBits |= 1;
}
char printlock[16];
switch(avrp.device.getLockBytes())
{
case 1:
sprintf(printlock,"锁定字节 0x%02X",(unsigned char)avrp.device.LockBits);
SetDlgItemText(IDC_STATIC_LOCK,printlock);
case 0:
break;
default:
break;
}
}
//计算熔丝位
void CMYPROGDlg::ResultFuse()
{
avrp.device.ExtendedFuseBits = -1;
for(int i=23;i>=16;i--)
{
avrp.device.ExtendedFuseBits <<= 1;
if( !check[i]->GetCheck())
avrp.device.ExtendedFuseBits |= 1;
}
avrp.device.FuseBits = -1;
for(i=15;i>=0;i--)
{
avrp.device.FuseBits <<= 1;
if( !check[i]->GetCheck())
avrp.device.FuseBits |= 1;
}
char printfuse[16];
switch(avrp.device.getFuseBytes())
{
case 3:
sprintf(printfuse,"扩展 0x%02X",
(unsigned char)(avrp.device.ExtendedFuseBits) & 0xff);
SetDlgItemText(IDC_STATIC_FUSE2,printfuse);
case 2:
sprintf(printfuse,"高字节 0x%02X",
(unsigned char)(avrp.device.FuseBits >> 8) & 0xff);
SetDlgItemText(IDC_STATIC_FUSE1,printfuse);
case 1:
sprintf(printfuse,"低字节 0x%02X",
(unsigned char)avrp.device.FuseBits & 0xff);
SetDlgItemText(IDC_STATIC_FUSE0,printfuse);
case 0:
break;
default:
break;
}
}
//分析锁定位
void CMYPROGDlg::AnalyseLock()
{
if(avrp.device.getLockMap()->ucCompatible == LockCompatibleIsAT89C51)
for(int i=7;i>=0;i--)
{
if((avrp.device.LockBits >> i) & 0x01)
lockb[i]->SetCheck(1);
else
lockb[i]->SetCheck(0);
}
else
for(int i=0;i<8;i++)
{
if((avrp.device.LockBits >> i) & 0x01)
lockb[i]->SetCheck(0);
else
lockb[i]->SetCheck(1);
}
char printlock[16];
switch(avrp.device.getLockBytes())
{
case 1:
sprintf(printlock,"锁定字节 0x%02X",(unsigned char)avrp.device.LockBits);
SetDlgItemText(IDC_STATIC_LOCK,printlock);
case 0:
break;
default:
break;
}
}
//分析熔丝位
void CMYPROGDlg::AnalyseFuse()
{
for(int i=0;i<8;i++)
{
if((avrp.device.ExtendedFuseBits >> i) & 0x01)
check[i+16]->SetCheck(0);
else
check[i+16]->SetCheck(1);
}
for(i=0;i<16;i++)
{
if((avrp.device.FuseBits >> i) & 0x01)
check[i]->SetCheck(0);
else
check[i]->SetCheck(1);
}
char printfuse[16];
switch(avrp.device.getFuseBytes())
{
case 3:
sprintf(printfuse,"扩展 0x%02X",
(unsigned char)(avrp.device.ExtendedFuseBits) & 0xff);
SetDlgItemText(IDC_STATIC_FUSE2,printfuse);
case 2:
sprintf(printfuse,"高字节 0x%02X",
(unsigned char)(avrp.device.FuseBits >> 8) & 0xff);
SetDlgItemText(IDC_STATIC_FUSE1,printfuse);
case 1:
sprintf(printfuse,"低字节 0x%02X",
(unsigned char)avrp.device.FuseBits & 0xff);
SetDlgItemText(IDC_STATIC_FUSE0,printfuse);
case 0:
break;
default:
break;
}
}
//根据锁定要求设定锁定位
void CMYPROGDlg::SetLock()
{
bitmap *p=avrp.device.getLockMap();
if(p->ucCompatible == LockCompatibleIsAT89C51)
{
switch(lock1Combo->GetCurSel())
{
case 0:
lockb[0 ]->SetCheck(0);
lockb[1 ]->SetCheck(0);
lockb[2 ]->SetCheck(0);
//avrp.device.LockBits=0;
break;
case 1:
lockb[0 ]->SetCheck(1);
lockb[1 ]->SetCheck(0);
lockb[2 ]->SetCheck(0);
//avrp.device.LockBits=1;
break;
case 2:
lockb[0 ]->SetCheck(1);
lockb[1 ]->SetCheck(1);
lockb[2 ]->SetCheck(0);
//avrp.device.LockBits=3;
break;
case 3:
lockb[0 ]->SetCheck(1);
lockb[1 ]->SetCheck(1);
lockb[2 ]->SetCheck(1);
//avrp.device.LockBits=7;
break;
default:
lockb[0 ]->SetCheck(0);
lockb[1 ]->SetCheck(0);
lockb[2 ]->SetCheck(0);
//avrp.device.LockBits=0;
break;
}
}
if(p->ucCompatible == LockCompatibleIsAT90S1200)
{
switch(lock1Combo->GetCurSel())
{
case 0:
lockb[0 ]->SetCheck(0);
lockb[1 ]->SetCheck(0);
break;
case 1:
lockb[0 ]->SetCheck(1);
lockb[1 ]->SetCheck(0);
break;
case 2:
lockb[0 ]->SetCheck(1);
lockb[1 ]->SetCheck(1);
break;
case 3:
lockb[0 ]->SetCheck(0);
lockb[1 ]->SetCheck(1);
break;
default:
break;
}
}
if(p->ucCompatible == LockCompatibleIsATmeaga16)
{
switch(lock1Combo->GetCurSel())
{
case 0:
lockb[0 ]->SetCheck(0);
lockb[1 ]->SetCheck(0);
break;
case 1:
lockb[0 ]->SetCheck(1);
lockb[1 ]->SetCheck(0);
break;
case 2:
lockb[0 ]->SetCheck(1);
lockb[1 ]->SetCheck(1);
break;
case 3:
lockb[0 ]->SetCheck(0);
lockb[1 ]->SetCheck(1);
break;
default:
break;
}
switch(lock2Combo->GetCurSel())
{
case 0:
lockb[2 ]->SetCheck(0);
lockb[3 ]->SetCheck(0);
break;
case 1:
lockb[2 ]->SetCheck(1);
lockb[3 ]->SetCheck(0);
break;
case 2:
lockb[2 ]->SetCheck(1);
lockb[3 ]->SetCheck(1);
break;
case 3:
lockb[2 ]->SetCheck(0);
lockb[3 ]->SetCheck(1);
break;
default:
break;
}
switch(lock3Combo->GetCurSel())
{
case 0:
lockb[4 ]->SetCheck(0);
lockb[5 ]->SetCheck(0);
break;
case 1:
lockb[4 ]->SetCheck(1);
lockb[5 ]->SetCheck(0);
break;
case 2:
lockb[4 ]->SetCheck(1);
lockb[5 ]->SetCheck(1);
break;
case 3:
lockb[4 ]->SetCheck(0);
lockb[5 ]->SetCheck(1);
break;
default:
break;
}
}
}
//根据功能设定熔丝位
void CMYPROGDlg::SetFuse()
{
/*
0 ("外部时钟");
1 ("内部RC振荡器,1MHz");
2 ("内部RC振荡器,2MHz");
3 ("内部RC振荡器,4MHz");
4 ("内部RC振荡器,8MHz");
5 ("外部RC振荡器,0-0.9MHz");
6 ("外部RC振荡器,0.9MHz-3.0MHz");
7 ("外部RC振荡器,3.0MHz-8.0MHz");
8 ("外部RC振荡器,8.0MHz-12.0MHz");
9 ("外部低频晶振(如:32.768KHz)");
10("陶瓷谐振器,低频:0.4MHz-0.9MHz");
11("陶瓷谐振器,中频:0.9MHz-3.0MHz");
12("陶瓷谐振器,高频:3.0MHz-8.0MHz");
13("陶瓷谐振器,高频:1.0MHz-16.0MHz");
14("石英振荡器,低频:0.4MHz-0.9MHz(不适用)");
15("石英振荡器,中频:0.9MHz-3.0MHz");
16("石英振荡器,高频:3.0MHz-8.0MHz");
17("石英振荡器,高频:1.0MHz-16.0MHz");
fuse1Combo->SetCurSel(1);
*/
bitmap *p=avrp.device.getFuseMap();
if(p->ucCompatible == FuseCompatibleIsATmeaga16)
{
switch(fuse1Combo->GetCurSel())
{
case 0:
check[0]->SetCheck(1);
check[1]->SetCheck(1);
check[2]->SetCheck(1);
check[3]->SetCheck(1);
break;
case 1:
check[12]->SetCheck(0);
check[0]->SetCheck(0);
check[1]->SetCheck(1);
check[2]->SetCheck(1);
check[3]->SetCheck(1);
break;
case 2:
check[12]->SetCheck(0);
check[0]->SetCheck(1);
check[1]->SetCheck(0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -