文档库 最新最全的文档下载
当前位置:文档库 › c++课程设计报告(简易画图板)

c++课程设计报告(简易画图板)

c++课程设计报告(简易画图板)
c++课程设计报告(简易画图板)

软件工程

专业课程设计

(2012/2013学年第2学期)题目:简易画图板的设计与实现专业软件工程

学生姓名 HJC

指导教师lsw

指导单位电子与信息工程学院软件工程专业日期2013年7月18日

教师签名:

年月日

一、课题名称

设计题目:简易画图板的设计与实现

二、课题内容和要求

利用MFC完成画图板的基本功能。此程序将实现简单的绘图功能,包括点、直线、矩形、椭圆、三角形、任意多边形的绘制。并且能实现绘图的控制,包括画笔宽度,画笔样式和画笔颜色,画刷样式,画刷颜色和字体的设置,图形的保存和打开。

三、需求分析

1) 在单文档菜单中,在菜单行中可插入一个菜单项,命名为绘图工具,在下拉菜单中可分别设置绘制的图形形状,如直线、矩形及椭圆,再插入一个菜单项,命名为设定,可提供画笔、画刷的样式及颜色选择,还有字体的设置。如果不选择,则按默认的画笔,画刷字体来绘制图形。

2) 选择好图形后,通过鼠标可以绘制出相应的直线,矩形,椭圆,三角形及任意多边形,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形则绘制完毕。

3) 增添工具栏,设置绘制的图形形状,线色以及填充色,可更方便地选择相应的功能。

四、概要设计

1) 对需要用到的变量进行初始化。

2) 选择相应的图形之后就响应相应的消息处理函数,给m_shapeTyp e赋对应的值。选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。

3) 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。

4) 选择图形或其它属性,可进行下一次绘制。

开始

定义并初始化变shape

线色m_ncolor 填充

色m_fcolor 画笔

pen画刷brush绘图起

选择线宽

图1 程序流程图

五、详细设计

改变画笔属性

默认值(w=1)

改变画刷属性

默认值(黑色) 矩形

鼠标左键按下 响应函数OnLButtonDown() opoint =point

默认值(黑色) 直线

选择填充鼠标左键弹起响应函数OnLButtonUp()

刷新,得到图形 鼠标移动 响应函数OnMouseMove()epoint=point

响应OnPaint(),绘制图形 响应函数 OnEllipse() shape=3

改变画笔属性

响应函数 OnRect() shape=2

响应函数 OnLine() shape=1

椭圆

结束 选择线色

1)创建单文档

2) 编辑菜单

3)创建工具栏

4)在相应消息函数处添加代码,实现其功能

5)选择要绘制的图形

6)改变线宽

7)改变线色,画刷颜色等

8)改变图形样式,文字样式

9)绘制图形

10)关键代码

①任意多边形的绘制及填充:

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

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

CClientDC dc(this);

if (first)

{

newpoint[0] = newpoint[1] = point;

first = false;

}

else

{

newpoint[++count] = point;

if (count>=30)

{

//MessageBox("数组 CPoint newpoint[30] 下标越界!\a");

return;

}

dc.MoveTo(newpoint[count-1]);

dc.LineTo(newpoint[count]);

}

CView::OnLButtonDown(nFlags, point);

}

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

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

CClientDC dc(this);

dc.MoveTo(newpoint[count-1]);

dc.LineTo(newpoint[count]);

if (!move)

first = true;

CView::OnLButtonUp(nFlags, point);

}

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

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

CClientDC dc(this);

dc.MoveTo(newpoint[count]);

dc.LineTo(newpoint[0]);

dc.SelectStockObject(GRAY_BRUSH);

dc.Polygon(newpoint,count+1);

first = true;

move = false;

count = 1;

CView::OnLButtonDblClk(nFlags, point);

}

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

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

CClientDC dc(this);

if (nFlags == MK_LBUTTON)

{

move = true;

dc.SetROP2(R2_NOTXORPEN);

dc.MoveTo(newpoint[count-1]);

dc.LineTo(newpoint[count]);

newpoint[count] = point;

dc.MoveTo(newpoint[count-1]);

dc.LineTo(newpoint[count]);

}

CView::OnMouseMove(nFlags, point);

}

②设置程序图标:

HICON ico;

AfxGetApp()->LoadIcon(IDR_MAINFRAME);

(IDI_ICON1);

SetIcon(ico,true);

SetIcon(ico,false);

③工具栏的加载:

if

(!MY_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_LEFT | CBRS_GRIPPER | CBRS_TOOLT IPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

!MY_ToolBar.LoadToolBar(IDR_TOOLBAR))

{

TRACE0("未能创建工具栏\n");

return -1; // 未能创建

}

MY_ToolBar.EnableDocking(CBRS_ALIGN_ANY);

EnableDocking(CBRS_ALIGN_ANY);

DockControlBar(&MY_ToolBar);

④将位图图片分割加载为工具栏图标:

代码过于冗长,不便添加,详细可在程序中查看。

⑤状态栏显示鼠标坐标:

CStatusBar m_wndStatusBar;

首先以上定义必须是public。

m_sp.Format(_T("x=%d,y=%d"),point.x,point.y);

((CMainFrame *)GetParent())->m_wndStatusBar.SetWindowText(m_sp);

⑥文件操作(同时解决窗口变换时图形消失的现象):

CString FileName;

CMetaFileDC hdc;

void CDraw::OnFileSave()

{

CFileDialog file(TRUE);

if(file.DoModal()==IDOK)

{

FileName=file.GetPathName();

HMETAFILE hmetaFile;

hmetaFile=hdc.Close();

CopyMetaFile(hmetaFile,FileName/*("meta.wmf")*/);

hdc.Create();

DeleteMetaFile(hmetaFile);

}

}

void CDrawView::OnFileOpen()

{

// TODO: Add your command handler code here

CFileDialog file(TRUE);

if(file.DoModal()==IDOK)

{

FileName=file.GetPathName();

HMETAFILE hmetafile;

hmetafile=GetMetaFile(FileName);

hdc.PlayMetaFile(hmetafile);

DeleteMetaFile(hmetafile);

}

Invalidate();

void CDrawView::OnDraw(CDC* pDC)

{

// TODO: add draw code for native data here CDrawDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

HMETAFILE hmetafile;

hmetafile=hdc.Close();

pDC->PlayMetaFile(hmetafile);

hdc.Create();

hdc.PlayMetaFile(hmetafile);

DeleteMetaFile(hmetafile);

}

⑦文字的添加及字体的设定:

void CDrawBoardView::OnFontSet()

{

// TODO: 在此添加命令处理程序代码

CFont m_font;

int m_color;

CFontDialog dlg;

if(IDOK==dlg.DoModal())

{

if(m_font.m_hObject)

m_font.DeleteObject();

m_font.CreateFontIndirect(dlg.m_cf.lpLogFont);

m_color=dlg.m_cf.rgbColors;//dlg.m_cc.rgbResult;//dlg.m_cf.rgbColors;

}

CPaintDC dc(this);

dc.SetTextColor(m_color);

dc.SetBkMode(TRANSPARENT);

dc.SelectObject(&m_font);

}

if(m_shapeType==5)

{

CFontStyle dlg;

dlg.m_color =m_fontColor;

CString temp;

if(IDOK==dlg.DoModal())

{

UpdateData();

temp=dlg.m_word;

m_fontColor=dlg.m_color;

dc.SetTextColor(m_fontColor);

dc.SetBkMode(TRANSPARENT);

dc.SelectObject(&dlg.m_font);

hdc.SelectObject(&dlg.m_font);

hdc.SetTextColor(m_fontColor);

hdc.SetBkMode(TRANSPARENT);

dc.TextOut(point.x,point.y,temp);

hdc.TextOut(point.x,point.y,temp);

}

}

⑧简单图形的实现(如直线,矩形,椭圆等)

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

{

// TODO: 在此添加命令处理程序代码

m_oldPoint=point;

m_movepoint=point;

m_penStart=true;

CView::OnLButtonDown(nFlags, point);

}

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

Void CDrawBoardView::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_oldPoint);

dc.LineTo(point);

hdc.MoveTo(m_oldPoint);

hdc.LineTo(point);

break;

case 3: /*绘制矩形*/

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

hdc.Rectangle(CRect(m_oldPoint,point));

break;

case 4: /*绘制椭圆*/

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

