51单片机实现计算器Word文档格式.docx
《51单片机实现计算器Word文档格式.docx》由会员分享,可在线阅读,更多相关《51单片机实现计算器Word文档格式.docx(19页珍藏版)》请在冰点文库上搜索。
P3=0xff;
〃与独立键盘连用的关键
djp();
kevscan();
display7();
}
voiddelay(uintz)
uiiitx,y;
fbr(x=z;
x>
0;
x—)
for(y=110;
y>
y-);
voiddjp()〃独立键盘
if(kevl=O)
delay(5);
if(kevl==O)
num=O;
//pduaii=5;
a=b=c=d=e=f=g=O;
wlule(!
keyl);
wlule(!
voiddisplav7Q
if(num==0)
display1();
if(num==l)
if(a?
=O)
display1();
if(num==2)
//if(b!
〃{
displayIQ;
display2Q;
//}
//昨!
=0)
//display1();
if(num==3)
//if(c!
//{
display2();
display3();
严}
馳!
displav2Q;
if(a!
displaylQ;
*/
}if(num==4)
//
if(d!
display4();
}if(c!
if(b!
}if(num==5)
if(e?
display5Q;
}if(d!
display2();
display3();
}if(c!
=O){
}if(b!
displav2Q;
}if(a?
=O)displayl();
if(num==6)
//if(f?
display5();
display6();
/*}
敢e!
display5();
if(c!
displayIQ;
//if(pduan=5)
//display1();
if(num==7)
num=6;
voidjia()
pduan=l;
numl=f*100000+e*10000+d*1000+c*l00+b*10+a;
num=0:
voidjianQ
pduan=2;
nuni2=f*100000+e*10000+d*1000+c*l00+b*10+a;
a=b=c=d=e=f=g=O;
voidcheng()
pduan=3;
num3=f*100000+e*10000+d*1000+c*l00+b*10+a;
voidchu()
pduan=4;
num4=f*100000+e*10000+d*1000+c*l00+b*10+a;
voidqmgchu()
g=0;
a=b;
b=c;
c=d;
d=e;
e=f;
f=g;
num=l;
//pduan=5;
num-;
voiddengQ
num5=f*100000+e*10000+d*1000+c*l00+b*10+a;
num=0:
if(pduan=l)
jieguo=nuni5+num1;
a=jieguo%10;
b=jieguo%100/10;
c^jieguo%1000/100;
d=jieguo%10000/1000;
e=^jieguo%100000/10000;
f=jieguo/l00000;
if(pduan=2)
jieguo=nuni2-num5;
if(pduan=3)
jieguo=num5*num3:
a=^jieguo%10;
b=jieguo%100/10;
c=jieguo%1000/100;
d=jieguo%10000/1000;
ieguo%100000/10000;
if(pduan=4)
jieguo=num4/num5;
a^jieguo%10;
c=^jieguo%1000/100;
d=jieguo%10000/1000;
e=jieguo%100000/10000;
f4ieguo/l00000;
if(f=O)〃确定位数
if(e==O)
if(d==O)
if(c==O)
if(b==O){
if(a=0)num=0;
elsenum=l;
}
elsenum=2;
elsenum=3;
elsenum=4;
elsenum=5;
elsenum=6;
voidkeyscan()
P3=0xfe;
〃第一部分
temp=P3;
temp=tenip&
OxfO;
wlule(temp!
=OxfO)
P3=Oxfe;
temp=temp&
0xfO;
while(temp!
=OxfO)
switch(temp)
caseOxee:
g=l;
f=e;
e=d;
d=c;
c=b;
b=a;
a=g;
num++;
break;
caseOxde:
g=2;
d=c;
c=b;
b=a;
a=g;
num+-r;
caseOxbe:
g=3;
break:
caseOx7e:
jiaQ;
break:
B1=O;
temp=temp&
0xfD;
wlule(temp!
=OxfD)
0xfO:
}delay(5);
P3=Oxff;
Bl=l;
P3=Oxfd;
〃第二部分temp=P3;
wlule(temp!
temp=P3;
\vhile(temp!
caseOxed:
g=4;
caseOxdd:
g=5;
num+-r;
caseOxbd:
g=6;
caseOx7d:
jianQ;
=OxfD)
OxfO:
P3=Oxfb;
〃第三部分
while(temp!
=OxfO){
caseOxeb:
g=7;
caseOxdb:
g=8;
仕;
caseOxbb:
g=9;
num++;
caseOx7b:
cheng();
while(temp!
OxfO:
}delav(5);
P3=0xff;
P3=0xf7;
〃第四部分
P3=Oxf7;
case0xe7:
dengQ;
case0xd7:
e=d;
if(num=l)num=0;
case0xb7:
qmgchu();
case0x77:
chu();
Oxft):
xvhile(temp!
=OxfD){
temp=temp&
P3=Oxff;
voiddisplayIQ
wela=l;
〃第1个数字
PO=Oxdf;
wela=0;
P=0x00;
dula=l;
P0=SHZ[a];
dula=O;
delay(l);
P0=0x00;
PO=Oxff;
voiddisplav2Q
〃第2个数字
P0=0xef;
P0=SHZ[b];
dula=0;
PO=OxOO;
dula=O;
PO=Oxff;
〃第3个数字
}voiddisplav3Q{
P0=0xf7;
wela=0;
P0=SHZ[c];
voiddisplav4Q
〃第4个数字
PO=Oxfb;
P0=SHZ[d];
voiddisplay5Q
〃第5个数字
PO=Oxfd;
wela=O;
P=OxOO;
PO=SHZ[e];
voiddisplav6Q
〃第6个数字
P0=0xfe;
P0=SHZ[f];