您好,欢迎访问三七文档
河北科技大学课程设计报告学生姓名学号:专业班级:课程名称:学年学期:指导教师:1课程设计成绩评定表学生姓名学号成绩专业班级起止时间设计题目字符串动画显示指导教师评语指导教师:年月日2目录一、课程设计的目的和任务-------------------------3二、设计题目--------------------------------------3三、设计内容要求----------------------------------3四、课程设计的主要步骤----------------------------3五、设计原理及方案--------------------------------4六、实现方法--------------------------------------5七、实施结果--------------------------------------11八、完成软件的关键技术---------------------------12九、我写的部分-----------------------------------12十、设计总结和心得体会--------------------------143一、课程设计的目的和任务课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识解决实际工程设计和应用问题的能力的重要教学环节,它具有动手、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一种较好方法。《微机原理及应用》是一门应用性、综合性、实践性较强的课程,没有实际的有针对性的设计环节,学生就不能很好的理解和掌握所学的技术知识,更缺乏解决实际问题的能力。所以通过有针对性的课程设计,使学生学会系统地综合运用所学的理论知识,提高学生在微机应用方面的开发与设计本领,系统的掌握微机硬软件设计方法。通过课程设计实践,不仅要培养学生的实际动手能力,检验学生对本门课学习的情况,更要培养学生在实际的工程设计中查阅专业资料、工具书或参考书,掌握工程设计手段和软件工具,并能用设计报告表达设计思想和结果的能力。培养学生事实求是和严肃认真的工作态度。通过设计过程,要求学生熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使学生得到微机开发应用方面的初步训练。让学生独立或集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。二.设计题目字符串动画显示三.设计内容要求1、菜单内容包括:①输入字符串;②字符串动画显示;③退出。2、输入字符串选择该项后,可以输入一个字符串。该字符串即为动画显示时所显示的字符串。3、字符串动画显示所显示字符串从无到有,从中间向两边伸展,直至出来完整的字符串。当按下R键后重复移动的动作,直到按下Q键,停止字符串动画显示返回到主菜单。4、在主菜单中选择退出项,则结束程序返回DOS。四、课程设计的主要步骤课程设计可以分为硬件设计和软件设计两个部分,其设计过程可以归纳为以下所述的四个步骤:1.总体设计4本阶段的任务是通过调查研究,查阅资料来初步确定系统结构的总体方案,其中主要涉及到硬件和软件的功能划分。应用系统中硬件和软件具有一定的互换性,即某些功能既可以用硬件实现也可以用软件实现。一般说来,用硬件实现的优点是可以提高系统的工作速度,但会增加电路的复杂性和硬件成本;而用软件代替某些硬件的功能可以使电路简化,便于修改设计,降低硬件成本,但软件工作量增大。总体设计时,必须在硬件和软件之间权衡,分工明确,然后分头开始设计。2.硬件设计过程利用实验箱的硬件资源,结合课程设计题目,设计硬件原理图,搭建硬件电路。3.软件设计过程(1)采用模块化程序结构设计软件,可将整个软件分成若干功能模块。(2)画出程序流程图。(3)根据流程图,编写源程序。(4)上机调试程序。4.软、硬件联调。五.设计原理及方案主程序流程图Y段地址初始化进入DOS窗口输出提示信息输入字符串字符串动态显示数码管数据输出开始按Q键结束R5六.实现方法程序:初始化程序:CODESEGMENT;定义代码段ASSUMECS:CODE,DS:CODESTART:MOVAX,CODE;初始化代码段地址MOVDS,AXMOVAX,0B800H;彩色显示器缓冲区地址赋给附加段MOVES,AXCLD;清方向标志,si和di自动加1AGAIN:MOVAX,3;设置显示方式为彩色文本,80列25行,INT10H;调用bios功能10h,设置显示方式LEADX,MENU;把menu的偏移地址赋给了dxMOVAH,9;显示以dx首地址作为偏移地址,$作为结束标志的字符串,显示menu菜单。INT21HINPUT:;输入功能模块MOVAH,0;0号功能调用,从键盘读一个字符送给alINT16HCMPAL,'1';判断输入字符是否为1JNZCP2;输入不为1,调转到cp2,即判断输入是否为2,输入为1则跳过该语句CALLSUB01;输入为1,则调用输入子程序sub01,完成输入字符JMPINPUT;输入字符完成后,用户输入下一个命令CP2:CMPAL,'2';判断输入是否为2号命令JNZCP3;输入不为2,调转到cp3,即判断输入是否为3,输入为2则跳过该语句CALLSUB02;输入为2,则调用字符变换子程序sub02,完成字符变换JMPAGAIN;字符变换完成后,返回主菜单,提示用户输入下一个主菜单命令6CP3:CMPAL,'3';退出程序JNZINPUT;若输入命令不是1,2,3,则用户重新输入。LEADX,MESGMOVAH,9;提示用户按任意键退出程序INT21HMOVAH,1;键盘读入一个字符,用于暂停应用程序。INT21HMOVAH,4CHINT21HDELAYPROC;延时1s子程序PUSHAXPUSHBXPUSHCXPUSHDXMOVAH,2;读取时钟将秒数送到dh中INT1AHMOVBL,DH;将秒数保存于bl中@T:MOVAH,2;再次读取时钟并将现在秒数送到dh中INT1AHCMPDH,BL;判断当前秒数是否和bl中保存的前一秒数是否相同JZ@T;不同则跳出循环POPDXPOPCXPOPBXPOPAXRETDELAYENDP7SUB01:;完成字符串输入模块LEADX,TIPS;提示输入字符串MOVAH,9INT21HLEADX,STR0;将要输入的字符串首地址送到dx中MOVAH,0AH;将输入的字符串存入dx作为偏移地址的内存单元中,及存入str0中INT21H;MOVAX,0E0AH;输入结束标志,换行INT10HRETSUB02:;完成字符串变换CMPSTR0+1,2;实际长度和2进行比较JNBY2;大于等于2则跳到y2JMPQUIT;小于到quitY2:CALLLINE;CALLASDF@INPUT:;qr功能输入MOVAH,0;从键盘输入字符INT16HCMPAH,10H;'Q'JZSSS;等于q跳到sss,返回主菜单CMPAH,13H;'R'JNZ@INPUT;不等于qr则用户重新输入JMPY2SSS:MOVSTR0+1,0;把实际长度清0MOVFLAG,0;将标志清0QUIT:8XORDI,DI;将di清0MOVCX,80*25;将整个屏幕的字符总数放入计数器cxMOVAX,720H;用ah=07黑色,al=20h空格,将整个屏幕清空REPSTOSW;重复填充直到cx=0为止,RETLINE:;画框MOVDI,(18*80+10)*2;从第19行的第十一个字符开始画框,di中为像素数,每个像素数为4位,一个字符对应4个像素MOVAL,201;201对应横线左角,MOVAH,3;左角的颜色STOSW;以di作为偏移地址,以al中的字符作为输入字符,以ah为颜色,向缓冲区中填充字符,显示该字符MOVCX,60-2;第60个为右脚MOVAH,1;双横线为蓝色MOVAL,205;REPSTOSWMOVAH,3MOVAL,187;右上角STOSWADDDI,20*2;第20行的第十一个字符,10+60+20=90,下一行的第十一个字符MOVAL,186;竖线STOSWMOVLEFT,DI;将竖线后第一个空格像素地址送给leftMOVCX,60-2;填充58个空格,MOVAL,20H;REPSTOSWMOVAL,186;STOSW9ADDDI,20*2;第21行的第10个数MOVAL,200;左下角STOSWMOVCX,60-2;填充横线MOVAL,205REPSTOSWMOVAL,188;右下角STOSWRETASDF:MOVDI,LEFT;将第一个空格地址,送到diADDDI,60-2;将矩形框的中间位置给di,di为像素值MOVPOSI,DIMOVAL,STR0+1;将实际输入的字符数送给alCBW;al中的字符扩展到ax,ah全为0TESTAX,1;判断奇数和偶数JZOUSHU;偶数跳转MOVFLAG,1;奇数flag=1OUSHU:MOVBP,AX;DECBP;偶数实际长度减1INCAX;实际长度加1SHRAX,1,逻辑右移,实际长度除2.省略余数LEADX,BUF;字符串实际位置首地址给dxADDBP,DX;将字符串的最后一个字符位置给bpMOVBX,AX;字符串一半的长度给bx@REP:MOVAH,50H;字符的颜色10MOVCX,TIMES;每次显示字符数送给cxMOVSI,DX;字符串首地址给siMOVDI,POSI;将矩形框中间位置送给di@1:LODSB;将字符串送al中STOSW;将al中的字符写入到di对应的像素位置处LOOP@1CALLDELAY;延时1sCMPBX,1;判断是否为两个字符JNZCONT;不是两个字符跳转CMPFLAG,0;判断字符长度是奇数和偶数JNZYYY;奇数跳转CONT:MOVSI,BP;最后一个字符地址给siMOVCX,TIMES;每次显示的字符数给cx@2:LODSB;STOSWLOOP@2CALLDELAYYYY:DECBXJZDONEINCTIMESSUBPOSI,2DECBPJMP@REPDONE:MOVTIMES,1RET11TIMESDW1;FLAGDB0POSIDW0MENUDB5DUP(0AH)DB31DUP(''),6,'MAINMENU',6,0DH,0AHDB25DUP(''),201,4,21DUP(196),4,187,0DH,0AHDB25DUP(''),186,'1.INPUTASTRING...',20H,186,0DH,0AHDB25DUP(''),186,'2.DISPLAYMODEL...',20H,186,0DH,0AHDB25DUP(''),186,'3.RETURNTODOS...',20H,186,0DH,0AHDB25DUP(''),200,4,21DUP(196),4,188,0DH,0AHDB28DUP(''),'CHOICE(1,2,3):$'TIPSDB0DH,0AH,9,'INPUTASTRING...',0DH,0AH,9,'$'MESGDB0DH,0AH,0DH,0AH,9,'PRESSANYKEYTOEXIT...$'LEFTDW0STR0DB50;字符串的最大长度DB0;实际输入字符串长度BUFDB50DUP(0);实际字符串的地址CODEENDSENDSTART七.实施结果选择输入字符串后,可以输入一个字符串。该字符串即为动画显示时所显示的字符串。字符串从无到有,从中间向两边伸展,直至出来完整的字符串。当按下R键后重复移动的动作,直到按下Q键,停止字符串动画显示返回到主菜单。运行效果:12八、完成软件的关键技术在本程序中,使用了9号,1号,10号DOS系统功能调用,分
本文标题:字符串动画显示
链接地址:https://www.777doc.com/doc-3131926 .html