📄 源程序.c
字号:
#include <math.h>
#include <stdio.h>
#include <AT89X52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar keyscan(void);
void delay(uint time);
void display(void);
float getnum(void);
float getnum_c(void);
float add(float a,float b);
float sub(float a,float b);
float mul(float a,float b);
float div(float a,float b);
void init(void);
uchar key_num[8];
uchar set_count;//置数的次数 按下+,-,*,/前为置a的数,按下后为置b的数
uchar bit_i;//置数的位数
float num_a,num_b,num_c;//参与运算的数
uchar sig_a,sig_b,sig_c;//数的符号
uchar cal_sig;//运算符号
uchar dot;
//-----------------------------------------------------------------
main()
{
uchar key_value,num=0;
unsigned long num_l,temp;
sig_a=0;
num_a=0;
cal_sig=0;
init();//初始化
while(1)
{
key_value=keyscan();
switch(key_value)
{
case 1:if(key_num[bit_i]==9)key_num[bit_i]=0;
else key_num[bit_i]++;
break; //加 1
case 2:if(key_num[bit_i]==0)key_num[bit_i]=9;
else key_num[bit_i]--;
break; //减 1
case 3:if(bit_i<5){bit_i++;key_num[bit_i]=0;}break; //>>右移一位
case 4:if(bit_i<5){bit_i++;key_num[bit_i]=0;}break; //<<左移一位
case 5:num_a=getnum();
if((bit_i==5&&key_num[1]>=6&&key_num[2]>=5&&key_num[3]>=5&&key_num[4]>=3&&key_num[5]>=7)||(bit_i==5&&key_num[1]>=7))
{key_num[1]=14;
key_num[2]=19;
key_num[3]=19;
key_num[4]=0;
key_num[5]=19;}
else init();
set_count=1;
cal_sig=1;
key_num[7]=10;
break; //加 + 运算
case 6:num_a=getnum();
if((bit_i==5&&key_num[1]>=6&&key_num[2]>=5&&key_num[3]>=5&&key_num[4]>=3&&key_num[5]>=7)||(bit_i==5&&key_num[1]>=7))
{key_num[1]=14;
key_num[2]=19;
key_num[3]=19;
key_num[4]=0;
key_num[5]=19;}
else init();
set_count=1;
cal_sig=2;
key_num[7]=11;
break; //减 - 运算
case 7:num_a=getnum();
if((bit_i==5&&key_num[1]>=6&&key_num[2]>=5&&key_num[3]>=5&&key_num[4]>=3&&key_num[5]>=7)||(bit_i==5&&key_num[1]>=7))
{key_num[1]=14;
key_num[2]=19;
key_num[3]=19;
key_num[4]=0;
key_num[5]=19;}
else init();
set_count=1;
cal_sig=3;
key_num[7]=12;
break; //乘 x 运算
case 8:num_a=getnum();
if((bit_i==5&&key_num[1]>=6&&key_num[2]>=5&&key_num[3]>=5&&key_num[4]>=3&&key_num[5]>=7)||(bit_i==5&&key_num[1]>=7))
{key_num[1]=14;
key_num[2]=19;
key_num[3]=19;
key_num[4]=0;
key_num[5]=19;}
else init();
set_count=1;
cal_sig=4;
key_num[7]=13;
break; //除 / 运算
case 9:if(set_count==0)
if(sig_a==0)
{sig_a=1;
key_num[0]=18;}
else {sig_a=0;
key_num[0]=17;}// 设置数a的符号
if(set_count==1)
if(sig_b==0)
{sig_b=1;
key_num[0]=18;}
else {sig_b=0;
key_num[0]=17;}// 设置数b的符号
break; //+/- 符号位
case 10:dot=bit_i;break; //。小数点
case 11:break; //
case 12:if(bit_i>1)
{key_num[bit_i]=17;
bit_i--;
if(dot>bit_i)
dot=bit_i;
}
if(bit_i==1)dot=0;
break; //backspace 退格
case 13:break; //= 等于
case 14:num_b=getnum();
if((bit_i==5&&key_num[1]>=6&&key_num[2]>=5&&key_num[3]>=5&&key_num[4]>=3&&key_num[5]>=7)||(bit_i==5&&key_num[1]>=7))
{key_num[1]=14;
key_num[2]=19;
key_num[3]=19;
key_num[4]=0;
key_num[5]=19;}
else{num_c=getnum_c();
if(sig_c==0)
key_num[0]=17;
else key_num[0]=18;
set_count=0; //num_c=num_a;
if(num_b==0&&cal_sig==4||num_c>999999)
{key_num[1]=14;
key_num[2]=19;
key_num[3]=19;
key_num[4]=0;
key_num[5]=19;}
else
if(num_c>=0&&num_c<=99999)
{if(num_c>=0)
{temp=num_c/10000;
if(temp!=0)key_num[1]=temp;
else key_num[1]=17;
num_l=num_c;
num_l=num_l%10000;
temp=num_l/1000;
if(temp!=0)key_num[2]=temp;
else
{if(key_num[1]==17)key_num[2]=17;
else key_num[2]=0;}//else
temp=num_l%1000;
num_l=temp;
temp=temp/100;
if(temp!=0)key_num[3]=temp;
else
{if(key_num[1]==17&&key_num[2]==17)key_num[3]=17;
else key_num[3]=0;}//else
temp=num_l%100;
num_l=temp;
temp=temp/10;
if(temp!=0)key_num[4]=temp;
else
{if(key_num[1]==17&&key_num[2]==17&&key_num[3]==17)
key_num[4]=17;
else key_num[4]=0;}//else
temp=num_l%10;
key_num[5]=temp;
}//if
}//if
if(num_c>99999)
{temp=num_c/100000;
if(temp!=0)key_num[1]=temp;
else key_num[1]=17;
num_l=num_c;
num_l=num_l%100000;
temp=num_l/10000;
if(temp!=0)key_num[2]=temp;
else
{if(key_num[1]==17)key_num[2]=17;
else key_num[2]=0;}//else
temp=num_l%10000;
num_l=temp;
temp=temp/1000;
if(temp!=0)key_num[3]=temp;
else
{if(key_num[1]==17&&key_num[2]==17)key_num[3]=17;
else key_num[3]=0;}//else
temp=num_l%1000;
num_l=temp;
temp=temp/100;
if(temp!=0)key_num[4]=temp;
else
{if(key_num[1]==17&&key_num[2]==17&&key_num[3]==17)key_num[4]=17;
else key_num[4]=0;}//else
temp=num_l%100;
num_l=temp;
temp=temp/10;
if(temp!=0)key_num[5]=temp;
else
{if(key_num[1]==17&&key_num[2]==17&&key_num[3]==17&&key_num[4]==17)
key_num[5]=17;
else key_num[5]=0;}//else
temp=num_l%10;
key_num[6]=temp;
}//if
}//else
break; //= 等于
case 15:break; //
case 16:init();
sig_a=0;
num_a=0;
cal_sig=0;
break; //C 清零
default:break;
}//switch
display();
}//while
}//main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -