⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculator.c

📁 利用89s51去寫結構化keil-C 4x4鍵盤掃描+LCD螢幕顯示 HW01:四則運算+時鍾顯示 HW02:頻率偵測器 ps.鍵盤掃描不是利用延遲作彈跳(推薦)
💻 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 + -