51单片机实现计算器.docx
《51单片机实现计算器.docx》由会员分享,可在线阅读,更多相关《51单片机实现计算器.docx(21页珍藏版)》请在冰豆网上搜索。
![51单片机实现计算器.docx](https://file1.bdocx.com/fileroot1/2023-1/28/7559c2e9-9b13-4115-a904-fa3ddedd587b/7559c2e9-9b13-4115-a904-fa3ddedd587b1.gif)
51单片机实现计算器
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitdula=P2^6;
sbitwela=P2^7;
sbitB1=P2^3;
sbitkey1=P3^5;
ucharSHZ[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uinta,b,c,d,e,f,g,num,temp,k,pduan,jieguo,num1,num2,num3,num4,num5;
voiddisplay7();
voiddjp();
voiddelay(uintz);
voidkeyscan();
voiddisplay1();
voiddisplay2();
voiddisplay3();
voiddisplay4();
voiddisplay5();
voiddisplay6();
voidjia();
voidjian();
voidcheng();
voidchu();
voiddeng();
voidqingchu();
voidmain()
{
while
(1)
{
P3=0xff;//与独立键盘连用的关键
djp();
P3=0xff;//与独立键盘连用的关键
keyscan();
display7();
}
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voiddjp()//独立键盘
{
if(key1==0)
{
delay(5);
if(key1==0)
{
num=0;//pduan=5;
a=b=c=d=e=f=g=0;
while(!
key1);
delay(5);
while(!
key1);
}
}
}
voiddisplay7()
{
if(num==0)
{
display1();
}
if(num==1)
{
if(a!
=0)
display1();
}
if(num==2)
{
//if(b!
=0)
//{
display1();
display2();
//}
//if(a!
=0)
//display1();
}
if(num==3)
{
//if(c!
=0)
//{
display1();
display2();
display3();
/*}
if(b!
=0)
{
display1();
display2();
}
if(a!
=0)
display1();*/
}
if(num==4)
{
//if(d!
=0)
//{
display1();
display2();
display3();
display4();
/*}
if(c!
=0)
{
display1();
display2();
display3();
}
if(b!
=0)
{
display1();
display2();
}
if(a!
=0)
display1();*/
}
if(num==5)
{
//if(e!
=0)
//{
display1();
display2();
display3();
display4();
display5();
/*}
if(d!
=0)
{
display1();
display2();
display3();
display4();
}
if(c!
=0)
{
display1();
display2();
display3();
}
if(b!
=0)
{
display1();
display2();
}
if(a!
=0)
display1();*/
}
if(num==6)
{
//if(f!
=0)
//{
display1();
display2();
display3();
display4();
display5();
display6();
/*}
if(e!
=0)
{
display1();
display2();
display3();
display4();
display5();
}
if(d!
=0)
{
display1();
display2();
display3();
display4();
}
if(c!
=0)
{
display1();
display2();
display3();
}
if(b!
=0)
{
display1();
display2();
}
if(a!
=0)
display1();*/
}
//if(pduan==5)
//display1();
if(num==7)
num=6;
}
voidjia()
{
pduan=1;
num1=f*100000+e*10000+d*1000+c*100+b*10+a;
num=0;
a=b=c=d=e=f=g=0;
}
voidjian()
{
pduan=2;
num2=f*100000+e*10000+d*1000+c*100+b*10+a;
num=0;
a=b=c=d=e=f=g=0;
}
voidcheng()
{
pduan=3;
num3=f*100000+e*10000+d*1000+c*100+b*10+a;
num=0;
a=b=c=d=e=f=g=0;
}
voidchu()
{
pduan=4;
num4=f*100000+e*10000+d*1000+c*100+b*10+a;
num=0;
a=b=c=d=e=f=g=0;
}
voidqingchu()
{
g=0;
a=b;
b=c;
c=d;
d=e;
e=f;
f=g;
if(num==0)
{
num=1;
//pduan=5;
}
num--;
}
voiddeng()
{
num5=f*100000+e*10000+d*1000+c*100+b*10+a;
num=0;
if(pduan==1)
{
jieguo=num5+num1;
a=jieguo%10;
b=jieguo%100/10;
c=jieguo%1000/100;
d=jieguo%10000/1000;
e=jieguo%100000/10000;
f=jieguo/100000;
}
if(pduan==2)
{
jieguo=num2-num5;
a=jieguo%10;
b=jieguo%100/10;
c=jieguo%1000/100;
d=jieguo%10000/1000;
e=jieguo%100000/10000;
f=jieguo/100000;
}
if(pduan==3)
{
jieguo=num5*num3;
a=jieguo%10;
b=jieguo%100/10;
c=jieguo%1000/100;
d=jieguo%10000/1000;
e=jieguo%100000/10000;
f=jieguo/100000;
}
if(pduan==4)
{
jieguo=num4/num5;
a=jieguo%10;
b=jieguo%100/10;
c=jieguo%1000/100;
d=jieguo%10000/1000;
e=jieguo%100000/10000;
f=jieguo/100000;
}
if(f==0)//确定位数
{
if(e==0)
{
if(d==0)
{
if(c==0)
{
if(b==0)
{
if(a==0)
num=0;
elsenum=1;
}
elsenum=2;
}
elsenum=3;
}
elsenum=4;
}
elsenum=5;
}
elsenum=6;
}
voidkeyscan()
{
P3=0xfe;//第一部分
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P3;
switch(temp)
{
case0xee:
g=1;
f=e;
e=d;
d=c;
c=b;
b=a;
a=g;
num++;
break;
case0xde:
g=2;
f=e;
e=d;
d=c;
c=b;
b=a;
a=g;
num++;
break;
case0xbe:
g=3;
f=e;
e=d;
d=c;
c=b;
b=a;
a=g;
num++;
break;
case0x7e:
jia();
break;
}
B1=0;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
delay(5);
P3=0xff;
B1=1;
}
}
P3=0xfd;//第二部分
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
P3=0xfd;
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P3;
switch(temp)
{
case0xed:
g=4;
f=e;
e=d;
d=c;
c=b;
b=a;
a=g;
num++;
break;
case0xdd:
g=5;
f=e;
e=d;
d=c;
c=b;
b=a;
a=g;
num++;
break;
case0xbd:
g=6;
f=e;
e=d;
d=c;
c=b;
b=a;
a=g;
num++;
break;
case0x7d:
jian();
break;
}
B1=0;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
delay(5);
P3=0xff;
B1=1;
}
}
P3=0xfb;//第三部分
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
P3=0xfb;
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P3;
switch(temp)
{
case0xeb:
g=7;
f=e;
e=d;
d=c;
c=b;
b=a;
a=g;
num++;
break;
case0xdb:
g=8;
f=e;
e=d;
d=c;
c=b;
b=a;
a=g;
num++;
break;
case0xbb:
g=9;
f=e;
e=d;
d=c;
c=b;
b=a;
a=g;
num++;
break;
case0x7b:
cheng();
break;
}
B1=0;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
delay(5);
P3=0xff;
B1=1;
}
}
P3=0xf7;//第四部分
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
P3=0xf7;
temp=P3;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P3;
switch(temp)
{
case0xe7:
deng();
break;
case0xd7:
g=0;
f=e;
e=d;
d=c;
c=b;
b=a;
a=g;
num++;
if(num==1)
num=0;
break;
case0xb7:
qingchu();
break;
case0x77:
chu();
break;
}
B1=0;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
delay(5);
P3=0xff;
B1=1;
}
}
}
voiddisplay1()
{
wela=1;//第1个数字
P0=0xdf;
wela=0;
P=0x00;
dula=1;
P0=SHZ[a];
dula=0;
delay
(1);
dula=1;
P0=0x00;
dula=0;
P0=0xff;
}
voiddisplay2()
{
wela=1;//第2个数字
P0=0xef;
wela=0;
P=0x00;
dula=1;
P0=SHZ[b];
dula=0;
delay
(1);
dula=1;
P0=0x00;
dula=0;
P0=0xff;
}
voiddisplay3()
{
wela=1;//第3个数字
P0=0xf7;
wela=0;
P=0x00;
dula=1;
P0=SHZ[c];
dula=0;
delay
(1);
dula=1;
P0=0x00;
dula=0;
P0=0xff;
}
voiddisplay4()
{
wela=1;//第4个数字
P0=0xfb;
wela=0;
P=0x00;
dula=1;
P0=SHZ[d];
dula=0;
delay
(1);
dula=1;
P0=0x00;
dula=0;
P0=0xff;
}
voiddisplay5()
{
wela=1;//第5个数字
P0=0xfd;
wela=0;
P=0x00;
dula=1;
P0=SHZ[e];
dula=0;
delay
(1);
dula=1;
P0=0x00;
dula=0;
P0=0xff;
}
voiddisplay6()
{
wela=1;//第6个数字
P0=0xfe;
wela=0;
P=0x00;
dula=1;
P0=SHZ[f];
dula=0;
delay
(1);
dula=1;
P0=0x00;
dula=0;
P0=0xff;
}