51单片机双显示小数计算器.docx
- 文档编号:3805869
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:35
- 大小:19.11KB
51单片机双显示小数计算器.docx
《51单片机双显示小数计算器.docx》由会员分享,可在线阅读,更多相关《51单片机双显示小数计算器.docx(35页珍藏版)》请在冰豆网上搜索。
51单片机双显示小数计算器
自己制作的单片机程序,既可以用数码管显示,也可以用1602显示,且可以显示小数~~~
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharcodetabledu[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
ucharcodetabledu1[16]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};
ucharcodetablewe[8]={0,1,2,3,4,5,6,7};
ucharcodetable[]="0123456789";
uchardispbuf[4]={0,0,0,0};
floatdispbuf1[4]={0,0,0,0};
ucharaa,temp,key,keypos,flag,fuhao,a0,b0,c0,d0,e0,flag1,flag2,a1,b1,c1,d1;
floatnum1,num2,num3,flag3=1;
intnum5,num6,num7,n2;
longn1;
sbitRS=P2^5;
sbitRW=P2^6;
sbitE=P2^7;
sbitkey1=P3^2;
sbitkey2=P3^3;
sbitkey3=P3^4;
voidkeyscan1();
voidukeyscan1();
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidchange(uchar*p,ucharcount)
{
count=4-count;
while(count<3)
{
*(p+count)=*(p+count+1);
count++;
}
}
floatjisuan(floatx,chary,floatz)
{
floatm;
if(y==10)m=x+z;
if(y==11)m=x-z;
if(y==12)m=x*z;
if(y==13)m=x/z;
returnm;
}
bitBusy(void)
{
bitbusy_flag=0;
RS=0;
RW=1;
E=1;
delay
(1);
busy_flag=(bit)(P0&0x80);
E=0;
returnbusy_flag;
}
voidwcmd(uchardel)
{
while(Busy());
RS=0;RW=0;E=0;
P0=del;
delay
(1);
E=1;
delay
(1);
E=0;
}
voidwdata(uchardel)
{
while(Busy());
RS=1;RW=0;E=0;
P0=del;
delay
(1);
E=1;
delay
(1);
E=0;
}
voidkeyscan()
{
P1=0xfe;
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0xee:
key=1;
break;
case0xde:
key=2;
break;
case0xbe:
key=3;
break;
case0x7e:
key=4;
break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
if((key>=0)&&(key<10))
{
keypos++;
if(flag2==0)
{
if(keypos<=4)
{
change(dispbuf,keypos);
dispbuf[3]=key;
}
}
elsedispbuf1[keypos-1]=key;
}
}
}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0xed:
key=5;
break;
case0xdd:
key=6;
break;
case0xbd:
key=7;
break;
case0x7d:
key=8;
break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
if((key>=0)&&(key<10))
{
keypos++;
if(flag2==0)
{
if(keypos<=4)
{
change(dispbuf,keypos);
dispbuf[3]=key;
}
}
elsedispbuf1[keypos-1]=key;
}
}
}
P1=0xfb;
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0xeb:
key=9;
break;
case0xdb:
key=0;
break;
case0xbb:
key=10;
break;
case0x7b:
key=11;
break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
if((key>=0)&&(key<10))
{
keypos++;
if(flag2==0)
{
if(keypos<=4)
{
change(dispbuf,keypos);
dispbuf[3]=key;
}
}
elsedispbuf1[keypos-1]=key;
}
if((key>9)&&(key<14))
{
fuhao=key;
num1=1000*dispbuf[0]+100*dispbuf[1]+10*dispbuf[2]+dispbuf[3]+dispbuf1[0]/10+dispbuf1[1]/100+dispbuf1[2]/1000+dispbuf1[3]/10000;
dispbuf[0]=0;dispbuf[1]=0;dispbuf[2]=0;dispbuf[3]=0;dispbuf1[0]=0;dispbuf1[1]=0;dispbuf1[2]=0;dispbuf1[3]=0;
keypos=0;flag2=0;
while
(1)
{
keyscan1();
if(key==15)break;
}
}
if(key==15)
{
dispbuf[0]=0;dispbuf[1]=0;dispbuf[2]=0;dispbuf[3]=0;dispbuf1[0]=0;dispbuf1[1]=0;dispbuf1[2]=0;dispbuf1[3]=0;
keypos=0;flag2=0;
}
}
}
P1=0xf7;
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0xe7:
key=12;
break;
case0xd7:
key=13;
break;
case0xb7:
key=14;
break;
case0x77:
key=15;
break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
if((key>=0)&&(key<10))
{
keypos++;
if(flag2==0)
{
if(keypos<=4)
{
change(dispbuf,keypos);
dispbuf[3]=key;
}
}
elsedispbuf1[keypos-1]=key;
}
if((key>9)&&(key<14))
{
fuhao=key;
num1=1000*dispbuf[0]+100*dispbuf[1]+10*dispbuf[2]+dispbuf[3]+dispbuf1[0]/10+dispbuf1[1]/100+dispbuf1[2]/1000+dispbuf1[3]/10000;
dispbuf[0]=0;dispbuf[1]=0;dispbuf[2]=0;dispbuf[3]=0;dispbuf1[0]=0;dispbuf1[1]=0;dispbuf1[2]=0;dispbuf1[3]=0;
keypos=0;flag2=0;
while
(1)
{
keyscan1();
if(key==15)break;
}
}
if(key==15)
{
dispbuf[0]=0;dispbuf[1]=0;dispbuf[2]=0;dispbuf[3]=0;dispbuf1[0]=0;dispbuf1[1]=0;dispbuf1[2]=0;dispbuf1[3]=0;
keypos=0;flag2=0;
}
}
}
if(keypos==4)keypos=0;
if(key1==0)
{
delay(5);
if(key1==0)
{
while(key1==0);
flag2=1;
keypos=0;
}
}
if(key2==0)
{
delay(5);
if(key2==0)
{
while(key2==0);
num1=1000*dispbuf[0]+100*dispbuf[1]+10*dispbuf[2]+dispbuf[3]+dispbuf1[0]/10+dispbuf1[1]/100+dispbuf1[2]/1000+dispbuf1[3]/10000;
num3=sqrt(num1);
num6=num3;
num5=(num3-num6)*10000;
dispbuf[0]=num6/1000;
dispbuf[1]=num6%1000/100;
dispbuf[2]=num6%1000%100/10;
dispbuf[3]=num6%1000%100%10;
dispbuf1[0]=num5/1000;
dispbuf1[1]=num5%1000/100;
dispbuf1[2]=num5%1000%100/10;
dispbuf1[3]=num5%1000%100%10;
}
}
}
voidkeyscan1()
{
P1=0xfe;
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0xee:
key=1;
break;
case0xde:
key=2;
break;
case0xbe:
key=3;
break;
case0x7e:
key=4;
break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
if((key>=0)&&(key<10))
{
keypos++;
if(flag2==0)
{
if(keypos<=4)
{
change(dispbuf,keypos);
dispbuf[3]=key;
}
}
elsedispbuf1[keypos-1]=key;
}
}
}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0xed:
key=5;
break;
case0xdd:
key=6;
break;
case0xbd:
key=7;
break;
case0x7d:
key=8;
break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
if((key>=0)&&(key<10))
{
keypos++;
if(flag2==0)
{
if(keypos<=4)
{
change(dispbuf,keypos);
dispbuf[3]=key;
}
}
elsedispbuf1[keypos-1]=key;
}
}
}
P1=0xfb;
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0xeb:
key=9;
break;
case0xdb:
key=0;
break;
case0xbb:
key=10;
break;
case0x7b:
key=11;
break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
if((key>=0)&&(key<10))
{
keypos++;
if(flag2==0)
{
if(keypos<=4)
{
change(dispbuf,keypos);
dispbuf[3]=key;
}
}
elsedispbuf1[keypos-1]=key;
}
if((key>9)&&(key<14))
{
num1=num3;
fuhao=key;
dispbuf[0]=0;dispbuf[1]=0;dispbuf[2]=0;dispbuf[3]=0;dispbuf1[0]=0;dispbuf1[1]=0;dispbuf1[2]=0;dispbuf1[3]=0;
keypos=0;
}
}
}
P1=0xf7;
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0xe7:
key=12;
break;
case0xd7:
key=13;
break;
case0xb7:
key=14;
break;
case0x77:
key=15;
break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
if((key>=0)&&(key<10))
{
keypos++;
if(flag2==0)
{
if(keypos<=4)
{
change(dispbuf,keypos);
dispbuf[3]=key;
}
}
elsedispbuf1[keypos-1]=key;
}
if((key>9)&&(key<14))
{
num1=num3;
fuhao=key;
dispbuf[0]=0;dispbuf[1]=0;dispbuf[2]=0;dispbuf[3]=0;dispbuf1[0]=0;dispbuf1[1]=0;dispbuf1[2]=0;dispbuf1[3]=0;
keypos=0;
}
if(key==14)
{
num2=1000*dispbuf[0]+100*dispbuf[1]+10*dispbuf[2]+dispbuf[3]+dispbuf1[0]/10+dispbuf1[1]/100+dispbuf1[2]/1000+dispbuf1[3]/10000;
num3=jisuan(num1,fuhao,num2);
num6=num3;
num5=(num3-num6)*10000;
dispbuf[0]=num6/1000;
dispbuf[1]=num6%1000/100;
dispbuf[2]=num6%1000%100/10;
dispbuf[3]=num6%1000%100%10;
dispbuf1[0]=num5/1000;
dispbuf1[1]=num5%1000/100;
dispbuf1[2]=num5%1000%100/10;
dispbuf1[3]=num5%1000%100%10;
flag2=0;
}
}
}
if(keypos==4)keypos=0;
if(key1==0)
{
delay(5);
if(key1==0)
{
while(key1==0);
flag2=1;
keypos=0;
}
}
if(key2==0)
{
delay(5);
if(key2==0)
{
while(key2==0);
num1=1000*dispbuf[0]+100*dispbuf[1]+10*dispbuf[2]+dispbuf[3]+dispbuf1[0]/10+dispbuf1[1]/100+dispbuf1[2]/1000+dispbuf1[3]/10000;
num3=sqrt(num1);
num6=num3;
num5=(num3-num6)*10000;
dispbuf[0]=num6/1000;
dispbuf[1]=num6%1000/100;
dispbuf[2]=num6%1000%100/10;
dispbuf[3]=num6%1000%100%10;
dispbuf1[0]=num5/1000;
dispbuf1[1]=num5%1000/100;
dispbuf1[2]=num5%1000%100/10;
dispbuf1[3]=num5%1000%100%10;
}
}
}
voidukeyscan()
{
P1=0xfe;
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0xee:
key=1;
break;
case0xde:
key=2;
break;
case0xbe:
key=3;
break;
case0x7e:
key=4;
break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
if(flag1==0)
{
wdata(table[key]);
num1=num1*10+key;
}
else{flag3=flag3*10;num1=num1+key/flag3;wdata(table
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 显示 小数 计算器