自制简易计算器
#include<reg52.h>#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
uchar code table[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code list[]=
{0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
uchar num,temp,b;
uint cc;
void delay(uint x);
void display();
void keyma();
void show(uchar P);
uint output();
void jieguo();
void main()
{
cc=0;
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
if(num==4)
{
num=0;
keyma();
}
display();
}
}
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=220;j>0;j--);
}
void T0_time() interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
num++;
}
void display()
{
uint i;
for(i=0;i<8;i++)
{
wela=1;
P0=list;
wela=0;
dula=1;
P0=temp;
dula=0;
delay(1);
}
}
void keyma()
{
uchar a;
P3=0xfe;
a=P3;
a=a&0xf0;
if(a!=0xf0)
{
delay(5);
a=P3;
a=a&0xf0;
if(a!=0xf0)
{
a=P3;
switch(a)
{
case 0xee:
b=0;break;
case 0xde:
b=1;break;
case 0xbe:
b=2;break;
case 0x7e:
b=3;break;
}
while(a!=0xf0)
{
a=P3;
a=a&0xf0;
}
show(b);}
}
P3=0xfd;
a=P3;
a=a&0xf0;
if(a!=0xf0)
{
delay(5);
a=P3;
a=a&0xf0;
if(a!=0xf0)
{
a=P3;
switch(a)
{
case 0xed:
b=4;break;
case 0xdd:
b=5;break;
case 0xbd:
b=6;break;
case 0x7d:
b=7;break;
}
while(a!=0xf0)
{
a=P3;
a=a&0xf0;
}
show(b);}
}
P3=0xfb;
a=P3;
a=a&0xf0;
if(a!=0xf0)
{
delay(5);
a=P3;
a=a&0xf0;
if(a!=0xf0)
{
a=P3;
switch(a)
{
case 0xeb:
b=8;break;
case 0xdb:
b=9;break;
case 0xbb:
b=10;break;
case 0x7b:
jieguo();break;
}
while(a!=0xf0)
{
a=P3;
a=a&0xf0;
}
show(b);}
}
P3=0xf7;
a=P3;
a=a&0xf0;
if(a!=0xf0)
{
delay(5);
a=P3;
a=a&0xf0;
if(a!=0xf0)
{
a=P3;
cc=output();
switch(a)
{
case 0xe7:
b=11;break;
case 0xd7:
b=12;break;
case 0xb7:
b=13;break;
case 0x77:
b=14;break;
}
while(a!=0xf0)
{
a=P3;
a=a&0xf0;
}
} }
}
void show(uchar p)
{
uint i;
for(i=0;i<8;i++)
temp=temp;
temp=table;
}
//****************************************************************************************************************************************//
uint output()
{
uint aa,i;
for(i=0;i<8;i++)
{
aa=aa*10+temp;
}
for(i=0;i<8;i++)
{
temp=0;
}
return aa;
}
void jieguo()
{
uint sum,dd,i,ge;
dd=output();
if(b==11)
{
sum=dd+cc;
}
if(b==12)
{
sum=dd-cc;
}
if(b==13)
{
sum=dd*cc;
}
if(b==14)
{
sum=dd/cc;
}
ge=sum%10;
ge=sum%100/10;
ge=sum%1000/100;
ge=sum%10000/1000;
ge=sum%100000/10000;
ge=sum%1000000/100000;
ge=sum%10000000/1000000;
ge=sum%100000000/10000000;
for(i=0;i<8;i++)
temp=table];
display();
}
这是自制的简易计算器,1、输入时时间摁长时系统就会卡住,必须等一会才能继续按。
2、计算结果有误,结果显示是最后一次输入的最后一位。
求大神指教。。。。。。
页:
[1]