📄 calculator.c
字号:
else
{
Display_Ram[0]=' ';Display_Ram[1]=' ';
}
}
else
{
Display_Ram[0]=' ';Display_Ram[1]=' ';Display_Ram[2]=' ';
}
}
else
{
Display_Ram[0]=' ';Display_Ram[1]=' ';Display_Ram[2]=' ';Display_Ram[3]=' ';
}
}
else{
Display_Ram[0]=' ';Display_Ram[1]=' ';Display_Ram[2]=' ';Display_Ram[3]=' ';Display_Ram[4]='0';
}
p_Display_Ram=Display_Ram; //指向显示缓冲单元
LCD_disp_string(11,1,p_Display_Ram);
}
}// end if Flag_operand_B_NoEmpty
}//end else if lag_operator_FristTime
}// end if Flag_operand_A_NoEmpty
break;
default: if(Bit_Number==0&&Key_temp==0) //如果是数字键按下,而且是第一次0按键按下 清零
{
//clear
Clear_All_Flag_Init();
/* operator=operator_Emputy; //运算符初始化
Flag_operand_B_NoEmpty=0; //操作数B 为空
Flag_operand_A_NoEmpty=0; //操作数A 为空
Flag_operator_FristTime=0; //无运算符按下
Flag_Number_FristTime=0; //无操作数按下
operand_A[0]=0;operand_A[1]=0;operand_A[2]=0;operand_A[3]=0;operand_A[4]=0;
operand_B[0]=0;operand_B[1]=0;operand_B[2]=0;operand_B[3]=0;operand_B[4]=0;
Bit_Number=0; */ //位计数清零
//display(); clear line 2
p_string_code=string_clear_line2; //清屏 全部写入空格
LCD_disp_string(0,1,p_string_code);
LCD_write_char(15,1,'0'); // clear 清零
}
else{ //如果是数字键按下
if(Flag_Number_FristTime==0) //如果是第一次的操作数
{
if(Bit_Number<5) //如果按下的操作数位数小于等于 5
{
//operand_A[Bit_Number++]=Key_temp;
switch(Bit_Number) //根据位数处理按键
{
case 0: operand_A[0]=Key_temp;break;
case 1: operand_A[1]=operand_A[0];operand_A[0]=Key_temp;break;
case 2: operand_A[2]=operand_A[1];operand_A[1]=operand_A[0];operand_A[0]=Key_temp;break;
case 3: operand_A[3]=operand_A[2];operand_A[2]=operand_A[1];operand_A[1]=operand_A[0];operand_A[0]=Key_temp;break;
case 4: operand_A[4]=operand_A[3];operand_A[3]=operand_A[2];operand_A[2]=operand_A[1];operand_A[1]=operand_A[0];operand_A[0]=Key_temp;break;
default: Bit_Number=0;
}
Bit_Number++; //位计数加1
Frist=operand_A[0]+operand_A[1]*10+operand_A[2]*100+operand_A[3]*1000+operand_A[4]*10000;
//运算
if(operand_A[4]>=6)
{
The_Number_Too_Large();
}
else
{
Flag_operand_A_NoEmpty=1; //操作数A 不为空
Flag_operator_FristTime=1; //没有运算符按下
//display(); clear line 2
p_string_code=string_clear_line2; //清空LCD
LCD_disp_string(0,1,p_string_code);
if(Frist>0)
{ Display_Ram[4]=(Frist%10)+0x30;
if(Frist>=10)
{
Display_Ram[3]=(Frist%100)/10+0x30;
if(Frist>=100)
{
Display_Ram[2]=(Frist%1000)/100+0x30;
if(Frist>=1000)
{
Display_Ram[1]=(Frist%10000)/1000+0x30;
if(Frist>=10000)
{
Display_Ram[0]=(Frist/10000)+0x30;
}
else
{
Display_Ram[0]=' ';
}
}
else
{
Display_Ram[0]=' ';Display_Ram[1]=' ';
}
}
else
{
Display_Ram[0]=' ';Display_Ram[1]=' ';Display_Ram[2]=' ';
}
}
else
{
Display_Ram[0]=' ';Display_Ram[1]=' ';Display_Ram[2]=' ';Display_Ram[3]=' ';
}
}
else{
Display_Ram[0]=' ';Display_Ram[1]=' ';Display_Ram[2]=' ';Display_Ram[3]=' ';Display_Ram[4]='0';
}
p_Display_Ram=Display_Ram; //指向显示缓冲单元
LCD_disp_string(11,1,p_Display_Ram);
}
}
else // 如果操作数A 的数大于5位,则出错处理
{
//Call clear all and flag
Clear_All_Flag_Init();
/* Bit_Number=0; // 位计数清零
Frist=0;Second=0; //运算数清零
operator=operator_Emputy; //运算符初始化
Flag_operand_B_NoEmpty=0; //操作数B 为空
Flag_operand_A_NoEmpty=0; //操作数A 为空
Flag_operator_FristTime=0; //没有运算符按下
//display the errot
operand_A[0]=0; //清零
operand_A[1]=0;
operand_A[2]=0;
operand_A[3]=0;
operand_A[4]=0;*/
p_string_code=string_error_tomanybit; //指向字符串“出错处理”
LCD_disp_string_code(0,1,p_string_code);
}
}
else //如果操作数A 已经按下
{
if(Bit_Number<5) //如果操作数B 的位数小于等于 5位
{
/*operand_B[Bit_Number++]=Key_temp;
Second=operand_B[0]+operand_B[1]*10+operand_B[2]*100;*/
switch(Bit_Number)
{
case 0: operand_B[0]=Key_temp;break;
case 1: operand_B[1]=operand_B[0];operand_B[0]=Key_temp;break;
case 2: operand_B[2]=operand_B[1];operand_B[1]=operand_B[0];operand_B[0]=Key_temp;break;
case 3: operand_B[3]=operand_B[2];operand_B[2]=operand_B[1];operand_B[1]=operand_B[0];operand_B[0]=Key_temp;break;
case 4: operand_B[4]=operand_B[3];operand_B[3]=operand_B[2];operand_B[2]=operand_B[1];operand_B[1]=operand_B[0];operand_B[0]=Key_temp;break;
default: Bit_Number=0;
}
Bit_Number++; //位数加1
Second=operand_B[0]+operand_B[1]*10+operand_B[2]*100+operand_B[3]*1000+operand_B[4]*10000;
//运算
Flag_operator_FristTime=0; //有运算符按下,可以接收第二次运算符
if(operand_B[4]>=6)
{
The_Number_Too_Large();
}
else
{
if(Second>0)
{ Display_Ram[4]=(Second%10)+0x30;
if(Second>=10)
{
Display_Ram[3]=(Second%100)/10+0x30;
if(Second>=100)
{
Display_Ram[2]=(Second%1000)/100+0x30;
if(Second>=1000)
{
Display_Ram[1]=(Second%10000)/1000+0x30;
if(Second>=10000)
{
Display_Ram[0]=(Second/10000)+0x30;
}
else
{
Display_Ram[0]=' ';
}
}
else
{
Display_Ram[0]=' ';Display_Ram[1]=' ';
}
}
else
{
Display_Ram[0]=' ';Display_Ram[1]=' ';Display_Ram[2]=' ';
}
}
else
{
Display_Ram[0]=' ';Display_Ram[1]=' ';Display_Ram[2]=' ';Display_Ram[3]=' ';
}
}
else{
Display_Ram[0]=' ';Display_Ram[1]=' ';Display_Ram[2]=' ';Display_Ram[3]=' ';Display_Ram[4]='0';
}
Flag_operand_B_NoEmpty=1;
p_Display_Ram=Display_Ram;
LCD_disp_string(11,1,p_Display_Ram);
}
}
else //如果操作数B 的位数 大于5位
{
//Call clear all flag
Frist=0;Second=0; //运算数据清零
Result=0; //结果清零
Clear_All_Flag_Init();
/* operator=operator_Emputy; //运算符初始化
Flag_operand_B_NoEmpty=0; //操作数B 为空
Flag_operand_A_NoEmpty=0; //操作数A 为空
Flag_operator_FristTime=0; //无运算符按下
Flag_Number_FristTime=0; //无操作数按下
//display the errot
operand_B[0]=0;
operand_B[1]=0;
operand_B[2]=0;
operand_B[3]=0;
operand_B[4]=0; */ //显示太多位出错啦!!!!!!!!!
p_string_code=string_error_tomanybit;
LCD_disp_string_code(0,1,p_string_code);
}
} //end default
}//end if
}//end switch
}//end if
}//end Calculator
void Clear_All_Flag_Init(void)
{
operator=operator_Emputy; //运算符初始化
Flag_operand_B_NoEmpty=0; //操作数B 为空
Flag_operand_A_NoEmpty=0; //操作数A 为空
Flag_operator_FristTime=0; //无运算符按下
Flag_Number_FristTime=0; //无操作数
operand_A[0]=0;operand_A[1]=0;operand_A[2]=0;operand_A[3]=0;operand_A[4]=0;
operand_B[0]=0;operand_B[1]=0;operand_B[2]=0;operand_B[3]=0;operand_B[4]=0;
Bit_Number=0; //位计算清零
}
void The_Number_Too_Large(void)
{
Clear_All_Flag_Init();
Frist=0;Second=0;Result=0; //清零
GotoXY(0,1);
Print("Number too large");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -