基于51单片机1602液晶显示简易计算器设计.docx

上传人:b****5 文档编号:4716540 上传时间:2022-12-07 格式:DOCX 页数:20 大小:21.51KB
下载 相关 举报
基于51单片机1602液晶显示简易计算器设计.docx_第1页
第1页 / 共20页
基于51单片机1602液晶显示简易计算器设计.docx_第2页
第2页 / 共20页
基于51单片机1602液晶显示简易计算器设计.docx_第3页
第3页 / 共20页
基于51单片机1602液晶显示简易计算器设计.docx_第4页
第4页 / 共20页
基于51单片机1602液晶显示简易计算器设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

基于51单片机1602液晶显示简易计算器设计.docx

《基于51单片机1602液晶显示简易计算器设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机1602液晶显示简易计算器设计.docx(20页珍藏版)》请在冰豆网上搜索。

基于51单片机1602液晶显示简易计算器设计.docx

基于51单片机1602液晶显示简易计算器设计

R2

'TRT

LCEd

3•

.

U1

WXTMIO

W

XT.U2

P2TM,

%•

•■二的层

ST

MT

PS”

C3

:

4^-

•幵•・/•••

AC

6":

AIAN

»•

•fxrm»zvx»rzn*nrSXKH»ZU*MrsAxnrz«Ai«V21iAtS

fXDHM>

M.V1X&

rxairn

fixvn

■xvnj

»2crri

F3“・T

new灼

 

 

#include

#include〈math・h>

#defineuintunsignedint

#defineucharunsignedchar

^definePI3.141592

sbitRS二P2P;

sbitRW二P2°l;

sbitEN二P2「2;

sbitled=P2^4;

sbitspeek=P3*7;

uchartableO.j={''Welcometouse"};uchartablelrj={/zmadebyMs.Li"};uchartable2Lj={/zerrorz,};

ucharcount;

voidmain(void)

{

ucharerror=0,i,first=0,dotl,dot2,dotl_num,dot2_num,minusl,minus2;//错误标志、第一次淸屏标志、小数点标志以及小数点个数负号标志、负号个数

ucharSin,Cos,Tan,In;

ucharKey_num,]ast_key_num;

//键号

ucharflag=0,equal_flag;

〃运算符、等于符

doublenuml^O,num2=0,num^O,result=0,save_result;//第一个数、第二个

数、计算结果

ucharfirst_num二0,Ans二0,second_num=0;

InitLcdO;

EA二1;

ETO二1;

TMOD二0X01;

THO=(65536-500)/256;

TLO=(65536-500)%256;

write_com(0x80+0x40+15);write_Dat('O');

write_com(0x80);

while(l)

{

while(key_scan0==0xff);

TRO=1;

if(first==0)

{

first=l;write_com(0x01);

}

Key_num=key_scan0;

switch(key_scan0)

{

case1:

if(last_key_num!

=Key_num){

uTite_DatC1’);uTite_DatCn‘);ln=l;

}break;

case2:

if(last_key_num!

=Key_num){

write_Dat('s');write_Dat('i‘);write_Dat('n);Sin=l;

}break;

case3:

if(last_key_num!

=Key_num){

write_Dat('c);write_Dat('o');write_Dat('s');Cos=l;

}break;

case4:

if(last_key_num!

=Key_num)

{

write_Dat('t);write_Dat('a);write_Dat('n);

Tan=l;

}break;

case5:

if(last_key_num!

=Key_num)

{

writjDat('r);

flag=5;

}break;

case6:

write_Dat('7');num=7;break;case7:

write_DatC8');num二8;break;case8:

write_Dat('9*)inum^;break;case9:

if(last_key_num!

二Key_num)

{

write_Dat('+');

flag=l;

}break;

case10:

if(last_key_num!

=Key_num)

{

write_Dat('T);

flag=6;

}break;

case11:

write_DatC4’):

num=4;break;case12:

write_DatCo)intim^S;break;case13:

write_Dat('6');num二6;break;case14:

if(last_key_num!

=Key_num)

{

write_Dat('-');

flag二2;

}break;

case15:

if(last_key_num!

=Key_num)

if(equal_flag==l)write_com(0x01);write_com(0x80);write_Dat('A');write_Dat('n');write_Dat('s');write_Dat('=');save_result=result;

}

else{

if(Key_num!

=l&&Key_num!

=2&&Key_num!

=3&&Key_num!

=4&&Key_num!

=22&&Key_num!

=23&&Key_num!

二25)

{

write_Dat('A');write_DatCn);write_Dat('s');if(flag==O)

{

numl=save_result;first_num=l;

}

else

{

num2=save_result;second_num=l;

}

}

}

}

break;

case16:

write_Dat(*V):

num=l;break;

case17:

write_Dat('2’):

num=2;break;

case18:

write_Dat(*3’):

num=3;break;

case19:

if(last_key_num!

=Key_num)

{

write_Ddt('*');flag=3;

}break;

case21:

write_Dat('O');num二0;break;

case22:

if(last_key_num!

=Key_num)

辻(flag==O)minusl++;if(minusl==l)

writjDat('-');

}

}

else

