为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 霓虹灯显示程序设计

霓虹灯显示程序设计

2014-01-14 31页 doc 245KB 40阅读

用户头像

is_254962

暂无简介

举报
霓虹灯显示程序设计霓虹灯显示程序设计 霓虹灯显示程序设计 1设计内容简介 汇编语言是用指令的助记符、符号地址、标号等书写程序的语言,实际上是机器语言的一种符号表示,主要特点是可以使用助记符来表示机器指令的操作码和操作数,可以用标号和符号来代替地址、常量和变量。汇编语言是能够利用计算机所有硬件特性进而直接控制硬件的唯一语言。汇编语言的使用范围很广,文字显示只是其中很简单的一项。本次课程设计采用DOS和BIOS功能调用,采用25×80的彩色图像显示方式。先在坐标纸上用ASCII码所对应的字符拼出自己的名字,并设定ASCII码的颜色值。ASCII码对...
霓虹灯显示程序设计
霓虹灯显示程序设计 霓虹灯显示程序设计 1设计内容简介 汇编语言是用指令的助记符、符号地址、标号等书写程序的语言,实际上是机器语言的一种符号表示,主要特点是可以使用助记符来表示机器指令的操作码和操作数,可以用标号和符号来代替地址、常量和变量。汇编语言是能够利用计算机所有硬件特性进而直接控制硬件的唯一语言。汇编语言的使用范围很广,文字显示只是其中很简单的一项。本次课程设计采用DOS和BIOS功能调用,采用25×80的彩色图像显示方式。先在坐标纸上用ASCII码所对应的字符拼出自己的名字,并设定ASCII码的颜色值。ASCII码对应字符的位置由行数与列数的二维坐标确定。其中行向上则减,向下则增;列向左则减,向右则增。程序在数据段中写出所要显示的我名字的位形图,每行数据段定义组成文字的一个点。其中包含组成文字的字符、颜色、横坐标、纵坐标。文字的变色是通过同一个字的不同颜色版本去覆盖当前的版本以及清屏、擦除程序实现的。文字的闪烁则是通过将颜色属性的八位二进制数的最高位置一实现的。通过比较输入字符与0、Q或q的大小,来实现退出的功能。 2设计任务及要求 本次霓虹灯显示程序设计任务书的内容要求如下: 1.用汇编语言编写一个霓虹灯的模拟显示程序; 2.在屏幕上显示你的中文名字或其它文字,按某种规律闪烁变化,按“q”键退出; 分析任务书要求可知:本次程序设计尽量在屏幕上显示自己的名字,也可以显示其他的文字。文字要按某种方式闪烁,闪烁方式不限定于一种,也可以多种。程序运行过程中,有Q或q输入,则程序结束;无字符输入或输入字符不是Q、q,则程序照常运行。 3论证 本次课程设计在确定最终方案之前,各个功能模块都从多种设计中比较得出。 (1)文字显示可采用坐标纸写点的方式或者直接用字模软件取字符。原本下载了一个字模软件,在其中输入文字就可以读取字模。但是其字模编码是用于LED中的,并不能直接在本程序中调用显示文字。因此,最后采用用坐标纸写点的方式, 虽然写点的工作量较大,但是便于理解,容易修改。 (2)用相同字体但不同颜色的字符去覆盖对应的字符,只能起到变色的作用。要实现闪烁还要把每一个点的颜色属性最高位设为1。 (3)退出程序块中,在判断输入字符是否为Q或q之前必须加一段有没有字符输入的程序。否则,程序运行到判断字符这里,运行窗口就会等在那里,直到输入字符才能继续运行。这样每次运行到这里程序就会等着,实现不了霓虹灯的连续闪烁。 4软件设计说明 4.1程序流程图 4.1.1主程序流程图 流程思路:数据段初始化→调用汉字显示程序,先显示汉字”yu”,再显示汉字”yu1”→调用竖条纹显示程序,显示运动的条纹→判断是否有字符输入,没有的话,继续往下执行→有字符输入时,判断是否为“Q”或“q”→不为“ Q”或“q”时,转到执行程序段Aagain1→为“Q”或“q”时,退出程序。 主程序流程图如下: 图1 霓虹灯显示主程序 4.1.2子程序流程图 本程序显示的汉字为自己的名字,名字中的每个字都用不同颜色的版本写两次,然后竖形条纹扫过,条纹扫过时汉字被覆盖,条纹扫过后开始显示下一个文字,然后条纹再扫过,一直这样循环。因此,子程序有汉字显示子程序、竖形条纹显示子程序、擦除子程序,对应的流程图分别如图2、3、4所示。 图2 汉字显示子程序流程图 图3 竖形条纹显示子程序 图4 擦除子程序 4.2主要程序段与程序设计分析 4.2.1程序中用到的BIOS内的中断功能 (1)02H号功能调用 功能:用文本坐标下设置光标位置 入口参数:AH=02H BH=显示页码 DH=行(Y坐标) DL=列(X坐标) 出口参数:无 (2)08H号功能调用 功能:读光标处的字符及其属性 入口参数:AH=08H BH=显示页码 出口参数:AH=属性 AL=字符 (3)09H号功能调用 功能:在当前光标处按指定属性显示字符 入口参数:AH=09H AL=字符 BH=显示页码 BL=属性(文本模式)或颜色(图形模式) CX=重复输出字符的次数 出口参数:无 (4)0FH号功能调用 功能:读取显示器模式 入口参数:AH=0FH 出口参数:AH=屏幕字符的列数 AL=显示模式 BH=页码 4.2.2程序中用到的DOS功能调用 (1)01H号功能调用 功能:从键盘输入一个字符 输入参数:无 输出参数:AL=ASCII码 (2)0BH号功能调用 功能:检查标准输入设备上是否有字符可读,该输入操作可被重定向 输入参数:AH=0BH 输出参数:AL=00H——无字符可读;FFH——有字符可读 (3)4CH号功能调用 功能:返回操作系统4CH 调用:MOV AH,4CH INT 21H 4.2.3主要程序段与程序设计分析 (1)数据段 本课程设计源程序中的汉字运用写点的方式实现,在数据段的定义中,由组成汉字的点的ASCII码值、颜色、X坐标、Y坐标构成。 例如: yu db 34 db 2ah,8ah,0,0 db 2ah,8ah,-5,1 db 2ah,8ah,4,0 db 2ah,8ah,-5,1 这段程序是第一个汉字“余”的位形图,其中2ah为组成“余”字第一个点的ASCII码值,在屏幕上显示为*;8ah为颜色属性,为淡绿色且闪烁;(0,0)为这个点的坐标,第一个为行坐标,第二个为列坐标。这个点为“余”字组成点的基准坐标,其它点的坐标设置与此点类似。坐标设置按照矩阵的形式,向上则行自减1,向下则行自增1,向左则列自减1,向右则列自增1。每写出一个点后,该点的坐标变回基准坐标(0,0)。本程序中写点是按照从左到右、从上到下的顺序写的,直至写完所有的点。 (2)写点程序段 首先将汉字位形图的地址送给寄存器,程序如下: lea di,yu mov dh,17 mov dl,6 其中,dh,dl分别对应于所写汉字第一个点在屏幕上显示时的行、列坐标。然后读取组成点的信息,程序段如下: mov char_cnt1,cx mov pointer1,di mov line_on1,dh mov col_on1,dl mov char,cx 程序中char_cnt1指字符,pointer1指颜色,line_on1指行坐标, col_on1指列坐标。写点的程序在子程序Amust_2,Amust_21中类似,程序段如下: mov cx,char_cnt1 mov di,pointer1 mov dh,line_on1 mov dl,col_on1 Aplot_next0: add dh,[di+2] add dl,[di+3] mov ah,2 int 10h mov al,[di] mov bl,[di+1] push cx mov cx,1 mov ah,09 int 10h pop cx add di,4 应当说明的是,程序中 cx寄存器入栈又出栈。入栈是为了保存cx中的数值,将寄存器cx空出来,作为计数用,随即出栈的目的是重新将已经保存的cx中的值保存到 cx中,作为循环次数用。程序中到 int 10h为止都是写点的程序。add di,4是为写下一个点做准备,直至写完。 (3)输入Q、q退出程序 mov ah,0bh int 21h cmp al,0 jz Aagain1 mov ah,1 int 21h cmp al,'q' jz exit cmp al,'Q' jz exit jmp Aagain1 exit : mov ax,4c00h int 21h 本段程序实现了首先判断有没有字符输入,有字符输入再判断是否为Q、q,进而判断是否退出。若没有 jmp Aagain1这条语句,输入的字符不是Q、q程序也会结束。 (4)竖形条纹的显示程序 cmp al,40h je Aexitx0 cmp al,02ah je Aexitx0 jmp Aexitx1 Aexitx0: dec Acount0 jne Aplot_next mov Acount0,11 数据段中竖形条纹只定义了6个点,为了能够有足够的宽度将汉字覆盖,因此要将db 40h,05h,1,0与db 02ah,05h,-1,0两个点重复写11次,形成够宽的条纹。主程序中Acount0先定义为了11,写完11个“@”后,Acount0重新赋值11,再将02ah对应的字符“*”写11次,构成完整的竖形条纹。 (5)竖形条纹的移动与擦除程序 自己名字三个字的依次显示是通过竖形条纹的移动覆盖与擦除程序实现的。 Aerase_next: add dh,[di+2] add dl,[di+3] cmp dl,2 je Aleft mov ah,2 int 10h mov ah,8 int 10h cmp al,40h je Aexitx2 cmp al,02ah je Aexitx2 jmp Aexitx3 Aexitx2: dec Acount0 jne Aexitx3 mov Acount0,11 Aexitx3: cmp Acount1,1 je Aexit0 mov al,'*' mov bl,03h jmp Aexit7 Aexit0: mov al,'*' mov bl,0 Aexit7: push cx mov cx,1 mov ah,9 int 10h pop cx cmp Acount0,11 jne Aerase_next add di,4 loop Aerase_next dec col_on1 在每次写完竖形条纹以后,由dec col_on1实现起始点列坐标的的自减1,从而实现竖形条纹的从右向左移动。屏幕的擦除是通过比较竖形条纹与“*”,相同则不变,不同则将次字符改为“*”实现的。 4.3程序运行结果显示 首先显示两种版本彩色的“余”字,并且能够闪烁。 图中四个白色方格实际是闪烁功能,按Alt+Enter在全屏下观看,则可看见闪烁。然后竖形条纹从右向左扫过,覆盖“余”字,开始以同样的方式写“佳”字。 最后,同样竖形条纹从右向左扫过,覆盖“佳”字,进而开始显示“翔”字。 “翔”字显示完以后,重新开始循环显示自己名字的三个字,直至输入了Q、q程序结束,否则一直循环。 5程序调试说明和结果分析 5.1调试工具 使用汇编语言调试器DEBUG进行调试,DEBUG程序是专门为汇编语言设计的一种调试工具。它能给DOS提供有力的纠错、跟踪和运行功能,并能检查系统的各个数据。该工具可以通过单步、设置断点等微程序设计者提供一种有效的调试手段。 5.2调试过程与结果分析 本程序在调试过程中,遇到了很多自己思考不周的问。第一,在没有输入任何字符的情况下,程序运行到字符检测点停了下来,必须输入一个字符让程序继续或结束。经过检查原来是没有设置判断是否有字符输入的程序,修改后解决了;第二,输入的字符非Q、q时,程序也会结束。在和Q、q比较的程序段之后、过程终止程序段之前加上jmp Aagain1语句,即正常了。第三,在使用条件转移指令jz时,发现不能生成obj文件,经检查发现jz与要调用的程序距离太远,把二者距离拉近后问题得到解决。第四,写好程序运行时发现屏幕上显示的汉字严重错位,检查数据段发现有一个点没有定义,重新定义后显示了正确的字符。真是一个小疏漏造成大问题。 6 经过两周的霓虹灯显示程序设计课程设计,我觉得学习像微机原理与接口技术这样实用的知识,不仅要掌握书本上的基本内容,还要灵活思考,善于变换,这样才能找到最优设计,达到事半功倍的效果。课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。回顾起此次微机原理课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。 我通过在网上找资料,在图书馆借书,找到了一点有用的信息但这些都不是自己的,后来努力钻研把它们变为了自己的知识。在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。同时,在老师的身上我学得到很多实用的知识,在此我表示感谢! 参考文献 [1]郑学坚、周斌.微机计算原理及应用(第三版).北京:清华大学出版社,2003.6 [2]谭浩强.C程序设计(第二版).北京:清华大学出版社,2002.1 [3][美]Harold J.Rood著,杜大鹏、龚小平等译.北京:中国水利水电出版社,2004.6 [4]周佩玲、彭虎等著.微机原理与接口技术(基于16位机).北京:电子工业出版社,2007.6 [5]朱定华.微机原理、汇编与接口技术学习指导.北京:清华大学出版社,2004.7 附录 data_seg segment ;定义数据段 yu db 34 ; 第一个“余”字的位形图 db 2ah,8ah,0,0 db 2ah,8ah,-5,1 db 2ah,8ah,4,0 db 2ah,8ah,-5,1 db 3dh,8ah,2,0 db 2ah,8ah,2,0 db 2ah,8ah,-5,1 db 3dh,8ah,3,0 db 2ah,8ah,3,0 db 2ah,8ah,-7,1 db 3dh,8ah,2,0 db 3dh,8ah,2,0 db 2ah,8ah,4,0 db 2ah,8ah,-9,1 db 3dh,8ah,3,0 db 40h,8eh,1,0 db 3dh,8ah,1,0 db 40h,8eh,1,0 db 40h,8eh,1,0 db 40h,8eh,1,0 db 40h,8eh,1,0 db 2ah,8ah,-10,1 db 2ah,8ah,1,0 db 3dh,8ah,3,0 db 3dh,8ah,2,0 db 2ah,8ah,-4,1 db 3dh,8ah,4,0 db 2ah,8ah,2,0 db 2ah,8ah,-5,1 db 3dh,8ah,3,0 db 2ah,8ah,3,0 db 2ah,8ah,-5,1 db 2ah,8ah,6,0 db 2ah,8ah,-5,1 yu1 db 34 ;第二个“余”字的位形图 db 2ah,0ch,0,0 db 2ah,0ch,-5,1 db 2ah,0ch,4,0 db 2ah,0ch,-5,1 db 3dh,0ch,2,0 db 2ah,0ch,2,0 db 2ah,0ch,-5,1 db 3dh,0ch,3,0 db 2ah,0ch,3,0 db 2ah,0ch,-7,1 db 3dh,0ch,2,0 db 3dh,0ch,2,0 db 2ah,0ch,4,0 db 2ah,0ch,-9,1 db 3dh,0ch,3,0 db 40h,01h,1,0 db 3dh,0ch,1,0 db 40h,01h,1,0 db 40h,01h,1,0 db 40h,01h,1,0 db 40h,01h,1,0 db 2ah,0ch,-10,1 db 2ah,0ch,1,0 db 3dh,0ch,3,0 db 3dh,0ch,2,0 db 2ah,0ch,-4,1 db 3dh,0ch,4,0 db 2ah,0ch,2,0 db 2ah,0ch,-5,1 db 3dh,0ch,3,0 db 2ah,0ch,3,0 db 2ah,0ch,-5,1 db 2ah,0ch,6,0 db 2ah,0ch,-5,1 jia db 43 ;第一个“佳”字的位形图 db 23h,0eh,0,0 db 23h,0eh,-1,1 db 2ah,0eh,1,0 db 2ah,0eh,1,0 db 2ah,0eh,1,0 db 2ah,0eh,1,0 db 2ah,0eh,1,0 db 2ah,0eh,1,0 db 2ah,0eh,1,0 db 2ah,0eh,1,0 db 23h,0eh,-9,1 db 23h,0eh,-1,1 db 3dh,0eh,6,1 db 3dh,0eh,4,0 db 3dh,0eh,-7,1 db 3dh,0eh,3,0 db 3dh,0eh,2,0 db 3dh,0eh,2,0 db 3dh,0eh,-7,1 db 3dh,0eh,3,0 db 3dh,0eh,2,0 db 3dh,0eh,2,0 db 24h,0ch,-10,1 db 24h,0ch,1,0 db 24h,0ch,1,0 db 24h,0ch,1,0 db 24h,0ch,1,0 db 24h,0ch,1,0 db 3dh,0eh,1,0 db 24h,0ch,1,0 db 3dh,0eh,1,0 db 24h,0ch,1,0 db 3dh,0eh,1,0 db 3dh,0eh,-7,1 db 3dh,0eh,3,0 db 3dh,0eh,2,0 db 3dh,0eh,2,0 db 3dh,0eh,-7,1 db 3dh,0eh,3,0 db 3dh,0eh,2,0 db 3dh,0eh,2,0 db 3dh,0eh,-4,1 db 3dh,0eh,4,0 jia1 db 43 ;第二个“佳”字的位形图 db 23h,0ah,0,0 db 23h,0ah,-1,1 db 2ah,0ah,1,0 db 2ah,0ah,1,0 db 2ah,0ah,1,0 db 2ah,0ah,1,0 db 2ah,0ah,1,0 db 2ah,0ah,1,0 db 2ah,0ah,1,0 db 2ah,0ah,1,0 db 23h,0ah,-9,1 db 23h,0ah,-1,1 db 3dh,0ah,6,1 db 3dh,0ah,4,0 db 3dh,0ah,-7,1 db 3dh,0ah,3,0 db 3dh,0ah,2,0 db 3dh,0ah,2,0 db 3dh,0ah,-7,1 db 3dh,0ah,3,0 db 3dh,0ah,2,0 db 3dh,0ah,2,0 db 24h,07h,-10,1 db 24h,07h,1,0 db 24h,07h,1,0 db 24h,07h,1,0 db 24h,07h,1,0 db 24h,07h,1,0 db 3dh,0ah,1,0 db 24h,07h,1,0 db 3dh,0ah,1,0 db 24h,07h,1,0 db 3dh,0ah,1,0 db 3dh,0ah,-7,1 db 3dh,0ah,3,0 db 3dh,0ah,2,0 db 3dh,0ah,2,0 db 3dh,0ah,-7,1 db 3dh,0ah,3,0 db 3dh,0ah,2,0 db 3dh,0ah,2,0 db 3dh,0ah,-4,1 db 3dh,0ah,4,0 xiang db 57 ;第一个“翔”字的位形图 db 2ah,0ch,0,0 db 23h,0ch,3,0 db 23h,0ch,2,0 db 23h,0ch,2,0 db 40h,0ch,3,0 db 2ah,0ch,-9,1 db 23h,0ch,2,0 db 23h,0ch,2,0 db 23h,0ch,2,0 db 40h,0ch,2,0 db 2ah,0ch,-7,1 db 23h,0ch,1,0 db 40h,0ch,1,0 db 23h,0ch,1,0 db 40h,0ch,1,0 db 23h,0ch,1,0 db 40h,0ch,1,0 db 2ah,0ch,-7,1 db 23h,0ch,2,0 db 23h,0ch,2,0 db 23h,0ch,2,0 db 2ah,0ch,-7,1 db 23h,0ch,3,0 db 23h,0ch,2,0 db 23h,0ch,2,0 db 2ah,0ch,1,1 db 3dh,0ch,-5,1 db 2ah,0ch,2,0 db 2ah,0ch,2,0 db 3dh,0ch,-4,1 db 2ah,0ch,3,0 db 5ch,0ch,3,0 db 5ch,0ch,1,0 db 3dh,0ch,-7,1 db 7ch,0ch,1,0 db 7ch,0ch,1,0 db 7ch,0ch,1,0 db 7ch,0ch,1,0 db 7ch,0ch,1,0 db 7ch,0ch,1,0 db 7ch,0ch,1,0 db 2ah,0ch,-2,1 db 3dh,0ch,-5,1 db 2ah,0ch,2,0 db 2ah,0ch,2,0 db 3dh,0ch,-4,1 db 2ah,0ch,3,0 db 5ch,0ch,3,0 db 5ch,0ch,1,0 db 3dh,0ch,-7,1 db 7ch,0ch,1,0 db 7ch,0ch,1,0 db 7ch,0ch,1,0 db 7ch,0ch,1,0 db 7ch,0ch,1,0 db 7ch,0ch,1,0 db 7ch,0ch,1,0 xiang1 db 57 ;第二个“翔”字的位形图 db 2ah,07h,0,0 db 23h,07h,3,0 db 23h,07h,2,0 db 23h,07h,2,0 db 40h,07h,3,0 db 2ah,07h,-9,1 db 23h,07h,2,0 db 23h,07h,2,0 db 23h,07h,2,0 db 40h,07h,2,0 db 2ah,07h,-7,1 db 23h,07h,1,0 db 40h,07h,1,0 db 23h,07h,1,0 db 40h,07h,1,0 db 23h,07h,1,0 db 40h,07h,1,0 db 2ah,07h,-7,1 db 23h,07h,2,0 db 23h,07h,2,0 db 23h,07h,2,0 db 2ah,07h,-7,1 db 23h,07h,3,0 db 23h,07h,2,0 db 23h,07h,2,0 db 2ah,07h,1,1 db 3dh,07h,-5,1 db 2ah,07h,2,0 db 2ah,07h,2,0 db 3dh,07h,-4,1 db 2ah,07h,3,0 db 5ch,07h,3,0 db 5ch,07h,1,0 db 3dh,07h,-7,1 db 7ch,07h,1,0 db 7ch,07h,1,0 db 7ch,07h,1,0 db 7ch,07h,1,0 db 7ch,07h,1,0 db 7ch,07h,1,0 db 7ch,07h,1,0 db 2ah,07h,-2,1 db 3dh,07h,-5,1 db 2ah,07h,2,0 db 2ah,07h,2,0 db 3dh,07h,-4,1 db 2ah,07h,3,0 db 5ch,07h,3,0 db 5ch,07h,1,0 db 3dh,07h,-7,1 db 7ch,07h,1,0 db 7ch,07h,1,0 db 7ch,07h,1,0 db 7ch,07h,1,0 db 7ch,07h,1,0 db 7ch,07h,1,0 db 7ch,07h,1,0 car db 6 db 3dh,0eh,0,0 db 40h,0bh,1,0 db 3dh,0eh,1,0 db 3ch,0eh,0,1 db 02ah,0bh,-1,0 db 3ch,0eh,-1,0 jeep db 6 ;竖形条纹的位形图 db 3dh,0eh,0,0 db 40h,05h,1,0 db 3dh,0eh,1,0 db 3ch,0eh,0,-1 db 02ah,05h,-1,0 db 3ch,0eh,-1,0 char_cnt1 dw ? pointer1 dw ? line_on1 db ? col_on1 db ? char dw ? Acount db ? Acount0 db ? Acount1 db ? data_seg ends ;--------------------------------------- code_seg segment assume cs:code_seg,ds:data_seg main proc far ;定义主函数 push ds sub ax,ax sub cx,cx push ax push cx mov ax,data_seg mov ds,ax mov Acount1,2 mov Acount0,11 Aagain: lea di,yu ;把第一个“余”字位形图地址送给di mov dh,17 mov dl,6 call move_shape1 ;调用子程序move_shape1 call Amust_2 ;调用子程序 Amust_2 lea di,yu1 mov dh,17 mov dl,6 call move_shape1 call Amust_2 lea di,jeep ;把竖形条纹位形图的地址送给di mov dh,6 mov dl,76 call move_shape1 call Amust_21 mov ah,0bh ;判断有没有字符输入 int 21h cmp al,0 jz Aagain1 ;无字符输入执行 Aagain1 mov ah,1 int 21h cmp al,'q' jz exit cmp al,'Q' jz exit jmp Aagain1 exit : mov ax,4c00h int 21h Aagain1: lea di,jia mov dh,10 mov dl,29 call move_shape1 call Amust_2 lea di,jia1 mov dh,10 mov dl,29 call move_shape1 call Amust_2 lea di,jeep mov dh,6 mov dl,76 call move_shape1 call Amust_21 lea di,xiang mov dh,7 mov dl,49 call move_shape1 call Amust_2 lea di,xiang1 mov dh,7 mov dl,49 call move_shape1 call Amust_2 lea di,jeep mov dh,6 mov dl,76 call move_shape1 call Amust_21 jmp Aagain main endp ;---------------------------- clear_screen proc near ;清屏程序 push ax push bx push cx push dx mov ah,6 mov al,0 mov ch,4 mov cl,3 mov dh,20 mov dl,77 mov bh,7 int 10h pop dx pop cx pop bx pop ax ret clear_screen endp ;------------------------------------- ;------------------------------------- move_shape1 proc near push ax push bx push cx push dx push di mov ah,0fh ;读取显示器模式 int 10h sub ch,ch mov cl,[di] inc di mov char_cnt1,cx ;读取组成点的字符、颜色、行列坐标 mov pointer1,di mov line_on1,dh mov col_on1,dl mov char,cx pop di pop dx pop cx pop bx pop ax ret move_shape1 endp ;---------------------------- Amust_2 proc near push ax push bx push cx push dx push di mov ah,0fh int 10h sub cx,cx mov cx,char_cnt1 mov di,pointer1 mov dh,line_on1 mov dl,col_on1 Aplot_next0: add dh,[di+2] add dl,[di+3] mov ah,2 int 10h mov al,[di] mov bl,[di+1] push cx mov cx,1 mov ah,09 int 10h ;写第一个点 pop cx add di,4 call dly_qrtr1 ;调用延时显示子程序 loop Aplot_next0 Aexit6: pop di pop dx pop cx pop bx pop ax ret Amust_2 endp ;--------------------------------------------- ;*********************************************** Amust_21 proc near push ax push bx push cx push dx push di mov ah,0fh int 10h mov Acount,20 Aexit1: call dly_qrtr dec Acount je Aexit5 jmp Aexit1 Aexit5: sub cx,cx mov cx,char_cnt1 mov di,pointer1 mov dh,line_on1 mov dl,col_on1 Aplot_next: add dh,[di+2] add dl,[di+3] cmp dl,2 je Aexit4 ;判断是否到达屏幕最左端,是的话执行 mov ah,2 int 10h mov al,[di] mov bl,[di+1] push cx mov cx,1 mov ah,09 int 10h pop cx cmp al,40h je Aexitx0 cmp al,02ah je Aexitx0 jmp Aexitx1 Aexitx0: dec Acount0 jne Aplot_next mov Acount0,11 Aexitx1: add di,4 loop Aplot_next call dly_qrtr call dly_qrtr call dly_qrtr call Aerase jmp Aexit5 Aexit4: call Aerase pop di pop dx pop cx pop bx pop ax ret Amust_21 endp ;******************************************** ;----------------------------------------- Aerase proc near ;读取点的基本信息 mov cx,char_cnt1 mov di,pointer1 mov dh,line_on1 mov dl,col_on1 Aerase_next: add dh,[di+2] add dl,[di+3] cmp dl,2 je Aleft mov ah,2 int 10h mov ah,8 int 10h cmp al,40h je Aexitx2 cmp al,02ah je Aexitx2 jmp Aexitx3 Aexitx2: dec Acount0 jne Aexitx3 mov Acount0,11 Aexitx3: cmp Acount1,1 je Aexit0 mov al,'*' mov bl,03h jmp Aexit7 Aexit0: mov al,'*' mov bl,0 Aexit7: push cx mov cx,1 mov ah,9 int 10h ;显示一个字符 pop cx cmp Acount0,11 jne Aerase_next add di,4 ;准备写下一个字符 loop Aerase_next dec col_on1 ;字符的列坐标自减1,实现从右向左运动 mov cx,char_cnt1 mov di,pointer1 mov dh,line_on1 mov dl,col_on1 Aleft: ret Aerase endp ;----------------------------------------- ;------------------------------------------ dly_qrtr proc near ;延时子程序 push cx push dx mov dx,100 dll: mov cx,65530 dl2: loop dl2 dec dx jnz dll pop dx pop cx ret dly_qrtr endp ;---------------------------------- ;------------------------------------------ dly_qrtr1 proc near ;延时子程序 push cx push dx mov dx,300 dll1: mov cx,65530 dl22: loop dl22 dec dx jnz dll1 pop dx pop cx ret dly_qrtr1 endp ;---------------------------------- code_seg ends end main ;主函数结束 本科生课程设计成绩评定表 姓 名 性 别 专业、班级 课程设计题目: 课程设计答辩或质疑记录: 问题1、 问题2、 成绩评定依据: 序号 评定项目 评分成绩 1 选题合理、目的明确(10分) 2 正确,具有可行性、创新性(20分) 3 设计结果(例如:硬件成果、软件程序)(25分) 4 态度认真、学习刻苦、遵守纪律(15分) 5 设计报告的规范化、参考文献充分(不少于5篇)(10分) 6 答辩(20分) 总分 最终评定成绩(以优、良、中、及格、不及格评定) 指导教师签字:
/
本文档为【霓虹灯显示程序设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索