文档介绍:: .
基于51单片机的简易计算器
/****************************************************************
阿斌独家制作:
计算器数码管显示
可计算10以下数加减乘除 可连续运算最大显示结果数值9999
*****************************************************************/
键盘设置:
#
#
主程序:
#in clude<>
#defi ne uint un sig ned int
#defi ne uchar un sig ned char
uchar nu m,temp,jia=O,jia n=O,che ng=O,chu二 O,qin g=0;
uint key,key1;
uchar table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x0};
#
#
#
void delay( uint z)
{
uint x,y;
for(x二z;x>0;x--)
for(y=110;y>0;y--); } void keysca n()
{
P3=0xfe;
temp二P3;
temp二temp&0 xf0;
while(temp!=OxfO)
{
delay(5);
temp=P3;
temp二temp&0 xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:key=1; num=0;break;
case 0xde:key=2 ;num=O;break;
case 0xbe:key=3 ;num=O;break;
//加号
case 0x7e:num=1;break;
}
while(temp!=OxfO)
{
temp=P3;
temp二temp&0 xf0;
}
}
}
P3=0xfd;
temp=P3;
temp二temp&0 xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp二temp&OxfO;
while(temp!=0xf0) {
temp=P3;
switch(temp)
{
case Oxed:key二 4;num=O;break;
case 0xdd:key=5 ;num=O;break;
case 0xbd:key=6 ;num=O;break;
case 0x7d:num=2;break;
II减号
while(temp!=OxfO)
temp=P3;
temp二temp&OxfO;
P3=0xfb;
temp=P3;
temp二temp&OxfO;
while(temp!=0xf0)
delay(5);
temp=P3;
temp二temp&OxfO;
#
while(temp!=OxfO) {
temp二P3;
switch(temp)
{
case 0xeb:key=7 ;num=O;break;
case 0xdb:key=8 ;num=O;break;
case 0xbb:key=9 ;num=O;break;
case 0x7 b:num=3;break; // 乘号
}
while(temp!=0xf0)
{
temp=P3;
temp二temp&0 xf0;
}
}
}
P3=0xf7;
temp=P3;
temp二temp&0 xf0;
while(temp!=OxfO)
{
5
delay(5);
temp二P3;
temp二temp&0 xfO;
while(temp!=OxfO)
{
temp=P3;
switch(temp)
{
case 0xe7:key=0;num=O;break;
case 0xd7:num=6;break; // 清除
case 0xb7:num=5;break; // 等于号
case 0x77:num=4;break; // 除号
}
while(temp!=0xf0)
{
temp=P3;
temp二temp&0 xf0;
}
}
}
}
void