{

minus2++;

if(minus2==l)

{

uTite_Dat-');

}

}

}break;

case23:

if(last_key_num!

=Key_num)

{

if(flag==O)

{

dotl++;

if(dotl==l)

{

write_Dat('・’);

}

}

else

{

dot2++;

辻(dot2==l)

{

uTite_Dat('・’);

}

}

}break;

case24:

if(last_key_num!

=Key_num)

{

write_Dat('/');

flag二4;

}break;

case25:

if(last_key_num!

=Key_num)write_Dat('=');equal_flag=l;

}break;

}

if(Key_num!

=l&&Key_num!

=2&&Key_num!

=3&&Key_num!

=4&&Key_num!

=15&&Key_num!

=22&&Key_num匸23&&Key_num!

二25)//第一个数

{

if(flag==O)

{

num1二num1*1O+num;

num二0;

if(dotl!

=0)

{

dotl_num++;

}

first_num=l;

}

if(flag!

二0)

{

num2=num2*l0+num;

num=0;

if(dot2!

=0)

{

dot2_num++;

}

second_num=l;

}

}

if(equal_f1ag==l&&first_num==1)

{

if(dotl!

=0)

{

numl=numl/pow(10,dotl_num):

dotl=0;

}

if(dot2!

=0)

{

num2=num2/pow(10,dot2_num);

dot2=0;

}

if(minusl!

=0)

numl=numl*(-l);

}

if(minus2!

=0)

{num2=num2*(-l);

}

if(second_num!

=0)

{

switch(flag)

{

case1:

result=numl+nuni2:

break;

case2:

result=numl-nuni2:

break;

case3:

result=numl*nuni2;break;

case4:

if(num2!

=0)

{

result=num1/num2;

}

else

{

write_com(0x80+0x40+10);

for(i=0;i<5;i++)

{

^Tite_Dat(table2[ij);

}

error=l;

}break;

case5:

result^powCnuml,num2);break;

case6:

result^powCnuml,l/num2):

break;

}

}

elseif(second_num二二0&&Sin=0&&Cos=0&&Tan=0&&ln=0)result=numl;

elseif(second_num==0&&(Sin=lCos==lTan==lln==l)){

if(Sin=l)

result=sin(numl/180*PI)+0.005;

if(Cos==l)

result=cos(numl/180*PI)+0.005;

辻(Tan二二1)

result=tan(numl/180*PI)+0.005;

if(ln==l)

if(numl>0)

result=log(numl)+0.005;else

write_com(0x80+0x40+10);for(i=0;i<5;i++)

{

utite_Dat(table2[i]);

}

error=l;

}

}

}

if(error!

=1)

display(result);

}

if(Key_num==20)//淸零

{

numl=num2=result=0;

flag=equal_flag=O;

error=0;first=0;

dotl_num二dot2_num=0;

minusl=0;minus2=0;

first_num=0,second_num=0;

Sin=Cos=Tan=ln=0;write_com(0x01);

write_com(0x80+0x40+15);write_Dat('O');

}

last_key_num=Key_num;

while(key_scan()!

=0xff);

}

}

voidtimeOOinterrupt1