hdc.Ellipse(CRect(m_oldPoint,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对象的参数,后者可以利用两个点来构造。

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

⑨不同类之间的数据共享:

if(IDOK==dlg.DoModal())

{

m_nLineStyle=dlg.m_linestyle;

str=dlg.m_linewidth;

i =_ttoi(str);//注意!!!可能出错

m_nLineWidth=i;

}

void CDrawBoardView::OnBrushStyleSet()

{

// TODO: 在此添加命令处理程序代码

CBrushStyle dlg;

dlg.m_color=m_bclr;

if(IDOK==dlg.DoModal())

{

m_nBrushStyle=dlg.m_nBrushStyle;

}

}

⑩组合框数据导入及获取

导入:

BOOL CLineStyle::OnInitDialog()

{

CDialogEx::OnInitDialog();

// TODO: 在此添加额外的初始化

((CComboBox*)(GetDlgItem(IDC_COMBO1)))->AddString(_T("1"));

((CComboBox*)(GetDlgItem(IDC_COMBO1)))->AddString(_T("2"));

((CComboBox*)(GetDlgItem(IDC_COMBO1)))->AddString(_T("3"));

((CComboBox*)(GetDlgItem(IDC_COMBO1)))->AddString(_T("4"));

((CComboBox*)(GetDlgItem(IDC_COMBO1)))->AddString(_T("5"));

((CComboBox*)(GetDlgItem(IDC_COMBO1)))->AddString(_T("11"));

((CComboBox*)(GetDlgItem(IDC_COMBO1)))->AddString(_T("21"));

((CComboBox*)(GetDlgItem(IDC_COMBO1)))->AddString(_T("31"));

((CComboBox*)(GetDlgItem(IDC_COMBO1)))->AddString(_T("41"));

((CComboBox*)(GetDlgItem(IDC_COMBO1)))->AddString(_T("51"));

//在第5项之后插入_T("8")

((CComboBox*)(GetDlgItem(IDC_COMBO1)))->InsertString(5,_T("8"));

//选择默认第一项

((CComboBox*)(GetDlgItem(IDC_COMBO1)))->SetCurSel(0);

return TRUE; // return TRUE unless you set the focus to a control

// 异常: OCX 属性页应返回 FALSE

}

获取:

void CLineStyle::OnCbnSelchangeCombo1()

{

// TODO: 在此添加控件通知处理程序代码

int nSel;

nSel =((CComboBox*)(GetDlgItem(IDC_COMBO1)))->GetCurSel();

// 根据选中项索引获取该项字符串

((CComboBox*)(GetDlgItem(IDC_COMBO1)))->GetLBText(nSel, m_linewidth);

int i=_ttoi(m_linewidth);

CDrawBoardView *pMain=(CDrawBoardView *)AfxGetApp()->m_pMainWnd;

pMain->m_nLineWidth=i;

Invalidate();

}

六、测试数据及其结果分析

七、调试过程中的主要问题

在编程时遇到了图像在变换大小时,原来的图形会消失,后来通过上网查看相关资料,这里涉及的一个重绘问题。经过多次修改,添加代码,才得以解决。对于CView视图,经过查询主要是负责内存数据与用户的交互。包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应)。最重要的是OnDraw(重画窗口),通常用CWnd::Invalidate()来启动它。另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。

在编程时多边形的实现也是一个很大的问题,后来我们通过定义一个点的数组,以lineto,moveto,Polygon函数的调用实现了绘制多边形的问题。

八、程序设计总结

这次课程设计我们成功的完成了。通过本次课程设计,我完成了用移动鼠标对直线,矩形,椭圆,三角形,任意多边形的简单绘制工具的的制作,其中完成了绘图形状的选择,画笔颜色,画笔样式,画刷颜色,画刷样式及字体的设置,画图文件的保存和打开,背景网格的实现。这次课程设计虽只是做了一个极其简单的绘图工具的制作,但也让我们从设计者的角度看到了设计程序以及电脑软件工具的实质及难度,看似一个很简单的工具,其

制作的背后工作是很大的,不光是图标,按钮的设置,程序的编写,代码的实现都是很精密且不容许一点错误的工作。平时我们使用的很顺手的一个小小工具,其开发的各项小号都不可小觑,由此,我们需要学的东西还太多太多。

单片机电子时钟课程设计报告报告

目录 1、引言 (3) 2、总体设计 (4) 3、详细设计 (5) 3.1硬件设计 (5) 3.2软件设计 (10) 4、实验结果分析 (26) 5、心得体会 (27) 6、参考文献 (27)

摘要 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。 关键词:单片机AT89C51

1.引言 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。 目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路装化等几个方面发展。下面是单片机的主要发展趋势。单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。

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语言

《数字逻辑》数字时钟课程设计报告资料

《数字逻辑》课程设计报告 题目数字时钟 学院(部)信息工程学院 专业计算机科学与技术 班级计算机一班 学生姓名 学号20132402 6 月29 日至 7 月 3 日共1 周 指导教师(签字)

题目 一.摘要: 钟表的数字化给人们的生产生活带来了极大的方便,并且极大的扩展了钟表原先的报时功能。诸如定时自动报有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常警、学校的按时自动打铃、时间程序自动控制、定时广播、定时启闭路灯,甚至各种定时电气的自启用等。所现实的意义。本次数电课设我组设计的数字时钟是由石英晶体振荡器、分频器、计数器、译码器、显示器、校时电路、报时电路和计时电路组成,石英晶体振荡器产生的信号经过分频器作为秒脉冲,秒脉冲送入计数器计数,计数结果通过“时”、“分”、“秒”译码器在七段显示器上显示时间。 二.关键词: 校时计时报时分频石英晶体振荡器 三.技术要求: 1、有“时”、“分”、“秒”(23小时59分59秒)显示且有校时功能; 2、有计时功能,时钟不会在计时的时候停下。计时范围是0~99秒; 3、有闹铃功能,闹铃响的时间由使用者自己设置,闹铃时间至少一分钟; 4、要在七段显示器(共阴极6片)显示时间; 5、电子钟要准确正常地工作。 四、方案论证与选择: 钟表的是长期使用的器件,误差容易积累由此增大。所以要求分频器产生的秒脉冲要极其准确。而石英晶体产生的信号是非常稳定的,所以我们使用石英晶体产生的信号经过分频电路作为秒脉冲。秒脉冲信号经过6级计数器,分别得到“秒”、“分”、“时”的个位、十位的计时。由实际的要求,“秒”、“分”计数器为60进制的计数器,小时为24进制。由于74LS160十进制加法计数器易于理解使用,我们在设计各个计数器时都是由采用74LS160芯片级联构成。在计时部分,最小单位是0.01s,我们采用555多谐振荡器产生100HZ的信号作为秒脉冲进入一个4级计数器,计时范围是0~99秒。石英晶体

JAVA简单画板程序设计实验报告

JAVA期末画板实验报告 课程题目: 运用JAVA语言编写一个画板程序,这个画板要有画图,特殊图形绘制,颜色改变,画笔大小改变等功能。 设计思想: 1.进行界面设计 2.进行算法实现 3.运行调试 4.总结问题 设计过程: A.界面设计 新建一个Jframe容器,然后定义一个panel(Panel convas2),convas2是工具栏。用borderlayout布置容器的边框布局,将工具栏放在NORTH部分。完成界面设计。 add(canvas2,BorderLayout.NORTH); Panel canvas2 = new Panel(); 添加工具按键 Panel canvas2 = new Panel(); Button btn1 = new Button("直线"); Button btn2 = new Button("椭圆"); Button btn3 = new Button("矩形"); Button btn4 = new Button("清除"); Button btn5 = new Button("画笔"); Button btn6 = new Button("橡皮"); Choice choice = new Choice(); Choice choice1 = new Choice(); canvas2.add(choice); canvas2.add(choice1);

canvas2.add(btn1); canvas2.add(btn2); canvas2.add(btn3); canvas2.add(btn4); canvas2.add(btn5); canvas2.add(btn6); 在工具表中,有两个下拉菜单,分别收录画笔的大小和颜色。1.画笔的大小: choice1.add("1"); choice1.add("3"); choice1.add("5"); choice1.add("7"); choice1.add("9"); 2.画笔颜色 choice.add("黑色"); choice.add("蓝色"); choice.add("红色"); choice.add("黄色"); choice.add("绿色"); 3展示画板

简单画图程序-课程设计

简单画图程序-课程设计 目录 1. 基本功能描 述 ............................................................. 1 2. 设计思路 ................................................................. 1 3. 软件设 计 (3) 3.1 设计步 骤 (3) 3.2 界面设 计 (6) 3.3 关键功能的实 现 ...................................................... 7 4. 结论与心 得体会 ........................................................... 8 5. 参考文 献 ................................................................. 9 6. 思考 题 (9) 7. 附 录 ..................................................................... 9 7.1 调试报 告 (9)

7.2 测试结 果 (10) 7.3 关键源代 码 (1) 武汉理工大学《专业课程设计2(面向对象程序设计)》课程设计说明书 简单画图程序 1. 基本功能描述 1) 在菜单处的有相应的菜单项,可以选择绘制的图形形状,如直线、矩形及椭圆,可 -5可供选择,还可以选择线色以及填充色,通过弹出的颜色对话框选择以选择线宽,有1 需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔以及画刷来绘制选择的图形。 2) 选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,鼠标弹起,此图形则绘制完毕。 3) 增添了工具栏,有相应的选择项,可以更方便地实现相应的功能。 2. 设计思路 1) 对需要用到的变量进行初始化。 2) 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。选择不同的线宽,线色与填充色,则改变画笔和画刷的属性。 3) 鼠标的按下响应LButtonDown(),定义起点的坐标,鼠标的拖动响应MouseMove()改变终点的坐标,鼠标的弹起响应LButtonUp(),刷新,得到绘制图形。

