📄 calculator.c
字号:
#include "Calculator.h"
///////////////////////////////////////////////////////////////////////////
// Variable
USTCULTDATA data g_ustValData;
BYTE bdata g_bfCULTStatus;
//USTCULTDATA data ustValData;
BOOL fnCULT_Add(void)
{
g_ustValData.tadd.bEqL = (g_ustValData.tadd.bSrc + g_ustValData.tadd.bDes);
return TRUE;
}
BOOL fnCULT_Sub(void)
{
g_ustValData.tsub.iEq = ((int)(g_ustValData.tsub.cSrc - g_ustValData.tsub.cDes));
return TRUE;
}
BOOL fnCULT_Mul(void)
{
g_ustValData.tmul.wEq = g_ustValData.tmul.bSrc;
//g_ustValData.tmul.bSrc = 0;
//g_ustValData.tmul.wEq *= g_ustValData.tw.wIN;
g_ustValData.tmul.wEq *= g_ustValData.tmul.bDes;
return TRUE;
}
BOOL fnCULT_Div(void)
{
if (g_ustValData.tdiv.bDes == 0)
return FALSE;
g_ustValData.tdiv.bEq = (g_ustValData.tdiv.bSrc / g_ustValData.tdiv.bDes);
g_ustValData.tdiv.bRemd = (g_ustValData.tdiv.bSrc % g_ustValData.tdiv.bDes);
return TRUE;
}
void fnCULT_DispSPChr(BYTE bAddr, BYTE bOP)
{
switch(bOP)
{
case CULT_ADD:
//bOP = 0x2B;
fnDISP_Chr(bAddr, DISP_ADD);
break;
case CULT_SUB:
//bOP = 0x2D;
fnDISP_Chr(bAddr, DISP_SUB);
break;
case CULT_MUL:
//bOP = 0x2A;
fnDISP_Chr(bAddr, DISP_MUL);
break;
case CULT_DIV:
//bOP = 0x2F;
fnDISP_Chr(bAddr, DISP_DIV);
break;
case EQUAL:
//bOP = 0x3D;
fnDISP_Chr(bAddr, DISP_EQU);
break;
default:
break;
}
//fnDISP_WrData(bOP);
}
void fnCULT_KeyIn(void)
{
if(g_bKeyValueOld == 15){
return;
} else {
if(g_bfCULTStatus == CALCULATOR){
if(g_bKeyValueOld > 9){
return;
}
g_bfCULTStatus = FNUM_HI;
fnDISP_ClrDisp();
}
}
switch(g_bfCULTStatus)
{
case FNUM_HI:
if(g_bKeyValueOld <= 9){
g_ustValData.tb.bX = (g_bKeyValueOld * 10);
g_bfCULTStatus = FNUM_LO;
fnDISP_Int(LOCAL_02, g_bKeyValueOld);
}
break;
case FNUM_LO:
if(g_bKeyValueOld <= 9){
g_ustValData.tb.bX += g_bKeyValueOld;
g_bfCULTStatus = OPERATION;
fnDISP_Int(CONTINUE, g_bKeyValueOld);
} else if((g_bKeyValueOld >= 10) && (g_bKeyValueOld <= 13)){
g_ustValData.tb.bX /= 10;
g_ustValData.tb.bOP = g_bKeyValueOld;
g_bfCULTStatus = SNUM_HI;
fnCULT_DispSPChr(CONTINUE, g_bKeyValueOld);
}
break;
case OPERATION:
if((g_bKeyValueOld >= 10) && (g_bKeyValueOld <= 13)){
g_ustValData.tb.bOP = g_bKeyValueOld;
g_bfCULTStatus = SNUM_HI;
fnCULT_DispSPChr(CONTINUE, g_bKeyValueOld);
}
break;
case SNUM_HI:
if(g_bKeyValueOld <= 9){
g_ustValData.tb.bO = (g_bKeyValueOld * 10);
g_bfCULTStatus = SNUM_LO;
fnDISP_Int(CONTINUE, g_bKeyValueOld);
}
break;
case SNUM_LO:
if(g_bKeyValueOld <= 9){
g_ustValData.tb.bO += g_bKeyValueOld;
g_bfCULTStatus = EQUAL;
//fnDISP_RdCmd(BYTE * bpData)
//fnDISP_RdAddr(&bBuf);
fnDISP_Int(CONTINUE, g_bKeyValueOld);
} else if(g_bKeyValueOld == EQUAL){
g_ustValData.tb.bO /= 10;
g_bfCULTStatus = ENTER;
fnCULT_DispSPChr(CONTINUE, g_bKeyValueOld);
}
break;
case EQUAL:
if(g_bKeyValueOld == EQUAL){
g_bfCULTStatus = ENTER;
fnCULT_DispSPChr(CONTINUE, g_bKeyValueOld);
}
break;
default:
break;
}
}
void fnCULT_Operation(void)
{
if(g_bfCULTStatus != ENTER){
return;
} else {
g_bfCULTStatus = 0;
}
switch(g_ustValData.tb.bOP)
{
case CULT_ADD:
fnCULT_Add();
fnDISP_Int(CONTINUE, g_ustValData.tadd.bEqL);
break;
case CULT_SUB:
fnCULT_Sub();
fnDISP_Int(CONTINUE, g_ustValData.tsub.iEq);
break;
case CULT_MUL:
fnCULT_Mul();
fnDISP_Int(CONTINUE, g_ustValData.tmul.wEq);
break;
case CULT_DIV:
if(fnCULT_Div()){
fnDISP_Int(CONTINUE, g_ustValData.tdiv.bEq);
fnDISP_Chr(CONTINUE, DISP_SPACE);
fnDISP_Int(CONTINUE, g_ustValData.tdiv.bRemd);
} else {
fnDISP_ClrDisp();
fnDISP_Str(LOCAL_02, "ERROR:IN Zero");
}
break;
default:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -