




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
湖南文理学院芙蓉学院微机原理课程设计报告题 目 指针式的屏显电子钟 学生姓名 唐杰 学 号 10170106 专业班级 计算机科学技术1101班 指导老师 杨红杰 设计时间 2014.6.15 评阅意见:评定成绩: 指导老师签名: 年 月 日目 录一、 实验目的 .3二、 实验内容及要求3三、 课设基本思想3四、 程序流程图4五、 实验结果.6六、 程序源代码6七、 课设心得体会14八、 参考文献14一、实验目的1)学习系统驻留的方法。2)了解BIOS中时间参数的调用方法。3)了解屏幕画图的方法 对于本次应用的科目微机原理与接口技术来说,因为需要应用Win32 汇编语言技术来编写代码实现功能,所以要掌握这门语言。并且要用到Windows API 接口的许多函数,所以要掌握一部分函数的调用方法及实现的功能。检验和提高汇编语言程序设计能力,和微机原理与接口技术应用方面的分析问题与解决问题的能力,掌握32位汇编语言,完成软件的设计要求、编码和测试等。 二、实验内容及要求1)在屏幕上显示一个适当大小的椭圆形界面,椭圆形轨道上,均匀的分布着60个“点”,代表1秒60秒的位置,凡是5倍数的“点”,应当比其他的“点”稍大。2)以椭圆的中心为轴,画一条线代表“秒针”,采用定时中断的方式,每过一秒钟,秒钟移动一个位置,同时系统发出“嘀嗒”的声音,如果相应的“点”能改变颜色,则动感更强。3)定时源可以使用系统的定时源。4)按下“Esc”键之后,结束演示。三 课设基本思想 1)屏幕应设置为图形方式,采用模块化编程模式,主模块显示椭圆形表盘,并且处理时钟中断,每过一秒钟,转入一次子模块,子模块负责秒针移动的位置。2)在着手本课题设计之前,学习掌握真设计方法,掌握顺时针方向画圆的技术,灵活运用,就可以设计出秒针的移动程序。3)系统驻留的方法及BIOS中时间参数的调用方法见统驻留时间程序。屏幕设置为图形方式,采用模块化编程,主模块显示界面信息,每个子模块负责一个功能,然后通过模块调用来实现。 圆及画线子模块显示圆形表盘,及时、分、秒针,然后调用秒针移动子模块式电子钟能够运行。 动子模块中,首先通过cos和sin两个功能模块来确定秒针移动的度数,其次分别对秒、分、时进行擦除重写操作,再分别对表盘及圆心进行刷新,这样就实现了时、分、秒针的动态变化。四 程序流程图开始显示信息调用画线子模块画出时分秒针调用系统实时时钟显示模块Clk显示系统时间调用擦除、重写及角度确定子模块进行指针移动调用renovate及enovate进行表盘及圆心的刷新接收键盘字符是否为q结束YN五、实验结果六、程序源代码包含的库文件及数据段的定义如下:.386.model flat, stdcalloption casemap :none includewindows.inc ; Include 文件定义includeuser32.incincludelib user32.libincludekernel32.incincludelib kernel32.libincludeGdi32.incincludelib Gdi32.lib.data?hInstancedd?hWinMaindd?dwCenterXdd? ;圆心XdwCenterYdd?;圆心YdwRadiusdd?;半径ICO_MAINequ1000h ; Equ 等值定义ID_TIMERequ1.constszClassNamedb 指针式屏显电子钟,0(2)计算时钟的位置、大小的_CalcClockParam子程序:_CalcClockParamproclocalstRect:RECTinvokeGetClientRect,hWinMain,addr stRectmoveax,stRect.rightsubeax,stRect.left;eax = 宽度movecx,stRect.bottomsubecx,stRect.top;ecx = 高度.ifecx eax ; 比较客户区宽度和高度,以小的值作为时钟的直径movedx,eax ;高度 宽度subecx,eaxshrecx,1movdwCenterX,0movdwCenterY,ecx.elsemovedx,ecxsubeax,ecxshreax,1movdwCenterX,eaxmovdwCenterY,0.endifshredx,1movdwRadius,edxadddwCenterX,edxadddwCenterY,edxret_CalcClockParamendp(3)计算时钟圆周上某个角度对应的 X 坐标, X = 圆心X + Sin(角度) * 半径的子程序_CalcX:_dwPara180dw180_CalcXproc_dwDegree,_dwRadius ;输入参数是角度_dwDegree和半径_dwRadiuslocaldwReturnfilddwCenterXfild_dwDegreefldpifmul;角度*Pifild_dwPara180fdivpst(1),st;角度*Pi/180fsin;Sin(角度*Pi/180)fild_dwRadiusfmul;半径*Sin(角度*Pi/180)fadd;X+半径*Sin(角度*Pi/180)fistpdwReturnmoveax,dwReturnret_CalcXendp计算时钟圆周上某个角度对应的 Y 坐标,类似于上面计算X坐标,Y = 圆心Y - Cos(角度) * 半径(4)按照 _dwDegreeInc 的步进角度,画 _dwRadius 为半径的小圆点(刻度)程序:_DrawDotproc_hDC,_dwDegreeInc,_dwRadiuslocaldwNowDegree,dwRlocaldwX,dwYmovdwNowDegree,0moveax,dwRadiussubeax,10movdwR,eax.whiledwNowDegree =12subeax,12.endifmovecx,360/12mulecxmovzxecx,stTime.wMinuteshrecx,1addeax,ecxinvoke_DrawLine,_hDC,eax,30invokeGetStockObject,NULL_PENinvokeSelectObject,_hDC,eaxinvokeDeleteObject,eaxpopadret_ShowTimeendp(7)显示圆形表盘窗口的初始化过程:_ProcWinMainprocuses ebx edi esi hWnd,uMsg,wParam,lParamlocalstPS:PAINTSTRUCTmoveax,uMsg.ifeax =WM_TIMERinvokeInvalidateRect,hWnd,NULL,TRUEinvoke MessageBeep,-1.elseifeax =WM_PAINTinvokeBeginPaint,hWnd,addr stPSinvoke_ShowTime,hWnd,eaxinvokeEndPaint,hWnd,addr stPS.elseifeax =WM_CREATEinvokeSetTimer,hWnd,ID_TIMER,1000,NULL.elseifeax =WM_CLOSE |(eax = WM_KEYDOWN |eax = WM_KEYUP) & wParam = VK_ESCAPE)invokeKillTimer,hWnd,ID_TIMERinvokeDestroyWindow,hWinMaininvokePostQuitMessage,NULL.elseinvokeDefWindowProc,hWnd,uMsg,wParam,lParamret.endifxoreax,eaxret_ProcWinMainendp(8)程序的主体显示过程:_WinMainproclocalstWndClass:WNDCLASSEXlocalstMsg:MSGinvokeGetModuleHandle,NULLmovhInstance,eaxinvokeRtlZeroMemory,addr stWndClass,sizeof stWndClass ; 注册窗口类invokeLoadIcon,hInstance,ICO_MAINmovstWndClass.hIcon,eaxmovstWndClass.hIconSm,eaxinvokeLoadCursor,0,IDC_ARROWmovstWndClass.hCursor,eaxpushhInstancepopstWndClass.hInstancemovstWndClass.cbSize,sizeof WNDCLASSEXmovstWndClass.style,CS_HREDRAW or CS_VREDRAWmovstWndClass.lpfnWndProc,offset _ProcWinMainmovstWndClass.hbrBackground,COLOR_WINDOW + 1movstWndClass.lpszClassName,offset szClassNameinvokeRegisterClassEx,addr stWndClass; 建立并显示窗口 invokeCreateWindowEx,WS_EX_CLIENTEDGE, offset szClassName,offset szClassName, WS_OVERLAPPEDWINDOW, 100,100,250,270, NULL,NULL,hInstance,NULLmovhWinMain,eaxinvokeShowWindow,hWinMain,SW_SHOWNORMALinvokeUpdateWindow,hWinMain .whileTRUEinvokeGetMessage,addr stMsg,NULL,0,0.break.if eax= 0invokeTranslateMessage,addr stMsginvokeDispatchMessage,addr stMsg.endwret_WinMainendp七、课设心得体会 在这一周的课设里,完成课设题目的过程很是艰辛。在此之前,根本就不清楚用汇编居然也可以编出来像MFC那样的东西。在屏幕上显示出来。所以题目一出来就有点蒙了,不知道该从何着手。然后就按照题目在网上搜索相关的实现步骤及思想。这才发现自己懂得的东西真是少的可怜,竟然连这个都不了解的。 办法只有深入学习汇编语言,学习Win32程序,及相关函数。在平时上课的时候只能说是对汇编语言有了一定的了解,只懂了一点皮毛,所掌握的东西对这次实验来说可谓是杯水车薪,所以就需要自己去深入地研究,查资料。通过几天的设计,我在掌握了它的DOS和BIOS各个功能调用的同时,也学到了自己以前从没想过的东西,比如画点、画线、更延伸的画圆、颜色的设定、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职代会员工管理办法
- 上海高危产妇管理办法
- 行业系统消防管理办法
- 2025年HF-FB防弹玻璃项目发展计划
- 蚌埠艺术培训管理办法
- 营销费用兑付管理办法
- 行政平台维护管理办法
- 专利实施许可管理办法
- 磁器口古镇管理办法
- 精装房验收管理办法
- 药学综合知识与技能11讲解
- “匠心杯”班组长管理创新技能竞赛(决赛)考试题库500题(含答案)
- 森林防火林区道路建设基本要求
- 临床思维方法与医患沟通
- 幼儿居家饮食安全
- 《钢铁行业智能制造标准体系建设指南(2023版)》
- 设计材料与工艺课程 课件 第1章 产品设计材料与工艺概述
- 《SDH学习知识总结》课件
- GB/T 44841-2024非合金及低合金铸铁焊接工艺评定试验
- 2024年20kV及以下配电网工程劳务定额计价清单
- DB11T 1620-2019 建筑消防设施维修保养规程
评论
0/150
提交评论