单片机课程设计--简易电子钟.doc

单片机课程设计报告设计课题:简易电子时钟的设计 专业班级:07通信1班 学生姓名:黎捐 学号:0710618134 指导教师:曾繁政 设计时间:2010.11.5—2010.12.20

一、设计任务与要求 (1)设计任务: 利用单片机设计并制作简易的电子时钟,电路组成框图如图所示。 (2)(2) 设计要求:1)制作完成简易的电子时钟,时间可调整。 2)有闹钟功能。 二、方案设计与论证 简易电子时钟电路系统由主体电路和扩展功能电路两主题组成,总体功能原理是以STC89C52单片机为主要的控制核心,通过外接4个独立式键盘作为控制信号源,八个七段数码管作为显示器件,蜂鸣器作为定时器件,单片机实时的去执行相应的功能。在数码管上显示出来,此时通过不同的按键来观看和调节各种数据。CPU 控制原理图如图1所示。 图1. CPU 控制原理图 三、硬件系统的设计 3.1 STC89C52控制模块 STC89C52是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O )端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,STC89C51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash 存储器结合在一起,特别是可反复擦写的Flash 存储器可有效地降低开发成本。 MCS-52单片机内部结构 8052单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明: 中央处理器: 中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU 负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。 数据存储器(RAM): 8052内部有128个8位用户数据存储单元和128 个专用寄存器单元,它们是统一编 时间显示显示 主控器(51单片机) 时间 调整 声音报 时 (选做)

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

