•fxrm»zvx»rzn*nrSXKH»ZU*MrsAxnrz«Ai«V21iAtS
fXDHM>
M.V1X&
rxairn
fixvn
■xvnj
»2crri
F3“・T
new灼
#include
#include〈math・h>
#defineuintunsignedint
#defineucharunsignedchar
^definePI3.141592
sbitRS二P2P;
sbitRW二P2°l;
sbitEN二P2「2;
sbitled=P2^4;
sbitspeek=P3*7;
uchartableO.j={''Welcometouse"};uchartablelrj={/zmadebyMs.Li"};uchartable2Lj={/zerrorz,};
ucharcount;
voidmain(void)
{
ucharerror=0,i,first=0,dotl,dot2,dotl_num,dot2_num,minusl,minus2;//错误标志、第一次淸屏标志、小数点标志以及小数点个数负号标志、负号个数
ucharSin,Cos,Tan,In;
ucharKey_num,]ast_key_num;
//键号
ucharflag=0,equal_flag;
〃运算符、等于符
doublenuml^O,num2=0,num^O,result=0,save_result;//第一个数、第二个
数、计算结果
ucharfirst_num二0,Ans二0,second_num=0;
InitLcdO;
EA二1;
ETO二1;
TMOD二0X01;
THO=(65536-500)/256;
TLO=(65536-500)%256;
write_com(0x80+0x40+15);write_Dat('O');
write_com(0x80);
while(l)
{
while(key_scan0==0xff);
TRO=1;
if(first==0)
{
first=l;write_com(0x01);
}
Key_num=key_scan0;
switch(key_scan0)
{
case1:
if(last_key_num!
=Key_num){
uTite_DatC1’);uTite_DatCn‘);ln=l;
}break;
case2:
if(last_key_num!
=Key_num){
write_Dat('s');write_Dat('i‘);write_Dat('n);Sin=l;
}break;
case3:
if(last_key_num!
=Key_num){
write_Dat('c);write_Dat('o');write_Dat('s');Cos=l;
}break;
case4:
if(last_key_num!
=Key_num)
{
write_Dat('t);write_Dat('a);write_Dat('n);
Tan=l;
}break;
case5:
if(last_key_num!
=Key_num)
{
writjDat('r);
flag=5;
}break;
case6:
write_Dat('7');num=7;break;case7:
write_DatC8');num二8;break;case8:
write_Dat('9*)inum^;break;case9:
if(last_key_num!
二Key_num)
{
write_Dat('+');
flag=l;
}break;
case10:
if(last_key_num!
=Key_num)
{
write_Dat('T);
flag=6;
}break;
case11:
write_DatC4’):
num=4;break;case12:
write_DatCo)intim^S;break;case13:
write_Dat('6');num二6;break;case14:
if(last_key_num!
=Key_num)
{
write_Dat('-');
flag二2;
}break;
case15:
if(last_key_num!
=Key_num)
if(equal_flag==l)write_com(0x01);write_com(0x80);write_Dat('A');write_Dat('n');write_Dat('s');write_Dat('=');save_result=result;
}
else{
if(Key_num!
=l&&Key_num!
=2&&Key_num!
=3&&Key_num!
=4&&Key_num!
=22&&Key_num!
=23&&Key_num!
二25)
{
write_Dat('A');write_DatCn);write_Dat('s');if(flag==O)
{
numl=save_result;first_num=l;
}
else
{
num2=save_result;second_num=l;
}
}
}
}
break;
case16:
write_Dat(*V):
num=l;break;
case17:
write_Dat('2’):
num=2;break;
case18:
write_Dat(*3’):
num=3;break;
case19:
if(last_key_num!
=Key_num)
{
write_Ddt('*');flag=3;
}break;
case21:
write_Dat('O');num二0;break;
case22:
if(last_key_num!
=Key_num)
辻(flag==O)minusl++;if(minusl==l)
writjDat('-');
}
}
else
{
minus2++;
if(minus2==l)
{
uTite_Dat-');
}
}
}break;
case23:
if(last_key_num!
=Key_num)
{
if(flag==O)
{
dotl++;
if(dotl==l)
{
write_Dat('・’);
}
}
else
{
dot2++;
辻(dot2==l)
{
uTite_Dat('・’);
}
}
}break;
case24:
if(last_key_num!
=Key_num)
{
write_Dat('/');
flag二4;
}break;
case25:
if(last_key_num!
=Key_num)write_Dat('=');equal_flag=l;
}break;
}
if(Key_num!
=l&&Key_num!
=2&&Key_num!
=3&&Key_num!
=4&&Key_num!
=15&&Key_num!
=22&&Key_num匸23&&Key_num!
二25)//第一个数
{
if(flag==O)
{
num1二num1*1O+num;
num二0;
if(dotl!
=0)
{
dotl_num++;
}
first_num=l;
}
if(flag!
二0)
{
num2=num2*l0+num;
num=0;
if(dot2!
=0)
{
dot2_num++;
}
second_num=l;
}
}
if(equal_f1ag==l&&first_num==1)
{
if(dotl!
=0)
{
numl=numl/pow(10,dotl_num):
dotl=0;
}
if(dot2!
=0)
{
num2=num2/pow(10,dot2_num);
dot2=0;
}
if(minusl!
=0)
numl=numl*(-l);
}
if(minus2!
=0)
{num2=num2*(-l);
}
if(second_num!
=0)
{
switch(flag)
{
case1:
result=numl+nuni2:
break;
case2:
result=numl-nuni2:
break;
case3:
result=numl*nuni2;break;
case4:
if(num2!
=0)
{
result=num1/num2;
}
else
{
write_com(0x80+0x40+10);
for(i=0;i<5;i++)
{
^Tite_Dat(table2[ij);
}
error=l;
}break;
case5:
result^powCnuml,num2);break;
case6:
result^powCnuml,l/num2):
break;
}
}
elseif(second_num二二0&&Sin=0&&Cos=0&&Tan=0&&ln=0)result=numl;
elseif(second_num==0&&(Sin=lCos==lTan==lln==l)){
if(Sin=l)
result=sin(numl/180*PI)+0.005;
if(Cos==l)
result=cos(numl/180*PI)+0.005;
辻(Tan二二1)
result=tan(numl/180*PI)+0.005;
if(ln==l)
if(numl>0)
result=log(numl)+0.005;else
write_com(0x80+0x40+10);for(i=0;i<5;i++)
{
utite_Dat(table2[i]);
}
error=l;
}
}
}
if(error!
=1)
display(result);
}
if(Key_num==20)//淸零
{
numl=num2=result=0;
flag=equal_flag=O;
error=0;first=0;
dotl_num二dot2_num=0;
minusl=0;minus2=0;
first_num=0,second_num=0;
Sin=Cos=Tan=ln=0;write_com(0x01);
write_com(0x80+0x40+15);write_Dat('O');
}
last_key_num=Key_num;
while(key_scan()!
=0xff);
}
}
voidtimeOOinterrupt1
{
THO=(65536-600)/256;
TLO=(65536-600)%256;
count++;
speek=!
speek;
if(count>50)
TRO二0;count=0;
voiddelay(uintx)
{
uchary;
while(x―)for(y=0;y<120;y++);
}
voidwrite_com(unsignedcharc){
RS二0;
RW•二0;
EN=1;
delay(5);
P0二c;
EN=0;
voidwrite^Dat(unsignedcharc){
RS二1;
RW•二0;
EN=1;
delay(5);
P0二c;
EN=0;
voidInitLcdO
{
write_com(0x38);//displaymode
write_com(0x06);//显示光标移动位置write_com(0x0c);//显示开及光标设置write_com(0x01);//显示淸屏
ucharkey_scan()
ucharkey_num=0xff;
uinttemp;
P3=0x03;
Pl=OxeO;temp=(P3<<8)Pl;if((temp&0x03e0)!
=0x03e0)
delay(10);
if((temp&0x03e0)!
=0x03e0)
P3=0x03;//第一行
Pl=0xfe;
temp=(P3«8)Pl;
switch(temp)
{
case0x03de:
key_num=l;break;
case0x03be:
key_num=2;break;
caseOxO37e:
key_num=3;break;
case0x02fe:
key_num=4;break;
case0x01fe:
key_num=5;break;
}
P3=0x03:
//第二行
Pl=0xfd;
temp=(P3<<8)Pl;
switch(temp)
{
case0x03dd:
key^um^G;break;
case0x03bd:
key_num=7;break;
caseOxO37d:
key_num=8;break;
case0x02fd:
key_num=9;break;
case0x01fd:
key_num=10;break;
}
P3=0x03;//第三行
Pl=0xfb;
temp=(P3<<8)Pl;
break;break;break;break;break;
switch(temp)
case0x03db:
key_num=l1
case0x03bb:
key_num=12
case0x037b:
key_num=13
case0x02fb:
key_num=14
case0x01fb:
key_num=15}
P3=0x03;
//第四行
Pl=0xf7;
temp=(P3<<8)Pl;switch(temp)
case
0x03d7:
key_num=16;
break;
case
0x03b7:
key_num=17;
break;
case
0x0377:
key_num=18;
break;
case
0x02f7:
key_num=19;
break;
case
0x01f7:
key_num=20;
break;
j
P3=0x03;
Pl=0xef;
//第五行
temp=(P3«8)Pl;switch(temp)
case
case
case
case
case
}
0x03cf:
key_num=21;
0x03af:
key_num=22;
0x036f:
key_num=23;
0x02ef:
key_num=24;
0x0lef:
key_num=25;
break;break;break;break;break;
return
}
key_num;
voiddisplay(doubleData){
ucharxs=0,fs=0,i;
if(Data<0)
{
fs=l;
Data=Data*(-1);
}
if(Data>(long)Data)
{
xs=l;
}
0'9
if(Data<10)
{
if(xs==l)
Data=Data*100;write_.com(0x80+0x40+11);辻(fs=l)write_Dat(-);
else
write_Dat('');
write_Dat((long)Data/100+*0*);
write^Dat('・’);
write_Dat((long)Data/10%10+,0’);
write_Dat((long)Data弔10+'0*);
}
elseif(xs==0)
{
write_com(0x80+0x40+14);
if(fs=l)
write^Dat('-');
else
write_Dat('');
write_Dat((long)Data+,0,);
}
}
else辻(Data<100)//10、99
{
if(xs=l)
{
Data=Data*100;
write_com(0x80+0x40+10);
if(fs=l)
write_Dat
else
write_Dat('');
write_Dat((long)Data/1000+,O');
write_Dat((long)Data/100%10+,0’);
write_Dat('・’);
write_Dat((long)Data/10%10+,O');write^Dat((long)Data%10+*0’);
}
elseif(xs==0)
{
write_com(0x80+0x40+13);
if(fs=l)
write_Dat
else
write_Dat('');
write_Dat((long)Data/10+*0’);
write_Dat((long)Data%10+*O');
辻(xs=l)
{
Data=Data*100;
write_com(0x80+0x40+9);
if(fs=l)
write_Dat
else
write_Dat('');
writjDat((long)Data/10000+'O');write_Dat((long)Data/1000%10+'O');write_Dat((long)Data/100%10+,O');
write_Dat('・’);
write_Dat((long)Data/10%10+,O');
write_Dat((long)Data%10+*0*);
}
elseif(xs==0)
write_com(0x80+0x40+12);if(fs=l)
write_Dat
else
write_Dat('');
write_Dat((1ong)Data/100+,O');write_Dat((1ong)Data/10%10+,O');
write_Dat((long)Data%10+*O');
}
else辻(Data<10000)7/1000^9999
if(xs=l)
Data=Data*100;
write_com(0x80+0x40+8);
if(fs=l)
write^Dat
else
write_Dat('');
write_Dat((long)Data/100000+,O');
write^Dat((long)Data/10000%10+,O');
write_Dat((long)Data/1000%10+'O');
write_Dat((long)Data/100%10+,0*);
write_Dat('・’);
write_Dat((long)Data/10%10+,O');
write_Dat((long)Data%10+*0,);
}
elseif(xs==0)
{
write_com(0x80+0x40+11);
if(fs=l)
write_Dat
else
write_Dat('');
write.Dat((long)Data/1000+,CT);write.Dat((long)Data/100%10+,0*);
write.Dat((long)Data/10%10+,O');
write_Dat((long)Data%10+,0’);
}
}
else辻(Data<100000)//10000、99999
{
if(xs~l)
{
Data=Data*100;
write_com(0x80+0x40+7);
if(fs=l)
write_Dat
else
write_Dat('');
write^Dat((long)Data/1000000^>0’);write_Dat((long)Data/100000%10+,0*);write_Dat((long)Data/10000%10+'O');
write_Dat((long)Data/1000%10+'0’);
write.Dat((long)Data/100%10+,O');
write_Dat('・’);
write_Dat((long)Data/10%10+,0*);write_Dat((long)Data%10+*0*);
}
elseif(xs==0)
{
write_com(0x80+0x40+10);
if(fs=l)
write_Dat('」);
else
write_Dat('');
write_Dat((long)Data/10000+*O');write.Dat((long)Data/1000%10+>O');write_Dat((long)Data/100%10+,O');write_Dat((long)Data/10%10+,O');write.Dat((long)Data%10+*O');
}
else辻(Data<1000000)//100000~999999
{
if(xs==l)
Data=Data*100;
write_com(0x80+0x40+7);
辻(fs==l)
write_Dat('」);
else
write_Dat('');
write_Dat(仃ong)Data/10000000+'0’);write_Dat((long)Data/1000000%10+?
0’);write_Dat((long)Data/100000%10+'O');write_Dat((long)Data/10000%10+'0’);write_Dat((long)Data/1000%10+'0’);write_Dat((long)Data/100%10+,O');write_Dat('・’);
write.Dat((long)Data/100000%10+,0*);write.Dat((long)Data/100000%10+,O');write_Dat(