51单片机双显示计算器.docx

上传人:b****5 文档编号:4402783 上传时间:2022-12-01 格式:DOCX 页数:28 大小:17.84KB
下载 相关 举报
51单片机双显示计算器.docx_第1页
第1页 / 共28页
51单片机双显示计算器.docx_第2页
第2页 / 共28页
51单片机双显示计算器.docx_第3页
第3页 / 共28页
51单片机双显示计算器.docx_第4页
第4页 / 共28页
51单片机双显示计算器.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

51单片机双显示计算器.docx

《51单片机双显示计算器.docx》由会员分享,可在线阅读,更多相关《51单片机双显示计算器.docx(28页珍藏版)》请在冰豆网上搜索。

51单片机双显示计算器.docx

51单片机双显示计算器

自己制作的单片机程序,既可以用数码管显示,也可以用1602显示

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

ucharcodetabledu[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

ucharcodetablewe[4]={4,5,6,7};

uchartable[]="0123456789";

unsignedchardispbuf[4]={0,0,0,0};

ucharaa,temp,key,keypos,flag,fuhao,a0,b0,c0,d0,e0;

longnum1,num2,num3;

sbitRS=P2^5;

sbitRW=P2^6;

sbitE=P2^7;

sbitkey1=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++;

}

}

longjisuan(intx,chary,intz)

{

longm;

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<11))

{

keypos++;

if(keypos<=4)

{

change(dispbuf,keypos);

dispbuf[3]=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<11))

{

keypos++;

if(keypos<=4)

{

change(dispbuf,keypos);

dispbuf[3]=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(keypos<=4)

{

change(dispbuf,keypos);

dispbuf[3]=key;

}

}

if((key>9)&&(key<14))

{

fuhao=key;

num1=1000*dispbuf[0]+100*dispbuf[1]+10*dispbuf[2]+dispbuf[3];

dispbuf[0]=0;dispbuf[1]=0;dispbuf[2]=0;dispbuf[3]=0;

keypos=0;

while

(1)

{

keyscan1();

if(key==15)break;

}

}

if(key==15)

{

dispbuf[0]=0;dispbuf[1]=0;dispbuf[2]=0;dispbuf[3]=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>9)&&(key<14))

{

fuhao=key;

num1=1000*dispbuf[0]+100*dispbuf[1]+10*dispbuf[2]+dispbuf[3];

dispbuf[0]=0;dispbuf[1]=0;dispbuf[2]=0;dispbuf[3]=0;

keypos=0;

while

(1)

{

keyscan1();

if(key==15)break;

}

}

if(key==15)

{

dispbuf[0]=0;dispbuf[1]=0;dispbuf[2]=0;dispbuf[3]=0;

}

}

}

if(keypos==4)keypos=0;

}

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<11))

{

keypos++;

if(keypos<=4)

{

change(dispbuf,keypos);

dispbuf[3]=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<11))

{

keypos++;

if(keypos<=4)

{

change(dispbuf,keypos);

dispbuf[3]=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(keypos<=4)

{

change(dispbuf,keypos);

dispbuf[3]=key;

}

}

if((key>9)&&(key<14))

{

num1=num3;

fuhao=key;

dispbuf[0]=0;dispbuf[1]=0;dispbuf[2]=0;dispbuf[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>9)&&(key<14))

{

num1=num3;

fuhao=key;

dispbuf[0]=0;dispbuf[1]=0;dispbuf[2]=0;dispbuf[3]=0;

keypos=0;

}

if(key==14)

{

num2=1000*dispbuf[0]+100*dispbuf[1]+10*dispbuf[2]+dispbuf[3];

num3=jisuan(num1,fuhao,num2);

dispbuf[0]=num3/1000;

dispbuf[1]=num3%1000/100;

dispbuf[2]=num3%1000%100/10;

dispbuf[3]=num3%1000%100%10;

}

}

}

if(keypos==4)keypos=0;

}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;

}

wdata(table[key]);

num1=num1*10+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;

}

wdata(table[key]);

num1=num1*10+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==9)

{

wdata(table[key]);

num1=num1*10+key;

}

if((key>9)&&(key<14))

{

fuhao=key;

if(key==10)key=0x2B;

elseif(key==11)key=0x2d;

elseif(key==12)key=0x2a;

elseif(key==13)key=0x2f;

wdata(key);

while

(1)

{

ukeyscan1();

if(key==15)break;

}

}

if(key==15)

{

wcmd(0x01);wcmd(0x0e);

num1=0;num2=0;num3=0;fuhao=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>9)&&(key<14))

{

fuhao=key;

if(key==10)key=0x2B;

elseif(key==11)key=0x2d;

elseif(key==12)key=0x2a;

elseif(key==13)key=0x2f;

wdata(key);

while

(1)

{

ukeyscan1();

if(key==15)break;

}

}

if(key==15)

{

wcmd(0x01);wcmd(0x0e);

num1=0;num2=0;num3=0;fuhao=0;

}

}

}

}

voidukeyscan1()

{

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;

}

wdata(table[key]);

num2=num2*10+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;

}

wdata(table[key]);

num2=num2*10+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==9)

{

wdata(table[key]);

num2=num2*10+key;

}

if((key>9)&&(key<14))

{

wcmd(0x0e);

wdata(0x01);

num1=num3;

fuhao=key;

if(key==10)key=0x2B;

elseif(key==11)key=0x2d;

elseif(key==12)key=0x2a;

elseif(key==13)key=0x2f;

if(a0!

=0)wdata(table[a0]);

if(b0!

=0)wdata(table[b0]);

else{if(a0!

=0)wdata(table[b0]);}

if(c0!

=0)wdata(table[c0]);

else{if((a0!

=0)||(b0!

=0))wdata(table[c0]);}

if(d0!

=0)wdata(table[d0]);

else{if((a0!

=0)||(b0!

=0)||(c0!

=0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1