单片机简易计算器.docx

上传人:b****5 文档编号:29380272 上传时间:2023-07-22 格式:DOCX 页数:12 大小:430.19KB
下载 相关 举报
单片机简易计算器.docx_第1页
第1页 / 共12页
单片机简易计算器.docx_第2页
第2页 / 共12页
单片机简易计算器.docx_第3页
第3页 / 共12页
单片机简易计算器.docx_第4页
第4页 / 共12页
单片机简易计算器.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

单片机简易计算器.docx

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

单片机简易计算器.docx

单片机简易计算器

 

姓名

学号

指导老师陆晓春

完成时间2013.12.28

一.作品简介········································1

1.1作品名称····································1

1.2作品功能····································1

二.作品整体方案····································2

三.程序设计思路····································3

3.1系统模块图···································3

3.2总体流程图···································3

3.3软件编程·····································4

四.遇到的问题及解决办法····························10

五.小结············································10

 

单片机课程设计报告

1作品简介

1.1.作品名称:

串口计算器

1.2.功能:

串口计算器实现以下功能:

.串行通信功能:

实验板和PC电脑通过USB线相连,使MCU和PC软件“串口助手”能够进行串行通信。

(1)当实验板上电时默认波特率为9600bps,并发送欢迎词和提示词,“WelcometoCalculatorV1.0.Youcanpresskey1andkey2tochangebaudrate."

(2)当实验板上按键1按下时波特率变更为4800bps,按键2按下时波特率变更为9600bps,并用两个LED灯指示相应的波特率。

.计算器功能

通过串口助手发送框发送需要计算的公式,例如20*4=,MCU收到后解析公式并计算结果,将结果返回给串口,例如“Theresultis80”,同时将计算结果显示在数码管上,具体细节如下:

(1)可以进行加(+)、减(-)、乘(*)、除(\)、取余(%)运算;

(2)整形、浮点型运算;

(3)当计算结果为整形数时,有效的运算结果范围是-999~9999,超过此结果,返回相应的提示符,例如“Theresultisoutofrange.”,数码管上提示“Err”;

(4)当计算结果为浮点数时,有效的运算结果范围是-99.9~999.9,数码管上显示时保留1位小数点,超过此结果,返回相应的提示符,例如“Theresultisoutofrange.”,数码管上提示“Err”。

2作品整体方案

根据功能和指示要求,本系统选用以MCS-51单片机为主控机。

通过USB接口与PC机相连,实现对计算器的设计。

具体设计如下:

.由于要设计的是简单的计算器,可以进行简单的运算,为了得到较好的显示效果,采用数码管动态显示数据和结果。

.另外要用的PC键盘包括数字键(0-9)、运算符(+、-、*、/、%)以及等号键。

.执行程序:

开机显示欢迎词,按键1或2可以改变波特率,等待键入数值,当键入数字,通过LED将结果显示出来,当键入+、-、*、/、%运算符,计算器在内部执行数值转换和存储,并等待再次键入数值后将显示键入的数值,按下等号键就会在LED上输出运算结果。

.错误提示:

当单片机执行程序中有错误时,会在LED上显示相应的提示,如:

当输入的数值或计算器得到的结果大于计算器的显示范围时或当除数为0时,计算器会在LED上提示错误,数码管显示Err。

3程序设计思路

3.1.系统模块图

3.2总体流程图

3.3.软件编程

程序采用模块化思想,将计算器的功能分模块利用不同的函数实现。

主要函数如下:

主函数:

voidmain()

{

initial();

welcome("WelcometocalculatorV1.0\n");

welcome("Presskey1andkey2tochangebaudrate.\n");

while

(1)

{

key();

if(flag==1)

{

flag=0;

negative=0;

fudian=0;

error3=0;

error4=0;

ES=0;

analysize();

calculate();

ES=1;

reset();

}

show();

}

}:

初始化函数:

voidinitial()

{

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

TR1=1;

SCON=0x50;

EA=1;

ES=1;

}

计算函数:

voidcalculate()

{

intx1,x2,result1;

floatx3,x4,result2;

charsign1=0;

if(fudian==1)

{

x3=atof(num[0]);

x4=atof(num[1]);

if(store=='+')

{

result2=x3+x4;

}

if(store=='-')

{

result2=x3-x4;

}

if(store=='*')

{

result2=x3*x4;

}

if(store=='/')

{

result2=x3/x4;

if(x4==0)

{

TI=1;

printf("Err\n");

return;

}

}

if(store=='%')

{

TI=1;

printf("Err\n");

error4=1;

}

if((-99.9<=result2)&&(result2<=999.9))

{

sprintf(p,"%.1f",result2);

change((int)(10*result2));

}

else

{

TI=1;

printf("Err\n");

error3=1;

change((int)(10*result2));

return;

}

}

else

{

x1=atoi(num[0]);

x2=atoi(num[1]);

if(store=='+')

{

result1=x1+x2;

}

elseif(store=='-')

{

result1=x1-x2;

if(result1<0)

{

result1=x2-x1;

sign1=1;

negative=1;

}

}

elseif(store=='*')

{

result1=x1*x2;

}

if(store=='/')

{

result1=x1/x2;

if(x2==0)

{

TI=1;

printf("Err\n");

return;

}

}

if(store=='%')

{

result1=x1%x2;

if(x2==0)

{

TI=1;

printf("Err\n");

return;

}

}

if((-999<=result1)&&(result1<=9999))

{

sprintf(p,"%d",result1);

change(result1);

}

else

{

TI=1;

printf("Err\n");

error3=1;

change(result1);

return;

}

}

if(sign1)

{

SBUF='-';

while(!

TI);TI=0;

}

sign1=0;

TI=1;

printf("%s\n",p);

TI=0;

}

4遇到的问题及解决办法

这次单片机课程设计用时三天,期间,我遇到了很多问题。

但是错误类型大致有以下三点:

1.对单片机原理掌握十分清楚,例如,用到数码管动态显示的时候,必须对其合理位选或段选,延时时间也必须设计恰当,否则,数码管显示就会产生互相干扰或不稳定现象。

2.设计思想不够明确,此次设计的是简易计算器,在计算模块要留神的问题很多。

计算数值的范围及符号的取值复位是难点,要想运算结果正确,只能把它们的关系梳理清楚,用if语句筛选。

3.细节问题不注意,程序中有个变量m已经定义为了int型,但是在后面的程序中又出现了这样的语句if(m==‘=’)。

软件没有提示这个错误,结果我就耗费了大量的时间做重复的工作上。

这个给了我深刻的教训,必须编完一段即使检测,不能偷懒。

5小结

做为一个单片机初学者,这次的课设让我学到了很多东西。

单片机设计者的工作是十分辛苦的。

在设计简易计算器的过程中,不仅要逻辑性强,而且编程过程中要十分仔细,还要考虑到实际的电路结构。

这次的经历,不仅让我意识到c语言的强大和单片机的神奇,更激起了我对此类课程的学习兴趣,为以后更深一步的学习打下了基础。

同时,我十分感谢老师和同学在此期间给我的巨大帮助,谢谢你们和我一起解决了那么多的问题。

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

当前位置:首页 > 法律文书 > 起诉状

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

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