用c语言编写简易计算器
- 格式:doc
- 大小:39.00 KB
- 文档页数:5
在c51中用c语言编写简易计算器
#include
#define BYTE unsigned char
int jh;
int a;
int b;
int c; /*c是符号*/
/*按键的值*/
sbit P11=P1^3;
sbit P12=P1^2;
sbit P13=P1^1;
sbit P14=P1^0;
BYTE disply[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(int ms) //延时函数
{
while(ms--)
{ int h;
for( h=0;h<=250;h++)
{
;
}
}
}
void get_jianzhi() //获取键盘值的函数
{
BYTE disi;BYTE gaosi;
gaosi=P2;
P2=0x0f;delay(10 );disi=P2; gaosi=gaosi+disi;
switch(gaosi)
{
case 0xee:{jh=0;break;}
case 0xde:{jh=1;break;}
case 0xbe:{jh=2;break;}
case 0x7e:{jh=3;break;}
case 0xed:{jh=4;break;}
case 0xdd:{jh=5;break;}
case 0xbd:{jh=6;break;}
case 0x7d:{jh=7;break;}
case 0xeb:{jh=8;break;}
case 0xdb:{jh=9;break;}
case 0xbb:{jh=10;break;}
case 0x7b:{jh=11;break;}
case 0xe7:{jh=12;break;}
case 0xd7:{jh=13;break;}
case 0xb7:{jh=14;break;}
case 0x77:{jh=15;break;}
}
do{P2=0xf0;}while(P2!=0xf0);
}
void show() /*显示函数*/
{
BYTE m; /*千位*/
BYTE h; /*百位*/
BYTE j; /*十位*/
BYTE i; /*个位*/
P3=0xff;
if(c==14)
{b=0;}
else
{ }
while(P2==0xf0) /*有键按下则跳出循环函数*/
{
j=0;i=0;h=0;m=0;
if(b!=0) /*b不为0则显示b并判断它有几位数*/
{
if(b>99) {h=b/100;j=(b-h*100)/10;i=b%10;} else{
if(b>9){j=b/10;i=b%10;}
else{i=b;}
}
}
else{
if(a>999)
{ m=a/1000;h=(a-m*1000)/100;
j=(a-m*1000-h*100)/10;i=a%10;
}
else
{
if(a>99)
{
h=a/100;j=(a-h*100)/10;i=a%10;
}
else{
if(a>9)
{
j=a/10;i=a%10;
}
else{i=a;}
}
}
}
if(m!=0){ P11=0; P0=disply[i];
delay(5);P0=0x00;P11=1;P12=0;P0=disply[j];
delay(5);P0=0x00;P12=1;
P13=0;P0=disply[h];
delay(5);P0=0x00;P13=1;P14=0;P0=disply[m]; delay(5);P14=1;P0=0x00;
}
else { if(h!=0)
{
P11=0; P0=disply[i];
delay(5);P0=0x00;P11=1;P12=0;P0=disply[j]; /*判断要显示的数字是几位数*/
delay(5);P0=0x00;P12=1;
P13=0;P0=disply[h]; delay(5);P0=0x00;P13=1;
}
else{
if(j!=0)
{
P11=0;P0=disply[i];delay(5);P0=0x00;
P11=1;P12=0;P0=disply[j]; delay(5); P0=0x00;P12=1;
}
else{
P11=0;P0= P0=disply[i];
}
}
}
}
}
void main()
{
BYTE k=0; /*用来判断是给a还是b赋值*/
P2=0xf0;
a=0; /*第一次按键值的初始化*/
b=0; /*第二次按键值的初始化*/
bat:
show();
delay(10 );
get_jianzhi() ;
P2=0xf0;
if(jh==15) /*按了清除键的话,全部清零*/
{a=0;b=0;c=0;}
else
{
if(jh>=0&&jh<=9) /*按了数字键*/
{
if(k==0) /*判断是给a还是b赋值*/
{
a=a*10+jh;
}
else
{ b=b*10+jh;
}
goto bat;
}
else
{
if(a==0&&b==0) /*在开始时只按功能键的话,返回*/
{
goto bat;
}
else
{
k=1;
if(b==0)
{
c=jh;
}
else
{
switch(c) /*运算法则*/
{
case 10: { a=a+b;break;}
case 11: {a=a-b;break;}
case 12: {a=a*b;break;}
case 13: {a=a/b;break;}