计算机科学与技术专业计算器设计毕业论文.docx
《计算机科学与技术专业计算器设计毕业论文.docx》由会员分享,可在线阅读,更多相关《计算机科学与技术专业计算器设计毕业论文.docx(26页珍藏版)》请在冰豆网上搜索。
计算机科学与技术专业计算器设计毕业论文
课程设计说明书
题目:
计算器的设计
姓名:
院(系):
信息工程学院
专业班级:
计算机科学与技术
学号:
指导教师:
成绩:
时间:
年11月1日年12月4日
课程设计任务书
题目计算器的设计
专业、班级计算机科学与技术一班
学号姓名
摘要:
计算器在人们的日常中是比较的常见的电子产品之一。
可是它还在发展之中,以后必将出现功能更加强大的计算器,基于这样的理念,本次设计是用单片机来设计的八位计算器。
该设计系统是以AT89C51为单片机,用7SEG为显示位控制, P1口作为输入端,外接4X4的键盘,通过键盘扫描来对输入数的控制,并外接驱动电路,系统采用LCD数码管作为显示器,软件程序采用均采用C语言编写,便于移植与升级。
报告详细介绍了整个系统的硬件组成结构、工作原理和系统的软件程序设计。
计算器将完成的功能有整数的加,减,乘,除等功能。
关键字:
c++MFC编程
完成期限:
指导教师签名:
课程负责人签名:
年月日
前言
随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技术的发展,犹如雨后春笋般的变化。
电子产品的更新速度快就不足惊奇了, 单片机的应用已经越来越贴近生活,用单片机来实现一些电子设计也变得容易起来。
近年来,单片机以其体积小、价格廉、面向控制等独特优点,在各种工业控制、仪器仪表、设备、产品的自动化、智能化方面获得了广泛的应用。
与此同时,单片机应用系统的可靠性成为人们越来越关注的重要课题。
影响可靠性的因素是多方面的,如构成系统的元器件本身的可靠性、系统本身各部分之间的相互耦合因素等。
其中系统的抗干扰性能是系统可靠性的重要指标。
本设计采用80S51 芯片,实现了利用单片机进行了一个简单计算器设计。
允许对输入数据进行加减乘除运算及LED 显示。
如果设计对象是更为复杂的计算器系统,其实际原理与方法与本设计基本相同。
另外,实例所设计的计算器是用LED 数码管显示的,当然也可以用其他的器件显示,如LED 显示屏,这样就可以显示出更多的字符,在此基础上,还可以编写更加完善的程序来实现更多的计算功能。
设计的关键所在,必须非常熟悉单片机的原理与结构,同时还要对整个设计流程有很好的把握,将单片机和其他模块完整的衔接。
目 录
1 概 述 ..............................................3
1.1课程设计的目的....................................3
1.2课程设计的内容....................................3
2 系统需求分析........................................3
2.1系统目标..........................................3
2.2主体功能..........................................3
2.3开发环境..........................................3
3系统概要设计........................................4
3.1系统流程图........................................4
3.2系统功能划分......................................5
4系统详细设计........................................5
4.1设计步骤..........................................5
4.2页面设计..........................................7
5测试................................................11
5.1测试方案..........................................11
5.2测试结果..........................................11
6小结................................................13
7附录................................................14
1 概 述
1.1 课程设计目的
1、巩固并加深学生对C++语言程序设计知识的理解;
2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别;
3、进一步掌握和应用VC++ 6.0集成开发环境; 4、提高运用C++语言解决实际问题的能力;
5、初步掌握开发小型实用软件的基本方法,能独立设计、实现基本的MIS系统; 6、掌握书写程序设计开发文档的能力(书写课程设计实验报告)。
1.2 课程设计内容课题名称:
计算器的实现 说明:
实现一个计算器。
要求:
1)用“计算器”的标准视图执行简单的计算。
2)用其科学型视图执行高级的科学计算。
2 系统需求分析
2.1 系统目标
我们在学习生活中,常会遇到一些繁杂的数值运算,这时候我们就必须用到科学计算器,所以便着手开发了这个计算器程序,以便用于自己的学习工作。
要计算功能有以下几个方面:
加法,减法,乘法,除法,求幂,求模,求平方根,求Sin,求Cos。
2.2 主体功能
1、十进制数的加、减、乘、除、乘方、取模等简单计算。
2、科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运算。
3、以角度、弧度两种方式实现上述部分函数。
2.3 开发环境
Windows操作系统,VC++ 6.0, OFFICE WORD
3 系统概要设计
3.1 系统流程图
图3-1 系统流程图
表3-1 系统功能表
3.2 系统功能划分
1) 假设执行操作“+”,先输入一个数,再输入“+”,再输入另一个数,最
后输入“+”。
整个功能“+”就执行完毕。
2)执行操作“Sin”,先输入一个数,在输入“Sin”,整个功能“Sin”就执行完毕。
3)执行操作“n!
”,先输入一个数,再输入“n!
’,整个功能“n!
”执行完毕。
4系统详细设计
4.1 设计步骤
打开Microsoft Visual C++ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名yeyahui及其所在位置,点击确定,如图4-1所示。
将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成,如图4-2所示
将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成,如图4-2所示
图4-2基本对话框
这样,MFC AppWizard就建立了一个基于对话窗口的程序框架,如图4-3所示。
图4-3新建的对话框
4.2 界面设计
界面设计主要是创建控件,在图4-3所示的Resoure View选项卡中打开Dialog资源组,双击IDD_ZHOUTONG_DIALOG,在右边的窗口中显示出待编辑的对话框。
开始摆放控件,包括编辑框和按钮的创建。
按钮的创建以“1”为例进行介绍,其他按钮的创建可参照此进行操作。
1)在图4-3中Controls的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。
在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,如图4-4所示,在该对话框中输入ID属性。
4.2 界面设计
界面设计主要是创建控件,在图4-3所示的Resoure View选项卡中打开Dialog资源组,双击IDD_ZHOUTONG_DIALOG,在右边的窗口中显示出待编辑的对话框。
开始摆放控件,包括编辑框和按钮的创建。
按钮的创建以“1”为例进行介绍,其他按钮的创建可参照此进行操作。
1)在图4-3中Controls的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。
在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,如图4-4所示,在该对话框中输入ID属性。
图4-4 Edit属性对话框
2)在图4-2中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。
在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push Button属性对话框,如图4-5所示,在该对话框中输入控件的ID值和标题属性。
图4-5 Push Button属性
按照上面的操作过程编辑其他按钮和编辑框等对象的属性。
完成后界面如图4-6所示。
图4-6 设计界面
加入标准型和科学型按键:
图4-7 加入标准型和科学型按键界面
标准型:
图4-8标准型界面
科学型:
5 测试
5.1 测试方案
先用标准型进行简单的四则运算:
+ - * /,测试完成后。
再用科学型进行稍复杂的运算:
sin,cos,tan,log,ln,n!
等,核对其计算结果的正确性。
5.2 测试结果
经测试标准型计算器,进行简单的四则运算,结果均正确,如图5-1所示
图5-1 四则运算测试结果图
测试科学型计算器,进行sin,cos,tan,log,ln,n!
等运算,结果均正确,求sin30`(如图5-2所示)。
图5-2 求sin30测试结果图
求5 !
(如图5-3所示),测试完成
图5-3 求5!
测试结果图
6 小结
经过不懈的努力,终于顺利完成了这次设计。
刚开始,我头绪不是很清楚,不知道从哪里入手,但通过老师的耐心指导并和同学认真研究设计课题,跑图书馆查资料、确定基本设计方案、对所用芯片功能进行查找、调试、上机仿真等,经历了一次次的困难,却积累了很多宝贵的经验。
在整个设计的过程中遇到的问题主要有以下三点,第一:
基础知识掌握的不牢固,主要表现在一些常用的电路的形式和功能不清楚,对书本上的内容理解不够透彻。
第二:
对一些常用的应用软件缺少应用,体现在画电路图和系统的仿真的时候,对这些软件的操作不熟练,浪费了很多时间。
第三:
相关知识掌握的不够全面,缺少系统设计的经验。
这次设计进一步端了我的学习态度,学会了实事求是,严谨的作风,对自己要严格要求,不能够一知半解,要力求明明白白。
急于求成是不好的,我有所感受。
如果省略了那些必要的步骤,急于求成,不仅会浪费时间,还会适得其反。
我觉得动手之前,头脑里必须清楚该怎么做,这一点是很重要的。
就目前来说,我的动手能力虽然差一点,但我想,通过我的不懈努力,在这方面,我总会得到提高。
这一点,我坚信。
因为别人能做到的,我也一定能做到。
在硬件的制作过程中我走了好多的弯路,主要是在系统还没有设计很有把握就开始动手制作了。
后来发现与设计的要求还有偏差,反复的改过了几次,浪费了大量的时间和体力。
感受到设计人员要有耐心,要认真的从要求开始研究。
软件的编写过程中费了很大的力气,因为软件的编写要求很高,要很细心,一不小心就会调用错误,很深刻的体会到作为软件编程人员是绝不能粗心大意的。
一个程序的完成的速度和质量高低与细心与否有着很大联系。
编程时,我充分使用了结构化的思想。
这样因为语句较少,程序调试比较方便,功能模块可以逐一的调试,充分体现了结构化编程的优势。
当每个模块都完成时,将其功能加到一起就完成了整体的设计。
在此次的毕业设计中我最大的体会就是进一步认识到了理论联系实践的重要性。
一份耕耘,一份收获。
通过这段时间的设计,让我明白科学的思维方法和学习方法是多么重要,只有这样才能够有很高的效率,才能够让自己的工作更完美。
总而言之,此次毕业设计让我学到了好多平时在课堂上学不到的东西,增加了我的知识运用能力,增强我的实际操作能力。
谢谢老师给我们提供这么好的机会,为我们之后走向社会奠定了一个好的基础。
本次设计让我学到了很多,也学会到了要怎么样去面对困难,不要对知识一知半截,要有的求实的能力,通过老师的帮助我学到了很多在平时的没有注意到的动东西及知识,更美没有深入的的去理解,通过这次我要更加的明确自己。
更要注重自己在各方面的锻炼能力,把握机会。
这次的设计非常的感谢老师们。
参考文献:
[1]谭浩强. C程序设计(第三版)(M).北京:
清华大学出版社,2005.
[2]谭浩强. C程序设计题解与上机指导(第三版) (M).北京:
清华大学出版社,2005. [3]甄炜. C++语言和面向对象程序设计教程(M).北京:
机械工业出版社,2005.
7附 录
//CalculatorDlg.cpp:
implementation file
#include"stdafx.h"
#include"Calculator.h"
#include"CalculatorDlg.h"
#include"math.h"
#ifdef_DEBUG
#definenew DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#endif
CAboutDlg dialog used for App About
class CAboutDlg:
public CDialog{
public:
CAboutDlg();
//Dialog Data
//{{AFX_DATA(CAboutDlg)enum{IDD=IDD_ABOUTBOX };
//}}AFX_DATA
//ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
//DDX/DDV support
//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSGDECLARE_MESSAGE_MAP() };
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
:
IDD){
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT }
void CAboutDlg:
:
DoDataExchange(CDataExchange* pDX){
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP }
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//No message handlers
//}}AFX_MSG_MAP END_MESSAGE_MAP()
//CCalculatorDlg dialog
//CCalculatorDlg message handlers BOOL
CCalculatorDlg:
:
OnInitDialog(){CDialog:
:
OnInitDialog();
//Add"About..."menu item to system menu.
//IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu* pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL){
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX, strAboutMenu);}}
//Set the icon for this dialog.
The framework does this automatically
//when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);
//Set big iconSetIcon(m_hIcon, FALSE);
//Set small icon
//TODO:
Add extra initialization here GetWindowRect(rcSentific);
CWnd* m_pMark=GetDlgItem(IDC_DISPLAY);
ASSERT(m_pMark);
CRect rect;m_pMark->GetWindowRect(rect);
rcStandard=rcSentific;rcStandard.right=rect.right+5;
m_bIsExpand=0;
m_sentific=1;
OnStandard();
m_result="0.";
m_isDegree=1;
UpdateData(FALSE);
return TRUE;
//return TRUE unless you set the focus to a control }
void CCalculatorDlg:
:
OnSysCommand(UINT nID, LPARAM lParam) {
if((nID&0xFFF0)==IDM_ABOUTBOX){
CAboutDlg dlgAbout; dlgAbout.DoModal();}
else{CDialog:
:
OnSysCommand(nID,lParam);}}
//If you add a minimize button to your dialog,you will needthe code below
//to draw the icon.For MFC applications using the document/vi
//this is automatically done for you by the framework.
void CCalculatorDlg:
:
OnPaint(){if(IsIconic()){CPaintDC dc(this);
//device context for painting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
//Center icon in client rectangle
int cxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
intx=(rect.Width()-cxIcon+1)/2;
int y=(rect.Height()-cyIcon+1)/2;
//Drawtheicondc.DrawIcon(x,y,m_hIcon);}
else{CDialog:
:
OnPaint();}}
//The system calls this to obtain the cursor to display
while the user drags
//the minimized window.
HCURSOR CCalculatorDlg:
:
OnQueryDragIcon(){return(HCURSOR) m_hIcon}
void CCalculatorDlg:
:
OnOperandInput(UINT nID){
ASSERT(nID>= IDC_0 && nID <= IDC_9);
if (m_errorState!
=ErrNone)return;if(m_func!
=FuncNone){
m_func=FuncNone;Calculate();}
if(!
m_bOperandAvail)m_operand=0;
if(!
m_bCoff)m_operand=m_operand*10+(nID-IDC_0);
else{m_operand=m_operand+(nID-IDC_0)*m_coff; m_coff*=0.1;}
m_bOperandAvail=TRUE;UpdateDisplay();}
void CCalculatorDlg:
:
Calculate(){if(m_errorState!
=ErrNone)return;
if(m_bOperandAvail){
if(m_operator==OpNone)m_accum=m_operand;
else if(m_operator==OpMultiply)m_accum*=m_operand;
else if(m_operator==OpDivide){
if(m_operand==0)
m_errorState=ErrDivideByZero;
else m_accum/=m_operand;}
else if(m_operator==OpAdd) m_accum+=m_operand;
else if(m_operator==OpSubtract)m_accum-=m_operand;}
m_bOperandAvail=FALSE;
m_bCoff=0;m_coff=0.1;
UpdateDisplay();}
void CCalculatorDlg:
:
UpdateDisplay(){if(GetSafeHwnd()==NULL)return;
if(m_errorState!
=ErrNone)
m_result="余数不能为0";
else{float lVal=(m_bOperandAvail)?
m_operand:
m_accum;
m_result.Format(_T("%f"),lVal);int i=m_result.GetLength();
while(m_result.GetAt(i-