#include "keyboard.h"
#include "1602.h"
uchar temp=0,wei=0,key=0;
uchar jia=0,jian=0,cheng=0,chu=0,dengyu=0,qingling=0;
uchar jia0=0,jian0=0,cheng0=0,chu0=0;
uchar s0=0,s1=0,s2=0,s3=0,s4=0,s5=0,s6=0; //参加运算的各个位
uchar a0=16,b0=16,c0=16,d0=16,e0=16,f0=16,g0=16;
unsigned long qian,hou;//定义参于运算的第一个数和第二个数。
uchar table[16];
void keyscan()
{
P2=0x7f;
temp=P2;
temp=temp&0x0f;
if(temp!=0x0f)
{
key_delay(5);
if(temp!=0x0f)
{
temp=P2;
switch(temp)
{
case 0x7e:
key=1;
write_data(0x30+key);
wei++;
break;
case 0x7d:
key=2;
write_data(0x30+key);
wei++;
break;
case 0x7b:
key=3;
write_data(0x30+key);
wei++;
break;
case 0x77:
jia=1;
write_data('+');
break;
}
while(temp!=0x0f)
{
temp=P2;
temp=temp&0x0f;
}
}
}
P2=0xbf;
temp=P2;
temp=temp&0x0f;
if(temp!=0x0f)
{
key_delay(5);
if(temp!=0x0f)
{
temp=P2;
switch(temp)
{
case 0xbe:
key=4;
write_data(0x30+key);
wei++;
break;
case 0xbd:
key=5;
write_data(0x30+key);
wei++;
break;
case 0xbb:
key=6;
write_data(0x30+key);
wei++;
break;
case 0xb7:
write_data('-');
jian=1;
break;
}
while(temp!=0x0f)
{
temp=P2;
temp=temp&0x0f;
}
}
}
P2=0xdf;
temp=P2;
temp=temp&0x0f;
if(temp!=0x0f)
{
key_delay(5);
if(temp!=0x0f)
{
temp=P2;
switch(temp)
{
case 0xde:
key=7;
write_data(0x30+key);
wei++;
break;
case 0xdd:
key=8;
write_data(0x30+key);
wei++;
break;
case 0xdb:
key=9;
write_data(0x30+key);
wei++;
break;
case 0xd7:
cheng=1;
write_data('*');
break;
}
while(temp!=0x0f)
{
temp=P2;
temp=temp&0x0f;
}
}
}
P2=0xef;
temp=P2;
temp=temp&0x0f;
if(temp!=0x0f)
{
key_delay(5);
if(temp!=0x0f)
{
temp=P2;
switch(temp)
{
case 0xee:
qingling=1;
write_com(0x01);
break;
case 0xed:
key=0;
write_data(0x30+key);
wei++;
break;
case 0xeb:
dengyu=1;
write_data('=');
break;
case 0xe7:
chu=1;
write_data('/');
break;
}
while(temp!=0x0f)
{
temp=P2;
temp=temp&0x0f;
}
}
}
}
void calc()
{
uchar gongneng,yunsuan,i;
gongneng=jia|jian|cheng|chu|dengyu|qingling;
if(gongneng==0)
{
if(key!=20)
{
switch(wei)
{
case 1: a0=key;
b0=10;
c0=10;
d0=10;
e0=10;
f0=10;
g0=10;
break;
case 2: b0=key;
c0=10;
d0=10;
e0=10;
f0=10;
g0=10;
break;
case 3: c0=key;
d0=10;
e0=10;
f0=10;
g0=10;
break;
case 4: d0=key;
e0=10;
f0=10;
g0=10;
break;
case 5: e0=key;
f0=10;
g0=10;
break;
case 6: f0=key;
g0=10;
break;
case 7: g0=key;
break;
}
key=20;
}
if(a0!=10) s6=a0;
if(b0!=10) s5=b0;
if(c0!=10) s4=c0;
if(d0!=10) s3=d0;
if(e0!=10) s2=e0;
if(f0!=10) s1=f0;
if(g0!=10) s0=g0;
}
else
{
yunsuan=jia|jian|cheng|chu;
if(yunsuan)
{
if(jia)
{jia=0; jia0=1;jian0=0;cheng0=0;chu0=0;}
if(jian)
{jian=0;jia0=0;jian0=1;cheng0=0;chu0=0;}
if(cheng)
{cheng=0;jia0=0;jian0=0;cheng0=1;chu0=0;}
if(chu)
{chu=0; jia0=0;jian0=0;cheng0=0;chu0=1;}
switch(wei)
{
case 7:
qian=s6*1000000+s5*100000+s4*10000+s3*1000+s2*100+s1*10+s0;break;
case 6:
qian=s6*100000+s5*10000+s4*1000+s3*100+s2*10+s1;break;
case 5:
qian=s6*10000+s5*1000+s4*100+s3*10+s2;break;
case 4:
qian=s6*1000+s5*100+s4*10+s3;break;
case 3:
qian=s6*100+s5*10+s4;break;
case 2:
qian=s6*10+s5;break;
case 1:
qian=s6;break;
}
wei=0;
s0=0;s1=0;s2=0;s3=0;s4=0;s5=0;s6=0;
}
if(dengyu)
{
dengyu=0;
switch(wei)
{
case 7:
hou=s6*1000000+s5*100000+s4*10000+s3*1000+s2*100+s1*10+s0;break;
case 6:
hou=s6*100000+s5*10000+s4*1000+s3*100+s2*10+s1;break;
case 5:
hou=s6*10000+s5*1000+s4*100+s3*10+s2;break;
case 4:
hou=s6*1000+s5*100+s4*10+s3;break;
case 3:
hou=s6*100+s5*10+s4;break;
case 2:
hou=s6*10+s5;break;
case 1:
hou=s6;break;
}
wei=0;
s0=0;s1=0;s2=0;s3=0;s4=0;s5=0;s6=0;
if(jia0)
{jia0=0; hou=qian+hou;}
if(jian0)
{jian0=0; hou=qian-hou;}
if(cheng0)
{cheng0=0; hou=qian*hou;}
if(chu0)
{chu0=0; hou=qian/hou;}
sprintf(table,"%ld",hou);
write_com(0x80+0x40);
for(i=0;table[i]!=0;i++)
{
write_data(table[i]);
}
// while(table[i]!=0)
// {
// write_data(table[i]);
// i++;
// }
// for(i=0;i<=16;i++)
// {
// write_data(table[i]);
// }
}
if(qingling)
{
s0=0;s1=0;s2=0;s3=0;s4=0;s5=0;s6=0;
a0=0;b0=0;c0=0;d0=0;e0=0;f0=0;g0=0;
jia=0;jian=0;cheng=0;chu=0;
jia0=0;jian0=0;cheng0=0;chu0=0;
qingling=0;dengyu=0;
qian=0;hou=0;
memset(table,0,16);//清空数组
}
}
}
void key_delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}