基于单片机的简易计算器设计原理图及程序代码.docx
文本预览下载声明
原理图:#includereg52.Hsbit BEEP=P3^7;char dsp[9]={0,0,12,12,12,12,12,12,12};unsigned char code Select[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char code LED_CODES[]={0xc0,0xf9,0xa4,0xb0,0x99,//0-40x92,0x82,0xf8,0x80,0x90,//5-90x86,0xaf,0xff,0x7f,0xbf};//E,r,不显,.,-void delay11(unsigned inti) {while(i--);}charkeyscan(){charKeyL;charKeyR;P1=0xf0;do{do{P1=0xF0;P1=P1|0xF0;if(P1!=0xF0){KeyL=P1;P1=0x0F;P1=P1|0x0F;KeyR=P1;}}while(KeyL==0xF0||KeyR==0x0F);delay11(300); } while(P1!=0x0F);switch(KeyL | KeyR){case 0xb7:{return 0;break;}case 0x7e:{return 1;break;}case 0xbe:{return 2;break;}case 0xde:{return 3;break;}case 0x7d:{return 4;break;}case 0xbd:{return 5;break;}case 0xdd:{return 6;break;}case 0x7b:{return 7;break;}case 0xbb:{return 8;break;}case 0xdb:{return 9;break;}case 0xee:{return 10;break;}//加法case 0xed:{return 11;break;}//减法case 0xeb:{return 12;break;}//乘法case 0xe7:{return 13;break;}//除法case 0xd7:{return 14;break;}//清零case 0x77:{return 15;break;}//等于}}void calculate(char k,char a[8],char b[8]){char r[8];longi;longx,y;i=0;x=0;y=0;for(i=7;i0;i--){while(a[i]==12)a[i]=0;while(b[i]==12)b[i]=0;}x=a[4];x=10000*x;x=x+a[0]+a[1]*10+a[2]*100+a[3]*1000+a[5]*100000+a[6]*1000000+a[7]y=b[4];y=10000*y;y=y+b[0]+b[1]*10+b[2]*100+b[3]*1000+b[5]*100000+b[6]*1000000+b[7]if(k==10){x=x+y;if({BEEP=0;r[0]=11;r[1]=11;r[2]=10;r[3]=12;r[4]=12;r[5]=12;r[6]=12;r[7]=12;}else{r[0]=x%10;r[1]=(x%100)/10;r[2]=(x%1000)/100;r[3]=(x%10000)/1000;r[4]=(x%100000)/10000;r[5]=(x%1000000)/100000;r[6]=(x/1000000;r[7]=x}}if(k==11){if(xy){x=y-x;if(x9999999){ BEEP=0;r[0]=11;r[1]=11;r[2]=10;r[3]=12;r[4]=12;r[5]=12;r[6]=12;r[7]=12;}else{r[0]=x%10;r[1]=(x%100)/10;r[2]=(x%1000)/100;r[3]=(x%10000)/1000;r[4]=(x%100000)/10000;r[5]=(x%1000000)/100000;r[6]=(x/1000000;r[7]=xfor(i=7;i0;i--){if(r[i]==0r[i-1]!=0){r[i]=14;break;}}}}else{x=x-y;r[0]=x%10;r[1]=(x%100)/10;r[2]=(x%1000)/100;r[3]=(x%10000)/1000;r[4]=(x%100000)/10000;r[5]=(x%1000000)/100
显示全部