📄 peridialog.cpp
字号:
//}}AFX_DATA_INIT
//}
void CPeriDialog::Update (void) { /* Update Dialog Contents */
DWORD rate, convst, fosc;
static DWORD rated;
static DWORD convstd;
union fv ain0, ain1, ain2, ain3, ain4, ain5, ain6, ain7 , temp, vref;
static float ain0d, ain1d, ain2d, ain3d, ain4d, ain5d, ain6d, ain7d, tempd, vrefd;
static DWORD adccon1d, adccon2d, adccon3d, adcdatald, adcdatahd, dmald, dmahd, dmapd;
char locbuffer[20];
Agsi.ReadSFR(ADCCON1, &adccon1, &adccon1p, 0xFF);
Agsi.ReadSFR(ADCCON2, &adccon2, &adccon2p, 0xFF);
Agsi.ReadSFR(ADCCON3, &adccon3, &adccon3p, 0xFF);
Agsi.ReadSFR(ADCDATAL, &adcdatal, &adcdatalp, 0xFF);
Agsi.ReadSFR(ADCDATAH, &adcdatah, &adcdatahp, 0xFF);
Agsi.ReadSFR(DMAL, &dmal, &dmalp, 0xFF);
Agsi.ReadSFR(DMAH, &dmah, &dmahp, 0xFF);
Agsi.ReadSFR(DMAP, &dmap, &dmapp, 0xFF);
Agsi.ReadVTR(AIN0, &ain0.DW);
Agsi.ReadVTR(AIN1, &ain1.DW);
Agsi.ReadVTR(AIN2, &ain2.DW);
Agsi.ReadVTR(AIN3, &ain3.DW);
Agsi.ReadVTR(AIN4, &ain4.DW);
Agsi.ReadVTR(AIN5, &ain5.DW);
Agsi.ReadVTR(AIN6, &ain6.DW);
Agsi.ReadVTR(AIN7, &ain7.DW);
Agsi.ReadVTR(TEMP, &temp.DW);
Agsi.ReadVTR(VREF, &vref.DW);
Agsi.ReadVTR(XTAL, &fosc);
Agsi.ReadVTR(CONVST, &convst);
if (initflag == 1) {
adccon1d = ~adccon1;
adccon2d = ~adccon2;
adccon3d = ~adccon3;
adcdatald = ~adcdatal;
adcdatahd = ~adcdatah;
dmald = ~dmal;
dmahd = ~dmah;
dmapd = ~dmap;
ain0d = ain0.f + 1.0f;
ain1d = ain1.f + 1.0f;
ain2d = ain2.f + 1.0f;
ain3d = ain3.f + 1.0f;
ain4d = ain4.f + 1.0f;
ain5d = ain5.f + 1.0f;
ain6d = ain6.f + 1.0f;
ain7d = ain7.f + 1.0f;
tempd = temp.f + 1.0f;
vrefd = vref.f + 1.0f;
rated = 0xFFFFFFFF;
convstd = convst ^ 0x01;
}
if (initflag == 2) adccon3d = ~adccon3;
initflag = 0;
if (adccon1d != adccon1) {
StringHex2 (GetDlgItem (IDC_AD_ADCCON1), adccon1);
if ((adccon1d ^ adccon1) & 0xC0) ((CComboBox *) GetDlgItem (IDC_AD_MODE))->SetCurSel((adccon1 & 0xC0) >> 6);
if ((adccon1d ^ adccon1) & 0x30) ((CComboBox *) GetDlgItem (IDC_AD_CLOCK))->SetCurSel((adccon1 & 0x30) >> 4);
if ((adccon1d ^ adccon1) & 0x0C) ((CComboBox *) GetDlgItem (IDC_AD_ACQUISITION))->SetCurSel((adccon1 & 0x0C) >> 2);
if ((adccon1d ^ adccon1) & 0x02) ((CButton *) GetDlgItem (IDC_AD_T2C))->SetCheck ((adccon1 & 0x02) ? 1 : 0);
if ((adccon1d ^ adccon1) & 0x01) ((CButton *) GetDlgItem (IDC_AD_EXC))->SetCheck ((adccon1 & 0x01) ? 1 : 0);
adccon1d = adccon1;
}
if (adccon2d != adccon2) {
StringHex2 (GetDlgItem (IDC_AD_ADCCON2), adccon2);
if ((adccon2d ^ adccon2) & 0x0F) ((CComboBox *) GetDlgItem (IDC_AD_CHANNEL))->SetCurSel(adccon2 & 0x0F);
if ((adccon2d ^ adccon2) & 0x10) ((CButton *) GetDlgItem (IDC_AD_SCONV))->SetCheck ((adccon2 & 0x10) ? 1 : 0);
if ((adccon2d ^ adccon2) & 0x20) ((CButton *) GetDlgItem (IDC_AD_CCONV))->SetCheck ((adccon2 & 0x20) ? 1 : 0);
if ((adccon2d ^ adccon2) & 0x40) ((CButton *) GetDlgItem (IDC_AD_DMA))->SetCheck ((adccon2 & 0x40) ? 1 : 0);
if ((adccon2d ^ adccon2) & 0x80) ((CButton *) GetDlgItem (IDC_AD_ADCI))->SetCheck ((adccon2 & 0x80) ? 1 : 0);
adccon2d = adccon2;
}
if (adccon3d != adccon3) {
StringHex2 (GetDlgItem (IDC_AD_ADCCON3), adccon3);
if ((adccon3d ^ adccon3) & 0x80) ((CButton *) GetDlgItem (IDC_AD_BUSY))->SetCheck ((adccon3 & 0x80) ? 1 : 0);
adccon3d = adccon3;
}
if ((adcdatald != adcdatal) || (adcdatahd != adcdatah)) {
StringHex4 (GetDlgItem (IDC_AD_ADCDATA), (adcdatah << 8) + adcdatal);
adcdatald = adcdatal;
adcdatahd = adcdatah;
}
if ((dmald != dmal) || (dmahd != dmah) || (dmapd != dmap)) {
StringHex6 (GetDlgItem (IDC_AD_DMAPHL), (dmap << 16) + (dmah << 8) + dmal);
dmald = dmal;
dmahd = dmah;
dmapd = dmap;
}
rate = (fosc / (((adccon1 & 0x0C) >> 2) + 17)) >> ((adccon1 & 0x30) >> 4);
if (rated != rate) {
sprintf (locbuffer, "%ld", rate);
SetDlgItemText (IDC_AD_RATE, locbuffer);
rated = rate;
}
if ((convstd ^ convst) & 0x01) {
((CButton *) GetDlgItem (IDC_AD_CONVST))->SetCheck ((convst & 0x01) ? 1 : 0);
convstd = convst;
}
if (ain0d != ain0.f) { StringFloat (GetDlgItem (IDC_AD_AIN0), ain0.f); ain0d = ain0.f; }
if (ain1d != ain1.f) { StringFloat (GetDlgItem (IDC_AD_AIN1), ain1.f); ain1d = ain1.f; }
if (ain2d != ain2.f) { StringFloat (GetDlgItem (IDC_AD_AIN2), ain2.f); ain2d = ain2.f; }
if (ain3d != ain3.f) { StringFloat (GetDlgItem (IDC_AD_AIN3), ain3.f); ain3d = ain3.f; }
if (ain4d != ain4.f) { StringFloat (GetDlgItem (IDC_AD_AIN4), ain4.f); ain4d = ain4.f; }
if (ain5d != ain5.f) { StringFloat (GetDlgItem (IDC_AD_AIN5), ain5.f); ain5d = ain5.f; }
if (ain6d != ain6.f) { StringFloat (GetDlgItem (IDC_AD_AIN6), ain6.f); ain6d = ain6.f; }
if (ain7d != ain7.f) { StringFloat (GetDlgItem (IDC_AD_AIN7), ain7.f); ain7d = ain7.f; }
if (vrefd != vref.f) { StringFloat (GetDlgItem (IDC_AD_VREF), vref.f); vrefd = vref.f; }
if (tempd != temp.f) {
sprintf (locbuffer, "%1.1f", temp.f);
(GetDlgItem (IDC_AD_TEMP))->SetWindowText (locbuffer);
tempd = temp.f;
}
}
BEGIN_MESSAGE_MAP(CPeriDialog, CDialog)
//{{AFX_MSG_MAP(CPeriDialog)
ON_WM_ACTIVATE()
ON_WM_CLOSE()
ON_CBN_SELCHANGE(IDC_AD_MODE, OnSelchangeAdMode)
ON_CBN_SELCHANGE(IDC_AD_CLOCK, OnSelchangeAdClock)
ON_CBN_SELCHANGE(IDC_AD_ACQUISITION, OnSelchangeAdAcquisition)
ON_CBN_SELCHANGE(IDC_AD_CHANNEL, OnSelchangeAdChannel)
ON_EN_KILLFOCUS(IDC_AD_ADCCON1, OnKillfocusAdAdccon1)
ON_EN_KILLFOCUS(IDC_AD_ADCCON2, OnKillfocusAdAdccon2)
ON_EN_KILLFOCUS(IDC_AD_ADCCON3, OnKillfocusAdAdccon3)
ON_EN_KILLFOCUS(IDC_AD_ADCDATA, OnKillfocusAdAdcdata)
ON_EN_KILLFOCUS(IDC_AD_DMAPHL, OnKillfocusAdDmaphl)
ON_BN_CLICKED(IDC_AD_CONVST, OnAdConvst)
ON_BN_CLICKED(IDC_AD_SCONV, OnAdSconv)
ON_BN_CLICKED(IDC_AD_CCONV, OnAdCconv)
ON_BN_CLICKED(IDC_AD_DMA, OnAdDma)
ON_BN_CLICKED(IDC_AD_EXC, OnAdExc)
ON_BN_CLICKED(IDC_AD_T2C, OnAdT2c)
ON_BN_CLICKED(IDC_AD_ADCI, OnAdAdci)
ON_BN_CLICKED(IDC_AD_BUSY, OnAdBusy)
ON_EN_KILLFOCUS(IDC_AD_AIN0, OnKillfocusAdAin0)
ON_EN_KILLFOCUS(IDC_AD_AIN1, OnKillfocusAdAin1)
ON_EN_KILLFOCUS(IDC_AD_AIN2, OnKillfocusAdAin2)
ON_EN_KILLFOCUS(IDC_AD_AIN3, OnKillfocusAdAin3)
ON_EN_KILLFOCUS(IDC_AD_AIN4, OnKillfocusAdAin4)
ON_EN_KILLFOCUS(IDC_AD_AIN5, OnKillfocusAdAin5)
ON_EN_KILLFOCUS(IDC_AD_AIN6, OnKillfocusAdAin6)
ON_EN_KILLFOCUS(IDC_AD_AIN7, OnKillfocusAdAin7)
ON_EN_KILLFOCUS(IDC_AD_TEMP, OnKillfocusAdTemp)
ON_EN_KILLFOCUS(IDC_AD_VREF, OnKillfocusAdVref)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPeriDialog message handlers
void CPeriDialog::PostNcDestroy() {
delete this; // delete the new'ed object
pCPeriDialog = NULL; // clear external Object pointer here.
}
BOOL CPeriDialog::OnInitDialog() {
CDialog::OnInitDialog();
// TODO: Add extra initialization here
initflag =1;
Update();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CPeriDialog::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) {
CDialog::OnActivate(nState, pWndOther, bMinimized);
switch (nState) {
case WA_INACTIVE:
Agsi.HandleFocus(NULL); // Clear Modeless Handle
break;
case WA_ACTIVE:
case WA_CLICKACTIVE:
Agsi.HandleFocus(m_hWnd); // Set Modeless Handle
break;
}
}
void CPeriDialog::OnClose() {
GetWindowRect (&pM->pDlg->rc); // save Window position
pM->pDlg->hw = NULL; // clear m_hWnd
DestroyWindow(); //--- modeless
}
void CPeriDialog::OnSelchangeAdMode() {
int i;
DWORD val;
i = ((CComboBox *) GetDlgItem (IDC_AD_MODE))->GetCurSel();
val = (i & 3) << 6;
Agsi.WriteSFR(ADCCON1, val, 0xC0);
Agsi.UpdateWindows();
}
void CPeriDialog::OnSelchangeAdClock() {
int i;
DWORD val;
i = ((CComboBox *) GetDlgItem (IDC_AD_CLOCK))->GetCurSel();
val = (i & 3) << 4;
Agsi.WriteSFR(ADCCON1, val, 0x30);
Agsi.UpdateWindows();
}
void CPeriDialog::OnSelchangeAdAcquisition() {
int i;
DWORD val;
i = ((CComboBox *) GetDlgItem (IDC_AD_ACQUISITION))->GetCurSel();
val = (i & 3) << 2;
Agsi.WriteSFR(ADCCON1, val, 0x0C);
Agsi.UpdateWindows();
}
void CPeriDialog::OnSelchangeAdChannel() {
int i;
DWORD val;
i = ((CComboBox *) GetDlgItem (IDC_AD_CHANNEL))->GetCurSel();
val = i & 0x0F;
Agsi.WriteSFR(ADCCON2, val, 0x0F);
Agsi.UpdateWindows();
}
void CPeriDialog::OnKillfocusAdAdccon1() { HandleByteInput (GetDlgItem(IDC_AD_ADCCON1), ADCCON1); }
void CPeriDialog::OnKillfocusAdAdccon2() { HandleByteInput (GetDlgItem(IDC_AD_ADCCON2), ADCCON2); }
void CPeriDialog::OnKillfocusAdAdccon3() { HandleByteInput (GetDlgItem(IDC_AD_ADCCON3), ADCCON3); }
void CPeriDialog::OnKillfocusAdAdcdata() { HandleWordInput (GetDlgItem(IDC_AD_ADCDATA), ADCDATAL, ADCDATAH); }
void CPeriDialog::OnKillfocusAdDmaphl() { Handle3ByteInput (GetDlgItem(IDC_AD_DMAPHL), DMAL, DMAH, DMAP); }
void CPeriDialog::OnAdConvst() { WriteBitVTR(CONVST, 0x01, IsDlgButtonChecked (IDC_AD_CONVST)); }
void CPeriDialog::OnAdSconv() { WriteBit(ADCCON2, 0x10, IsDlgButtonChecked (IDC_AD_SCONV)); }
void CPeriDialog::OnAdCconv() { WriteBit(ADCCON2, 0x20, IsDlgButtonChecked (IDC_AD_CCONV)); }
void CPeriDialog::OnAdDma() { WriteBit(ADCCON2, 0x40, IsDlgButtonChecked (IDC_AD_DMA)); }
void CPeriDialog::OnAdExc() { WriteBit(ADCCON1, 0x01, IsDlgButtonChecked (IDC_AD_EXC)); }
void CPeriDialog::OnAdT2c() { WriteBit(ADCCON1, 0x02, IsDlgButtonChecked (IDC_AD_T2C)); }
void CPeriDialog::OnAdAdci() { WriteBit(ADCCON2, 0x80, IsDlgButtonChecked (IDC_AD_ADCI)); }
void CPeriDialog::OnAdBusy() { WriteBit(ADCCON3, 0x80, IsDlgButtonChecked (IDC_AD_BUSY)); }
void CPeriDialog::OnKillfocusAdAin0() { HandleFloatInput (GetDlgItem(IDC_AD_AIN0), AIN0); }
void CPeriDialog::OnKillfocusAdAin1() { HandleFloatInput (GetDlgItem(IDC_AD_AIN1), AIN1); }
void CPeriDialog::OnKillfocusAdAin2() { HandleFloatInput (GetDlgItem(IDC_AD_AIN2), AIN2); }
void CPeriDialog::OnKillfocusAdAin3() { HandleFloatInput (GetDlgItem(IDC_AD_AIN3), AIN3); }
void CPeriDialog::OnKillfocusAdAin4() { HandleFloatInput (GetDlgItem(IDC_AD_AIN4), AIN4); }
void CPeriDialog::OnKillfocusAdAin5() { HandleFloatInput (GetDlgItem(IDC_AD_AIN5), AIN5); }
void CPeriDialog::OnKillfocusAdAin6() { HandleFloatInput (GetDlgItem(IDC_AD_AIN6), AIN6); }
void CPeriDialog::OnKillfocusAdAin7() { HandleFloatInput (GetDlgItem(IDC_AD_AIN7), AIN7); }
void CPeriDialog::OnKillfocusAdTemp() { HandleFloatInput (GetDlgItem(IDC_AD_TEMP), TEMP); }
void CPeriDialog::OnKillfocusAdVref() { HandleFloatInput (GetDlgItem(IDC_AD_VREF), VREF); }
// The following two functions and the corresponding invisible buttons are necessary
// to handle the behavior of the ESC and Enter Keys
void CPeriDialog::OnOK() {
// CDialog::OnOK(); // Do nothing when <Enter> is pressed
}
void CPeriDialog::OnCancel() {
OnClose(); // Close Dialog when <ESC> is pressed
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -