简易画图板设计报告分析

简易画图板设计报告分析
简易画图板设计报告分析

设计报告:Graphic简易画

图板

-----韩伟谢程焜肖越周峰

电科二班

1设计目的

设计一个单文档类型的MFC AppWizard (exe)工程,工程取名为:Graphic。此程序将实现简单的绘图功能,包括点、直线、矩形、椭圆、扇形和连续线的绘制。并且能实现绘图的控制,包括线宽、线型和颜色的设置,图形的保存和打开以及笔刷的使用。

2 总体设计

设计图如图6

图6

3详细设计

首先,新建一个单文档类型的MFC AppWizard (exe)工程,工程取名为:Graphic。为此程序添加一个子菜单,菜单名称为“绘图”,并为其添加六个菜单项,分别用来控制不同图形的绘制。当用户选择其中的一个菜单项后,程序将按照当前的选择进行相应图形的绘制。添加的六个菜单项的ID及名称如表1所示。然后分别为这六个菜单项添加命令响应,本程序让视类(CGraphicView)对这些菜单命令进行响应,这六个响应函数的名称分别如表1所示。

在程序运行以后,当用户单击某个菜单项时,应该把用户的选择保存起来,以便随后的绘图操作使用。因此在CGraphicView类中添加一个私有变量m_nDrawType;用来保存用户的选择,该变量的定义如下所述:

private: UINT m_nDrawType;

接着,在视类的构造函数中将此变量初始化为0,程序代码如下:

CGraphicView::CGraphicView()

{

// TODO: add construction code here

m_nDrawType=0;

}

利用switch/case语句,来分别完成相应图形的绘制。当用户选择【绘图】菜单下的不同子菜单项时,将变量m_nDrawType设置为不同的值。程序代码如下:void CGraphicView::OnDot()

{

// TODO: Add your command handler code here

m_nDrawType=1;

}

void CGraphicView::OnLine()

{

// TODO: Add your command handler code here

m_nDrawType=2;

}

void CGraphicView::OnRectangle()

{

// TODO: Add your command handler code here

m_nDrawType=3;

}

void CGraphicView::OnEllipse()

{

// TODO: Add your command handler code here

m_nDrawType=4;

}

void CGraphicView::OnShanxing()

{

// TODO: Add your command handler code here

m_nDrawType=5;

}

void CGraphicView::OnLianxuxian()

{

// TODO: Add your command handler code here

m_nDrawType=6;

}

3.1点、直线、矩形、椭圆的绘制(周峰谢程焜)

对于直线、矩形和椭圆,在绘制时都可有两点来确定其图形。当鼠标左击时得到一个点,当鼠标左键松开时得到另外一个点。为视类CGraphicView分别捕获鼠标左键按下和弹起这两个消息。另外当鼠标左键按下时,需要将鼠标当前按下点保存,因此我们为CGraphicView再增加一个CPoint类型的私有成员变量:m_ptOrigin,在视类的构造函数中将此变量初始化为0。在鼠标按下消息响应函数中,保存该点,代码如下:

void CGraphicView::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

m_ptOrigin=point; //保存鼠标按下得到点,也是绘制一个点

CView::OnLButtonDown(nFlags, point);

}

在鼠标左键弹起消息响应函数中实现绘图,代码如下:

void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default //创建并获得设备描述

CClientDC dc(this);

switch (m_nDrawType)

{

case 1:

dc.SetPixel(point,RGB(255,0,0)); /*绘制点*/

break;

case 2: /*绘制直线*/

dc.MoveTo(m_ptOrigin);/*调用MoveTo函数移动到原点*/

dc.LineTo(point);/*调用LineTo函数绘制到终点。*/

break;

case 3: /*绘制矩形*/

dc.Rectangle(CRect(m_ptOrigin,point));

break;

case 4: /*绘制椭圆*/

dc.Ellipse(CRect(m_ptOrigin,point));

break;

CView::OnLButtonUp(nFlags, point);

}

在上述程序中,设置一个点,用到的函数是SetPixel,这也是CDC类的一个成员方法,该函数的生命形式如下:COLORREF SetPixel (POINT point,COLORREF crColor);该函数是在指定的点设置一个像素。其中第一个参数(point)是指定的点,第二个参数(crColor)是指定的颜色。在程序中设定的颜色在系统颜色表中可能不存在,但系统会选择一种和这个颜色最接近的颜色。RGB是一个宏,它有三个参数,分别代表红、绿、蓝三种颜色的值。这三个参数BYTE类型,取值范围为0~255。RGB(0,0,0)是黑色,RGB(255,255,255)是白色,将这三个分量设置成为0~255之间的任意值,从而得到各种不同的颜色。这里的RGB(255,0,0)是红色。

绘制直线时,首先调用MoveTo函数移动到原点,然后调用LineTo函数绘制到终点。

绘制矩形时使用Rectangle函数,该函数声明形式为:BOOL Rectangle (LPCRECT lpRect);

该函数有一个指向Crect对象的参数,后者可以利用两个点来构造。需要注意的是该函数需要的是指向Crect对象的指针,而上述代码中传递的却是Crect对象,但运行编译时也能成功通过,运行时也不会报错,这是为什么呢?我们知道C系列的语言都是强类型语言,如果类型不匹配的话,需要进行强制类型转换。但这里为什么没有进行这样的强制类型转换程序也可以通过呢?实际上,Crect类提供了这样一个成员函数:重载LPCRECT操作符,其作用是将Crect转换为LPCRECT类型。因此,当在程序中给Rectangle函数的参数赋值时,如果它发现该参数是一个Crect

对象,它就会隐式地调用LPCRECT操作符,将Crect类型的对象转换为LPRECT 类型。因此,在给函数传递参数时,如果我们看到的传递的数值类型和所需要的类型不匹配,但编译和运行都正确的情况时,就要想想这其中的缘由了。当然,有的情况下可能是这些类型之间本来就可以互相转换,例如short类型和int类型。但是参数是对象类的话,就要考虑了,它选择的对象的构造方法进行的隐式转换,还是有其他重载的操作符。

当用户选择椭圆菜单项时,调用Ellipes函数绘制一个椭圆。

3.2连续线和扇形的绘制(周峰谢程焜)

Windows系统为我们提供了一个画图程序,在该程序中,利用画笔可以绘制连续的线条,下面我们设计绘制连续线和扇形。

为了绘制连续的线条,首先要得到线条的起点,这在前面已经实现。然后需要捕获鼠标移动过程中的每一个点,这可以通过捕获鼠标移动消息(WM_MOUSEMOVE)来实现。在此消息响应函数中,在依次捕获的各个点之间绘制一条条非常短的线段,从而就可以绘制出一条连续的线条。

