简易计算器有图加程序
- #include"key16a.h"
- #include"lcd1602.h"
- Uchar code keyval[16]={'/','=',0,'C','*',9,8,7,'-',6,5,4,'+',3,2,1,};
- Uchar data numb1[4],numb2[4],result[12];
- void Fclear ()
- {Uchar i;
- for(i=0;i<4;i++)
- { numb1[i]=0;
- numb2[i]=0;
- }
- for(i=0;i<12;i++)
- result[i]=' ';
- }
- void main()
- { Uchar i=0,j=0,tmp=0;
- Uchar oprat1=0,oprat2=0,opratflag=0;
- Uint answer=0;
- Fclear ();
- RstLcd();
- ClrLcd();
- while(1)
- { do{tmp=key_scan();}while(tmp==0xff);
- tmp=keyval[tmp];
- if(tmp=='C'){ClrLcd();break;}
- else
- {if(tmp!='=')
- { if((tmp<10)&&(opratflag==0))
- { numb1[i]=tmp;WriteChar(tmp+0x30,i+4,0);i++;}
- else if (tmp>10)
- {opratflag=tmp;WriteChar(tmp,7,0);}
- else
- {numb2[j]=tmp;WriteChar(tmp+0x30,j+8,0);j++;}
- }
- else
- {
- switch(i)
- { case 1: oprat1=numb1[0];
- numb1[0]+=0x30;numb1[1]=numb1[2]=' ';
- break;
- case 2:
- oprat1=numb1[0]*10+numb1[1];
- numb1[0]+=0x30;numb1[1]+=0x30;
- numb1[2]=' ';break;
- case 3:
- oprat1=numb1[0]*100+numb1[1]*10+numb1[2];
- numb1[0]+=0x30;numb1[1]+=0x30;
- numb1 [2]+=0x30;
- break;
- }
- switch(j)
- { case 1: oprat2=numb2[0];
- numb2[0]+=0x30;numb2[1]=numb2[2]=' ';
- break;
- case 2:
- oprat2=numb2[0]*10+numb2[1];
- numb2[0]+=0x30;numb2[1]+=0x30;
- numb2 [2]=' '; break;
- case 3:
- oprat2=numb2[0]*100+numb2[1]*10+numb2[2];
- numb2[0]+=0x30;numb2[1]+=0x30;
- numb2 [2]+=0x30;
- break;
- }
- result [0]=' ';
- switch(opratflag)
- { case '+':
- answer=oprat1+oprat2;break;
- case '-':
- if(oprat1<oprat2)
- { answer=oprat2-oprat1;
- result[0]='-';}
- else
- {answer=oprat1-oprat2;
- }
- break;
- case'*':
- answer=oprat1*oprat2;break;
- case '/':
- answer=oprat1/oprat2;
- tmp=oprat1%oprat2;
- if(tmp>=100) i=3;
- else if(tmp>9){i=2;}
- else if (tmp>0)
- {i=1;}
- else break;
- result[6]= result[7]=result[8]='.';
- j=9;
- switch(i)
- {case 3:result[j]=tmp/100+0x30;
- case 2:result[j++]=(tmp/10)%10+0x30;
- case 1:result[j]=tmp%10+0x30;
- break;
- }
- break;
- }
- if(answer>=10000) i=5;
- else if (answer>=1000)i=4;
- else if (answer>=100)i=3;
- else if(answer>=10)i=2;
- else i=1;
- j=1;
- switch(i)
- {case 5:result[j++]=answer/10000+0x30;
- case 4:result[j++]=(answer/1000)%10+0x30;
- case 3:result[j++]=(answer/100)%10+0x30;
- case 2:result[j++]=(answer/10)%10+0x30;
- case 1:result[j]=answer%10+0x30;break;
- }
- WriteChar('=', 3,1);
- WriteString(result,4,1);
- i=0;j=0;tmp=0; answer=0;
- oprat1=0,oprat2=0,opratflag=0;
- Fclear();
- }
- }
- }
- }
复制代码
全部资料51hei下载地址:
计算机.zip
(103.44 KB, 下载次数: 19)
|