1、/*可以连算不需反复清零,但每次输入参数后必须输入“等于“ 此问题有待解决.立编*/#include#define uchar unsigned charuchar a0=16,b0=16,c0=16,d0=16,e0=16,s0,s1,s2,s3,s4,s5,f0=16,wei,temp,key,i,j,k,jian0,jia0,cheng0,chu0;uchar jia,jian,cheng,chu,dengyu,qingling,yunsuan; unsigned long num,M;sbit dula=P26;sbit wela=P27;sbit beep=P23;unsigned
2、char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00;void delay(uchar i)for(j=i;j0;j-)for(k=125;k0;k-);void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f)dula=0;P0=tablea;dula=1;dula=0;wela=0;P0=0xfe;wela=1;wela=0;delay(5);P0=tableb;dula=1;du
3、la=0;P0=0xfd;wela=1;wela=0;delay(5);P0=tablec;dula=1;dula=0;P0=0xfb;wela=1;wela=0;delay(5);P0=tabled;dula=1;dula=0;P0=0xf7;wela=1;wela=0;delay(5);P0=tablee;dula=1;dula=0;P0=0xef;wela=1;wela=0;delay(5);P0=tablef;dula=1;dula=0;P0=0xdf;wela=1;wela=0;delay(5);void keyscan()P3=0xfe;temp=P3;temp=tempif(te
4、mp!=0xf0)delay(10);if(temp!=0xf0)temp=P3;switch(temp)case 0xee:key=1;wei+;break;case 0xde:key=2;wei+;break;case 0xbe:key=3;wei+;break;case 0x7e:jia=1;break;while(temp!=0xf0) temp=P3;temp=tempbeep=0;beep=1;P3=0xfd;temp=P3;temp=tempif(temp!=0xf0)delay(10);if(temp!=0xf0)temp=P3;switch(temp)case 0xed:ke
5、y=4;wei+;break;case 0xdd:key=5;wei+;break;case 0xbd:key=6;wei+;break;case 0x7d:jian=1;break;while(temp!=0xf0)temp=P3;temp=tempbeep=0;beep=1;P3=0xfb;temp=P3;temp=tempif(temp!=0xf0)delay(10);if(temp!=0xf0)temp=P3;switch(temp)case 0xeb:key=7;wei+;break;case 0xdb:key=8;wei+;break;case 0xbb:key=9;wei+;br
6、eak;case 0x7b:cheng=1;break;while(temp!=0xf0)temp=P3;temp=tempbeep=0;beep=1;P3=0xf7;temp=P3;temp=tempif(temp!=0xf0)delay(10);if(temp!=0xf0)temp=P3;switch(temp)case 0xe7:qingling=1; break;case 0xd7:key=0;wei+;break;case 0xb7:dengyu=1;break;case 0x77:chu=1;break;while(temp!=0xf0)temp=P3;temp=tempbeep=
7、0;beep=1;void display0()if(key!=20)switch(wei)case 1: a0=key;b0=16;c0=16;d0=16;e0=16;f0=16;break;case 2: b0=key;c0=16;d0=16;e0=16;f0=16;break;case 3: c0=key;d0=16;e0=16;f0=16;break;case 4: d0=key;e0=16;f0=16;break;case 5: e0=key;f0=16; break;case 6: f0=key;break;key=20;display(a0,b0,c0,d0,e0,f0);if(
8、a0!=16) s5=a0;/不能直接操作 a0 必须将 a0 赋予一个参数,不然会出错。下类同if(b0!=16) s4=b0;if(c0!=16) s3=c0;if(d0!=16) s2=d0;if(e0!=16) s1=e0;if(f0!=16) s0=f0;void liansuan()M=num;if(jia)jia=0;jia0=1;else if(jiadengyu=1;else if(jian)jian=0;jian0=1;else if(jiandengyu=1;else if(cheng)cheng=0;cheng0=1;else if(chengdengyu=1;else
9、 if(chu)chu=0;chu0=1;else if(chudengyu=1;void main()uchar yunsuan;while(1)keyscan();yunsuan=jia|jian|cheng|chu|dengyu;if(yunsuan=0)/注意:将 yunsuan 赋值写于键盘检测之后display0();elseyunsuan=jia|jian|cheng|chu;/无此句不能输出结果if(yunsuan)/dengyu 时需检测 jia|jian|cheng|chu 键以按过 /才能确定运算结果a0=16;b0=16;c0=16;d0=16;e0=16;f0=16;
10、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 6:M=s5*100000+s4*10000+s3*1000+s2*100+s1*10+s0;break;case 5:M=s5*10000+s4*1000+s3*1
11、00+s2*10+s1;break;case 4:M=s5*1000+s4*100+s3*10+s2;break;case 3:M=s5*100+s4*10+s3;break;case 2:M=s5*10+s4;break;case 1:M=s5;break;wei=0;s0=0;s1=0;s2=0;s3=0;s4=0;s5=0;display(a0,b0,c0,d0,e0,f0);if(dengyu=1)dengyu=0;switch(wei)/输出参数的表示方法case 6:num=s5*100000+s4*10000+s3*1000+s2*100+s1*10+s0;break;case
12、5:num=s5*10000+s4*1000+s3*100+s2*10+s1;break;case 4:num=s5*1000+s4*100+s3*10+s2;break;case 3:num=s5*100+s4*10+s3;break;case 2:num=s5*10+s4;break;case 1:num=s5;break;wei=0;s0=0;s1=0;s2=0;s3=0;s4=0;s5=0;if(jia0)jia0=0;num=M+num;/判断 jia 键按过,下类同if(jian0)jian0=0;num=M-num;if(cheng0)cheng0=0;num=M*num;if(chu0)chu0=0;num=M/num;if(num9)b0=num%100000/10000;c0=num%10000/1000;d0=num%1000/100;e0=num%100/10;f0=num%10;display(a0,b0,c0,d0,e0,f0);liansuan();if(qingling=1)a0=16;b0=16;c0=16;d0=16;e0=16;f0=16;jia=0;jian=0;cheng=0;chu=0,num=0,M=0;qingling=0;dengyu=0;wei=0;display(a0,b0,c0,d0,e0,f0);