遵照这一思路,我们开始增加程序的功能。首先为视类增加鼠标移动消息(WM_MOUSEMOVE)的响应函数(OnMouseMove)。这样,只要鼠标在应用程序窗口中移动时都会进入到这个消息响应函数中。但这并不是我们所期望的,我们希望在鼠标左键按下后开始绘图。因此,我们需要有一个变量来表示鼠标左键是否按下这一状态,然后在鼠标移动消息响应函数中对这一变量进行判断。当此变量为真,即鼠标左键已经按下去,我们开始绘图。于是,为视类添加一个BOOL型的私有变量m_bDraw,当鼠标左键按下去时,此变量为真;当鼠标左键弹起时,此变量为假,这时,我们就不再绘制线条了。该变量在视类头文件中的定义代码如下:Private:

BOOL m_bDraw;

接下来在视类的构造函数中,将此变量初始化为FALSE。

m_bdraw=FALSE;

当鼠标左键按下去时,在视类的OnLButtonDown函数中将此变量初始化为TRUE。

m_bdraw=TRUE;

当鼠标左键弹起时,在视类的OnLButton函数中将此变量初始化为假。

m_bdraw=FALSE;

然后在OnMouseMove函数中首先对m_bdraw变量进行判断,如果其值为真,说明鼠标左键已经按下去了,这时就可开始进行画线操作。还有一点需要注意,因为每绘制一条线段后,下次应该从这条线段的终点开始继续绘制。因此,绘制完当前线段后,应该修改线段的起点,将当前线段的终点作为下一条线段的起点,程序代码如下:

