?? myprogdlg.cpp
字號(hào):
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 }
//根據(jù)器件使能鎖定位和熔絲位操作
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:未使能存儲(chǔ)器保護(hù)");
lock1Combo->AddString("模式2:EA鎖定.MOVC,再編程禁止");
lock1Combo->AddString("模式3:同模式2,且校驗(yàn)禁止");
lock1Combo->AddString("模式4:同模式2,且外部執(zhí)行禁止");
lock1Combo->SetCurSel(0);
}
else if(p->ucCompatible == LockCompatibleIsAT90S1200)
{
//lockb[0 ]->SetWindowText("LB1");
//lockb[1 ]->SetWindowText("LB2");
lock1Combo->ShowWindow(SW_SHOW);
lock1Combo->AddString("模式1:存儲(chǔ)器無(wú)保護(hù)");
lock1Combo->AddString("模式2:再編程禁止,熔絲鎖定");
lock1Combo->AddString("模式3:再編程和校驗(yàn)禁止,鎖定位和熔絲鎖定");
lock1Combo->AddString("無(wú)效");
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:存儲(chǔ)器無(wú)保護(hù)");
lock1Combo->AddString("模式2:再編程禁止,熔絲鎖定");
lock1Combo->AddString("模式3:再編程和校驗(yàn)禁止,鎖定位和熔絲鎖定");
lock1Combo->AddString("無(wú)效");
lock1Combo->SetCurSel(0);
lock2Combo->AddString("BLB0:1應(yīng)用區(qū)允許讀寫");
lock2Combo->AddString("BLB0:2應(yīng)用區(qū)禁止寫 ");
lock2Combo->AddString("BLB0:3應(yīng)用區(qū)禁止讀寫");
lock2Combo->AddString("BLB0:4應(yīng)用區(qū)禁止讀 ");
lock2Combo->SetCurSel(0);
lock3Combo->AddString("BLB1:1引導(dǎo)區(qū)允許讀寫");
lock3Combo->AddString("BLB1:2引導(dǎo)區(qū)禁止寫 ");
lock3Combo->AddString("BLB1:3引導(dǎo)區(qū)禁止讀寫");
lock3Combo->AddString("BLB1:4引導(dǎo)區(qū)禁止讀 ");
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("外部時(shí)鐘");
fuse1Combo->AddString("內(nèi)部RC振蕩器,1MHz(CKOPT不能編程)");
fuse1Combo->AddString("內(nèi)部RC振蕩器,2MHz(CKOPT不能編程)");
fuse1Combo->AddString("內(nèi)部RC振蕩器,4MHz(CKOPT不能編程)");
fuse1Combo->AddString("內(nèi)部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使能啟動(dòng)");
fuse2Combo->AddString("電源快速上升啟動(dòng)");
fuse2Combo->AddString("電源緩慢上升啟動(dòng)");
fuse2Combo->AddString("電源快速上升或BOD使能(外部RC或低頻晶振)");
fuse2Combo->AddString("啟動(dòng)時(shí)頻率已經(jīng)穩(wěn)定(外部低頻晶振)");
fuse2Combo->AddString("保留");
fuse2Combo->SetCurSel(2);
fuse3Combo->AddString("無(wú)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);
}
//計(jì)算鎖定位
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,"鎖定字節(jié) 0x%02X",(unsigned char)avrp.device.LockBits);
SetDlgItemText(IDC_STATIC_LOCK,printlock);
case 0:
break;
default:
break;
}
}
//計(jì)算熔絲位
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,"擴(kuò)展 0x%02X",
(unsigned char)(avrp.device.ExtendedFuseBits) & 0xff);
SetDlgItemText(IDC_STATIC_FUSE2,printfuse);
case 2:
sprintf(printfuse,"高字節(jié) 0x%02X",
(unsigned char)(avrp.device.FuseBits >> 8) & 0xff);
SetDlgItemText(IDC_STATIC_FUSE1,printfuse);
case 1:
sprintf(printfuse,"低字節(jié) 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,"鎖定字節(jié) 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,"擴(kuò)展 0x%02X",
(unsigned char)(avrp.device.ExtendedFuseBits) & 0xff);
SetDlgItemText(IDC_STATIC_FUSE2,printfuse);
case 2:
sprintf(printfuse,"高字節(jié) 0x%02X",
(unsigned char)(avrp.device.FuseBits >> 8) & 0xff);
SetDlgItemText(IDC_STATIC_FUSE1,printfuse);
case 1:
sprintf(printfuse,"低字節(jié) 0x%02X",
(unsigned char)avrp.device.FuseBits & 0xff);
SetDlgItemText(IDC_STATIC_FUSE0,printfuse);
case 0:
break;
default:
break;
}
}
//根據(jù)鎖定要求設(shè)定鎖定位
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;
}
}
}
//根據(jù)功能設(shè)定熔絲位
void CMYPROGDlg::SetFuse()
{
/*
0 ("外部時(shí)鐘");
1 ("內(nèi)部RC振蕩器,1MHz");
2 ("內(nèi)部RC振蕩器,2MHz");
3 ("內(nèi)部RC振蕩器,4MHz");
4 ("內(nèi)部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);
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -