用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;}