void CGraphicView::OnMouseMove(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

{

//创建并获得设备描述

CClientDC dc(this);

//创建宽度为1的实线红色画笔

CPen pen (PS_SOLID, 1, RGB(255,0,0));

//把创建的画笔选入设备描述

CPen *pOldpen=dc.SelectObject(&pen);

if(m_bDraw==true)

{

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

//修改线段的起点

m_ptOrigin=point;

}

//恢复设备描述

dc.SelectObject(pOldpen);

CView::OnMouseMove(nFlags, point);

}

如果在上面绘制连续线条的程序中,保持每段小直线的起点不变,即以鼠标左键按下时的起点为起点不变,分别绘制到鼠标移动点的直线,这时就会出现扇形的效果。也就是去掉上述代码OnMouseMove函数中修改线段起点的代码。程序代码如下:

void CGraphicView::OnMouseMove(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

{

//创建并获得设备描述

CClientDC dc(this);

//创建宽度为1的实线红色画笔

CPen pen (PS_SOLID, 1, RGB(255,0,0));

//把创建的画笔选入设备描述

CPen *pOldpen=dc.SelectObject(&pen);

if(m_bDraw==true)

{

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

}

//恢复设备描述

dc.SelectObject(pOldpen);

CView::OnMouseMove(nFlags, point);

}

3.3画刷(韩伟肖越)

再为此程序添加一个子菜单,菜单名称为“画刷”,并为其添加三个菜单项,分别用来控制不同的画刷。

MFC提供了一个CBrush类,可以用来创建画刷对象。画刷通常用来填充一块区域。

简单画刷、位图画刷、透明画刷,程序代码如下:

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)

{

//创建一个红色画刷

CBrush brush(RGB(255,0,0));

//创建并获得设备描述表

CClientDC dc(this);

//利用红色画刷填充鼠标拖曳过程中形成的矩形区域

dc.FillRect(CRect(m_ptOrigin,point),&brush);

//创建位图对象

CBitmap bitmap;

//加载位图资源

bitmap.LoadBitmap(IDB_BITMAP1);

//创建位图画刷

CBrush brush(&bitmap);

//创建并获得设备描述表

CClientDC dc(this);

//利用红色画刷填充鼠标拖曳过程中形成的矩形区域

dc.FillRect(CRect(m_ptOrigin,point),&brush);

//创建并获得设备描述表

CClientDC dc(this);

//创建一个空画刷

CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

//将空画刷选入设备描述表

CBrush *pOldBrush = dc.SelectObject(pBrush);

//绘制一个矩形

dc.Rectangle(CRect(m_ptOrigin,point));

//恢复先前的画刷

dc.SelectObject(pOldBrush);

m_bDraw = FALSE;

CView::OnLButtonUp(nFlags, point);

}

在简单画刷程序中,首先创建一个红色画刷;接着创建设备描述表对象;然后调用设备描述表对象的成员函数FillRect,利用指定的画刷填充一块指定的矩形区域,而鼠标拖动过程中的起点和终点就决定了需要填充的矩形区域,因此,代码中通过CRect类利用鼠标拖动的起点和终点构造了这快矩形区域。CRect类提供了多个构造函数,这里使用的是下面这种构造函数,即通过指定矩形区域的左上角和右下角这两个点来构造一块矩形区域。

CRect(POINT topLeft,POINT bottomRight);

代码中的CDC类的成员函数FillRect,该函数的功能是用指定的画刷填充一个矩形。该函数将填充全部的矩形,包括上左边界,但不填充右底边界。FillRect函数的声明如下:

void FillRect (LPCRECT lpRect,CBrush* pBrush);

该函数有两个参数,lpRect是指向一个RECT结构体或CRect对象的指针,该

结构体或对象中包含了要填充的矩形的逻辑坐标。pBrush是指向用于填充矩形的画刷对象的指针。

在位图画刷程序中,CBrush类有下面这样一种构造函数。

CBrush (CBitmap* pBitmap);

该构造函数要求一个CBitmap类型的指针,CBitmap类是位图类,于是我们就会这样想:利用这个构造函数是否就可以创建一个位图画刷呢?事实确实如此。创建CBitmap对象时,仅调用其构造函数并不能得到一个有用的位图对象,还需要调用一个初始化函数来初始化这个位图对象。CBitmap类提供了多个初始化函数,例如,LoadBitmap、CreateBitmap、BitmapIndirect等。这里用LoadBitmap函数来加载一副位图,该函数的声明如下:

BOOL LoadBitmap (LPCTSTR lpszResourceName);

BOOL LoadBitmap (UINT nIDResource);

其中第二种声明需要一个资源ID作为参数。首先给程序增加一个位图资源。为一个工程创建资源有多种实现方法,其中一种方法可以利用【Insert】菜单下的【Resource…】命令,在弹出的对话框中选择Bitmap资源类型,单击【New】按钮,即可创建一个默认名称为IDB_BITMAP1的位图资源,并在VC++集成开发环境右边的代码编辑区中打开位图编辑器。可以利用编辑器右边的调色板和绘图工具来编辑位图资源,还可以通过拉伸位图编辑器中网格周围的蓝色方点来调整位图的大小。

在透明画刷程序中,我们利用GetStockObject这个函数来获取一个黑色或白色的画刷句柄。这个函数是否能够获得一个透明画刷句柄呢?从MSND提供的帮助信息中,可以看到该函数的参数取值之一可以是NULL_BRUSH,以获取一个空画刷。那么,这个空画刷是否就是我们所需要的透明画刷呢?结论是正确的。

但这时存在一个问题,我们获取的是句柄,而在进行绘制操作时需要的是一个画刷对象。如何从画刷句柄转换为画刷对象呢?CBrush类提供了一个FromHandle 函数来实现这样的功能。该函数的声明如下:

Static CDC* PASCAL FromHandle(HDC hDC);

3.4设置对话框(韩伟肖越)

为程序添加一个设置对话框,允许用户指定画笔的类型、线宽,并让随后的绘图操作就使用用户指定的新设置值来进行绘制。

设置线型、线宽对话框的代码如下:

void CGraphicView::OnSetting()

{

//TODO: Add your command handler code here

CSettingDlg dlg;

dlg.m_nLineWidth=m_nLineWidth;

dlg.m_nLineStyle=m_nLineStyle;

if(IDOK==dlg.DoModal())

{

m_nLineWidth=dlg.m_nLineWidth;

m_nLineStyle=dlg.m_nLineStyle;

}

}

3.5颜色(韩伟肖越)

颜色对话框看起来比较复杂。实际上,MFC为我们提供了一个类:CColorDialog,可以很方便的创建这样的一个颜色对话框。

void CGraphicView::OnColor()

{

// TODO: Add your command handler code here

CColorDialog dlg;

dlg.m_cc.Flags |=CC_RGBINIT | CC_FULLOPEN;

dlg.m_cc.rgbResult=m_clr;

if(IDOK==dlg.DoModal())

{

m_clr=dlg.m_cc.rgbResult;

}

}

3.6打开与保存

void CGraphicView::OnFileOpen()

{

// TODO: Add your command handler code here HMETAFILE hmetaFile;

hmetaFile=GetMetaFile("meta.wmf");

m_dcMetaFile.PlayMetaFile(hmetaFile);

DeleteMetaFile(hmetaFile);

Invalidate();

}

void CGraphicView::OnFileSave()

{

// TODO: Add your command handler code here HMETAFILE hmetaFile;

hmetaFile=m_dcMetaFile.Close();

CopyMetaFile(hmetaFile,"meta.wmf");

m_dcMetaFile.Create();

DeleteMetaFile(hmetaFile);

}

4运行结果

运行结果如图7、8、9

图7

图8

图9

结论

其实学任何一种语言都是一样的。需要勤奋+毅力+运气=成功,这是我认为的一个公式。这里毅力和勤奋是个人因素,而运气这是先天的。如果以前没有接触过编程语言的话,在接触VC前我建议你先学习一些基础语言,比如C等都是一些比较好学的基础语言,我当初就是从C语言过度学VC的。学基础语言的目的是学习语法结构和如何编写概念,只有你理解和掌握了这些编程用的工具才能学习高级语言。这些基础语言中我建议大家学C语言,其实VC就是C++也就是C语言的"儿子","父亲"学习起来比较容易上手,但遇到类似WINDOWS的程序的时候比较固执不容易沟通,在这种条件下才有了"儿子","儿子"比较开朗应变能力强,但是就因为他这些优点才使初学者难以掌握。VC是C++语言,是一种面向对象的编程语言。他于基础语言不同点在于,基础语言是一条路走到底的(中断技术除外),而

面向对象是等待你的指令才往下走,是被动的编程语言。这点是学习VC前必须扭转的概念。

通过这次学年设计,我了解vc++是Windows平台上的C++编程环境,学习VC 要了解很多Windows平台的特性并且还要掌握MFC、ATL、COM等的知识,难度比较大。Windows下编程需要了解Windows的消息机制以及回调(callback)函数的原理;MFC是Win32API的包装类,需要理解文档视图类的结构,窗口类的结构,消息流向等等;COM是代码共享的二进制标准,需要掌握其基本原理等等。基于我们这次用VC++编写了一个简单的画图板,功能不是很多,但是从中的到不少收获。主要有:

1.对项目和文档的了解,我们在编写程序时,要对不同的文件进行编写。其中项目就是文件的集合,包括头文件、源代码文件、资源文件。文档窗口也称编辑窗口,是用户进行输入或编辑头文件、源文件、资源的区域。在编辑文件时,为了增加程序的可读性,系统用绿色显示注释语句,用蓝色显示关键字。

2.菜单:我们绘制画图板时,就要建立一个“绘图”菜单。对于“绘图”菜单下还有几个子菜单项,通过建立菜单同时让它实现菜单上的命令,这就要我们对每个菜单项进行设置,诸如,ID、标题、快捷键、热键等。还有一些属性设置,设置不好,容易出错,所以每次建立菜单,都需谨慎设置,记住每个菜单对应的参数。

3.文件打开与保存,对于我们绘制出一幅图片,那么我们就要把它保存下来。如果我们无法保存,我们做了也就没没什么意义了。对于图形的保存于打开,我们还存在很多问题,自定义保存不同文件夹下尚未解决,所以还需要我们进一步的学习和了解,争取实现我们心里多希望的。

4.在编程时遇到了图像在变换大小时,原来的图形会消失,后来通过查看相关资料,这里涉及的一个重绘问题。经过多次修改,添加代码,才得以解决。所以我觉得学习VC++就要拿出那种坚持不懈的精神,做什么也是,只有你不放弃对它了解,才会实现我们自己想要的,这就要我们要不断的学习VC++,从中学习更多我们没了解到的知识。

5.对于CView视图,经过查询主要是负责内存数据与用户的交互。包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应)。最重要的是OnDraw(重画窗口),通常用CWnd::Invalidate()来启动它。另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。

最后通过学习VC++,从中受益匪浅,更多的知识,还有待于我们去挖掘实现更多有趣的东西,同样它也是一个很强大的软件。

编写一个计算器程序课程设计报告-范例

学号 《金融IT入门-程序设计》 课程设计报告 中国地质大学长城学院XX 系 2017年月 3 日 目录 一.总体概述: 二.设计目标: 三.程序流程图: 四.程序代码: 评分细则 评分项优秀良好中等差 上课出勤 上课表现 上机情况 平时作业完成情况 期末大作业: (1)书写认真程度 题目:用Python编写简易计算器程序 学号: 专业: 班级: 姓名: 指导教师: 2016-2017学年第二学期

(2)内容详实程度(3)文字表达能力(4)是否体现观点 简短教师签名: 年月日 评 分 等 级 备 注 评分等级有五种:优秀、良好、中等、及格、不及格

一、设计内容 ------------------------------------------------------------------------------------------------- - 1 - 1. 课程设计目的:-------------------------------------------------------------------------------------- - 1 - 2.课程设计任务: --------------------------------------------------------------------------------- - 1 - 3.创新要求:---------------------------------------------------------------------------------------------- - 2 - 4.设计要求: ------------------------------------------------------------------------------------------------ - 2 - 二、原理和分析 ---------------------------------------------------------------------------------------------- - 2 - 1.开发的技术及功能 ----------------------------------------------------------------------------------- - 2 - 2.设计思路------------------------------------------------------------------------------------------------ - 2 - 3.设计效果图--------------------------------------------------------------------------------------------- - 2 - 三、设计过程 ------------------------------------------------------------------------------------------------- - 3 - 1. 程序思路: -------------------------------------------------------------------------------------------- - 3 - 2.功能实现:---------------------------------------------------------------------------------------------- - 4 - 1)加减乘除求余以及指数运算----------------------------------------------------------------- - 4 - 2)其他运算 ------------------------------------------------------------------------------------------ - 4 - 3)主要方法说明------------------------------------------------------------------------------------ - 5 - 4)程序流程图 --------------------------------------------------------------------------------------- - 5 - 3.算法思路:---------------------------------------------------------------------------------------------- - 6 - 4.数据分析:---------------------------------------------------------------------------------------------- - 7 - 四、设计结果和分析------------------------------------------------------------------------------------------ - 7 - ⒈运行调试------------------------------------------------------------------------------------------------ - 7 - 1)进行加减乘除求余以及指数运算----------------------------------------------------------- - 7 - 2)求倒 ------------------------------------------------------------------------------------------------ - 9 - 3)退格 ------------------------------------------------------------------------------------------------ - 9 - 4)清零 ---------------------------------------------------------------------------------------------- - 10 - 5)求余弦、求正切、对e求幂、求平方根、求自然对数、求倒运算 ------------- - 11 - 6)连续运算(例:2*3*4=24.0)------------------------------------------------------------- - 11 - 7)异常处理(例:求倒时输入数为0) --------------------------------------------------- - 11 - 五、设计体会和小结 -------------------------------------------------------------------------------------- - 12 - 六、参考文献 ----------------------------------------------------------------------------------------------- - 13 - 七、源程序--------------------------------------------------------------------------------------------------- - 13 - 一、设计内容 1.课程设计目的: 1)掌握Java语言的程序设计方法; 2)理论联系实际,进一步提高学生的软件开发技术; 3)培养学生分析、解决问题的能力; 4)提高学生实践论文撰写能力。 2.课程设计任务:

简易计算器的设计与实现

沈阳航空航天大学 课程设计报告 课程设计名称:单片机系统综合课程设计课程设计题目:简易计算器的设计与实现 院(系): 专业: 班级: 学号: 姓名: 指导教师: 完成日期:

沈阳航空航天大学课程设计报告 目录 第1章总体设计方案 (1) 1.1设计内容 (1) 1.2设计原理 (1) 1.3设计思路 (2) 1.4实验环境 (2) 第2章详细设计方案 (3) 2.1硬件电路设计 (3) 2.2主程序设计 (7) 2.2功能模块的设计与实现 (8) 第3章结果测试及分析 (11) 3.1结果测试 (11) 3.2结果分析 (11) 参考文献 (12) 附录1 元件清单 (13) 附录2 总电路图 (14) 附录3 程序代码 (15)

第1章总体设计方案 1.1 设计内容 本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除1位无符号数字的简单四则运算,并在6位8段数码管上显示相应的结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的8751单片机,输入采用4×4矩阵键盘。显示采用6位8段共阳极数码管动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,最终选用汇编语言进行编程,并用protel99se涉及硬件电路。 1.2 设计原理 在该课程设计中,主要用到一个8751芯片和串接的共阳数码管,和一组阵列式键盘。作为该设计的主要部分,下面将对它们的原理及功能做详细介绍和说明。 1)提出方案 以8751为核心,和数码管以及键盘用实验箱上已有的器件实现计算器的功能。 2) 总体方案实现 (1)要解决键值得读入。先向键盘的全部列线送低电平,在检测键盘的行线,如果有一行为低电平,说明可能有按键按下,则程序转入抖动检测---就是延时10ms再读键盘的行线,如读得的数据与第一次的相同,说明真的有按键按下,程序转入确认哪一键按下的程序,该程序是依次向键盘的列线送低电平,然后读键盘的行线,如果读的值与第一次相同就停止读,此时就会的到键盘的行码与列码

android简单计算器课程设计

摘要 Android是当今最重要的手机开发平台之一,它是建立在Java基础之上的,能够迅速建立手机软件的解决方案。Android的功能十分强大,成为当今软件行业的一股新兴力量。Android基于Linux平台,由操作系统、中间件、用户界面和应用软件组成,具有以下5个特点:开放性、应用程序无界限、应用程序是在平等条件下创建的,应用程序可以轻松的嵌入网络、应用程序可以并行运行。而简单计算器又是手机上必备的小程序,所以此次创新实践很有意义。并且具有很强的使用性。 关键字:Android Java基础计算器

目录 第1章开发工具与环境 (1) 1.1 Android平台 (1) 1.2 Java开发环境 (1) 1.3 Eclipse (1) 1.4 Android程序基础—Android应用程序的构成 (2) 第2章系统分析与设计 (4) 2.1系统的可行性分析 (4) 2.2 系统的需求分析 (4) 2.3 系统的优势 (4) 2.4 系统的流程图 (5) 第3章系统详细设计 (6) 3.1 动作Activity (6) 3.2 布局文件XML (6) 3.3 Activity的详细设计 (7) 3.2 布局文件XML的详细设计 (21) 3.2 系统的运行结果 (24) 结论 (25) 参考文献 (26)

第1章开发工具与环境 1.1 Android平台 1.谷歌与开放手机联盟合作开发了Android, 这个联盟由包括中国移动、摩托罗拉、高通、宏达和T-Mobile在内的30多家技术和无线应用的领军企业组成。 2.Android是一个真正意义上的开放性移动设备综合平台。通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,来建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统,这样应用之间的通用性和互联性将在最大程度上得到保持。 3.所有的Android应用之间是完全平等的。 4.所有的应用都运行在一个核心的引擎上面,这个核心引擎其实就是一个虚拟机,它提供了一系列用于应用和硬件资源间进行通讯的API。撇开这个核心引擎,Android的所有其他的东西都是“应用”。 5.Android打破了应用之间的界限,比如开发人员可以把Web上的数据与本地的联系人,日历,位置信息结合起来,为用户创造全新的用户体验。 1.2 Java开发环境 Java技术包含了一个编程语言及一个平台。Java编程语言具有很多特性,如面向对象、跨平台、分布式、多线程、解释性等等。Java编程语言起源于Sun公司的一个叫“Green”的项目,目的是开发嵌入式家用电器的分布式系统,使电气更加智能化。1996年1月发布了JDK1.1版本,一门新语言自此走向世界。之后,1998年12月发布了1.2版本,2002年2月发布1.4版本,2004年10月发布1.5版本(5.0),2006年12月发布1.6(6.0)版本,这是目前的最新版本。Java1.2版本是一个重要的版本,基于该版本,Sun将Java技术分为J2SE、J2ME、J2EE,其中J2SE为创建和运行Java程序提供了最基本的环境,J2ME与J2EE 建立在J2SE的基础上,J2ME为嵌入式应用(如运行在手机里的Java程序)提供开发与运行环境,J2EE为分布式的企业应用提供开发与运行环境。 1.3 Eclipse