课程设计报告 课程名称计算机图形学 课题名称交互式绘图系统 专业计算机科学与技术 班级 学号 姓名 指导教师刘长松曹燚 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); }

JAVA课程设计画图软件

package hh; import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import java.awt.geom.*; class Point { int x,y; Color col; int tool; int boarder; Point(int x, int y, Color col, int tool, int boarder) { this.x = x; this.y = y; this.col = col; this.tool = tool; this.boarder = boarder; } } /* *BasicStroke *Choice *validate(); **/ class paintboard extends Frame implements ActionListener, MouseMotionListener, MouseListener, ItemListener { int xx0=0,yy0=0; int xx1=0,yy1=0; int type=6; int x = -1, y = -1; int con = 1; //画笔大小 int Econ = 5; //橡皮大小 int toolFlag = 0; //toolFlag:工具标记 //toolFlag工具对应表: //(0--画笔);(1--橡皮);(2--清除);

//(3--直线);(4--圆);(5--矩形); Color c = new Color(0,0,0); //画笔颜色 BasicStroke size = new BasicStroke (con,BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL);//画笔粗细 Point cutflag = new Point(-1, -1, c, 6, con);//截断标志 Vector paintInfo = null;//点信息向量组 int n = 1; // *工具面板--画笔,直线,圆,矩形,多边形,橡皮,清除*/ Panel toolPanel; Button eraser, drLine,drCircle,drRect; Button clear ,pen; Choice ColChoice,SizeChoice,EraserChoice; Button colchooser; Label 颜色,大小B,大小E; paintboard(String s)//构造函数 { super(s); addMouseMotionListener(this); addMouseListener(this); paintInfo = new Vector(); /*各工具按钮及选择项*/ //颜色选择 ColChoice = new Choice(); ColChoice.add("黑色"); ColChoice.add("红色"); ColChoice.add("蓝色"); ColChoice.add("绿色"); ColChoice.addItemListener(this); //画笔大小选择 SizeChoice = new Choice(); SizeChoice.add("1"); SizeChoice.add("3"); SizeChoice.add("5"); SizeChoice.add("7"); SizeChoice.add("9"); SizeChoice.addItemListener(this); //橡皮大小选择 EraserChoice = new Choice();

定时闹钟设计课程设计报告

定时闹钟设计 摘要: 本设计目的是利用单片机设计制作一个简易的定时闹铃时钟,可以放在宿舍或教室使用,在夜晚或黑暗的场合也可以使用。可以设置现在的时间以及闹铃的时间并且显示出来,若时间到则发出一阵声响。 本次设计的定时闹钟在硬件方面就采用了AT89C52芯片,用6位LED数码管进行显示。LED用P0口进行驱动,采用的是动态扫描显示,能够比较准确显示时时—分分—秒秒。通过五个功能按键可以实现对时间的修改、定时和闹铃终止,闹钟设置的时间到时蜂鸣器可以发出声响。在软件方面用C51编程。整个定时闹钟系统能完成时间的显示,调时和设置闹钟、停止响铃等功能,并经过系统仿真后得到了正确的结果。 关键词:定时闹钟;蜂鸣器;AT89C52;74HC245;

目录

第1章绪论 设计目的 本次课程设计的主题是定时闹钟,其基础部分是一个数字钟。电路系统由秒信号发生器、“时、分、秒”计数器、显示器组成。其中秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,这里用51单片机的定时器来实现。利用定时器获得每一秒的时刻,然后在程序中,我们就可以给秒进行逐秒赋值,满60秒则进位为1分,满60分则进位为1小时,满24小时则时间重置实现一天24小时的循环。译码显示电路将“时”、“分”、“秒”计数器的输出状态送到七段显示译码器译码,通过一个六位八段数码管显示出来。 这里利用51单片机的相关知识,来实现电子闹钟的相关功能。实验使用了 AT89C52、74HC245等芯片,通过单片机的P0、P3管脚来驱动数码管显示出相应的时刻。本文将讲述AT89C52、74HC245等芯片的基本功能原理,并重点介绍该电子闹钟的设计。 设计要求和任务 使用6位七段LED显示器来显示现在的时间;显示格式为“时时分分秒秒”;具有4个按键来做功能设置,可以设置现在的时间及显示闹铃设置时间;时间到则发出一阵声响,可通过按键复位;对单片机系统设计的过程进行总结,认真书写课程设计报告并按时上交。 利用51单片机结合七段LED显示器设计一个简易的定时闹铃时钟,可以放在宿舍或教室使用,由于用七段LED显示器显示数据,在夜晚或黑暗的场合也可以使用。可以设置现在的时间及显示闹铃设置时间,若时间到则发出一阵声响。 论文主要内容 论文分别叙述从硬件和软件上实现该设计的过程。第2章为总体设计方案。第3章主要介绍设计实现需要解决的硬件问题。依次介绍所使用的各种硬件的使用方法,并附上仿真电路图和文字说明。第4章从软件的角度说明实现该设计需要解决的问题。

画图工具可行性报告

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类,它的功能让用户画出更好的图形。

数字电子钟课程设计实验报告

中北大学 信息与通信工程学院 通信工程专业 《电子线路及系统》课程设计任务书2016/2017 学年第一学期 学生姓名:张涛学号: 李子鹏学号: 课程设计题目:数字电子钟的设计 起迄日期:2017年1月4日~2017年7月10日 课程设计地点:科学楼 指导教师:姚爱琴 2017年月日 课程设计任务书

中北大学 信息与通信工程学院 通信工程专业 《电子线路及系统》课程设计开题报告2016/2017 学年第一学期 题目:数字电子钟的设计 学生姓名:张涛学号: 李子鹏学号:

指导教师:姚爱琴 2017 年 1 月 6 日 中北大学 信息与通信工程学院 通信工程专业 《电子线路及系统》课程设计说明书2016/2017 学年第二学期 题目:数字电子钟的设计 学生姓名:张涛学号: 李子鹏学号: 指导教师:姚爱琴 2017 年月日

目录 1 引言 (6) 2 数字电子钟设计方案 (6) 2.1 数字计时器的设计思想 (6) 2.2数字电路设计及元器件参数选择 (6) 2.2.2 时、分、秒计数器 (7) 2.2.3 计数显示电路 (8) 2.2.5 整点报时电路 (10) 2.2.6 总体电路 (10) 2.3 安装与调试 (11) 2.3.1 数字电子钟PCB图 (11) 3 设计单元原理说明 (11) 3.1 555定时器原理 (12) 3.2 计数器原理 (12) 3.3 译码和数码显示电路原理 (12) 3.4 校时电路原理 (12) 4 心得与体会 (12) 1 引言 数字钟是一种用数字电子技术实现时,分,秒计时的装置,具有较高的准确性和直观性等各方面的优势,而得到广泛的应用。此次设计数字电子钟是为了了解数字钟的原理,在设计数字电子钟的过程中,用数字电子技术的理论和制作实践相结合,进一步加深数字电子技术课程知识的理解和应用,同时学会使用Multisim电子设计软件。 2数字电子钟设计方案 2.1 数字计时器的设计思想 要想构成数字钟,首先应选择一个脉冲源——能自动地产生稳定的标准时间脉冲信号。而脉冲源产生的脉冲信号地频率较高,因此,需要进行分频,使得高频脉冲信号变成适合于计时的低频脉冲信号,即“秒脉冲信号”(频率为1Hz)。经过分频器输出的秒脉冲信号到计数器中进行计数。由于计时的规律是:60秒=1分,60分=1小时,24小时=1天,就需要分别设计60进制,24进制计数器,并发出驱动信号。各计数器输出信号经译码器、驱动器到数字显示器,是“时”、“分”、“秒”得以数字显示出来。 值得注意的是:任何记时装置都有误差,因此应考虑校准时间电路。校时电路一般

软件工程JAVA课程设计报告

西安科技大学 软件工程课程设计报告 题目:画图板应用程序开发 班级 学号: 姓名: 2010年12月

目录 1 绪论 (3) 2 可行性研究报告 (3) 3 需求分析报告 (4) 4 总体设计报告 (7) 5 详细设计报告 (8) 6 系统实现报告 (12) 7软件测试报告 (32) 参考文献

1、绪论 1.1 目的和意义 用过微软Windows操作系统的人一定都对Windows自带的画图板非常熟悉了。同图像处理软件界的老大Photoshop比起来,它虽然不及Photoshop的功能强大,内容丰富,但是作为Windows一直以来都内带的附件程序,它具有小巧玲珑,简单实用等其他绘图软件所不具备的优点。同时它的风格也被许多其他的绘图软件所仿效。 作为一个软件工程专业的学生自己也想亲自动手编写一个属于自己的,简单实用的绘图程序。通过本次课程设计可以增加对整个流程的熟悉以及对程序组织结构和框架的理解,对以后开发和设计更大更复杂的程序无疑有更大的帮助。 任务 书写开发文档,分析和制定整个开发过程,然后开发一个自己的画图板应用程序。 2、可行性研究报告 进行可行性研究的方法 本应用程序可行性研究是通过对比windows自带的画板程序的方式进行的,对Windows 里面的画板进行分析研究,分析得出本应用软件应该实现的基本功能,并根据自己的能力进行了功能上的增加。 评价尺度 本软件在评价时应从以下几个方面进行分析: 开发时间应尽量短; 功能实现的代码应尽量少; 代码执行效率要高; 有较强的容错能力; 技术方面的可行性 系统现阶段的发展过程中,利用现有人力和物力是完全具备的能力开发出来的,作为阶段性产品,日后的发展空间大,实现方法逐步简单容易,所以画图板应用程序在技术上是完全可行的。 a.在当前的限制条件下,该程序的功能目标能达到; b.利用现有的技术,该程序的功能可以实现; c.由于能力的不足,现阶段的功能不够完美,还可以在日后完善; d.在规定的限期内,本程序能够完成; 法律方面的可行性 本程序不会在后台扫描用户的磁盘文件; 本程序为完全免费,没有任何盈利行为,而且仅在内部流通,不予推广,所以不涉及浸犯微软版权的行为,所以本软件完全合法。 软件服务条款要与中华人民共和国的法律解释相一致,一致同意服从高等法院所有管辖。如发生软件服务条款与中华人民共和国法律相抵触时,则这些条款将完全按法律规定重新解释,而其它条款则依旧保持对用户产生法律效力和影响。 经济可行行

EDA数字时钟课程设计报告

EDA技术及应用课程设计说明书 2013 届电子信息工程专业班级 题目数字时钟 学号 姓名 指导教师 二О一五年月日

一、基本原理 一个完整的时钟应由三部分组成:秒脉冲发生电路、计数显示部分和时钟调整部分。 秒脉冲发生电路原理:一个时钟的准确与否主要取决于秒脉冲的精确度。为了保证计时准确我们对系统时钟48MHz进行了48000000分频,从而得到1Hz的秒脉冲。 计数显示部分原理:显示部分是用数码管LED实现的,这里使用的是共阳极的数码管如图所示8个数码管,其中左边两个数码管用来显示时的个位和十位、中间的显示分的个位和十位、最右边两个显示分的个位和十位。 时钟调整部分原理:校时电路里定义key[0]、key[1]和k2、k3分别用于控制时钟的计时开始、清零和调整功能中的时的加1、分的加1处理,从而完成对现在的时间调整。本实验电路校时电路在此完成了暂停、清零、时调整和分调整。

二、硬件设计 芯片图: 图1 数字时钟原理图 程序的调试工作都是在电脑上完成的,通过程序的输入、原理图的建立、管脚分配、编译、仿真、再下载到芯片进行运行。

电路中采用共阳极连接的七段数码管,通过程序的控制扫描驱动来显示时钟的时-分-秒。

程序中的按键设定为K1暂停、K2清零、K3调时、K4调分元件清单: 三、数字时钟的Verilog实现 管脚的分配: 程序: module clock(clk,s1,,s2,key,dig,seg); //模块名clock input clk,s1,s2; //输入时钟 input[1:0]key; //输入按键 output[7:0]dig; //数码管选择输出引脚

简易时钟课程设计报告

目录 一、系统总体方案选择与说明 (1) 二、设计框图与工作原理 (2) 2.1设计框图 (2) 2.2工作原理 (2) 三、各单元硬件设计说明及计算方法3 5四、软件设计与说明 ............................................................................................................ 4.1程序设计流程图 (5) 4.2程序设计步骤 (6) 4.2.1延时程序 (6) 4.2.2主程序的设计 (7) 4.2.3中断服务程序的设计 (7) 4.2.4显示控制子程序的设计 (7) 4.2.5按键控制程序的设计 (7) 五、调试结果及说明 (8) 5.1软件调试 (8) 5.2硬件调试 (9) 六、各元件的使用说明 (10) 6.1AT89C51 芯片 (10) 6.2数码管 (10) 6.3按键 (10) 七、总结 (11) 12八、参考文献 ...................................................................................................................... 九、附录 (13) 13附录 A ............................................................................................................................... 附录 B (14)

Java画图板课程设计报告

目录 1 引言................................................................................................... 错误!未定义书签。 课程设计选题 .................................................................................. 错误!未定义书签。 课程设计的目的 .............................................................................. 错误!未定义书签。 本选题的设计背景.......................................................................... 错误!未定义书签。 2 需求分析 .............................................................................................. 错误!未定义书签。 功能需求......................................................................................... 错误!未定义书签。 软件开发运行环境........................................................................ 错误!未定义书签。 3 总体设计 .............................................................................................. 错误!未定义书签。 软件结构设计 ................................................................................ 错误!未定义书签。 结构设计................................................................................. 错误!未定义书签。 软件功能模块及主要类设计 ......................................................... 错误!未定义书签。 功能描述 ................................................................................... 错误!未定义书签。 总体结构图............................................................................... 错误!未定义书签。 主要类设计............................................................................... 错误!未定义书签。 4 详细设计与实现.................................................................................. 错误!未定义书签。 主界面............................................................................................. 错误!未定义书签。 主界面功能设计....................................................................... 错误!未定义书签。 主界面设计............................................................................... 错误!未定义书签。 主界面主要代码....................................................................... 错误!未定义书签。 菜单栏............................................................................................. 错误!未定义书签。 菜单栏功能设计....................................................................... 错误!未定义书签。 菜单栏界面设计....................................................................... 错误!未定义书签。 菜单栏主要代码....................................................................... 错误!未定义书签。 工具栏............................................................................................. 错误!未定义书签。 工具栏功能设计....................................................................... 错误!未定义书签。 工具栏界面设计....................................................................... 错误!未定义书签。 工具栏主要代码....................................................................... 错误!未定义书签。

数字时钟课程设计报告

《电子线路课程设计报告》 系另 1」: 机电与自动化学院 专业班级:电气及自动化技术1001 学生姓名:陈星涯 指导教师:梁宗善 i=r (课程设计时 间: 2012年1月3日——2012年1月13日) 华中科技大学武昌分校 1.课程设计目的................................................. 3页 2.课程设计题目描述和要求....................................... 3页 2.1课程设计题目............................................. 3页

2.2课程设计要求............................................. 3页 3. ......................................................................................................... 比较和选定设计的系统方案.................................................... 4页 3.1数字钟的构成............................................. 4页 4.单元电路设计及工作原理....................................... 5页 4.1时基电路................................................. 5页 a. 多谐振荡器的工作原理................................... 5页 4.2计数器................................................... 7页 a.中规模计数器组件介绍.................................. 7页 b.60 进制计数器 .......................................... 8页 C.12 翻1计数器........................................... 9页 4.3译码器................................................... 10页 4.4显示器................................................... 10页 4.5校时电路................................................. 11页 4.6定时控制电路............................................. 12页 4.7仿广播电台正点报时电路................................... 13页 5.调试过程及分析............................................... 14页 5.1显示器故障排查........................................... 14页 5.2计数器调试及分析......................................... 15页 5.3校时电路的调试........................................... 16页 5.4增加抗干扰电路........................................... 16页 5.5闹时电路的调试........................................... 17页 5.6仿广播电台整点报时电路调试............................... 17页 6.课程设计总结................................................. 17页 7.参考文献..................................................... 19页 8.附件一:电子时钟主体电路电路图............................... 20页 9.附件二:扩展电路电路图....................................... 21页 10.附件三:系统所需元器件清单 ................................ 22页 11.课程设计成绩.............................................. 23页 一、设计任务与目的 数字时钟是一种利用数字电路技术实现时、分、秒计时的装置,与传统的

相关文档
相关文档 最新文档