附 录
附录一 简易计算器源程序
#include
#include
#include
#define uchar unsigned char #define uint unsigned int #define ulong unsigned long float a,b ,c=0,jg; uchar
jxh,bz=0,yunsuan=0,ws=10,shuzhi,ks=0,xiaoshu=0,fuhej=0; bit
xiaoshubz=0,dm=0,dm1=0,dm2=0,dm3=0,dm4=0,dm5=0,dm6=0,dm7=0,dm8=0; bit shift=0,ctrl=0;
uchar code xa[]={0xef,0xdf,0xbf,0x7f }; Uchar code xb[][4]={{0xee,0xed,0xeb,0xe7},{0xde,0xdd,0xdb,0xd7},{0xbe,0xbd,0xbb,0xb7},{0x7e,0x7d,0x7b,0x77},}; uchar hc[8],table1[8]={21,21,21,21,21,21,21,21}, table2[8]={21,21,21,21,21,21,21,21},xxianshi[14]={21,21,21,21,21,21,21,21,21,21,21,21,21,21}; uchar
print[16]={21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21} ; void take( ) ; void delay(uint m); uchar key() ; uchar keychuli(); void clearc( ) ; void chezhi( ); void hezhi( ) ; void see( ) ;
void zhuan16(float z); float zhuan10();
/////////////////////////////////////////////////////////////////////////////////////////////////// void main() {
lcdset( );
31
display( 1, 1, \科学计算器\ display( 3, 7, \ while(1) { if(shift==0)display( 2, 1, \
if(shift==1&&ctrl==0) display( 2, 1, \ if(shift==1&&ctrl==1)display( 2, 1, \ jxh=key() ;
switch(jxh)
{ case 1: if(shift==0)shuzhi=0;
if(shift==1&&ctrl==0)shuzhi=5;
if(shift==1&&ctrl==1)shuzhi=10;take( );see( );break; //数字0,1 case 2: if(shift==0)shuzhi=1;
if(shift==1&&ctrl==0)shuzhi=6;
if(shift==1&&ctrl==1)shuzhi=11;take( );see( );break; //数字2,3 case 3: if(shift==0)shuzhi=2;
if(shift==1&&ctrl==0)shuzhi=7; if(shift==1&&ctrl==1)shuzhi=12; take( );see( );break; //数字4,5
case 4: if(shift==0)shuzhi=3;
if(shift==1&&ctrl==0)shuzhi=8; if(shift==1&&ctrl==1)shuzhi=13; take( );see( );break; //数字6,7
case 11: if(shift==0)shuzhi=4;
if(shift==1&&ctrl==0)shuzhi=9; if(shift==1&&ctrl==1)shuzhi=14; take( );see( );break; //数字8,9 case 12: shuzhi=22 ;if(shift==1&&ctrl==1)shuzhi=15; take( ); see( ); break; /// 小数点 case 13: if(shift==0)
{dm=1;dm1=1;ks=7;bz=6;} if(shift==1&&ctrl==0)
{dm=1;dm2=1;ks=8;bz=6;}see( );break;//计算sin ,cos
case 14: if(shift==0)
{dm=1;dm3=1;ks=5;bz=6;} if(shift==1&&ctrl==0)
{dm=1;dm4=1;ks=6;bz=6;} if(shift==1&&ctrl==1)
{dm=1;dm8=1;ks=12;bz=6;ctrl=0;}see( );break;//计算 平方,根号,10>16进制,
case 21: if(shift==0)
32
{dm=1;dm5=1;ks=9;bz=6;} if(shift==1&&ctrl==0)
{dm=1;dm6=1;ks=10;bz=6;} if(shift==1&&ctrl==1)
{dm=1;dm7=1;ks=11;bz=6;}see( );break;//计算 tan ,cot,16>10进制 case 22: fuhej++;if(fuhej==1)shift=!shift;if(fuhej==2){ctrl=!ctrl;fuhej=0;}break; //复合键设定
case 23: if(bz==0){bz=1;ks=1;hezhi( );} see( ); break; //+
case 24: if(bz==0){bz=2;ks=2;hezhi( );} see( ); break; //- case 31: if(bz==0){bz=3;ks=3;hezhi( );};see( );break; //* case 32: if(bz==0){bz=4;ks=4;hezhi( );};see( );break; // \
case 33: if(bz<7&&bz!=0)
{bz=5;yunsuan=ks;if(dm==0)hezhi( );
else {bz=6;hezhi( );bz=5;} see( );};break; // =
case 34: clearc( );see( ); display( 3, 7, \// 清零
}
switch(yunsuan) { case 1: jg=a+b ;chezhi( );yunsuan=0;break; case 2: jg=a-b ;chezhi( );yunsuan=0;break; case 3: jg=a*b ;chezhi( );yunsuan=0;break; case 4: jg=a/b ;chezhi( );yunsuan=0;break; case 5: jg=a*a ;chezhi( );yunsuan=0;break; case 6: jg=sqrt(a);chezhi();yunsuan=0;break; case 7: jg=sin(a);chezhi( );yunsuan=0;break; case 8: jg=cos(a);chezhi( );yunsuan=0;break; case 9: jg=tan(a);chezhi( );yunsuan=0;break; case 10: jg=log10(a);chezhi( );yunsuan=0;break;
case 11: jg=zhuan10();chezhi( );yunsuan=0;break;//16>10 case 12: zhuan16(a);see( );yunsuan=0;break; //10>16 } } }
///***************************清零函数*********************************************//
// 说明:将一些中间变量清零,并将显示缓冲区送灭的代码 void clearc( ) { uchar i;
33
bz=0;yunsuan=0;ws=10;c=0;ks=0;xiaoshu=0;
xiaoshubz=0;dm=0;dm1=0;dm2=0;dm3=0;dm4=0;dm5=0;dm6=0; dm7=0;dm8=0;ctrl=0;shift=0;fuhej=0; for(i=0;i<8;i++)
{table1[i]=21;table2[i]=21;xxianshi[i]=21; }
for(i=0;i<14;i++) { xxianshi[i]=21; }
for(i=0;i<16;i++) { print[i]=21; } }
///***************************拆字函数***********************************//
//说明:将运算的结果拆开,给予不同的运算不同的精度,然后送显示缓冲区 void chezhi( )
{ uchar i; bit j=0;
if(jg<0){jg=jg*(-1);j=1; }
if(jg<99999999)
{xxianshi[0]=jg/10000000 ;
xxianshi[1]=(ulong)(jg)/1000000; xxianshi[2]=(ulong)(jg)/100000; xxianshi[3]=(ulong)(jg)/10000; xxianshi[4]=(ulong)(jg)/1000; xxianshi[5]=(ulong)(jg)/100; xxianshi[6]=(ulong)(jg)/10; xxianshi[7]=(ulong)(jg);
if(((yunsuan==4)|(xiaoshubz!=0)|dm==1)&&(dm7==0)) { xxianshi[8]=22;
xxianshi[9]=(ulong)(jg*10); xxianshi[10]=(ulong)(jg*100); xxianshi[11]=(ulong)(jg*1000); if(dm==1)
{xxianshi[12]=(ulong)(jg*10000); xxianshi[13]=(ulong)(jg*100000); } } if(jg!=0)
{ for(i=0;i<8;i++)
{ if(xxianshi[i]!=0) {xxianshi[i-1]=21;break; } if(xxianshi[i]==0){xxianshi[i]=21;
34
if(i==7)xxianshi[i]=0; } } }
else{ for(i=0;i<8;i++) { xxianshi[i]=21; }
xxianshi[7]=0; }
if(j==1) //显示‘-’号 { for(i=0;i<8;i++) {if( xxianshi[i]!=21)
{ xxianshi[i-1]=17;break; } } } see( ); }
else display( 4, 2, \
}
///********************************显示****************************************// void see( )
{ uchar i,j=0,k=0; if(dm1==1)
{display( 3, 1, \ } if(dm2==1)
{display( 3, 1, \ } if(dm3==1)
{display( 3, 1, \平方\ } if(dm4==1)
{display( 3, 1, \根号\ } if(dm5==1)
{display( 3, 1, \ } if(dm6==1)
{display( 3, 1, \
35
函数