电子计算器.docx

上传人:b****1 文档编号:638753 上传时间:2022-10-11 格式:DOCX 页数:20 大小:101.87KB
下载 相关 举报
电子计算器.docx_第1页
第1页 / 共20页
电子计算器.docx_第2页
第2页 / 共20页
电子计算器.docx_第3页
第3页 / 共20页
电子计算器.docx_第4页
第4页 / 共20页
电子计算器.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

电子计算器.docx

《电子计算器.docx》由会员分享,可在线阅读,更多相关《电子计算器.docx(20页珍藏版)》请在冰豆网上搜索。

电子计算器.docx

电子计算器

单片机课程设计报告

课题:

电子计算器

学院:

报告人:

1课题概述

1.1课题描述及实现功能

1.2按键说明

系统的工作流程图

系统程序设计

20

课程设计心得

1课题概述

1.1课题描述及实现功能

本课题是基于ADUC848单片机的电子计算器设计。

由于本实验所需的单片机开发板已经确定,相应的硬件部分已经做好,所以我们只需要根据硬件原理图进行软件设计。

软件设计

部分采用C语言进行编写。

根据要求设计的电子计算器的功能如下:

利用小键盘作为数据和命令的输入装置;利用LCD显示过程和结果;实现的运算包括:

正实数的加、减、乘、除、开方、乘方、三角函数运算(

tan);

4)未工作时显示北京时间;

5)当数据超出范围,可声音提示或报警。

1.2按键说明

本系统采用4X4矩阵键盘作为输入部分,实现数据输入功能。

本系统规定的键盘上的各按键功能如下所示:

1(+)

2(-)

3(*)

ON

4(/)

5(sqrt)

6(power)

OFF

7(sin)

8(cos)

9(tan)

Clear

Fuction

0

.

=

各按键功能如下:

Fuction:

功能键。

按下此键,显示数字1至9括号里的运算符;未按此键,显示数字。

ON显示北京时间时,按下此键之后进入计算器状态。

OFF在计算器状态下,按下此键之后显示北京时间。

Clear:

清除键。

2系统的工作流程图

 

C

off

功能键(F)

清除

数字键

3系统程序设计

3.1主程序模块设计

#include

#include

#include#include#include#include

#include#include

#include

#defineucharunsignedchardoublexdataFirst,End1,End2;

voiddelay(intn)