java画板课程设计报告

画板 一、需求分析 平时生活中,我们会需要处理一些基本的图像,也有可能需要花一些简单的图像,平时所使用的图形处理工具有PhotoShop、Windows 画图工具等,其中PhotoShop 是一款非常强大的图形处理工具,Windows 画图工具则是一款较为简单的画图工具,功能较为简单,用Windows画图工具,是一种比较简单与具有代表性的画图工具,虽然功能不够强大,但具有大多图片处理程序所必需的基本功能:铅笔画图、各种数学函数图形、填色、取色、橡皮擦等等。这次试验中我做的就是一个仿照windows画板的程序。 功能:1.利用graphics 类来向界面上画上相应内容 2.能够画出直线,矩形,多边形,椭圆形,圆矩形等 3.能够实现橡皮,刷子,喷枪等工具。 4.能够实验颜色的设置 5.能够保存图片和打开图片(当保存名一致时需提示) 6.界面尽量合理,可以仿照windows画板界面。 二、概要设计

流程图 画板软件类图 1.工具接口Tool: 从图中可以看到,工具接口Tool 定义了鼠标动作的四个方法,分别是拖动mouseDrapped()、移动mouseMoved()、松开mouseReleased()、按下

mousePressed()、点击mouseClicked()五个动作,并用String 类型的常量属性来定义工具的类型。这个接口只有一个实现类AbstractTool,而每个工具类 都是去扩展AbstractTool 类,在图中表现为Tool1、Tool2…….ToolN。 2.Tool的实现类AbstractTool AbstractTool 是Tool 的实现类,也是一个抽像类,所以并不能被创建,只能被继承。此类实现Tool 中定义的所有方法,并扩展了其它方法,让其子类继承或者重写。该类中为其他的工具类提供了大部分的实现,那么它的子类就可以不必再做重复的实现,只关心与本类相关的逻辑, 3.AbstractTool的子类 AbstractTool 一共有ArrowTool(箭头)、PencilTool(铅笔)、BrushTool(刷子)、EraserTool(橡皮擦)、LineTool (直线)、RectTool (矩形)、PolygonTool (多边形)、RoundTool (椭圆形)、RoundRectTool(圆矩形)、AtomizerTool (喷墨)、ColorPickedTool(颜色选择)11 个子类, 4. 界面类ImageFrame 这个画图工具的界面的主要放在这个类中实现 5. 业务逻辑类ImageService 除鼠标的画图功能外(画图功能由Tool 的实现类完成),初始化画板、图片的新建打开与保存、各种面板的显示与隐藏、颜色的编辑、整个界面的刷新、菜单等业务逻辑都放在这个类中实现, 对象,它并没有保存一些状态属性。 6 .文件选择类ImageFileChooser ImageFileChooser 类继承了JFleChooser 类,JFleChooser 是Java 提供的一个简单的文件选择机制,我们这里扩展这个类,是为了增加我们自己的文件过滤器。 三、运行环境、开发语言 Window xp 和elipse Java语言

Java计算器课程设计报告 - 副本

JAVA课程设计 小型计算器 学生姓名: 指导教师:李明江 系别:计算机科学系 专业:计算机科学与技术 年级:2008 应用2班 提交时间:2010年 12 月 22日学号:

目录 一概述 (3) 二总体方案设计 (4) 三详细设计 (6) 四程序的调试与运行结果说明.. 10 五课程设计总结 (19) 六附录...... 错误!未定义书签。

一设计任务书 1.程序具备的功能: (1)使用图形用户界面:一个文本框;0-9数字按钮;加、减、乘、除运算符;“等于”符号;复位按钮; (2)完成整数、实数的四则运算(加、减、乘、除); (3)通过按钮点击实现数据的复位(清零);(4)实数运算中小数位的精度一致。 2.课程设计的主要设计思想 对于此计算器程序,首先要设计其GUI 界面,总体界面有一个文本框,18个按钮,总体界面用BorderLayout布局。 文本框放置在最NORTH,然后0到9以及+,-,*,/的按钮放置到一个面板Panel 中,添加到整体布局的CENTER,界面设计

完成。 布局设计好后再添加按钮事件。对于此程序要考虑到点击加、减、乘、除按钮时是否有点击数字按钮,如果是第一次点击数字按钮或者是点击数字按钮前点击了加、减、乘、除按钮则直接把数字按钮的数值设置到文本框中,否则则应把文本框中的内容加上你所点击按钮的数值设置到文本框中。 在进行加、减、乘、除计算时要把点击加、减、乘、除按钮之前的数值保存下来,运算时是这个被保存下来的数值和文本框中的数值加、减、乘、除。 二总体方案设计 1.界面设计 界面设计要求用GUI,界面设计中有用到swing组件的TextField和Button,用到awt 中的BorderLayout和GridLayout布局管理方

简单计算器设计报告

简单计算器设计报告 045 一、基本功能描述 通过文本编辑框实现基本整数的加减乘除运算 二、设计思路 如下图是整个程序进行的流程图,基本方法是在ItemText文本编辑框输入字符,程序对字符进行判断,若输入不是数字则提示错误。输入正常时,通过下拉框ComboBox_InsertString 选择相应运算符。点击等号IDC_OK,即可得出运算结果。操作简便,算法简单。 三、软件设计 1、设计步骤 打开Microsoft Visual C++ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名zhoutong及其所在位置,点击确定 1

将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成 MFC AppWizard就建立了一个基于对话窗口的程序框架

四、主要程序分析 1、字符判定函数 BOOL IsInt(TCHAR*str) { int i=atoi(str); TCHAR strtemp[256]; wsprintf(strtemp,"%i",i); if(strcmp(str,strtemp)!=0) { return FALSE; } Else { return TRUE; } } 该函数通过atoi把文本编辑框读取的字符转换为数字,再通过wsprintf把转换数字转换为字符,通过strcmp比较原字符和转换得来的字符。如相同返回true,不通则返回false. 3、运算符选择程序 BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { HWND hwndComboOP=GetDlgItem(hwnd,IDC_COMBOOP); ComboBox_InsertString(hwndComboOP,-1,TEXT("+")); ComboBox_InsertString(hwndComboOP,-1,TEXT("-")); ComboBox_InsertString(hwndComboOP,-1,TEXT("*")); ComboBox_InsertString(hwndComboOP,-1,TEXT("/")); return TRUE; } 3

