新基于51单片机的简易计算器文档格式.docx

上传人:b****5 文档编号:18695073 上传时间:2022-12-31 格式:DOCX 页数:16 大小:282.04KB
下载 相关 举报
新基于51单片机的简易计算器文档格式.docx_第1页
第1页 / 共16页
新基于51单片机的简易计算器文档格式.docx_第2页
第2页 / 共16页
新基于51单片机的简易计算器文档格式.docx_第3页
第3页 / 共16页
新基于51单片机的简易计算器文档格式.docx_第4页
第4页 / 共16页
新基于51单片机的简易计算器文档格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

新基于51单片机的简易计算器文档格式.docx

《新基于51单片机的简易计算器文档格式.docx》由会员分享,可在线阅读,更多相关《新基于51单片机的简易计算器文档格式.docx(16页珍藏版)》请在冰豆网上搜索。

新基于51单片机的简易计算器文档格式.docx

本设计采用LCD液晶显示器来显示输出数据。

通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应数据。

5、软件部分

#include<

reg52.h>

intrins.h>

#defineucharunsignedchar

sbitlcden=P2^7;

sbitlcdrs=P2^6;

sbitlcdrw=P2^5;

sbitlcdbf=P0^7;

uchartemp,key,i,j,flag,fh,k;

longa,b,c;

ucharcodetable[]={1,2,3,0,

4,5,6,0,

7,8,9,0,

0,0,0,0};

ucharcodetable2[]="

123+456-789*000/"

;

voiddelay(ucharms)

{

ucharx,y;

for(x=ms;

x>

0;

x--)

for(y=110;

y>

y--);

}

/*-------------对LCD1602的操作-----------*/

bitbusy(void)//判断忙碌

bitres;

lcdrs=0;

lcdrw=1;

lcden=1;

_nop_();

res=lcdbf;

lcden=0;

returnres;

voidwrite_inst(ucharcmd)//写命令

while(busy()==1);

//忙碌就等待

lcdrw=0;

P0=cmd;

voidwrite_com(ucharcom)//写地址

write_inst(com|0x80);

voidwrite_date(uchardat)//写数据

lcdrs=1;

P0=dat;

voidinit()//初始化

write_inst(0x38);

//显示8位2行

delay(5);

write_inst(0x0c);

//显示开,光标关,不闪烁

write_inst(0x06);

//增量方式不位移

write_inst(0x80);

//检测忙碌信号

write_inst(0x01);

//

/*------------键盘扫描-----------*/

voidkeyscan()//键盘扫描

P3=0xfe;

if(P3!

=0xfe)

{

delay(100);

if(P3!

{

temp=P3&

0xf0;

switch(temp)

{

case0xe0:

key=0;

break;

case0xd0:

key=1;

case0xb0:

key=2;

case0x70:

key=3;

}

}

while(P3!

=0xfe);

if(key==0||key==1||key==2)

if(j!

=0)

{

write_inst(0x01);

j=0;

}

if(flag==0)

a=a*10+table[key];

if(flag==1)

{

b=b*10+table[key];

write_date(table2[key]);

else

if(k==0)

flag=1;

k=1;

fh=1;

write_date(table2[key]);

}

P3=0xfd;

=0xfd)

key=4;

key=5;

key=6;

key=7;

=0xfd);

if(key==4||key==5||key==6)

fh=2;

P3=0xfb;

=0xfb)

key=8;

key=9;

key=10;

key=11;

=0xfb);

if(key==8||key==9||key==10)

fh=3;

P3=0xf7;

=0xf7)

key=12;

key=13;

key=14;

key=15;

=0xf7);

switch(key)

case12:

{write_inst(0x01);

a=0;

b=0;

flag=0;

fh=0;

j=0;

k=0;

}break;

case13:

if(flag==0)

{

a=a*10;

write_date(0x30);

P1=0;

}

elseif(flag==1)

{

b=b*10;

write_date(0x30);

}break;

case14:

j=1;

if(fh==1)

write_com(0x4f);

write_inst(0x04);

c=a+b;

while(c!

{

write_date(0x30+c%10);

c=c/10;

}

write_date(0x3d);

a=0;

elseif(fh==2)

if((a-b)>

0)

c=a-b;

else

c=b-a;

if(c==0)

write_date(0x30+0);

if((a-b)*(-1)>

write_date(0x2d);

elseif(fh==3)

c=a*b;

elseif(fh==4)

write_com(0x4f);

write_inst(0x04);

i=0;

c=(long)(((float)a/b)*1000);

//计算c的数据

if(c==0)

while(c!

=0)

{

write_date(0x30+c%10);

c=c/10;

i++;

if(i==3)

write_date(0x2e);

//写数据

}

if((a/b)<

write_date(0x30);

write_date(0x3d);

a=0;

case15:

if(k==0)

{

write_date(table2[key]);

flag=1;

k=1;

fh=4;

}

}break;

voidmain()

init();

i=0;

j=0;

a=0;

b=0;

c=0;

k=0;

flag=0;

fh=0;

while

(1)

keyscan();

}

6、总结

通过该计算器的设计我深入学习数码管扫描和键盘控制,提高对了51系列单片机的实际应用能力。

同时也掌握应用程序控制51系列单片机进行简单的数学运算。

提高了对51系列单片机的编程能力。

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

当前位置:首页 > 高中教育 > 其它课程

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

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