{inti,j;

for(i=0;i

{for(j=0;j<25;j++)

;}

}

doubleadd(doublex,doubley){doublez;

z=x+y;

//

//

延时程序

加法程序

 

return(z);

}

doublesub(doublex,doubley){doublez;

if(x>=y)

z=x-y;

else

z=y-x;

return(z);

}

doublemul(doublex,doubley){doublez;

z=x*y;

return(z);

}

doublediv(doublex,doubley)

{doublez;

z=x/y;

return(z);

}

doublepower(doublex,inty)

{doublez;

inti;

z=1;

for(i=1;i<=y;i++)

z=z*x;

return(z);

}

doubletan(doublex)

{doublez;

z=sin(x)/cos(x);

return(z);

}

//

//

//

//tan(x)

乘法程序

除法程序

乘方程序

程序

 

voidmain(void)

{intn,k,h,g,t=0;

unsignedchartime[7]={00,00,12,4,9,6,11};

unsignedcharf,m,key=0x80;

unsignedcharfp[16];l2CCON=0xE8;

m功能键,g小数转换,k按键次数,n判

n=0;f=0;m=0;k=-1;h=0;/*h有小数,

断前后数,f算法,t时间计算切换*/

First=0;g=1;

//LCD初始化

LCDInitialize();

 

SetTime(time);

SwitchRTC

(1);

while

(1)

{key=GetKey();

if(t==0)

key=100;

switch(key)

{case1:

if(m==0)

{if(h==0)

{First=First*10+key;k++;}

else{First=First+(double)key/(g*10);g=g*10;k++;}

LCDPrintString(k,1,"1");}

//

//

/*

不断查询是否有按键动作获取返回键值

时间状态*/

 

else

{f=1;First=0;m=0;n=1;k++;

LCDPrintString(k,1,"+");}

break;

case2:

if(m==0)

{if(h==0)

{First=First*10+key;k++;}

else{First=First+(double)key/(g*10);g=g*10;k++;}

LCDPrintString(k,1,"2");}

else

{f=2;First=0;m=0;n=1;k++;

LCDPrintString(k,1,"-");}

break;

case3:

if(m==0)

{if(h==0)

{First=First*10+key;k++;}

else{First=First+(double)key/(g*10);g=g*10;k++;}

LCDPrintString(k,1,"3");}

else

{f=3;First=0;m=0;n=1;k++;

LCDPrintString(k,1,"x");}

break;

case4:

if(m==0)

{if(h==0)

{First=First*10+key;k++;}

else{First=First+(double)key/(g*10);g=g*10;k++;}

LCDPrintString(k,1,"4");}

else

{f=4;First=0;m=0;n=1;k++;

LCDPrintString(k,1,"/");}

break;

case5:

if(m==0)

{if(h==0)

{First=First*10+key;k++;}

else{First=First+(double)key/(g*10);g=g*10;k++;}

LCDPrintString(k,1,"5");}

else

{f=5;First=0;m=0;n=1;k++;

LCDPrintString(k,1,"sqrt");k=k+3;}

break;

case6:

if(m==0)

{if(h==0)

{First=First*10+key;k++;}

else{First=First+(double)key/(g*10);g=g*10;k++;}

LCDPrintString(k,1,"6");}

else

{f=6;First=0;m=0;n=1;k++;

LCDPrintString(k,1,"^");}

break;

case7:

if(m==0)

{if(h==0)

{First=First*10+key;k++;}

else{First=First+(double)key/(g*10);g=g*10;k++;}

LCDPrintString(k,1,"7");}

else

{f=7;First=0;m=0;n=1;k++;

LCDPrintString(k,1,"sin");k=k+2;}

break;

case8:

if(m==0)

{if(h==0)

{First=First*10+key;k++;}

else{First=First+(double)key/(g*10);g=g*10;k++;}

LCDPrintString(k,1,"8");}

else

{f=8;First=0;m=0;n=1;k++;

LCDPrintString(k,1,"cos");k=k+2;}break;

case9:

态*/

case0:

if(h==0)

{First=First*10+key;k++;}

else{First=First+(double)key/(g*10);g=g*10;k++;}LCDPrintString(k,1,"0");

break;

case15:

switch(f)

{case1:

First=add(End1,End2);

if(First>30000){buzzer();key=14;}else{ecvt(First,fp);LCDPrintString(0,2,fp);}break;case2:

First=sub(End1,End2);

if(First>30000)

{buzzer();key=14;}

else{ecvt(First,fp);LCDPrintString(0,2,fp);}break;

case3:

First=mul(End1,End2);

if(First>30000)

{buzzer();key=14;}

else{ecvt(First,fp);LCDPrintString(0,2,fp);}break;

case4:

First=div(End1,End2);

if(First>30000)

{buzzer();key=14;}

else{ecvt(First,fp);LCDPrintString(0,2,fp);}break;

case5:

First=sqrt(End2);

if(First>30000)

{buzzer();key=14;}

else{ecvt(First,fp);LCDPrintString(0,2,fp);}break;

case6:

First=power(End1,End2);

if(First>30000)

{buzzer();key=14;}

else{ecvt(First,fp);LCDPrintString(0,2,fp);}break;case7:

First=sin(End2);

if(First>30000)

{buzzer();key=14;}

else{ecvt(First,fp);LCDPrintString(0,2,fp);}break;case8:

First=cos(End2);

if(First>30000)

{buzzer();key=14;}

else{ecvt(First,fp);LCDPrintString(0,2,fp);}break;case9:

First=tan(End2);

if(First>30000)

{buzzer();key=14;}

else{ecvt(First,fp);LCDPrintString(0,2,fp);}break;}

First=0;n=0;k=-1;g=1;

f=0;b

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

当前位置:首页 > 解决方案 > 学习计划

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

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