单片机简易计算器程序代码.docx
《单片机简易计算器程序代码.docx》由会员分享,可在线阅读,更多相关《单片机简易计算器程序代码.docx(18页珍藏版)》请在冰点文库上搜索。
单片机简易计算器程序代码
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineulongunsignedlong
sbitlcden=P2^2;//定义引脚E使能
sbitrs=P2^0;
sbitrw=P2^1;
sbitshangdang=P2^7;
chari,temp,num,g=0,f=0,gz=0,ad=0,bd=0,eq=0,qz,k;//gz为跟踪地址,ad,bd分别表示a,b是否按小数点,eq表示是否入过等号
doubleafd=0,bfd=0;//afd,bfd为小数点后个数
floata,b,daan;longc1,c2;//a,第一个数b,第二个数c,得数daan答案
floatdzh;
ucharflag,fuhao;//flag表示是否有符号键按下,fuhao表征按下的是哪个符号
ucharcodetable[]={
7,8,9,0,
4,5,6,0,
1,2,3,0,
0,0,0,0};
ucharcodetable1[]={
7,8,9,0x2f-0x30,//按键标值0x2f-0x30是将字符转化为数字,和后面的0x30+i抵消,得i值
4,5,6,0x2a-0x30,
1,2,3,0x2d-0x30,
0x01-0x30,0,0x3d-0x30,0x2b-0x30//0x01是清屏命令
};
voiddelay(uintz)//延迟函数
{
while(z--);
}
voidwrite_com(ucharcom)//写指令函数
delay(1000);
lcden=0;
rs=0;
rw=0;
P0=com;//com指令付给P0口
lcden=1;
delay(20);
voidwrite_date(uchardate)//写数据函数
rs=1;
P0=date;
voidinit()//初始化
write_com(0x38);//功能设置命令:
8位,2行DDRAM的地址
delay(200);
write_com(0x0e);//显示开,光标开,不闪烁
write_com(0x06);//增量方式不移位
write_com(0x80);//设置访问地址
voidxianshi(chari,charh,floatdaan)//c为得数i从最后一位跟踪,H为精确到小数点后几位
{qz=0;k=0;
c1=(long)daan;
c2=(long)((daan-c1)*10000);//1000000为小数点后6位尝试用pow函数答案不理想
if(c2%10>=5)
{c2=(c2/10)+1;
else
{c2=c2/10;}
while(c2!
=0)
k=c2%10;
if(i=0)//从小数点最后一位判断是否为0{qz=1;}if(qz==1)//如果小数点后不为0输出开始或者到整数{write_date(0x30+k);}i++;c2=c2/10;if(i==h&&qz==1)//设置小数点位数write_date(0x2e);}while(i{write_date(0x30);i++;if(i==h){write_date(0x2e);}}///补位显示if(c1==0){write_date(0x30);}while(c1!=0){write_date(0x30+c1%10);c1=c1/10;}}voidgg(chargz){write_com(0xc0);write_date(0xfe);write_com(0x80+gz);}voidkeyscan(void)//键盘扫描程序{if(shangdang==0)//上档键{delay(100);if(shangdang==0){while(shangdang==0);g=!g;//g表示那个档位g=0,下档g=1,上档if(g==1){write_com(0xc0);write_date(0x5e);write_com(0x80+gz);}if(g==0){write_com(0xc0);write_date(0xfe);write_com(0x80+gz);}shangdang=1;}}P1=0xfe;//第一行,7,8,9,/或sinif(P1!=0xfe){delay(20);//20msif(P1!=0xfe){temp=P1&0xf0;switch(temp){case0xe0:num=0;break;case0xd0:num=1;break;case0xb0:num=2;break;case0x70:num=3;break;}}while(P1!=0xfe);if(num==0||num==1||num==2)//如果按下的是'7','8'或'9'{if(flag==0)//没有按过符号键{if(ad==1)afd++;a=a*10+table[num];//a的初值为'0',结果为输入a值}else//如果按过符号键{if(bd==1)bfd++;b=b*10+table[num];//b的初值为'0',结果为输入b值}}else//如果按下的是'/'或者SIN{flag=1;if(g==0){fuhao=4;i=table1[num];if(eq==0){gz++;write_date(0x30+i);}else{write_com(0x01);write_date(0x41);write_date(0x4e);write_date(0x53);write_date(0x30+i);a=daan;gz=gz+4;}}//4表示除号已按if(g==1){g=0;gg(gz);fuhao=5;if(eq==0){gz=gz+3;write_date(0x53);write_date(0x49);write_date(0x4e);}else{write_com(0x01);write_date(0x53);write_date(0x49);write_date(0x4e);write_date(0x41);write_date(0x4e);write_date(0x53);b=daan;gz=gz+6;}}//5表示SIN已按}if(num==0||num==1||num==2)//显示开头{gz++;i=table1[num];write_date(0x30+i);}}P1=0xfd;//第二行4,5,6,7,*或cosif(P1!=0xfd){delay(5);if(P1!=0xfd){temp=P1&0xf0;switch(temp){case0xe0:num=4;break;case0xd0:num=5;break;case0xb0:num=6;break;case0x70:num=7;break;}}while(P1!=0xfd);if(num==4||num==5||num==6)//如果按下的是'4','5'或'6'{if(flag==0)//没有按过符号键{if(ad==1)afd++;a=a*10+table[num];//输入a值}else//如果按过符号键{if(bd==1)bfd++;b=b*10+table[num];//输入b值}}else//如果按下的是'*'{flag=1;if(g==0){fuhao=3;i=table1[num];if(eq==0){gz++;write_date(0x30+i);}else{write_com(0x01);write_date(0x41);write_date(0x4e);write_date(0x53);write_date(0x30+i);a=daan;gz=gz+4;}}//3表示乘号已按if(g==1){g=0;gg(gz);fuhao=6;if(eq==0){gz=gz+3;write_date(0x43);write_date(0x4f);write_date(0x53);}else{write_com(0x01);write_date(0x43);write_date(0x4f);write_date(0x53);write_date(0x4e);write_date(0x41);write_date(0x4e);write_date(0x53);b=daan;gz=gz+6;}}//cos已按}if(num==4||num==5||num==6)//显示开头{gz++;i=table1[num];write_date(0x30+i);}}P1=0xfb;//第三行1,2,3,-或tanif(P1!=0xfb){delay(5);if(P1!=0xfb){temp=P1&0xf0;switch(temp){case0xe0:num=8;break;case0xd0:num=9;break;case0xb0:num=10;break;case0x70:num=11;break;}}while(P1!=0xfb);if(num==8||num==9||num==10)//如果按下的是'1','2'或'3'{if(flag==0)//没有按过符号键{if(ad==1)afd++;a=a*10+table[num];}else//如果按过符号键{if(bd==1)bfd++;b=b*10+table[num];}}elseif(num==11)//如果按下的是'-'或者'tan'{flag=1;if(g==0){i=table1[num];fuhao=2;if(eq==0){gz++;write_date(0x30+i);}else{write_com(0x01);write_date(0x41);write_date(0x4e);write_date(0x53);write_date(0x30+i);a=daan;gz=gz+4;}}//2表示减已按if(g==1){g=0;gg(gz);fuhao=7;if(eq==0){write_date(0x54);write_date(0x41);write_date(0x4e);gz=gz+3;}else{write_com(0x01);write_date(0x54);write_date(0x41);write_date(0x4e);write_date(0x41);write_date(0x4e);write_date(0x53);b=daan;gz=gz+6;}}//tan已按}if(num==8||num==9||num==10)//显示开头{gz++;i=table1[num];write_date(0x30+i);}}P1=0xf7;//第四行CE或根号,0,=,+或平方if(P1!=0xf7){delay(5);if(P1!=0xf7){temp=P1&0xf0;switch(temp){case0xe0:num=12;break;case0xd0:num=13;break;case0xb0:num=14;break;case0x70:num=15;break;}}while(P1!=0xf7);switch(num){case12://显示按下的是"清零"或者根号if(g==0){write_com(0x01);a=0;b=0;flag=0;fuhao=0;eq=0;ad=0;bd=0;afd=0;bfd=0;gz=0;}elseif(g==1)//根号{g=0;gg(gz);fuhao=9;flag=1;if(eq==0){gz++;write_date(0xe8);}else{write_com(0x01);write_date(0xe8);write_date(0x41);write_date(0x4e);write_date(0x53);b=daan;gz=gz+4;}}break;case13://按下的是"0"或者小数点gz++;if(g==0)//0{if(flag==0)//没有按过符号键{if(ad==1)afd++;a=a*10;write_date(0x30);}elseif(flag==1)//如果按过符号键{if(bd==1)bfd++;b=b*10;write_date(0x30);}}if(g==1)//小数点{write_date(0x2e);if(flag==0){ad=1;}if(flag==1){bd=1;}g=0;gg(gz);}break;case14://按下=计算程序{eq=1;write_com(0xcf);//按下等于键,光标前进至第二行最后一个显示处write_com(0x04);//设置从后住前写数据,每写完一个数据,光标后退一格i=0;if(ad==1){a=a/pow(10,afd);}////////////////浮点计算X.***if(bd==1){b=b/pow(10,bfd);}if(fuhao==1)//符号1+{daan=a+b;if(daan<0){daan=(-1)*daan;}xianshi(i,3,daan);if(a+b<0){daan=(-1)*daan;write_date(0x2d);}write_date(0x3d);}//再写"="elseif(fuhao==8)//平方上档1号{daan=a*a;xianshi(i,3,daan);write_date(0x3d);}//再写"="//////////////////----tan计算//////////////////////////////elseif(fuhao==2)//-下档键2号{if(a-b>0){daan=a-b;}else{daan=b-a;}xianshi(i,3,daan);if(a-b<0){daan=(-1)*daan;write_date(0x2d);}write_date(0x3d);//再写"="}elseif(fuhao==7)//tan上档2号位置{dzh=(float)b*3.141592654/180;daan=tan(dzh);if(daan<0){daan=(-1)*daan;f=1;}xianshi(i,3,daan);if(f==0)write_date(0x3d);else{daan=(-1)*daan;write_date(0x2d);write_date(0x3d);}}/////////////////*cos计算///////////////////////////////elseif(fuhao==3)//'*'下档3号位置{daan=a*b;if(daan<0){daan=(-1)*daan;}xianshi(i,3,daan);if(a*b<0){daan=(-1)*daan;write_date(0x2d);}write_date(0x3d);}elseif(fuhao==6)//'cos'上档3号位置{dzh=(float)b*3.141592654/180;daan=cos(dzh);if(daan<0){daan=(-1)*daan;f=1;}xianshi(i,3,daan);if(f==0)write_date(0x3d);else{daan=(-1)*daan;write_date(0x2d);write_date(0x3d);}}//////////////////////////sin计算///////////////////elseif(fuhao==4)//'/'下档4号位置{if(b!=0){daan=a/b;if(daan<0){daan=(-1)*daan;}xianshi(i,3,daan);if(a/b<0){daan=(-1)*daan;write_date(0x2d);}}else{write_date(0x21);}write_date(0x3d);}elseif(fuhao==5)//'sin'上档4号位置{dzh=(float)b*3.141592654/180;daan=sin(dzh);if(daan<0){daan=(-1)*daan;f=1;}xianshi(i,3,daan);if(f==0)write_date(0x3d);else{daan=(-1)*daan;write_date(0x2d);write_date(0x3d);}}elseif(fuhao==9)//计算根号{if(b>=0){daan=sqrt(b);xianshi(i,3,daan);}else{write_date(0x21);}write_date(0x3d);}a=0;b=0;gz=0;ad=0;bd=0;afd=0;bfd=0;f=0;break;}case15://显示'+'平方flag=1;if(g==0){fuhao=1;if(eq==0){gz++;write_date(0x30+table1[num]);}else{write_com(0x01);write_date(0x41);write_date(0x4e);write_date(0x53);write_date(0x30+table1[num]);a=daan;gz=gz+4;}}//显示'+'elseif(g==1){g=0;gg(gz);fuhao=8;if(eq==0){gz=gz+2;write_date(0x5e);write_date(0x32);}else{write_com(0x01);write_date(0x41);write_date(0x4e);write_date(0x53);write_date(0x5e);write_date(0x32);a=daan;gz=gz+5;}}break;//平方}}P1=0xf0;}voidmain()//主函数{init();i=0;a=0;//第一个参和运算的数b=0;//第二个参和运算的数flag=0;//flag表示是否有符号键按下,fuhao=0;//fuhao表征按下的是哪个符号P1=0xf0;shangdang=1;while(1){keyscan();}}
=0)//从小数点最后一位判断是否为0
{qz=1;}
if(qz==1)//如果小数点后不为0输出开始或者到整数
{write_date(0x30+k);}
i++;c2=c2/10;
if(i==h&&qz==1)//设置小数点位数
write_date(0x2e);
while(i{write_date(0x30);i++;if(i==h){write_date(0x2e);}}///补位显示if(c1==0){write_date(0x30);}while(c1!=0){write_date(0x30+c1%10);c1=c1/10;}}voidgg(chargz){write_com(0xc0);write_date(0xfe);write_com(0x80+gz);}voidkeyscan(void)//键盘扫描程序{if(shangdang==0)//上档键{delay(100);if(shangdang==0){while(shangdang==0);g=!g;//g表示那个档位g=0,下档g=1,上档if(g==1){write_com(0xc0);write_date(0x5e);write_com(0x80+gz);}if(g==0){write_com(0xc0);write_date(0xfe);write_com(0x80+gz);}shangdang=1;}}P1=0xfe;//第一行,7,8,9,/或sinif(P1!=0xfe){delay(20);//20msif(P1!=0xfe){temp=P1&0xf0;switch(temp){case0xe0:num=0;break;case0xd0:num=1;break;case0xb0:num=2;break;case0x70:num=3;break;}}while(P1!=0xfe);if(num==0||num==1||num==2)//如果按下的是'7','8'或'9'{if(flag==0)//没有按过符号键{if(ad==1)afd++;a=a*10+table[num];//a的初值为'0',结果为输入a值}else//如果按过符号键{if(bd==1)bfd++;b=b*10+table[num];//b的初值为'0',结果为输入b值}}else//如果按下的是'/'或者SIN{flag=1;if(g==0){fuhao=4;i=table1[num];if(eq==0){gz++;write_date(0x30+i);}else{write_com(0x01);write_date(0x41);write_date(0x4e);write_date(0x53);write_date(0x30+i);a=daan;gz=gz+4;}}//4表示除号已按if(g==1){g=0;gg(gz);fuhao=5;if(eq==0){gz=gz+3;write_date(0x53);write_date(0x49);write_date(0x4e);}else{write_com(0x01);write_date(0x53);write_date(0x49);write_date(0x4e);write_date(0x41);write_date(0x4e);write_date(0x53);b=daan;gz=gz+6;}}//5表示SIN已按}if(num==0||num==1||num==2)//显示开头{gz++;i=table1[num];write_date(0x30+i);}}P1=0xfd;//第二行4,5,6,7,*或cosif(P1!=0xfd){delay(5);if(P1!=0xfd){temp=P1&0xf0;switch(temp){case0xe0:num=4;break;case0xd0:num=5;break;case0xb0:num=6;break;case0x70:num=7;break;}}while(P1!=0xfd);if(num==4||num==5||num==6)//如果按下的是'4','5'或'6'{if(flag==0)//没有按过符号键{if(ad==1)afd++;a=a*10+table[num];//输入a值}else//如果按过符号键{if(bd==1)bfd++;b=b*10+table[num];//输入b值}}else//如果按下的是'*'{flag=1;if(g==0){fuhao=3;i=table1[num];if(eq==0){gz++;write_date(0x30+i);}else{write_com(0x01);write_date(0x41);write_date(0x4e);write_date(0x53);write_date(0x30+i);a=daan;gz=gz+4;}}//3表示乘号已按if(g==1){g=0;gg(gz);fuhao=6;if(eq==0){gz=gz+3;write_date(0x43);write_date(0x4f);write_date(0x53);}else{write_com(0x01);write_date(0x43);write_date(0x4f);write_date(0x53);write_date(0x4e);write_date(0x41);write_date(0x4e);write_date(0x53);b=daan;gz=gz+6;}}//cos已按}if(num==4||num==5||num==6)//显示开头{gz++;i=table1[num];write_date(0x30+i);}}P1=0xfb;//第三行1,2,3,-或tanif(P1!=0xfb){delay(5);if(P1!=0xfb){temp=P1&0xf0;switch(temp){case0xe0:num=8;break;case0xd0:num=9;break;case0xb0:num=10;break;case0x70:num=11;break;}}while(P1!=0xfb);if(num==8||num==9||num==10)//如果按下的是'1','2'或'3'{if(flag==0)//没有按过符号键{if(ad==1)afd++;a=a*10+table[num];}else//如果按过符号键{if(bd==1)bfd++;b=b*10+table[num];}}elseif(num==11)//如果按下的是'-'或者'tan'{flag=1;if(g==0){i=table1[num];fuhao=2;if(eq==0){gz++;write_date(0x30+i);}else{write_com(0x01);write_date(0x41);write_date(0x4e);write_date(0x53);write_date(0x30+i);a=daan;gz=gz+4;}}//2表示减已按if(g==1){g=0;gg(gz);fuhao=7;if(eq==0){write_date(0x54);write_date(0x41);write_date(0x4e);gz=gz+3;}else{write_com(0x01);write_date(0x54);write_date(0x41);write_date(0x4e);write_date(0x41);write_date(0x4e);write_date(0x53);b=daan;gz=gz+6;}}//tan已按}if(num==8||num==9||num==10)//显示开头{gz++;i=table1[num];write_date(0x30+i);}}P1=0xf7;//第四行CE或根号,0,=,+或平方if(P1!=0xf7){delay(5);if(P1!=0xf7){temp=P1&0xf0;switch(temp){case0xe0:num=12;break;case0xd0:num=13;break;case0xb0:num=14;break;case0x70:num=15;break;}}while(P1!=0xf7);switch(num){case12://显示按下的是"清零"或者根号if(g==0){write_com(0x01);a=0;b=0;flag=0;fuhao=0;eq=0;ad=0;bd=0;afd=0;bfd=0;gz=0;}elseif(g==1)//根号{g=0;gg(gz);fuhao=9;flag=1;if(eq==0){gz++;write_date(0xe8);}else{write_com(0x01);write_date(0xe8);write_date(0x41);write_date(0x4e);write_date(0x53);b=daan;gz=gz+4;}}break;case13://按下的是"0"或者小数点gz++;if(g==0)//0{if(flag==0)//没有按过符号键{if(ad==1)afd++;a=a*10;write_date(0x30);}elseif(flag==1)//如果按过符号键{if(bd==1)bfd++;b=b*10;write_date(0x30);}}if(g==1)//小数点{write_date(0x2e);if(flag==0){ad=1;}if(flag==1){bd=1;}g=0;gg(gz);}break;case14://按下=计算程序{eq=1;write_com(0xcf);//按下等于键,光标前进至第二行最后一个显示处write_com(0x04);//设置从后住前写数据,每写完一个数据,光标后退一格i=0;if(ad==1){a=a/pow(10,afd);}////////////////浮点计算X.***if(bd==1){b=b/pow(10,bfd);}if(fuhao==1)//符号1+{daan=a+b;if(daan<0){daan=(-1)*daan;}xianshi(i,3,daan);if(a+b<0){daan=(-1)*daan;write_date(0x2d);}write_date(0x3d);}//再写"="elseif(fuhao==8)//平方上档1号{daan=a*a;xianshi(i,3,daan);write_date(0x3d);}//再写"="//////////////////----tan计算//////////////////////////////elseif(fuhao==2)//-下档键2号{if(a-b>0){daan=a-b;}else{daan=b-a;}xianshi(i,3,daan);if(a-b<0){daan=(-1)*daan;write_date(0x2d);}write_date(0x3d);//再写"="}elseif(fuhao==7)//tan上档2号位置{dzh=(float)b*3.141592654/180;daan=tan(dzh);if(daan<0){daan=(-1)*daan;f=1;}xianshi(i,3,daan);if(f==0)write_date(0x3d);else{daan=(-1)*daan;write_date(0x2d);write_date(0x3d);}}/////////////////*cos计算///////////////////////////////elseif(fuhao==3)//'*'下档3号位置{daan=a*b;if(daan<0){daan=(-1)*daan;}xianshi(i,3,daan);if(a*b<0){daan=(-1)*daan;write_date(0x2d);}write_date(0x3d);}elseif(fuhao==6)//'cos'上档3号位置{dzh=(float)b*3.141592654/180;daan=cos(dzh);if(daan<0){daan=(-1)*daan;f=1;}xianshi(i,3,daan);if(f==0)write_date(0x3d);else{daan=(-1)*daan;write_date(0x2d);write_date(0x3d);}}//////////////////////////sin计算///////////////////elseif(fuhao==4)//'/'下档4号位置{if(b!=0){daan=a/b;if(daan<0){daan=(-1)*daan;}xianshi(i,3,daan);if(a/b<0){daan=(-1)*daan;write_date(0x2d);}}else{write_date(0x21);}write_date(0x3d);}elseif(fuhao==5)//'sin'上档4号位置{dzh=(float)b*3.141592654/180;daan=sin(dzh);if(daan<0){daan=(-1)*daan;f=1;}xianshi(i,3,daan);if(f==0)write_date(0x3d);else{daan=(-1)*daan;write_date(0x2d);write_date(0x3d);}}elseif(fuhao==9)//计算根号{if(b>=0){daan=sqrt(b);xianshi(i,3,daan);}else{write_date(0x21);}write_date(0x3d);}a=0;b=0;gz=0;ad=0;bd=0;afd=0;bfd=0;f=0;break;}case15://显示'+'平方flag=1;if(g==0){fuhao=1;if(eq==0){gz++;write_date(0x30+table1[num]);}else{write_com(0x01);write_date(0x41);write_date(0x4e);write_date(0x53);write_date(0x30+table1[num]);a=daan;gz=gz+4;}}//显示'+'elseif(g==1){g=0;gg(gz);fuhao=8;if(eq==0){gz=gz+2;write_date(0x5e);write_date(0x32);}else{write_com(0x01);write_date(0x41);write_date(0x4e);write_date(0x53);write_date(0x5e);write_date(0x32);a=daan;gz=gz+5;}}break;//平方}}P1=0xf0;}voidmain()//主函数{init();i=0;a=0;//第一个参和运算的数b=0;//第二个参和运算的数flag=0;//flag表示是否有符号键按下,fuhao=0;//fuhao表征按下的是哪个符号P1=0xf0;shangdang=1;while(1){keyscan();}}
{write_date(0x30);i++;if(i==h){write_date(0x2e);}
}///补位显示
if(c1==0)
{write_date(0x30);}
while(c1!
write_date(0x30+c1%10);
c1=c1/10;
voidgg(chargz)
{write_com(0xc0);write_date(0xfe);write_com(0x80+gz);}
voidkeyscan(void)//键盘扫描程序
if(shangdang==0)//上档键
{delay(100);
if(shangdang==0)
{while(shangdang==0);
g=!
g;//g表示那个档位g=0,下档g=1,上档
if(g==1)
{write_com(0xc0);write_date(0x5e);write_com(0x80+gz);}
if(g==0)
shangdang=1;
}}
P1=0xfe;//第一行,7,8,9,/或sin
if(P1!
=0xfe)
delay(20);//20ms
temp=P1&0xf0;
switch(temp)
case0xe0:
num=0;
break;
case0xd0:
num=1;
case0xb0:
num=2;
case0x70:
num=3;
while(P1!
=0xfe);
if(num==0||num==1||num==2)//如果按下的是'7','8'或'9'
if(flag==0)//没有按过符号键
{if(ad==1)
afd++;
a=a*10+table[num];//a的初值为'0',结果为输入a值
else//如果按过符号键
{if(bd==1)
bfd++;
b=b*10+table[num];//b的初值为'0',结果为输入b值
else//如果按下的是'/'或者SIN
flag=1;
{fuhao=4;i=table1[num];
if(eq==0){gz++;write_date(0x30+i);}
else{write_com(0x01);write_date(0x41);write_date(0x4e);write_date(0x53);write_date(0x30+i);a=daan;gz=gz+4;}
}//4表示除号已按
{g=0;gg(gz);fuhao=5;if(eq==0){gz=gz+3;write_date(0x53);write_date(0x49);write_date(0x4e);}
else{write_com(0x01);write_date(0x53);write_date(0x49);write_date(0x4e);write_date(0x41);write_date(0x4e);write_date(0x53);b=daan;gz=gz+6;}
}//5表示SIN已按
if(num==0||num==1||num==2)//显示开头
{gz++;
i=table1[num];
write_date(0x30+i);}}
P1=0xfd;//第二行4,5,6,7,*或cos
=0xfd)
delay(5);
num=4;
num=5;
num=6;
num=7;
=0xfd);
if(num==4||num==5||num==6)//如果按下的是'4','5'或'6'
a=a*10+table[num];//输入a值
b=b*10+table[num];//输入b值
else//如果按下的是'*'
{fuhao=3;i=table1[num];if(eq==0){gz++;write_date(0x30+i);}
}//3表示乘号已按
{g=0;gg(gz);fuhao=6;if(eq==0){gz=gz+3;write_date(0x43);write_date(0x4f);write_date(0x53);}
else{write_com(0x01);write_date(0x43);write_date(0x4f);write_date(0x53);write_date(0x4e);write_date(0x41);write_date(0x4e);write_date(0x53);b=daan;gz=gz+6;}
}//cos已按
if(num==4||num==5||num==6)//显示开头
{gz++;i=table1[num];
P1=0xfb;//第三行1,2,3,-或tan
=0xfb)
num=8;
num=9;
num=10;
num=11;
=0xfb);
if(num==8||num==9||num==10)//如果按下的是'1','2'或'3'
a=a*10+table[num];
b=b*10+table[num];
elseif(num==11)//如果按下的是'-'或者'tan'
{i=table1[num];fuhao=2;if(eq==0){gz++;write_date(0x30+i);}
}//2表示减已按
{g=0;gg(gz);fuhao=7;if(eq==0){write_date(0x54);write_date(0x41);write_date(0x4e);gz=gz+3;}
else{write_com(0x01);write_date(0x54);write_date(0x41);write_date(0x4e);write_date(0x41);write_date(0x4e);write_date(0x53);b=daan;gz=gz+6;}
}//tan已按
if(num==8||num==9||num==10)//显示开头
write_date(0x30+i);}
P1=0xf7;//第四行CE或根号,0,=,+或平方
=0xf7)
num=12;
num=13;
num=14;
num=15;
=0xf7);
switch(num)
case12:
//显示按下的是"清零"或者根号
write_com(0x01);
a=0;
b=0;
flag=0;
fuhao=0;
eq=0;
ad=0;bd=0;afd=0;bfd=0;
gz=0;
elseif(g==1)//根号
{g=0;gg(gz);fuhao=9;flag=1;if(eq==0){gz++;write_date(0xe8);}
else{write_com(0x01);write_date(0xe8);write_date(0x41);write_date(0x4e);write_date(0x53);b=daan;gz=gz+4;
case13:
//按下的是"0"或者小数点
gz++;
if(g==0)//0
a=a*10;
write_date(0x30);
elseif(flag==1)//如果按过符号键
b=b*10;
if(g==1)//小数点
{write_date(0x2e);
if(flag==0)
{ad=1;}
if(flag==1)
{bd=1;}
g=0;gg(gz);
case14:
//按下=计算程序
{eq=1;
write_com(0xcf);//按下等于键,光标前进至第二行最后一个显示处
write_com(0x04);//设置从后住前写数据,每写完一个数据,光标后退一格
i=0;if(ad==1){a=a/pow(10,afd);}////////////////浮点计算X.***
if(bd==1){b=b/pow(10,bfd);}
if(fuhao==1)//符号1+
{daan=a+b;
if(daan<0)
{daan=(-1)*daan;}
xianshi(i,3,daan);
if(a+b<0)
{daan=(-1)*daan;write_date(0x2d);}
write_date(0x3d);}//再写"="
elseif(fuhao==8)//平方上档1号
{daan=a*a;
//////////////////----tan计算//////////////////////////////
elseif(fuhao==2)//-下档键2号
if(a-b>0)
{daan=a-b;}
{daan=b-a;}
if(a-b<0)
write_date(0x3d);//再写"="
elseif(fuhao==7)//tan上档2号位置
{dzh=(float)b*3.141592654/180;
daan=tan(dzh);
{daan=(-1)*daan;f=1;}
if(f==0)
write_date(0x3d);
{daan=(-1)*daan;write_date(0x2d);write_date(0x3d);}
/////////////////*cos计算///////////////////////////////
elseif(fuhao==3)//'*'下档3号位置
{daan=a*b;
if(a*b<0)
elseif(fuhao==6)//'cos'上档3号位置
dzh=(float)b*3.141592654/180;
daan=cos(dzh);
//////////////////////////sin计算///////////////////
elseif(fuhao==4)//'/'下档4号位置
{if(b!
{daan=a/b;
if(a/b<0)
{daan=(-1)*daan;write_date(0x2d);}}
else{write_date(0x21);}
elseif(fuhao==5)//'sin'上档4号位置
daan=sin(dzh);
elseif(fuhao==9)//计算根号
{if(b>=0)
{daan=sqrt(b);
xianshi(i,3,daan);}
}a=0;b=0;gz=0;ad=0;bd=0;afd=0;bfd=0;f=0;
break;}
case15:
//显示'+'平方
{fuhao=1;if(eq==0){gz++;write_date(0x30+table1[num]);}
else{write_com(0x01);write_date(0x41);write_date(0x4e);write_date(0x53);write_date(0x30+table1[num]);a=daan;gz=gz+4;}
}//显示'+'
elseif(g==1)
{g=0;gg(gz);fuhao=8;if(eq==0){gz=gz+2;write_date(0x5e);write_date(0x32);}
else{write_com(0x01);write_date(0x41);write_date(0x4e);write_date(0x53);write_date(0x5e);write_date(0x32);a=daan;gz=gz+5;
}break;//平方
P1=0xf0;
voidmain()//主函数
init();
i=0;
a=0;//第一个参和运算的数
b=0;//第二个参和运算的数
flag=0;//flag表示是否有符号键按下,
fuhao=0;//fuhao表征按下的是哪个符号
while
(1)
{keyscan();
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2