我有我自己写的一个程序,根号 开方连续运算1602显示
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar temp,z,fuhao; //z?????,fuhao?????
char zifu1[8]={0},zifu2[8]={0},zifu[20];
uchar cuowu[]={"cuo wu"};
uchar keyshu=0,shu0,genhao=251,n=0; ///????
double shu1=0,shu2=0,shu=0; //????
sbit EN = P1^6;
sbit RS = P1^4;
sbit RW = P1^5;
sbit duan = P2^6;
sbit wei = P2^7;
sbit gen= P3^0;
sbit fang = P3^1;
double z_s(uchar *p);
void s_z(double b);
void s_z2(double b);
void s_z1(long zheng);
void ten(unsigned int t) //????
{
uchar i;
for(;t>0;t--)
for(i=0;i<120;i++);
}
/*****??????*****/
uchar jianpan()
{
z='N'; //?????????,???'N'
P3=0xfe; //?????
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0) //???
{
ten(10);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:z=7;
break;
case 0xde:z=8;
break;
case 0xbe:z=9;
break;
case 0x7e:z='+';
break;
}
while(temp!=0xf0) //????
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfd; //?????
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0) //???
{
ten(10);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:z=4;
break;
case 0xdd:z=5;
break;
case 0xbd:z=6;
break;
case 0x7d:z='-';
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0; //????
}
}
}
P3=0xfb; //?????
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0) //???
{
ten(10);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:z=1;
break;
case 0xdb:z=2;
break;
case 0xbb:z=3;
break;
case 0x7b:z='*';
break;
}
while(temp!=0xf0) //????
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xf7; //?????
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0) //???
{
ten(10);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:z='=';
break;
case 0xd7:z=0;
break;
case 0xb7:z='.';
break;
case 0x77:z='/';
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0; //????
}
}
}
while(fang==0)
{
if(fang==0)
{
ten(5);
if(fang==0)
{
z='^';
}
while(fang==0); //???????
}
}
while(gen==0)
{
if(gen==0)
{
ten(5);
if(gen==0)
{
z=251;
}
while(gen==0); //???????
}
}
return z;
}
void mingling(uchar a)
{
P0=a;
RS=0;
EN=0;
ten(10);
EN=1;
ten(10);
EN=0;
}
void shuju(uchar a)
{
P0=a;
RS=1;
EN=0;
ten(10);
EN=1;
ten(10);
EN=0;
}
void chushihua()
{
RW=0;
duan=0;
wei=0;
mingling(0x38); //??????:16???,5???,8?????
ten(20);
mingling(0x0f); //??????
ten(20);
mingling(0x06); //??????:????,????
ten(20);
mingling(0x01); //?????,??????????
ten(20);
}
/*******????**********/
void zifuchuan(uchar *a)
{
while(*a)
{
shuju(*a);
a++;
}
}
////////////////////
/////??????///
////////////////////
double z_s(uchar *p)
{
char i=0,j=0;
double num=0,xiao=0,x=0,y=0;
while((*p!='.')&&*p) //??????????
{
num=num*10+(*p-'0');
p++;
}
for(p++,i++,j=0;*p;j++,i++,p++)
xiao=xiao*10+(*p-'0');
for(;j>0;j--)
xiao*=0.1;
num=num+xiao;
return num;
}
void s_z1(long zheng)
{
char j=0,a[20]={0};
if(zheng==0)
{
shuju('0');
return;
}
else if(zheng<0)
{
zheng=0-zheng;
shuju('-');
}
while(zheng>=1)
{
a[j]=zheng%10+'0';
zheng=zheng/10;
j++;
}
for(j=j-1;j>=0;j--)
{
shuju(a[j]);
}
}
void s_z2(double b)
{
long num;
b=b-floor(b);
if(b>0.00000009)
{
shuju('.');
num=(long)(b*1000000);
s_z1(num);
}
}
///////********D'D??*********///////
void s_z(double b)
{
long num;
if(b==0)
{
shuju('0');
return;
}
else if(b<0)
{
b=fabs(b);
shuju('-');
}
num=(long)b;
s_z1(num);
s_z2(b);
}
//////////////////////////////////////
//*********?LCD?????*********//
/*/*//*/*//*/////////////////////////*/
void weizhi(uchar x,uchar y)
{
if(y==0)
mingling(0x40+x);
else mingling(0x40+0x80+x);
}
void shuju1( unsigned x,unsigned char y,unsigned char dat)
{
weizhi( x, y );
shuju(dat);
}
////******************************************************???*************************************************************//
void main()
{
uchar i=0;
chushihua();
while(1)
{
while(1)
{
if((jianpan()!='N')&&(z>=0&&z<=9||z=='.'))
{
if(keyshu<=19)
{
if(z=='.')
shuju('.');
else
shuju(z+'0');
}
zifu1[keyshu]=z+'0';
keyshu++; shu0++;
}
else if(z=='+'||z=='-'||z=='*'||z=='/'||z=='^'||z==251||z=='=')
{
shu1=z_s(zifu1);
shu0=shu1;
shu=shu1;
loop:
shu1=shu;
mingling(0x01);
s_z(shu1);
if(z!='=')shuju(z); //????
if(z==251)
{
shu1=sqrt(shu1);
shu=shu1; //????????
while(1)
{
if(jianpan()=='+'||z=='-'||z=='*'||z=='/'||z=='^'||z=='=')
{
if(z!='=')shuju(z);
break;
}
}
}
keyshu=0; //??????
//shuju(fuhao+'0');
fuhao=z;
break;
}
}
while(1)
{
if(z==251)break;
if(z=='=')break;
if((jianpan()!='N')&&(z>=0&&z<=9||z=='.'))
{
if(keyshu<=19)
{
if(z=='.')
shuju('.');
else
shuju(z+'0');
}
zifu2[keyshu]=z+'0';
keyshu++;
}
else if(z=='+'||z=='-'||z=='*'||z=='/'||z=='='||z==251)
{
shu2=z_s(zifu2);
break;
}
if(z==251)
{
shu2=sqrt(shu2); //????????
while(1)
{
if(jianpan()=='+'||z=='-'||z=='*'||z=='/'||z=='^'||z=='=')
{
if(z!='=')shuju(z);
break;
}
}
}
}
if(fuhao=='^')
shu=pow(shu1,shu2);
if(fuhao=='+')
shu=shu1+shu2;
if(fuhao=='-')
shu=shu1-shu2;
if(fuhao=='*')
shu=shu1*shu2;
if(fuhao=='/')
shu=shu1/shu2;
if((shu2==0&&fuhao=='/'))
{
weizhi(0,1);
zifuchuan(cuowu);
}
if(z=='=')
{
shuju('=');
weizhi(0,1);
s_z(shu);
while(1)
{
if(jianpan()=='+'||z=='-'||z=='*'||z=='/'||z=='^'||z==251)break;
}
}
shu1=0;
shu2=0;
for(i=0;i<8;i++)
zifu1[i]=0;
for(i=0;i<8;i++)
zifu2[i]=0; //??
if(z=='+'||z=='-'||z=='*'||z=='/'||z=='^'||z==251)
goto loop;
}
}