简易计算器课程设计

评阅教师评语:课程设计成绩 考勤成绩 实做成绩 报告成绩 总评成绩指导教师签名: 课程设计报告 论文题目基于ARM的简易计算器设计 学院(系):电子信息与自动化学院 班级:测控技术与仪器 学生姓名:同组同学: 学号:学号: 指导教师:杨泽林王先全杨继森鲁进时间:从2013年 6 月10 日到2013年 6 月28 日 1

目录 1、封面—————————————————————P1 2、目录—————————————————————P2 3、前言—————————————————————P3 4、关键字————————————————————P3 5、原理与总体方案————————————————P3 6、硬件设计———————————————————P6 7、调试—————————————————————P10 8、测试与分析——————————————————P11 9、总结—————————————————————P13

10、附件—————————————————————P14 前言 近几年,随着大规模集成电路的发展,各种便携式嵌入式设备,具有十分广阔的市场前景。嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。在嵌入式系统中,数据和命令通过网络接口或串行口经过ARM程序处理后,或显示在LCD上,或传输到远端PC上。 本文通过周立功的LPC2106芯片完成的简易计算器,正是对嵌入式应用的学习和探索。 一、摘要: 计算器一般是指“电子计算器”,是能进行数学运算的手持机器,拥有集成电路芯片。对于嵌入式系统,以其占用资源少、专用性强,在汽车电子、航空和工控领域得到了广泛地应用。本设计就是先通过C语言进行相应程序的编写然后在ADS中进行运行最后导入PROTUES进行仿真。最后利用ARM中的LPC2106芯片来控制液晶显示器和4X4矩阵式键盘,从而实现简单的加、减、乘、除等四则运算功能。 关键字:中断,扫描,仿真,计算 二、原理与总体方案: 主程序在初始化后调用键盘程序,再判断返回的值。若为数字0—9,则根据按键的次数进行保存和显示处理。若为功能键,则先判断上次的功能键,根据代号执行不同功能,并将按键次数清零。程序中键盘部分使用行列式扫描原理,若无键按下则调用动态显示程序,并继续检测键盘;若有键按下则得其键值,并通过查表转换为数字0—9和功能键与清零键的代号。最后将计算结果拆分成个、十、百位,再返回主程序继续检测键盘并显示;若为清零键,则返回主程序的最开始。 电路设计与原理:通过LPC2106芯片进行相应的设置来控制LCD显示器。 而通过对键盘上的值进行扫描,把相应的键值通过MM74C922芯片进行运算从而

计算机图形学课程设计报告交互式绘图系统

课程设计报告 课程名称计算机图形学 课题名称交互式绘图系统 专业计算机科学与技术 班级 学号 姓名 指导教师刘长松曹燚 2012年10 月9 日

湖南工程学院 课程设计任务书 课程名称计算机图形学 课题交互式绘图系统 专业班级 学生姓名 学号 指导老师刘长松曹燚 审批 任务书下达日期2012年9月15 日任务完成日期2012 年10月9 日

一、设计内容与设计要求 1.设计内容: 用橡皮法实现交互式绘图系统。 2.设计要求: 在屏幕上可以选择不同的命令、来实现不同基本图形的绘制。完成橡皮筋直线,橡皮筋圆,橡皮筋矩形框,多边形裁剪和3阶B样条曲线的作图,且要有比较友好的界面。 3.算法提示: 首先在屏幕上画出菜单和绘图窗口,显示鼠标。点击相应菜单,点击鼠标,移动鼠标,获取鼠标移动相对位置,画出相应图形。 相关变量定义: #define _MOUSE鼠标#define CIRCLE 1圆 #define LINE 2直线#define RECTANGLE 3矩形#include "stdio.h" #include "string.h" #include"graphics.h" #include"math.h" #include union REGS inreg,outreg; struct SREGS sr; 相关函数: void meun(int x,int y,char *str) { setcolor(8); outtextxy(x+5,28,str); setcolor(15); line(x,22,x,40); line(x,22,y,22); setcolor(8); line(x,40,y,40); line(y,22,y,40); }

单片机课程设计——基于C51简易计算器

单片机双字节十六进制减法实验设计 摘要 本设计是基于51系列的单片机进行的双字节十六进制减法设计,可以完成计 算器的键盘输入,进行加、减、3位无符号数字的简单运算,并在LED上相应的显示结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机,输入采用5个键盘。显示采用3位7段共阴极LED动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus 仿真。 引言 十六进制减法计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。 单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。 关键词:单片机、计算器、AT89C51芯片、汇编语言、数码管、加减

目录 摘要 (01) 引言 (01) 一、设计任务和要求............................. 1、1 设计要求 1、2 性能指标 1、3 设计方案的确定 二、单片机简要原理............................. 2、1 AT89C51的介绍 2、2 单片机最小系统 2、3 七段共阴极数码管 三、硬件设计................................... 3、1 键盘电路的设计 3、2 显示电路的设计 四、软件设计................................... 4、1 系统设计 4、2 显示电路的设计 五、调试与仿真................................. 5、1 Keil C51单片机软件开发系统 5、2 proteus的操作 六、心得体会.................................... 参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单.................................. 一、设计任务和要求

画图工具可行性报告

Java实训课程设计报告Windows画图工具 专业:计算机科学与技术班级:11092311 姓名:曾思哲 学号:11923110

2014年6月

项目简介

Windows画图工具的设计 第1章需求分析 1.1 项目背景 随着社会的不断发展,人们对画面要求越来越高,对画图工具的软件提出了更高的要求。 画图工具的软件可以让用户更加节省时间,可以从其他文件找出一些图片修改一下就可以使用,比起传统的手工的画图来说,不单单是节省时间而且画面要好的多,保存起来也比较方便,下次在用的时候一找就出来了。在比如画面的修改在这套软件上我们可以直接使用彩色,使画面更直观,而且还可以修改,画图的软件现在应用于各行各业,这款软件特别适合教学用,学生画图也是比不可缺少的。 1.2 需求分析 需求分析是从客户的需求中提取出软件系统能够帮助用户解决的业务问题,通过对用户问题的分析,确定系统的功能需求。这个步骤是对理解需求的升华,直接关系到该系统的质量。分析的根本目的是在开发者和提出需求的人之间建立一种理解和沟通机制,因此,系统的需求分析也应该是开发人员和用户或客户一起完成的。 1.2.1画图板的性能要求 (1) 统一处理的准确性和及时性。 (2) 软件的开放性和可扩充性。 (3) 软件的易用性和易维护性。 1.2.2画图板的功能分析 我们作的是Windows画板,再设计时应该考虑到用户的需要和画图的习惯。所以我们需求分析的主要任务就是来了解用户画图时的习惯。尽量让用户满意。在此我们是先设计一个大概的程序模型让别人试试我的画图板。

