📄 mcutools.cpp
字号:
// Read the vars from ini file
int varcount;
varcount = ini->ReadInteger("Var Count","Count",0);
if (varcount>0){
TListItem * item;
for(int i=0;i<varcount;i++){
item = lvCOMVars->Items->Add();
item->Caption = i;
item->Checked = true;
item->SubItems->CommaText = ini->ReadString("Var List",i,"");
}
}
// Read the master command for communication
varcount = ini->ReadInteger("Master Command Count","Count",0);
if (varcount>0){
for(int i=0;i<varcount;i++){
clbInteractive->Items->Add(ini->ReadString("Master Command List",i,""));
}
}
// Read the slaver command & answer pairs
varcount = ini->ReadInteger("Slaver Command Count","Count",0);
if (varcount>0){
ini->ReadSectionValues("Slaver Command List",vleInteractive->Strings);
}
if(rbMemMap->Checked ){
s = "0x" + leMemStart->Text;
DispOffset = s.ToInt();
} else {
DispOffset = 0;
}
strRadix = new TStringList();
strRadix->Add("Hex=0");
strRadix->Add("Dec=1");
strRadix->Add("Bin=2");
strType = new TStringList();
strType->Add("char=0");
strType->Add("int=1");
strType->Add("long=2");
strType->Add("float=3");
strType->Add("double=4");
strType->Add("BitMask=5");
strType->Add("Array=6");
pStatus.PortOpen = false;
delete ini;
delete my;
delete myp;
delete ParallelPorts;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnEncodeClick(TObject *Sender)
{
WORD patA,patA1,patA2,patB,patC,patD,patD1,patD2,patE,patF,patG,patG1,patG2,patH,patJ,patK,patL,patM,patN;
typedef union {
unsigned char ar[2];
unsigned int wd;
}LEDs;
LEDs led[256];
String s,prefix,postfix;
unsigned int i;
unsigned int pat;
bool fCustom=false;
// if(rbLED14->Checked || rbLED7->Checked || rbLED16->Checked){
if(rbLED16->Checked){
try{
patA1 = (1<<edLED16A1->Text.ToInt());
patA2 = (1<<edLED16A2->Text.ToInt());
patB = (1<<edLED16B->Text.ToInt());
patC = (1<<edLED16C->Text.ToInt());
patD1 = (1<<edLED16D1->Text.ToInt());
patD2 = (1<<edLED16D2->Text.ToInt());
patE = (1<<edLED16E->Text.ToInt());
patF = (1<<edLED16F->Text.ToInt());
patG1 = (1<<edLED16G1->Text.ToInt());
patG2 = (1<<edLED16G2->Text.ToInt());
patH = (1<<edLED16H->Text.ToInt());
patJ = (1<<edLED16J->Text.ToInt());
patK = (1<<edLED16K->Text.ToInt());
patL = (1<<edLED16L->Text.ToInt());
patM = (1<<edLED16M->Text.ToInt());
patN = (1<<edLED16N->Text.ToInt());
}
catch(EConvertError &E)
{
Application->MessageBox("Please input bit information correctly!","Error",MB_OK | MB_ICONERROR);
return;
}
if(vleLEDCodec->RowCount > 2 || !vleLEDCodec->Cells[1][1].IsEmpty() ){
for(i=1;i<vleLEDCodec->RowCount ;i++){
if(vleLEDCodec->Cells[1][i].IsEmpty()){
led[i].wd = 0;
continue;
}
try{
pat = vleLEDCodec->Cells[1][i].ToInt();
}catch(...){
pat = 0;
}
led[i].wd = (patA1 & ((pat & (1<<0))?0xffff:0x0000))
|(patA2 & ((pat & (1<<1))?0xffff:0x0000))
|(patB & ((pat & (1<<2))?0xffff:0x0000))
|(patC & ((pat & (1<<3))?0xffff:0x0000))
|(patD1 & ((pat & (1<<4))?0xffff:0x0000))
|(patD2 & ((pat & (1<<5))?0xffff:0x0000))
|(patE & ((pat & (1<<6))?0xffff:0x0000))
|(patF & ((pat & (1<<7))?0xffff:0x0000))
|(patG1 & ((pat & (1<<8))?0xffff:0x0000))
|(patG2 & ((pat & (1<<9))?0xffff:0x0000))
|(patH & ((pat & (1<<10))?0xffff:0x0000))
|(patJ & ((pat & (1<<11))?0xffff:0x0000))
|(patK & ((pat & (1<<12))?0xffff:0x0000))
|(patL & ((pat & (1<<13))?0xffff:0x0000))
|(patM & ((pat & (1<<14))?0xffff:0x0000))
|(patN & ((pat & (1<<15))?0xffff:0x0000));
fCustom = true;
}
}else{
led[0].wd = patA1|patA2|patB|patC|patE|patF|patG1|patG2; //A
led[1].wd = patF|patE|patG1|patG2|patC|patD1|patD2; //B
led[2].wd = patA1|patA2|patD1|patD2|patE|patF; //C
led[3].wd = patA1|patA2|patB|patC|patD1|patD2|patM|patJ; //D
led[4].wd = patA1|patA2|patD1|patD2|patE|patF|patG1|patG2; //E
led[5].wd = patA1|patA2|patE|patF|patG1|patG2; //F
led[6].wd = patC|patD1|patD2|patE|patF|patG2; //G
led[7].wd = patB|patC|patE|patF|patG1|patG2; //H
led[8].wd = patA1|patA2|patD1|patD2|patM|patJ; //I
led[9].wd = patB|patC|patD1|patD2; //J
led[10].wd = patG1|patE|patF|patK|patL; //K
led[11].wd = patD1|patD2|patE|patF; //L
led[12].wd = patB|patC|patE|patF|patH|patK; //M
led[13].wd = patB|patC|patE|patF|patH|patL; //N
led[14].wd = patA1|patA2|patB|patC|patD1|patD2|patE|patF; //O
led[15].wd = patA1|patA2|patB|patE|patF|patG1|patG2; //P
led[16].wd = patA1|patA2|patB|patC|patD1|patD2|patE|patF|patL; //Q
led[17].wd = patA1|patA2|patB|patE|patF|patG1|patG2|patL; //R
led[18].wd = patA1|patA2|patC|patD1|patD2|patF|patG1|patG2; //S
led[19].wd = patA1|patA2|patM|patJ; //T
led[20].wd = patB|patC|patD1|patD2|patE|patF; //U
led[21].wd = patE|patF|patN|patK; //V
led[22].wd = patB|patC|patE|patF|patL|patN; //W
led[23].wd = patH|patK|patL|patN; //X
led[24].wd = patB|patC|patD1|patD2|patF|patG1|patG2; //Y
led[25].wd = patA1|patA2|patK|patN|patD1|patD2; //Z
led[26].wd = patA1|patA2|patB|patC|patD1|patD2|patE|patF; //0
led[27].wd = patB|patC; //1
led[28].wd = patA1|patA2|patB|patD1|patD2|patE|patG1|patG2; //2
led[29].wd = patA1|patA2|patB|patC|patD1|patD2|patG1|patG2; //3
led[30].wd = patB|patC|patF|patG1|patG2; //4
led[31].wd = patA1|patA2|patC|patD1|patD2|patF|patG1|patG2; //5
led[32].wd = patA1|patA2|patC|patD1|patD2|patE|patF|patG1|patG2; //6
led[33].wd = patA1|patA2|patB|patC; //7
led[34].wd = patA1|patA2|patB|patC|patD1|patD2|patE|patF|patG1|patG2; //8
led[35].wd = patA1|patA2|patB|patC|patD1|patD2|patF|patG1|patG2; //9
led[36].wd = patA1|patA2|patB|patC|patE|patF|patG1|patG2; //A
led[37].wd = patF|patE|patG1|patG2|patC|patD1|patD2; //B
led[38].wd = patA1|patA2|patD1|patD2|patE|patF; //C
led[39].wd = patA1|patA2|patB|patC|patD1|patD2|patM|patJ; //D
led[40].wd = patA1|patA2|patD1|patD2|patE|patF|patG1|patG2; //E
led[41].wd = patA1|patA2|patE|patF|patG1|patG2; //F
}
if(cbLEDReverse->Checked){
if(fCustom){
for (i=1;i<vleLEDCodec->RowCount;i++){
led[i].wd ^= 0xffff;
}
}else{
for (i=0;i<42;i++){
led[i].wd ^= 0xffff;
}
}
}
if(rb4Bits->Checked){
if(rbASM->Checked ){
if(rbPre->Checked){
prefix = edHex->Text.Trim();
}else{
postfix = edHex->Text.Trim();
}
if(fCustom){
mLEDCode->Text = "LED16Codec:\t\t; Character Encode"; // Character
for (i=1;i<vleLEDCodec->RowCount;i++){
s = vleLEDCodec->Keys[i];
mLEDCode->Lines->Add("\t"+edLEDDB->Text.Trim()+"\t" + prefix + s.IntToHex(led[i].ar[0] & 0x0f,2)+ postfix + "\t\t; "+ s + " LSB");
mLEDCode->Lines->Add("\t"+edLEDDB->Text.Trim()+"\t" + prefix + s.IntToHex((led[i].ar[0]>>4) & 0x0f,2)+ postfix + "\t\t; "+ s + " ...");
mLEDCode->Lines->Add("\t"+edLEDDB->Text.Trim()+"\t" + prefix + s.IntToHex(led[i].ar[1] & 0x0f,2)+ postfix + "\t\t; "+ s + " ...");
mLEDCode->Lines->Add("\t"+edLEDDB->Text.Trim()+"\t" + prefix + s.IntToHex((led[i].ar[1]>>4) & 0x0f,2)+ postfix + "\t\t; "+ s + " MSB");
}
mLEDCode->Lines->Add(" ");
}else{
mLEDCode->Text = "LED16Char:\t\t; Character Encode"; // Character
for (i=0;i<26;i++){
s.printf("%c",'A'+i);
mLEDCode->Lines->Add("\t"+edLEDDB->Text.Trim()+"\t" + prefix + s.IntToHex(led[i].ar[0] & 0x0f,2)+ postfix + "\t\t; "+ s + " LSB");
mLEDCode->Lines->Add("\t"+edLEDDB->Text.Trim()+"\t" + prefix + s.IntToHex((led[i].ar[0]>>4) & 0x0f,2)+ postfix + "\t\t; "+ s + " ...");
mLEDCode->Lines->Add("\t"+edLEDDB->Text.Trim()+"\t" + prefix + s.IntToHex(led[i].ar[1] & 0x0f,2)+ postfix + "\t\t; "+ s + " ...");
mLEDCode->Lines->Add("\t"+edLEDDB->Text.Trim()+"\t" + prefix + s.IntToHex((led[i].ar[1]>>4) & 0x0f,2)+ postfix + "\t\t; "+ s + " MSB");
}
mLEDCode->Lines->Add(" ");
mLEDCode->Lines->Add("LED16Num:\t\t; Number Encode"); // Number
for (i=26;i<42;i++){
mLEDCode->Lines->Add("\t"+edLEDDB->Text.Trim()+"\t" + prefix + s.IntToHex(led[i].ar[0] & 0x0f,2)+ postfix + "\t\t; "+ s.IntToHex(i-26,1) + " LSB");
mLEDCode->Lines->Add("\t"+edLEDDB->Text.Trim()+"\t" + prefix + s.IntToHex((led[i].ar[0]>>4) & 0x0f,2)+ postfix + "\t\t; "+ s.IntToHex(i-26,1) + " ...");
mLEDCode->Lines->Add("\t"+edLEDDB->Text.Trim()+"\t" + prefix + s.IntToHex(led[i].ar[1] & 0x0f,2)+ postfix + "\t\t; "+ s.IntToHex(i-26,1) + " ...");
mLEDCode->Lines->Add("\t"+edLEDDB->Text.Trim()+"\t" + prefix + s.IntToHex((led[i].ar[1]>>4) & 0x0f,2)+ postfix + "\t\t; "+ s.IntToHex(i-26,1) + " MSB");
}
}
} else {
if(fCustom){
mLEDCode->Text = "const unsigned char LED16Char[]={\t\t// Character Encode"; // Character
for (i=1;i<vleLEDCodec->RowCount;i++){
s = vleLEDCodec->Keys[i];
mLEDCode->Lines->Add("\t0x" + s.IntToHex(led[i].ar[0] & 0x0f,2)+ (",\t\t// ")+ s + " LSB");
mLEDCode->Lines->Add("\t0x" + s.IntToHex((led[i].ar[0]>>4) & 0x0f,2)+ (",\t\t// ")+ s + " ...");
mLEDCode->Lines->Add("\t0x" + s.IntToHex(led[i].ar[1] & 0x0f,2)+ (",\t\t// ")+ s + " ...");
mLEDCode->Lines->Add("\t0x" + s.IntToHex((led[i].ar[1]>>4) & 0x0f,2)+ (i==vleLEDCodec->RowCount-1?"\t\t// ":",\t\t// ")+ s + " MSB");
}
mLEDCode->Lines->Add("};");
}else{
mLEDCode->Text = "const unsigned char LED16Char[]={\t\t// Character Encode"; // Character
for (i=0;i<26;i++){
s.printf("%c",'A'+i);
mLEDCode->Lines->Add("\t0x" + s.IntToHex(led[i].ar[0] & 0x0f,2)+ (",\t\t// ")+ s + " LSB");
mLEDCode->Lines->Add("\t0x" + s.IntToHex((led[i].ar[0]>>4) & 0x0f,2)+ (",\t\t// ")+ s + " ...");
mLEDCode->Lines->Add("\t0x" + s.IntToHex(led[i].ar[1] & 0x0f,2)+ (",\t\t// ")+ s + " ...");
mLEDCode->Lines->Add("\t0x" + s.IntToHex((led[i].ar[1]>>4) & 0x0f,2)+ (i==25?"\t\t// ":",\t\t// ")+ s + " MSB");
}
mLEDCode->Lines->Add("};");
mLEDCode->Lines->Add(" ");
mLEDCode->Lines->Add("const unsigned char LED16Num[]={\t\t// Number Encode"); // Number
for (i=26;i<42;i++){
mLEDCode->Lines->Add("\t0x" + s.IntToHex(led[i].ar[0] & 0x0f,2)+ (",\t\t// ")+ s.IntToHex(i-26,1) + " LSB");
mLEDCode->Lines->Add("\t0x" + s.IntToHex((led[i].ar[0]>>4) & 0x0f,2)+ (",\t\t// ")+ s.IntToHex(i-26,1) + " ...");
mLEDCode->Lines->Add("\t0x" + s.IntToHex(led[i].ar[1] & 0x0f,2)+ (",\t\t// ")+ s.IntToHex(i-26,1) + " ...");
mLEDCode->Lines->Add("\t0x" + s.IntToHex((led[i].ar[1]>>4) & 0x0f,2)+ (i==41?"\t\t// ":",\t\t// ")+ s.IntToHex(i-26,1) + " MSB");
}
mLEDCode->Lines->Add("};");
}
}
} else {
if(rbASM->Checked ){
if(rbPre->Checked){
prefix = edHex->Text.Trim();
}else{
postfix = edHex->Text.Trim();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -