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

下载本文档

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

文档简介

课程设计任务书学生姓名: 专业班级: 指导教师: 石云 工作单位: 自动化学院 题 目: “霓虹灯”的模拟显示 初始条件:在屏幕中央以字符显示一矩型,按F键以*将矩型内部由上到下,从左到右填满;按R键以相反的次序消失。按Q退出程序。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1) 设计任务及要求分析(2) 方案比较及认证说明(3) 系统原理阐述(4) 硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5) 软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6) 调试记录及结果分析(7) 总结(8) 参考资料(9) 附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图27目录摘要51 设计任务及要求的分析61.1 设计任务的意义61.2 设计任务的要求62 方案比较及认证6 2.1 方案的比较6 2.2 方案的选择73 系统实现的原理说明73.1 设计思路73.2 程序中的BIOS和DOS功能调用83.2.1 BIOS功能调用83.2.2 DOS功能调用83.3 程序模块94 软件思想与流程图114.1 程序功能114.2 流程图115 调试记录及结果分析135.1 调试过程135.2 结果记录135.3调试中出现的问题及解决方法166 心得体会167 参考文献178 附录 源程序18摘要 当代计算机是微电子学与计算数学相结合的产物。微电子学的基本元件及其集成电路构成了他的硬件基础;而计算数学的计算方法与数据结构则构成计算机的软件基础。微机原理这门课程对于我们自动化系统的学生来说是一门非常重要的基础课程,它与以往的课程不太相同,它的实践非常的强,其课程设计目的在于综合运用所学知识,全面掌握微型计算机与DOS方式的工作原理、编程和使用方法。加强我们的自身解决问题的能力,通过对题目的了解,进而对基本编程方法更加熟悉,使我们可以更加熟练的使用汇编语言,来实现基本的功能。对于打字程序的设计,需考虑到计算机内各种数制之间的转换,考虑到界面等问题,对于程序的编写、调用应灵活运用。这次的课程设计主要是要用BIOS和DOS功能的调用方法,还要用到循环指令等等课程中学到的基础指令来完成,对于提高对汇编编程的理解很有帮助。关键词:微机原理、DOS、BIOS、汇编语言、程序调试 1 设计任务及要求的分析1.1 设计任务的意义通过课程设计,能够对所学知识有更进一步的理解,并能掌握学习理论时没有注意的细节。调试程序,排除故障有助于提高分析问题、解决问题的能力。通过课程设计能够更加熟练的运用汇编语句进行程序设计,熟悉汇编的编程环境。1.2 设计任务的要求在屏幕中央以字符显示一矩型,按F键以*将矩型内部由上到下,从左到右填满;按R键以相反的次序消失。按Q退出程序。要求完成的任务: (1)设计任务及要求分析 (2)方案比较及认证说明 (3)系统原理阐述 (4)硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明 (5)软件设计课题需要说明:软件思想,流程图,源程序及程序注释 (6)调试记录及结果分析 (7)总结 (8)参考资料附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图2 方案比较及认证 2.1 方案的比较在设计过程中字符的显示有2中不同的方式。方案一:运用DOS功能的2号调用,程序的设计如下MA ROW,COLUME ;MA是个宏定义光标位置MOV AH,02HMOV DL,*INT 21H在本程序中,显示方式很简洁很直观很容易记忆理解。但是它无法设置字符的属性,同时还会在下个坐标位置显示光标,影响观看者的视觉感受。 方案二:运用BIOS功能的9号调用,程序设计如下 CALL CURSOR ;调用光标设置子程序 MOV AL,23H MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX 这个程序设计起来占用寄存器较多,虽然略微复杂点,但是它的功能更加完备,更能实现霓虹灯的颜色变化显示效果,给人一种美感。 2.2 方案的选择从上面的分析比较可知方案二的可行性和实际达到的效果更好。所以选则方案二实现霓虹灯的功能。3 系统实现的原理说明3.1 设计思路 (1) 显示欢迎画面,然后执行程序显示一个矩形 (2) 在矩形内框左上角上显示一个字符*号,再执行循环,语句显示一行(列)*字符。利用像这样的原理实现矩形框的完成和内部的填充。至于反向消失部分,用空格代替想要显示的字符,反向执行循环,就可以实现字符的消失了。(3) 霓虹灯显示完毕,提示输入Q退出界面。 3.2 程序中的BIOS和DOS功能调用3.2.1 BIOS功能调用 (1) 设置光标位置(2号功能)入口参数:AH=2(功能号),BH=页号,DH=行号,DL=列号。 出口参数:无。根据DX确定了光标位置。(2) 初始窗口或向上滚动(6号功能)入口参数:AH=6,AL=上滚行数,CX=上滚窗口左上角的行、列号。DX=上滚窗口右下角的行、列号。BH=空白行的属性。出口参数:无。当滚动后,底部为空白输入行(3) 在当前光标位置写字符和属性(9号功能)入口参数:AH=9,BH=页号,AL=字符的ASCII码,BL=字符属性,CX=写入字符数。出口参数:无。3.2.2 DOS功能调用 (1) 键盘输入一个字符并回显(1号功能) 输入参数无,返回结果AL字符(2) 显示字符串,光标跟谁字符串移动(9号功能)DS:DX待显字符串的首地址字符串以*结尾。(3) 显示一个字符,光标跟随字符移动(2号功能) DL=待显字符的ASCII码,无返回结果。3.3 程序模块 (1) 宏定义光标位置 MA MACRO OP1,OP2 ;宏定义光标位置 PUSH AX ;现场保护 PUSH BX MOV AH,02H MOV BH,0 ;页号 MOV DH,OP1 ;行号 MOV DL,OP2 ;列号 INT 10H POP BX POP AX END这个子程序的重点是设计光标所在页、行、列及其现场保护。使用了BIOS功能调用设置光标的位置。(2) 清屏子程序 CLEAR PROC NEAR ;清屏 MOV AH,06H MOV AL,0 MOV CH,0 MOV CL,0 MOV DH,24 MOV DL,79 MOV BH,07H INT 10H RET CLEAR ENDP 初始化窗口,AL=0表示全屏滚动,CH=滚动窗口左上角行号,CL=滚动窗口左上角列号,DH=滚动窗口右下角行号,DL=滚动窗口右下角列号,BH=滚入行的属性。(3) 光标的设置 CURSOR PROC NEAR ;光标的设置 MOV AH,02H MOV BH,0 MOV DH,ROW ;设置行 MOV DL,COLUME ;设置列 INT 10H RET CURSOR ENDP 光标位置的设置,这个子程序与宏定义光标位置类似只是运用有些不同。(4) 延时子程序DELAY1 PROC NEAR PUSH CX PUSH DX MOV DX,100 D3: MOV CX,500 D4: LOOP D4 DEC DX JNZ D3 POP DX POP CX RET DELAY1 ENDP这个子程序写法的关键是现场保护,内外两个循环的设计。延时程序的主要目的是可以让我们清楚的看到字符在屏幕上的显示过程。4 软件思想与流程图4.1 程序功能 程序开始,进行清屏,显示以构成的矩形方框。若按F则以*将矩型内部从上往下、从左至右填满,否则等待输入;若按R则按相反的次序消失,否则就继续等待输入。霓虹灯模拟显示程序执行完后,显示退出提示,等待Q的输入,如果输入为Q就退出程序,否则就继续等待输入。4.2 流程图我用的是Diagram Designer软件绘制的流程图,并将格式转换为bmp格式后插入的word文档,该流程显示了程序的整个流程,很详细。图4.2 流程图5 调试记录及结果分析5.1 调试过程我用的是win7 64位系统,所以采用了Masm for Windows软件进行的编译和修改。调试过程主要由编辑、汇编、链接和执行等几个步骤组成。(1) 源程序的编辑:编辑好汇编语言源程序后,保存为.asm文件。(2) 源程序的编译:调用汇编程序对源程序进行翻译,生成.obj的目标文件。在汇编过程中,源程序有错误生不成目标文件,经过多次修改最终生成目标文件。(3) 调试可执行程序:刚开始可执行程序运行之后没有得到预想的结果,又重新检查源程序的算法错误,重新编辑、汇编、链接和执行,得到了预想的结果。(win64位系统下生成的exe格式的文件无法打开,但是软件可以编译和运行汇编程序)5.2 结果记录经过很多次调试,分析修改完善,终于得到正确调试结果。(1) 执行程序时,提示进入界面如下;图5.2.1 运行图1(2) 输入S后,程序执行过程中,显示矩形框:图5.2.2 运行图2(3) 输入F后,*由上到下,由左到右填满图5.2.3 运行图3(4) 填满后,输入R,反方向消失图5.2.4 运行图4(5)最后按Q退出程序图5.2.5 运行图55.3调试中出现的问题及解决方法问题1:在设置暂停的时候发现按其他键也会使程序运行怎么办? 解决方法:在设置输入键盘键到AL后,比较CMP AL,F,要同时考虑JNZ和JNE两种情况。问题2:反向消除的时候有一列没有消除是为什么?解决方法:发现是循环指令有问题,在消除的时候少考虑了当前列而直接从上一列开始消除,更改后就可以了。问题3:寄存器不够用怎么办?解决办法:这是由于程序结构复杂,使用了太多寄存器,可以定义外部变量来解决。6 6 心得体会 通过这次的课程设计,让我对汇编有了更进一步的认识,加强了我用汇编语言编程的能力。汇编语言程序设计是一门很抽象的学科,学起来感觉理解上有点困难,而且以前的C语言学的也不好。在这次课程设计中,让我更加熟悉了汇编语言的一些基本的指令;掌握了汇编语言的一些基本的中断调用功能,可以用汇编语言调用各种中断调用功能。在设计过程中,不断对程序进行修改、改进,增强了自己分析问题、解决问题的能力;在不断的调试中,也让自己发现了自己存在的一些错误以及一些调试时应注意的问题,同时也更深的理解了寄存器、存储器等工作原理以及一些指令执行后对它们的改变,例如INT指令会改变AL的值,在编程时应注意这方面的问题。这次的汇编课程设计,我的题目是霓虹灯的模拟显示。虽然在设计过程中遇到了不少问题,比如运行界面出现乱码、字符不是出现在预期位置等等问题,但在不断的修改和尝试中慢慢地解决这些问题,对于汇编程序的理解更加深入了。总之,这次课程设计我锻炼了动手能力,熟悉了汇编的编程环境,并巩固了课程相关知识,收益很多。实践出真知,在课程设计中不忘在小处创新,希望在下一次课程设计中能有更大的突破!7 参考文献1汤书森.微机原理接口技术实验于实践教程.北京:清华大学出版社,20082余朝琨.IBM-PC汇编语言程序设计.北京:机械工业出版社. 20083宋江.微机原理与接口技术.北京:机械工业出版社. 20054金泉涌.微型计算机应用经验汇编.北京:清华大学出版社,20075沈美玲.IBM-PC汇编语言程序设计.北京:清华大学出版社,19936吴耿峰.十六位微型计算机原理接口及应用.北京:高等教育出版.20047戴梅萼.微型计算机技术与应用.北京:清华大学出版社. 19928 罗省贤汇编语言程序设计教程北京:电子工业出版社,20049吴向军汇编语言程序设计北京:高等教育出版社,20088 附录 源程序MA MACRO OP1,OP2 ;宏定义光标位置 PUSH AX ; PUSH BX MOV AH,02H MOV BH,0 ;页号 MOV DH,OP1 ;行 MOV DL,OP2 ;列 INT 10H POP BX POP AX ENDMSTACK SEGMENT PARA STACK Stack ;定义堆栈段 STACK ENDSDATASEG SEGMENT PARA Data ;定义数据段 ROW DB ? COLUME DB ? COUNT DB ? COUNT1 DB ? CT DB ? MENU DB ,0dh,0ah ; DB welcome you ! ,0dh,0ah DB ,0dh,0ah DB programme of displalying neon lamp ,0dh,0ah DB ,0dh,0ah DB please press S to enter ,0dh,0ah DB and then press Q to exit ! ,0dh,0ah DB $ BUF DB press Q to exit ! $ DATASEG ENDSCODESEG SEGMENT PARA Code ASSUME SS:STACK,DS:DATASEG,CS:CODESEGMAIN PROC FAR MOV AX,DATASEG MOV DS,AXCALL CLEAR ;调用清屏子程序 MA 8,0 ;欢迎界面的出现位置 WAT0: LEA DX,MENU ;输入S进入霓虹灯显示 MOV AH,9 INT 21H MOV AH,1 INT 21H CMP AL,S CALL CLEAR ;如果输入的不是S就清屏 MA 8,0 JNZ WAT0 PUSH AX ;入栈 PUSH BX PUSH CX PUSH DX MOV ROW,24 ;完成矩形框的左竖行 MOV COLUME,0 LOP3: CALL CURSOR ;调用设置光标位置 MOV AL,40H ;把的ASCII 码传递给AL MOV BL,0BH ;设置字符属性 PUSH CX ;入栈 MOV CX,1 ;字符显示1次 MOV AH,09H INT 10H POP CX ;出栈 CALL DELAY1 ;调用延时 DEC ROW ;行坐标减1 CMP ROW,0 ;若行坐标大于0就跳转到lop3否则执行下个程序 JNZ LOP3 MOV ROW,0 MOV COLUME,0 ;完成矩形框的上行 LOP1: CALL CURSOR MOV AL,40H MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 INC COLUME CMP COLUME,79 JNZ LOP1 MOV ROW,0 MOV COLUME,79 ;完成矩形框的右竖行 LOP2: CALL CURSOR MOV AL,40H ;完成的输出 MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 INC ROW CMP ROW,24 JNZ LOP2 MOV ROW,24 MOV COLUME,79 ;完成矩形框的下横行 LOP4: CALL CURSOR MOV AL,40H MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 DEC COLUME CMP COLUME,0 JNZ LOP4 ;到此矩形框已完成 c1: MOV AH,07 INT 21H CMP AL,46H JNE c1 JNZ LOP6 MA 8,0 MOV COLUME,0 ;从上往下从左往右*填充 LOP6: MOV ROW,1 INC COLUME LOP5: CALL CURSOR MOV AL,2AH MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 INC ROW CMP ROW,24 JNZ LOP5 CMP COLUME,78 JNZ LOP6 MOV COLUME,79 C2: MOV AH,07 INT 21H CMP AL,52H JNE C2 JZ LOP7 MA 8,0 ;反向消失LOP7: MOV ROW,23 DEC COLUME LOP8: CALL CURSOR MOV AL, MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 DEC ROW CMP ROW,0 JNZ LOP8 CMP COLUME,1 JNZ LOP7 MOV CL,1 ;消失矩形框左竖行 LOP9: MA CL,0 MOV AL, MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 INC CL CMP CL,24 JNZ LOP9 MOV CL,0 ;消失矩形框下行 LOP10: MA 24,CL MOV AL, MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 INC CL CMP CL,79 JNZ LOP10 MOV CL,24 ;消失矩形框右竖行LOP11: MA CL,79 MOV AL, MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 DEC CL CMP CL,0 JNZ LOP11 MOV CL,79 ;消失矩形框上行LOP12: MA 0,CL MOV AL, MOV BL,0BH PUSH CX MOV CX,1 MOV AH,09H INT 10H POP CX CALL DELAY1 DEC CL CMP CL,0 JNZ LOP12 MA 0,0 ;消失(0,0)这一点 MOV AL, MOV BL,0BH P

温馨提示

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

评论

0/150

提交评论