您好,欢迎访问三七文档
//**程序名:计算器处理主程序,根据计算器的输入状态分派不同的函数对按键进行处理。**//**功能:当b_WorkMode=0是,若有键按下则调用此函数对键码进行处理。**//*************************************************************************************************//*************************************************************************************************//*************************************************************************************************//**//*******************************头文件及宏定义***************************//**//*************************************************************************************************#includeCalReady.h//*************************************************************************************************//**//*********************************全局变量*******************************//**//*************************************************************************************************externunsignedlongul_Number;//LCE显示数据,LCD实时显示该数字。//工作模式(默认为计算器模式)externbitb_WorkMode;//0--计算器模式;//1--计时模式。//定义在KeyProcess.c中。unsignedcharuc_ModeChange=0;externbitb_LCDClean;externunsignedcharuc_ReportSymbol;unsignedlongul_NumberOne=0;//第一个数unsignedlongul_NumberTwo=0;//第二个数unsignedcharuc_Operator=0;//运算符unsignedlongul_Result=0;//运算结果unsignedcharuc_NumPointer=1;//计算状态//*************************************************************************************************//**//********************************计算器处理主函数*******************************//**//*************************************************************************************************voidvCalculator(unsignedcharucKeyCode){if(ucKeyCode==41)//判断按键是不是'NO/C'。{if(uc_NumPointer==1)//如果是‘NO/C’键则判断手机否是状态一。{if(uc_ModeChange==2)//如果是状态一则看uc_ModeChange是不是2。{uc_ModeChange=0;//如果是2则计时器模式。b_WorkMode=1;uc_ReportSymbol=3;//闪烁显示:-CHAG-1。表明正在切换状态。b_LCDClean=1;}else{uc_ModeChange++;//如果uc_ModeChange不是2则加一。ul_NumberOne=0;//清除所有数据,将所有数据恢复到状态一。ul_NumberTwo=0;ul_Number=0;uc_NumPointer=1;}}else{ul_NumberOne=0;//清除所有数据,将所有数据恢复到状态一。ul_NumberTwo=0;ul_Number=0;uc_NumPointer=1;}}else{//如果不是“NO/C”键,首先将uc_ModeChange清零。uc_ModeChange=0;//根据不同状态分派不同的键处理函数switch(uc_NumPointer){case1:vCalReadyOne(ucKeyCode);//进入状态一。break;case2:vCalReadyTwo(ucKeyCode);//进入状态二。break;case3:vCalReadyThree(ucKeyCode);//进入状态三。break;default:break;}}}//*************************************************************************************************//*************************************************************************************************//**程序名:计算器案件初始处理及运算。**//**功能:在计算器模式下,对按键进行响应,如清零,计算结果等。**//**错误代码:-EOR-1:被除数等于0;**//**-EOR-2:被减数小于减数;**//**-EOR-9:超出可显示的最大值。**//*************************************************************************************************//*************************************************************************************************//*************************************************************************************************//**//*******************************头文件及宏定义***************************//**//*************************************************************************************************//*************************************************************************************************//**//*********************************全局变量*******************************//**//*************************************************************************************************externunsignedlongul_Number;externunsignedlongul_NumberOne;externunsignedlongul_NumberTwo;externunsignedcharuc_Operator;externunsignedlongul_Result;externunsignedcharuc_NumPointer;externbitb_LCDClean;externunsignedcharuc_ReportSymbol;bitb_Zero=0;//状态一0输入检测,若有0输入则置一。//*************************************************************************************************//**//********************************计算结果*******************************//**//*************************************************************************************************voidvGetResult(){switch(uc_Operator){//除法运算case14:if(ul_NumberTwo!=0)ul_Result=ul_NumberOne/ul_NumberTwo;else{ul_Result=0;uc_ReportSymbol=1;//当被除数等于0时显示错误代码EOR-1b_LCDClean=1;}break;//乘法运算case24:if((ul_NumberOne*ul_NumberTwo)999999){ul_Result=0;uc_ReportSymbol=9;b_LCDClean=1;//当结果超出显示范围时显示错误代码EOR-9}elseul_Result=ul_NumberOne*ul_NumberTwo;break;//减法运算case34:if(ul_NumberOneul_NumberTwo)ul_Result=ul_NumberOne-ul_NumberTwo;else{ul_Result=0;uc_ReportSymbol=2;//当被减数小于减数时显示错误代码EOR-2b_LCDClean=1;}break;//加法运算case44:if((ul_NumberOne+ul_NumberTwo)999999){ul_Result=0;uc_ReportSymbol=9;b_LCDClean=1;//当结果超出显示范围时显示错误代码EOR-9}elseul_Result=ul_NumberOne+ul_NumberTwo;break;default:break;}ul_Number=ul_Result;ul_NumberOne
本文标题:带计时器的计算机
链接地址:https://www.777doc.com/doc-3349344 .html