霓虹灯的模拟显示设计_第1页
霓虹灯的模拟显示设计_第2页
霓虹灯的模拟显示设计_第3页
霓虹灯的模拟显示设计_第4页
霓虹灯的模拟显示设计_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学号0121011360219课程设计题目“霓虹灯”的模拟显示学院自动化学院专业自动化专业班级自动化1002班姓名李志强指导教师张素文2013年01月10日课程设计任务书学生姓名李志强专业班级自动化1002班指导教师张素文工作单位自动化学院题目“霓虹灯”的模拟显示初始条件在屏幕中央以字符显示一矩型,并以及将矩型内部交叉填满;然后再按相反的次序消失。按Q退出程序。要求完成的主要任务(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)设计任务及要求分析(2)方案比较及认证说明(3)系统原理阐述(4)硬件设计课题需要说明硬件原理,电路图,采用器件的功能说明(5)软件设计课题需要说明软件思想,流程图,源程序及程序注释(6)调试记录及结果分析(7)总结(8)参考资料(9)附录芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图时间安排1月2日1月3日收集资料,方案选择1月4日1月7日整体流程,程序细节1月8日1月10日调试程序,报告撰写1月10交设计报告,程序演示,答辩指导教师签名年月日系主任(或责任教师)签名年月目录摘要11设计意义与要求211设计意义212设计要求22方案论证321方案比较322方案选择53系统原理阐述631设计思路632程序中的BIOS和DOS功能调用6321BIOS功能调用6322DOS功能调用733程序模块74软件思想与流程图1041程序功能描述1042流程图105调试记录及结果分析1551调试过程1552结果记录1553调试中出现的问题及解决方法176心得体会187参考文献198附录源程序清单20摘要本次微机原理与接口技术课程设计是要设计一个“霓虹灯”的模拟显示程序。本次课程设计用的是8086最小系统,在MF2KI汇编集成环境下完成。该课程的总体任务是一个接一个的执行的,属于单任务顺序结构,所以该任务主要用汇编语言进行顺序和循环的逻辑结构编写。首先根据课设题目的要求找出需要调用的各个DOS和BIOS调用,然后对程序中最重要的DOS调用和BIOS调用进行的方案比较。之后根据课设题目要求设计整个顺序结构的程序框架,然后运用模块化的设计思想,将题设要求分成几个小的模块,一段一段的设计程序。然后分段对程序进行编写和调试,当各个模块调试好后,再整体调试。最后观察整体程序结构的现象,进行总结并对某些部分进行完善。在本课设里,我在完成任务之外,在程序的开始加了一个欢迎界面,这样在程序结果的演示中给人一种美感。关键词“霓虹灯”模拟、DOS调用、BIOS调用“霓虹灯”的模拟显示程序设计1设计意义与要求11设计意义通过课程设计,能够对所学知识有更进一步的理解,并能掌握学习理论时没有注意的细节。调试程序,排除故障有助于提高分析问题、解决问题的能力。课程设计中碰到的挫折,有助于养成良好的学习习惯、严谨的工作作风。通过此课程设计的汇编语言练习,可以熟悉汇编语言的寻址方式和指令系统,BIOS和DOS系统功能调用,程序设计方法并熟悉汇编的编程环境。12设计要求设计内容采用汇编语言设计一个在屏幕中央以字符显示一矩形,并以屏幕初始化或下卷MOVAL,25下卷行数MOVBH,0F0H卷入行属性MOVCH,0左上角行号MOVCL,0左上角列号MOVDH,24右下角行号MOVDL,79右下角列号INT10HPOPDIPOPSIPOPDXPOPCXPOPBXPOPAXRETCLEARENDP在本程序中,使用的寄存器较多,操作较为复杂。但是清屏时可以将DOS窗口背景改为白色,这便于截图与报告的撰写。方案二运用BIOS功能的6号调用,程序设计如下CLEARPROCNEARMOVAH,06HMOVAL,0MOVCH,0MOVCL,0MOVDH,24MOVDL,79MOVBH,07HINT10HRETCLEARENDP这个程序操作起来相对简单,但是只能让屏幕背景为黑色。在设计过程中字符的显示有2中不同的方式。方案一运用DOS功能的2号调用,程序的设计如下MAROW,COLUMEMA是个宏定义光标位置MOVAH,02HMOVDL,INT21H在本程序中,它无法设置字符的属性,同时还会在下个坐标位置显示光标,影响光看者的视觉享受。但是显示方式很简洁很直观很容易记忆理解,若要配合背景为白色,选择该方案为好。方案二运用BIOS功能的9号调用,程序设计如下CALLCURSOR;调用光标设置子程序MOVAL,23HMOVBL,0BHPUSHCX;CX进栈MOVCX,1MOVAH,09HINT10HPOPCX;CX出栈这个程序它的功能更加完备,更能实现霓虹灯的颜色变化显示效果,但是设计起来占用寄存器较多,略微复杂点,其设置的背景只能为黑色。22方案选择从上面的分析比较,清屏函数方案一和显示字符方案一搭配起来的可行性和实际达到的效果更好。所以选择清屏函数方案一和显示字符方案一来实现霓虹灯的功能3系统原理阐述31设计思路1执行程序时显示一个欢迎界面,提示按大写S键进入显示界面2执行程序这部分程序运用的主要原理是先在屏幕上显示个字符()号,再执行循环,语句显示一行列()字符。利用像这样的原理实现矩形框的完成和内部的填充。至于反向消失部分,用空格代替想要显示的字符,反向执行循环,就可以实现字符的消失了。3霓虹灯显示完毕,提示输入Q退出界面。32程序中的BIOS和DOS功能调用321BIOS功能调用1设置光标位置(2号功能)入口参数AH2(功能号),BH页号,DH行号,DL列号。出口参数无。根据DX确定了光标位置。2初始窗口或向上滚动(6号功能)入口参数AH6,AL上滚行数,CX上滚窗口左上角的行、列号。DX上滚窗口右下角的行、列号。BH空白行的属性。出口参数无。当滚动后,底部为空白输入行3初始窗口或向下滚动(7号功能)入口参数AH7,AL下滚行数,CX下滚窗口左上角的行、列号。DX下滚窗口右下角的行、列号。BH空白行的属性。出口参数无。当滚动后,顶部为空白输入行。4在当前光标位置写字符和属性(9号功能)入口参数AH9,BH页号,AL字符的ASCII码,BL字符属性,CX写入字符数。出口参数无。322DOS功能调用1键盘输入一个字符并回显(1号功能)输入参数无,返回结果AL字符2显示字符串,光标跟谁字符串移动(9号功能)DSDX待显字符串的首地址字符串以结尾。3显示一个字符,光标跟随字符移动(2号功能)DL待显字符的ASCII码,无返回结果。33程序模块1宏定义光标位置MAMACROOP1,OP2宏定义光标位置PUSHAX现场保护PUSHBXMOVAH,02HMOVBH,0页号MOVDH,OP1行号MOVDL,OP2列号INT10HPOPBXPOPAXENDM这个子程序的重点是设计光标所在页、行、列及其现场保护。使用了BIOS功能调用设置光标的位置。2清屏子程序CLEARPROCNEAR清屏PUSHAXPUSHBXPUSHCXPUSHDXPUSHSIPUSHDIMOVAH,07屏幕初始化或下卷MOVAL,25下卷行数MOVBH,0F0H卷入行属性MOVCH,0左上角行号MOVCL,0左上角列号MOVDH,24右下角行号MOVDL,79右下角列号INT10HPOPDIPOPSIPOPDXPOPCXPOPBXPOPAXRETCLEARENDP初始化窗口,AL0表示全屏滚动,CH滚动窗口左上角行号,CL滚动窗口左上角列号,DH滚动窗口右下角行号,DL滚动窗口右下角列号,BH滚入行的属性。3光标的设置CURSORPROCNEAR光标的设置MOVAH,02HMOVBH,0MOVDH,ROW设置行MOVDL,COLUME设置列INT10HRETCURSORENDP光标位置的设置,这个子程序与宏定义光标位置类似只是运用有些不同。4延时子程序DELAY1PROCNEARPUSHCXPUSHDXMOVDX,100D3MOVCX,65530D4LOOPD4DECDXJNZD3POPDXPOPCXRETDELAY1ENDP这个子程序写法的关键是现场保护(即进栈出栈),内外两个循环的设计。延时程序的主要目的是可以让我们清楚的看到字符在屏幕上的显示过程。4软件思想与流程图41程序功能描述程序开始,进行清屏,显示欢迎界面。按键输入,如果输入S就执行霓虹灯模拟显示在屏幕中央以字符显示一矩形,并以和将矩型内部从左到右,由上到下填满;然后再按相反的次序消失的程序,否则就继续等待输入。霓虹灯模拟显示程序执行完后,显示退出提示,等待Q的输入,如果输入为Q就退出程序,否则就继续等待输入。42流程图程序开始先定义各个端,做好准备工作。进入主程序后,先调用CLEAR清屏子函数进行清屏,然后运用DOS的2号调用显示处预先定义好的输出提示界面,等待字符的输入。若输入字符则检测是否为S,若是则进入下一界面,否则继续等待。程序主流程图开始部分如图1所示。开始清屏输出提示界面输入字符输入是否为SNAY图1程序开始部分流程图然后用符号布矩形框的左竖行,先确定起始位置,填充一个后,行数自减1,检测行变量是否为0,不为零继续填充,否则换其它行。如程序AB段所示。同理可设计出布矩形框的其它行。程序中布矩形边框的程序流程图如图2所示。AROW24COLUSE14调用MAROW,COLUSE填充然后延时ROW自减1ROW是否为0BYBROW0COLUSE14调用MAROW,COLUSE填充然后延时COLUME自加1COLUME是否为63CYNNCROW0COLUSE63调用MAROW,COLUSE填充然后延时ROW自加1ROW是否为24DYNDROW24COLUSE63调用MAROW,COLUSE填充然后延时COLUME自减1COLUME是否为14EYN图2布矩形边框程序流程图边框布好后,用和交叉填满矩形框内部。在这里根据题目要求,在奇数行先填充再填充然后依次交替填满一行,偶数行时先填充再填充依次交替填满一行,这样奇偶行交替直到填满整个矩形框,这样就可以达到整体上的交替填满。内部填充程序流程图如图3所示。E起始行COUNT11起始列COUNT15调用MACOUNT1,COUNT填充然后延时COUNT自加1调用MACOUNT1,COUNT填充然后延时COUNT自加1COUNT是否为63NCOUNT1自加1YCOUNT1是否为24FNF起始列COUNT15调用MACOUNT1,COUNT填充然后延时COUNT自加1调用MACOUNT1,COUNT填充然后延时COUNT自加1COUNT是否为63NCOUNT1自加1YCOUNT1是否为24GYYN图3内部填充程序流程图内部填充满后,自动反向消失内部填充的内容。这里使用空格代替或者填充再矩形框内部以实现内部反向消失。内部反向消失程序流程图如图4所示。G起始行COUNT123起始列COUNT62调用MACOUNT1,COUNT填充空格然后延时COUNT自减1COUNT是否为14NCOUNT1自减1YCOUNT1是否为0NHY图4内部反向消失程序流程图内部反向消失后,开始消失矩形边框,首先设定起始位置,将该位置的字符替换为空格后移动光标一个单位,判断一行是否结束,结束后反向消失下一行,否则继续。边框的反向消失程序流程图如图5所示。HCL1调用MACL,14填充空格然后延时CL自加1CL是否为24NIYICL14调用MA24,CL填充空格然后延时CL自加1CL是否为63NJYJCL24调用MACL,63填充空格然后延时CL自减1CL是否为0NKYKCL63调用MA0,CL填充空格然后延时CL自减1CL是否为13NLY图5边框反向消失程序流程图最后显示退出提示界面。若有字符输入,检测是否为Q,不为Q则清屏,然后继续显示该提示界面;否则退出程序。该段程序流程图如图6所示。提示输入Q退出界面输入字符是否为QN结束YL图6程序退出界面流程图5调试记录及结果分析51调试过程调试过程主要由编辑、汇编、链接和执行等几个步骤组成。1源程序的编辑编辑好汇编语言源程序后,保存为ASM文件。2源程序的汇编调用汇编程序对源程序进行翻译,生成OBJ的目标文件。在汇编过程中,源程序有错误生不成目标文件,经过多次修改最终生成目标文件。3目标程序的连接调用链接程序(LINK)将用户目标程序和库文件进行链接、定位,生成EXE可执行文件。4调试可执行程序刚开始可执行程序运行之后没有得到预想的结果,又重新检查源程序的算法错误,重新编辑、汇编、链接和执行,得到了预想的结果。52结果记录经过很多次调试,分析修改完善,终于得到正确调试结果。1执行程序时,提示进入界面如下图7欢迎提示界面2输S后,程序执行过程中,在屏幕上显示矩形框及填充如下图8布矩形框图9填充矩形框内部3程序执行过程中反向消失矩形框填充的程序“霓虹灯”模拟显示功能在屏幕中央以字符显示一矩型,并以及将矩型内部交叉填满然后再按相反的次序消失。按Q退出程序作者李志强时间2013/01/07MAMACROOP1,OP2宏定义光标位置PUSHAXPUSHBXMOVAH,02HMOVBH,0页号MOVDH,OP1行MOVDL,OP2列INT10HPOPBXPOPAXENDMSTACKSEGMENTPARASTACKSTACK定义堆栈段STACKENDSDATASEGSEGMENTPARADATA定义数据段ROWDBCOLUMEDBCOUNTDBCOUNT1DBCTDBMENUDB,0DH,0AHDB,0DH,0AHDBWELCOMEYOU,0DH,0AHDB,0DH,0AHDBPROGRAMMEOFDISPLALYINGNEONLAMP,0DH,0AHDB,0DH,0AHDBPLEASEPRESSSTOENTER,0DH,0AHDBANDTHENPRESSQTOEXIT,0DH,0AHDBMADEBYLIZHIQIANG,0DH,0AHDBBUFDBPRESSQTOEXITDATASEGENDSCODESEGSEGMENTPARACODE定义代码段ASSUMESSSTACK,DSDATASEG,CSCODESEGMAINPROCFAR主程序MOVAX,DATASEGMOVDS,AXCALLCLEAR调用清屏子程序MA8,0欢迎界面的出现位置WAT0LEADX,MENU输入S进入霓虹灯显示MOVAH,9INT21HMOVAH,1INT21HCMPAL,SCALLCLEAR如果输入的不是S就清屏MA8,0JNZWAT0PUSHAX入栈PUSHBXPUSHCXPUSHDXMOVROW,24完成矩形框的左竖列MOVCOLUME,14LOP3MAROW,COLUMEMOVDL,填充MOVAH,02HINT21HCALLDELAY1调用延时DECROW行坐标减1CMPROW,0若行坐标大于0就跳转到LOP3否则执行下个程序JNZLOP3MOVROW,0MOVCOLUME,14完成矩形框的上行LOP1MAROW,COLUMEMOVDL,填充MOVAH,02HINT21HCALLDELAY1INCCOLUMECMPCOLUME,63JNZLOP1MOVROW,0MOVCOLUME,63完成矩形框的右竖行LOP2MAROW,COLUMEMOVDL,填充MOVAH,02HINT21HCALLDELAY1INCROWCMPROW,24JNZLOP2MOVROW,24MOVCOLUME,63完成矩形框的下横行LOP4MAROW,COLUMEMOVDL,填充MOVAH,02HINT21HCALLDELAY1DECCOLUMECMPCOLUME,14JNZLOP4到此矩形框已完成矩形框内部填充MOVCOUNT1,1起始行LOPXMOVCOUNT,15起始列LOPX1MACOUNT1,COUNT奇数行排列MOVDL,填充MOVAH,02HINT21HCALLDELAY1延时INCCOUNT列数加1MACOUNT1,COUNT填充MOVDL,MOVAH,02HINT21HCALLDELAY1延时INCCOUNT列数加1CMPCOUNT,63一行是否填满JNZLOPX1没有填满跳转继续填充INCCOUNT1填满就行数加1CMPCOUNT1,24行数是否填满JZFULL填满就考试反向消失MOVCOUNT,15LOPX2MACOUNT1,COUNT偶数行排列MOVDL,填充MOVAH,02HINT21HCALLDELAY1延时INCCOUNT列数加1MACOUNT1,COUNT填充MOVDL,MOVAH,02HINT21HCALLDELAY1延时INCCOUNT列数加1CMPCOUNT,63一列是否填满JNZLOPX2没有就继续填充INCCOUNT1填满则行数加1CMPCOUNT1,24行数是否填满JZFULL填满则开始反向消失JMPLOPX否者继续开始奇数行填充FULLMOVCOUNT1,23设置行的初值为23反向消失内部LOP8MOVCOUNT,62列初值为62LOP7MACOUNT1,COUNTMOVDL,MOVAH,02HINT21HCALLDELAY1DECCOUNTCMPCOUNT,14JNZLOP7DECCOUNT1JNZLOP8MOVCL,1消失矩形框左竖行LOP10MACL,14MOVDL,MOVAH,02HINT21HCALLDELAY1INCCLCMPCL,24JNZLOP10MOVCL,14消失矩形框下行LOP9MA24,CLMOVDL,MOVAH,02HINT21HCALLDELAY1INCCLCMPCL,63JNZLOP9MOVCL,24消失矩形框右竖行LOP11MACL,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论