第2章概要设计 2.1 软件设计 1.1.1 本软件是设计一套在windows平台下的画图工具,主要用于主要用于画图、打开图画类的页面修改并保存成用户需要的格式。系统采用C/S结构,主要用于客户端,供客户学习、工作使用,本软件提供良好的界面,操作简单。 第3章详细设计 3.1 模块设计 该系统由4个模块构成,分别是工具模块、储存模块、颜色模块、帮助模块。 ●工具模块 画笔(PencilTool)、格式刷(BrushTool)、喷墨工具(AtomizerTool)、橡皮(EraserTool)、直线(LineTool)等主要用于不同情况的使用,在面板上方便用户的使用。 ●储存模块 ①判断当前画板是否保存(MyImage)。 ②设置多种存储的格式供用户选择,增加文件过滤器(addFilter)。 ③存储路径可以设置默认的。 ●颜色模块 通过创建颜色选择器(ColorChooser),来让用户获取颜色,供用户使用。 ●帮助模块 系统帮助文档和软件的声明。 3.2 功能设计 主要功能如下: 1、画笔 PencilTool这个类继承于AbstractTool类,PencilTool类中有个对象Tool 用户通过点击画板上的图标来获取画笔,它的功能让用户用来画出各种图形。 2、格式刷子 BrushTool这个类继承于AbstractTool类,它的功能让用户画出更好的图形。

LABVIEW计算器设计报告

虚拟仪器大作业——模拟计算器 班级:电1004 姓名: 学号:20102389

一、设计思想: .创建3个字符串显示控件num1,num2,num3,其中: 1、第一个输入数据存储在num1中 2、第二个输入数据存入num2中 3、将其赋给 num3,并使num2为空,以便输入的数据存入num2 4、所有的运算是在num1和 num3间进行 5、运算结果都赋给result,同时赋给num1,用于下一次的运算 .创建4个布尔开关按钮change,change1,change2,change3,其中: 1、Change的真假用来判断是第一个数据还是第二个数据 2、change1的功能是在输入=,运算完后,不需要初始化即可进行下一次运算 3、change2用来去掉数据小数末尾的0 4、change3用来保证backspace键仅对输入的数据有效,对运算结果无效 .创建2个数值显示控件type1,type2,并分别在其后面板的属性——数据类型——表示法中选择U8其中: 1、type1用来存储运算符号 2、type2用来保证连续“+、-、*、/”的正确性 3、所有的运算结果都赋给result 4、result经过去零处理后得到result1,将数据显示在前面板上。 二、实现过程 1、面板按键的设计及感应 首先,在前面板上建立一个簇 然后在簇中再建立布尔量,复制20个以满足键的需求(0--9十个数字键,一个小数点键,一个等号键,四则运算键,一个开方键,一个平方键,一个倒数键,一个反号键,一个清零键及一个退出键并注意按键的顺序)。 将按键给值并作适当的美化处理

在后面板中通过将簇中元素按产生的顺序组成一个一维数组,这样就实现了每个键与数字(0--20)之间的对应。每次按下一个键时,通过 查找出对应的键并把结果(对应的数字)连接到一个case结构,然后执行对应case结构中的程序,至此就完成了对一个键的感应过程。 2、数字的键入(0~8键入1~9数字) 由于第一个输入和第二个输入所存放的地方不同(第一个存于num1,第二个存于num2→mun3再清空num2),所以有必要对此分开处理。创建2分支(真、假)的case结构。 用change控制分支的选择:在处创建局部变量并转换为读入。由于数字的键入是数据输入,change3用来保证backspace键仅对输入的数据有

简易计算器设计实验报告

简易计算器设计实验报告 一.设计任务及要求 1.1实验任务: 根据计算器的原理设计一个具有加减乘除功能的简易计算器。如:5+3*4/8=4。 1.2 实验基本要求: (1)实现最大输入两位十进制数字的四则运算(加减乘除)。 (2)能够实现多次连算(无优先级,从左到右计算结果)。 如:12+34*56-78/90+9=36 (3)最大长度以数码管最大个数为限,溢出报警。 二.实验设计方案 (1)用QuartusII的原理图输入来完成系统的顶层设计。 (2)用VHDL编写以及直接拖模块来各功能模块。 (3)通过2个脉冲分别实现个位数和十位数的输入。 (4)通过选择每次的输出数值,将输出值反馈到运算输入端 (4)通过除法运算实现十六进制到十进制的转换输出。 其具体实现流程图如下:

三系统硬件设计 FPGA: EP2C5T144C8目标板及相应外围硬件电路。(从略) 四系统软件设计 1.数据输入模块 原理:用VHDL创建模块,通过两个脉冲分别对两个数码管进行输入控制,再通过相应运算模块将两个独立数据转化成两位十进制数字。 2.运算模块 原理:用VHDL创建模块,四种运算同步运行,通过按键加、减、乘、除选择输出对应的计算结果,当按键等号来时,将所得结果反馈给运算模块输入端。具体实现代码见附录二。 3.输出模块 原理:用VHDL创建模块,通过按键等号来控制显示运算对象还是运算结果,当等号按下时,输出计算结果,否则显示当前输入的数据,并且通过除法模块将十六进制转化为十进制。当输出结果溢出是LED0亮,同时数码管显示都为零。部分实现见附录二。 五实验调试 输入数据12,再按加法键,输入第二个数字25,按等号键,数码管显示37;按灭加法、等号键,输入第二个数据2,依次按等号键,减法键,数码管显示35;同上,按灭减法键、等号键,输入第三个数据7,依次按等号键,除法键,数码管显示5;按灭除法键、等号键,输入第四个数据99,依次按等号键,乘法键,数码管显示495,按灭乘法键、等号键,当前显示为99,依次按等号键、乘法键,数码管显示49005,同上进行若干次之后,结果溢出,LED0亮,同时数码管显示都为零。当输出为负数时,LED0灯变亮,同时数码管显示都为零。六实验结论 本实验基本实现了计算器的加减乘法运算功能,但是存在一个突出的缺陷,就是当输出结果时,必须先按等号键导通数据反馈,再按运算键选择输出结果。这与实际应用的计算器存在很大的差距。但是,本设计可以通过等号键实现运算对象和运算结果之间的切换。

简易计算器课程设计