{

THO=(65536-600)/256;

TLO=(65536-600)%256;

count++;

speek=!

speek;

if(count>50)

TRO二0;count=0;

voiddelay(uintx)

{

uchary;

while(x―)for(y=0;y<120;y++);

}

voidwrite_com(unsignedcharc){

RS二0;

RW•二0;

EN=1;

delay(5);

P0二c;

EN=0;

voidwrite^Dat(unsignedcharc){

RS二1;

RW•二0;

EN=1;

delay(5);

P0二c;

EN=0;

voidInitLcdO

{

write_com(0x38);//displaymode

write_com(0x06);//显示光标移动位置write_com(0x0c);//显示开及光标设置write_com(0x01);//显示淸屏

ucharkey_scan()

ucharkey_num=0xff;

uinttemp;

P3=0x03;

Pl=OxeO;temp=(P3<<8)Pl;if((temp&0x03e0)!

=0x03e0)

delay(10);

if((temp&0x03e0)!

=0x03e0)

P3=0x03;//第一行

Pl=0xfe;

temp=(P3«8)Pl;

switch(temp)

{

case0x03de:

key_num=l;break;

case0x03be:

key_num=2;break;

caseOxO37e:

key_num=3;break;

case0x02fe:

key_num=4;break;

case0x01fe:

key_num=5;break;

}

P3=0x03:

//第二行

Pl=0xfd;

temp=(P3<<8)Pl;

switch(temp)

{

case0x03dd:

key^um^G;break;

case0x03bd:

key_num=7;break;

caseOxO37d:

key_num=8;break;

case0x02fd:

key_num=9;break;

case0x01fd:

key_num=10;break;

}

P3=0x03;//第三行

Pl=0xfb;

temp=(P3<<8)Pl;

break;break;break;break;break;

switch(temp)

case0x03db:

key_num=l1

case0x03bb:

key_num=12

case0x037b:

key_num=13

case0x02fb:

key_num=14

case0x01fb:

key_num=15}

P3=0x03;

//第四行

Pl=0xf7;

temp=(P3<<8)Pl;switch(temp)

case

0x03d7:

key_num=16;

break;

case

0x03b7:

key_num=17;

break;

case

0x0377:

key_num=18;

break;

case

0x02f7:

key_num=19;

break;

case

0x01f7:

key_num=20;

break;

j

P3=0x03;

Pl=0xef;

//第五行

temp=(P3«8)Pl;switch(temp)

case

case

case

case

case

}

0x03cf:

key_num=21;

0x03af:

key_num=22;

0x036f:

key_num=23;

0x02ef:

key_num=24;

0x0lef:

key_num=25;

break;break;break;break;break;

return

}

key_num;

 

voiddisplay(doubleData){

ucharxs=0,fs=0,i;

if(Data<0)

{

fs=l;

Data=Data*(-1);

}

if(Data>(long)Data)

{

xs=l;

}

0'9

if(Data<10)

{

if(xs==l)

Data=Data*100;write_.com(0x80+0x40+11);辻(fs=l)write_Dat(-);

else

write_Dat('');

write_Dat((long)Data/100+*0*);

write^Dat('・’);

write_Dat((long)Data/10%10+,0’);

write_Dat((long)Data弔10+'0*);

}

elseif(xs==0)

{

write_com(0x80+0x40+14);

if(fs=l)

write^Dat('-');

else

write_Dat('');

write_Dat((long)Data+,0,);

}

}

else辻(Data<100)//10、99

{

if(xs=l)

{

Data=Data*100;

write_com(0x80+0x40+10);

if(fs=l)

write_Dat

else

write_Dat('');

write_Dat((long)Data/1000+,O');

write_Dat((long)Data/100%10+,0’);

write_Dat('・’);

write_Dat((long)Data/10%10+,O');write^Dat((long)Data%10+*0’);

}

elseif(xs==0)

{

write_com(0x80+0x40+13);

if(fs=l)

write_Dat

else

write_Dat('');

write_Dat((long)Data/10+*0’);

write_Dat((long)Data%10+*O');

辻(xs=l)

{

Data=Data*100;

write_com(0x80+0x40+9);

if(fs=l)

write_Dat

else

write_Dat('');

writjDat((long)Data/10000+'O');write_Dat((long)Data/1000%10+'O');write_Dat((long)Data/100%10+,O');

write_Dat('・’);

write_Dat((long)Data/10%10+,O');

write_Dat((long)Data%10+*0*);

}

elseif(xs==0)

write_com(0x80+0x40+12);if(fs=l)

write_Dat

else

write_Dat('');

write_Dat((1ong)Data/100+,O');write_Dat((1ong)Data/10%10+,O');

write_Dat((long)Data%10+*O');

}

else辻(Data<10000)7/1000^9999

if(xs=l)

Data=Data*100;

write_com(0x80+0x40+8);

if(fs=l)

write^Dat

else

write_Dat('');

write_Dat((long)Data/100000+,O');

write^Dat((long)Data/10000%10+,O');

write_Dat((long)Data/1000%10+'O');

write_Dat((long)Data/100%10+,0*);

write_Dat('・’);

write_Dat((long)Data/10%10+,O');

write_Dat((long)Data%10+*0,);

}

elseif(xs==0)

{

write_com(0x80+0x40+11);

if(fs=l)

write_Dat

else

write_Dat('');

write.Dat((long)Data/1000+,CT);write.Dat((long)Data/100%10+,0*);

write.Dat((long)Data/10%10+,O');

write_Dat((long)Data%10+,0’);

}

}

else辻(Data<100000)//10000、99999

{

if(xs~l)

{

Data=Data*100;

write_com(0x80+0x40+7);

if(fs=l)

write_Dat

else

write_Dat('');

write^Dat((long)Data/1000000^>0’);write_Dat((long)Data/100000%10+,0*);write_Dat((long)Data/10000%10+'O');

write_Dat((long)Data/1000%10+'0’);

write.Dat((long)Data/100%10+,O');

write_Dat('・’);

write_Dat((long)Data/10%10+,0*);write_Dat((long)Data%10+*0*);

}

elseif(xs==0)

{

write_com(0x80+0x40+10);

if(fs=l)

write_Dat('」);

else

write_Dat('');

write_Dat((long)Data/10000+*O');write.Dat((long)Data/1000%10+>O');write_Dat((long)Data/100%10+,O');write_Dat((long)Data/10%10+,O');write.Dat((long)Data%10+*O');

}

else辻(Data<1000000)//100000~999999

{

if(xs==l)

Data=Data*100;

write_com(0x80+0x40+7);

辻(fs==l)

write_Dat('」);

else

write_Dat('');

write_Dat(仃ong)Data/10000000+'0’);write_Dat((long)Data/1000000%10+?

0’);write_Dat((long)Data/100000%10+'O');write_Dat((long)Data/10000%10+'0’);write_Dat((long)Data/1000%10+'0’);write_Dat((long)Data/100%10+,O');write_Dat('・’);

write.Dat((long)Data/100000%10+,0*);write.Dat((long)Data/100000%10+,O');write_Dat(

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

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

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

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