2、detab[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};unsignedcharbdscan(){P1=0x0f;if(P1!=0x0f)delay(20);if(P1!=0x0f){switch(P1&0x0f){case0x0e:hang=0;break;case0x0d:hang=1;break;case0x0b:hang=2;break;case0x07:hang=3;break;}P1=0xf0;switch(P1&0xf0){case0xe0:lie=0;break;c
3、ase0xd0:lie=1;break;case0xb0:lie=2;break;case0x70:lie=3;break;}returntab[hang][lie];}elsereturn0;}/控制显示程序/voiddisp(charnum,n){P3=255-pow(2,n);switch(num){case1:P2=0x06;break;case2:P2=0x5b;break;case3:P2=0x4f;break;case4:P2=0x66;break;case5:P2=0x6d;break;case6:P2=0x7d;break;ca
4、se7:P2=0x07;break;case8:P2=0x7f;break;case9:P2=0x6f;break;case0:P2=0x3f;break;}}voidshow(unsignedlongput){chareach[6],i;/unsignedlongp;for(i=0;i<6;i++){p=pow(10,5-i);each[i]=(char)(put/p);put=put%p;}/each[0]=put/100000;put=put%100000;each[1]=put/10000;put=put%10000;each[2]=pu
5、t/1000;put=put%1000;each[3]=put/100;put=put%100;each[4]=put/10;put=put%10;each[5]=put;for(i=0;i<6;i++)disp(each[i],i);}longcalcu(longopr1,longopr2,charrul){switch(rul){case11:returnopr1+opr2;break;case12:returnopr1-opr2;break;case13:returnopr1opr2;break;case14:returnopr1/opr2
6、;break;}}/主程序/voidmain(){charinp,bijiao,linshi=0,i=0,j=0,rule;//inp是输入,bijiao为后面做长按键一次处理定义变量,rule为运算符号;longoprd[3],xs=0;//oprd是每次输入的完整数,即operand操作数,xs是需要显示的数;while(1){inp=bdscan();if(inp==0)bijiao=0;//持续按键算作一次按键;if(inp!=0){if(inp==bijiao)inp=0;if(inp!=0)bijiao=inp;}//持续按键算作一次
7、按键;if(inp>=1&&inp<=10){if(inp==10)//按到10的时候作0处理;{inp=0;linshi=10;}if(i==0)oprd[j]=inp;elseoprd[j]=oprd[j]10+inp;if(linshi==10)inp=10;//以上10作0处理仅是临时,马上恢复其值,不知是否有意义?i++;}elseif(inp>=11&&inp<=14){if(i!=0)j++;rule=inp;}elseif(inp==15){if(i!=0)j++;oprd[2]=calcu(oprd[0],oprd[1],rul
8、e);}elseif(inp==16)soft_reset();else;if(inp!=0)xs=oprd[j];show(xs);}