基于单片机的计算器的设计 摘要:本设计是一个实现加减乘除的计算器,它的硬件主要由四部分构成,一个8051单片机芯片,两个八段共阴极数码管,一个4*4键盘,它可以实现一位数的加减乘除运算。 显示部分:采用LED动态显示。 按键部分:采用4*4键盘。采用软件识别键值,并执行相应的操作。 关键词:LED接口;键盘接口;8255A;汇编语言 一、概述 1.1设计要求及任务: (1)设计4*4的键盘,其中10个数字键0~9,其余六个键“+”、“—”、“*”、“/”、“=”、和“C”键; (2)设计两位LED接口电路; (3)实现1位数的简单运算 1.2设计原理 (1)LED显示器接口技术 LED动态显示接口技术 (2)键盘显示技术 逐行(逐列扫描法) 二、系统总体方案和硬件设计 2.1计算器总体思想 显示部分:采用LED动态显示。 按键部分:采用4*4键盘。采用软件识别键值,并执行相应的操作。 执行过程:开机显示零,等待键入数值,当键入数字,经通过数码管显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在数码管上输出运算结果。 图1 系统设计框图

2.2硬件的选择与连接 图二硬件连接总图 2.2.1硬件选择 (1)由于本设计比较简单,因此选用内部含有4KBE2PROM的89C51单片机作为系统的核心。 (2)扩展输入/输出端口 在扩展输入/输出端口时,要求输入口能够缓冲,,输出口能够锁存。常用小规模集成电路芯片74LS244或74LS245等扩展输入端口,用74LS273、74LS373、 74LS377扩展输出端口。这种扩展方法的特点是电路简单,但功能单一、灵活性差。因而常采用中规模的可编程并行接口芯片8255A扩展输入/输出端口。 (3)锁存电路采用74LS373 2.2.2接口设计 (1)单片机与8255A的接口设计 8255A中的数据总线缓冲器为三态双向数据缓冲存储器,用于将8255A的数据线 D0~D7和单片机的数据总线(P0口)连接,实现单片机和接口间的数据传送。 读写控制部件的接口设计 1、/CS为片选信号,接成低电平表示8255A 被选中。/CS与P2.7相连,用P2口的最高位控制8255A是否工作。即将P2.7控制为低电平。 2、RESET-复位信号,高电平有效,接在单片机的RST端。 3、/RD和/WR为读写控制信号,低电平有效。分别将两个端口接单片机的/RD和/WR 4、A1和A0-端口选择信号,分别与单片机的低两位地址线P1.1和P1.0相连。用于选择不同端口。采用74LS373三态锁存器,用于分离P0口第八位地址线,将它的Q0和Q1口接至8255A的地址输入端A0和A1。

简易计算器课程设计报告

《C++程序设计》(MFC)课程设计报告 设计题目:简易计算器 班级: 姓名: 学号: 指导教师: 时间:2010年6月30日

目录 1.设计目标…………………………………………………………… 2.设计内容…………………………………………………………… 3.设计思想…………………………………………………………… 4.设计说明…………………………………………………………… 5.设计步骤…………………………………………………………… 6.主要成员函数关系图……………………………………………… 7.程序主要代码……………………………………………………… 8. 难点分析…………………………………………………………… 9. 总结…………………………………………………………………

简易计算器(MFC) 1.设计目标 了解Windows应用程序的结构与DOS程序的不同,掌握应用MFC类库编写Windows应用程序的基本模式。 2.设计内容 以简易计算器为例,通过对简单应用软件计算器的设计,编制、调试,实现简单的加,减,乘,除等运算,以学习应用MFC库类编写对话框的原理,加深对C++类的学习及应用。 3. 设计思想 基于MFC库类对对话框界面的设计,通过创建类成员函数成员变量,编辑控件创建消息映射,调用消息函数完成数据的输入输出,实现计算功能。生成简单的应用软件。 4.设计说明 (1)包含的功能有:加、减、乘、除运算,开方、平方等功能。 (2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。 (3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。 (4)计算功能基本上是用系统内部函数。 (5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。 (6)“CE”按钮可以清除所有已输入的数据从头计算 5. 设计步骤 (1)选择FileNewlProject命令,选择MFC AppWizard(exe)创建Project名为Caa,按确定。在弹出界面选择创建对话框,单击Finish按钮 (2)在生成的设计界面中加入控件,得到计算器应用界面。如图:

硬件课程设计简易计算器设计

中国矿业大学徐海学院 单片机课程设计 姓名:XXX学号: 22090XXX 专业:计算机09-4班 题目:硬件课程设计 专题:简易计算器设计 指导教师: XXX 设计地点:嘉园时间: 2011-12-23 20011年12月

单片机课程设计任务书 专业年级计算机09-4 学号22090XXX 学生姓名XXX 任务下达日期:2011年12 月15日 设计日期:2011 年12 月15 日至2011 年12 月23日 设计题目:硬件课程设计 设计专题题目:简易计算器设计 设计主要内容和要求: 摘要: 利用单片机及外围接口电路(键盘接口和显示接口电路)设计制作一个计算器。 主要能实现 1.加法:能够计算四位以内的数的加法。 2减法:能计算四位数以内的减法。 3乘法:能够计算两位数以内的乘法。 4除法:能够计算四位数的乘法 5有清零功能,能随时对运算结果和数字输入进行清零。 关键词:单片机; 计算器 ; 加减乘除 指导教师签字:

目录 1 系统概述 (1) 1.1硬件知识概述 (1) 1.1.1 单片机 (1) 1.1.2 C语言 (1) 1.1.3 ISP (1) 1.2设计基本思想 (1) 2硬件电路设计 (2) 2.1 单片机最小系统 (2) 2.2键盘接口电路 (2) 2.3数码管显示电路 (3) 3 软件设计 (4) 3.1 复位电路 (4) 4.系统调试 (5) 4.1 软件流程图 (5) 4.1.1系统软件系统流程图 (5) 5.结束语 (6) 参考文献 (7) 附录 (8)

1 系统概述 1.1硬件知识概述 1.1.1 单片机 单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。 1.1.2 C语言 C语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出。1978后,C语言已先后被移植到大、中、小及微型机上。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。具体应用比如单片机以及嵌入式系统开发。 1.1.3 ISP ISP(In-System Programming)在系统可编程,指电路板上的空白器件可以编程写入最终用户代码,而不需要从电路板上取下器件,已经编程的器件也可以用ISP 方式擦除或再编程。本次课程设计便使用ISP 方式,直接将编写好的程序下载到连接好的单片机中进行调试 1.2设计基本思想 利用单片机及外围接口电路(键盘接口和显示接口电路)设计制作一个计算器,用四位一体数码管显示计算数值及结果。要求用Protel 画出系统的电路原理图,绘出程序流程图,并给出程序清单。 主要能实现 1.加法:能够计算四位以内的数的加法。 2减法:能计算四位数以内的减法。 3乘法:能够计算两位数以内的乘法。 4除法:能够计算四位数的乘法 5有清零功能,能随时对运算结果和数字输入进行清零。

相关文档
最新文档