微机原理移动动画显示设计
- 格式:doc
- 大小:99.00 KB
- 文档页数:13
《微机原理与接口技术课程设计》实验报告实验名称:在屏幕上显示一个开动的小汽车姓名:学号:专业:实验室:实验时间:2011年11月22日报告时间:2011年12月13日评定成绩:审阅教师:一.实验目的1.掌握汇编语言程序指令编辑、宏汇编、连接、运行基本概念。
2.熟练掌握debug调试程序的常用命令和窗口功能。
3.通过所学的编程知识实现简单的动画显示过程。
4.综合运用多学知识发现、提出、分析和解决问题,锻炼实践能力。
5.最终结果为:在屏幕上显示一个开动的小汽车二.实验内容1.在屏幕上显示图形2.延迟一个时间周期,这样图形更清晰。
3.清除图形、改变图形的行列坐标。
4.在屏幕上显示出动画的效果。
5.返回第一步,重复上述过程。
三.程序流程图备注:(具体程序流程见下页)五.结论程序运行后发现小车移动速度过快,导致观察的不清晰,再次调出程序时对其进行了延时的程序时间参数的修改,反复调试运行才完成的设计的要求,在许多调试程序的细节中容易出错,必定少不了认证二字。
一次不成功的调试并说明不了什么,重要的是从失败中寻找成功的途径和方法。
运行结果见下图:六.收获通过对汇编语言的学习,学到了很多的调试知识,对DEBUG有了一定的认识,通过实践也加深了对理论知识的理解,在这次程序设计中也借鉴了很多的子程序,虽然这些子程序的设计是固定的,但是我能比较熟练的直接调用,也方面了我的设计,我最大的收获就是在这次课程设计中,真正的体会到了个人的能力是有限的,合作的重要性,遇到棘手的问题总是大家一起讨论,把问题解决,直到程序能够正常运行。
值此我不禁加深了课本的知识,同时也增强了自己动手、动脑的能力,我觉得这很新奇,对此我也很有兴趣去研究它。
毕竟是没有受过专业的训练,对程序的流程图的画法还是有所欠缺,对种种步骤还不是很了解,这一点还需反复揣摩。
我也懂的逻辑推理对程序设计的重要性,找到简单、合适的高效率方法可以节约程序运行的时间,从而提高程序的运行效率。
一、设计任务1.程设计的目的更深入的了解汇编这门语言,并从中学到东西掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力。
提高我们对学习认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。
培养我们从资料文献、科学实验中获得知识的能力,提高我们从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。
培养我们勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。
学习汇编语言综合应用程序设计方法,提高汇编语言实际应用能力,充分了解计算机硬件和软件,完成理论到实践的推进过程。
2.课程设计要求(1)根据微机软、硬件条件,每人选定一个具有一定综合性的程序设计题目A对题目进行模块分析B 系统设计实用,功能全面C 按时按量完成任务(2)按时间上机完成调试任务3.设计任务在DOS环境中编程完成以下任务:(1)以滚动方式输出下车动态行驶图形(2)小车在公路上动态行驶,从屏幕左侧驶向屏幕右侧后,在到达屏幕右侧后,公路下降。
(3)段距离并改变颜色,然后小车继续由左向右行驶(4)当下降到屏幕底部时,再返回到屏幕顶部重复上述过程(5)直到有键按下时,程序运行结束(6)设计说明书:设计思想、参考程序的程序流程图和源程序4.设备IBM—PC微型计算机一台二、设计方案1、设计思想主程序思想:使用BIOS中断调中显示器控制用子程序,要求显示动态效果图像即为一辆小车在公路上动态行驶,到达屏幕右方时,公路下降并改变颜色,小车又从左向右行驶以此循环,直至有键按下时结束程序。
2、主程序流程框图3、源程序代码data segmentline dw 10 ;定义行变量color db 1 ;定义公路颜色color1 db 0 ;定义小车颜色corlum dw 2 ;定义列变量count1 dw 0count2 dw 0count3 dw 0 ;车体模型car_8 db 00000011b,11100000bdb 00000010b,01010000bdb 00000110b,01011000bdb 01111111b,11111110bdb 11111111b,11111111bdb 11111011b,11101111b2db 00001010b,00101000bdb 00000100b,00010000bdata endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,80mov ah,0fhint 10hmov ax,0004hint 10hmov ah,0bhmov bh,1 ;选择1号调色板mov bl,0int 10hll: mov al,color ;设置公路颜色inc alcmp al,3jbe tt2sub al,3tt: mov color1,al ;设置小车颜色cmp al,1jz tt3inc alcmp al,3jz tt2tt3: inc altt2: mov color,almov ax,line ;计算机行坐标add ax,10cmp ax,180jbe tt1sub ax,180tt1: mov line,axmov ah,0ch ;写像素mov dx,lineadd dx,8 ;计算公路坐标mov cx,0mov al,color ;设置公路颜色repet: mov bx,3push axint 10h ;画公路pop axinc cxcmp cx,319 ;未到屏幕最右转jnz repetmov ah,0ch ;画车模mov dx,line ;设置行坐标mov cx,corlum ;设置列坐标mov si,offset car_8 ;取车模首坐标mov count1,8 ;8行retry1: mov count2,2 ;每行2字节retry2: mov count3,8 ;每字节8位retry3: rol byte ptr[si],1mov al,0 ;此位为0,置背景颜色jnc nextmov al,color1 ;此位为1,置背景颜色next: push axpush cxint 10h ;画一个点pop cxpop axinc cx ;列加1dec count3jnz retry3 ;未画完8个点转inc si ;取下一个字节的车模信息dec count2jnz retry2 ;车模信息未转完inc dxmov cx,corlumdec count1jnz retry1 ;未画完8行转mov count1,320-18 ;设置移动总次数mov cx,corlumadd cx,15 ;小车最右点的列坐标送cxrepet1: push cx ;小车横向有16个点,外加1个空白点mov count2,16+1repet2: mov dx,line ;车模向右移动1 个像素位mov count3,8repet3: mov ah,0dhint 10h ;读当前点mov ah,0chpush cxinc cxint 10h ;写当前右边的点pop cxinc dx ;行坐标加1dec count3 ;车模向右移动1个像素位未完转jnz repet3dec cx ;修改列坐标dec count2 ;小车移动1个车体位未完转jnz repet2pop cxinc cx ;修改列坐标mov ah,1int 16hjnz exit ;有键按下,转退出dec count1jnz repet1mov dx,line ;清除公路和车模call clearsjmp ll ;无键按下,继续执行exit: mov ah,0 ;恢复文本显示方式mov al,2int 10hmov ah,4chint 21hclears proc nearpush axpush cxpush bxmov ax,0c00hmov bx,10cls0: mov cx,0cls1: int 10hinc cxcmp cx,320jnz cls1inc dxdec bxjnz cls0pop bxpop cxpop axretclears endpcode endsend start三.程序的调试与运行1、程序的调试程序的分析、代码的编写完成后,开始对代码进行编译和调试,我们采用DOS 环境对所编代码进行调式、编译。
disp macro x,y, lengths,color,flag,varmov ah,13h;fun numbermov al,1;the monitor show modelmov bh,0;page nummov bl,color;colormov cx,lengths;str lengthsmov dh,x;str linemov dl,y;str colife flagmov bp,offset varelsemov bp,varendif;set the bp valueint 10hendm;---------------------------------------data segmentline equ 2color equ 5fh;color_board equ 3Dhline1 db 177,56 dup(177),177line2 db 177,56 dup(' '),177line3 db 177,56 dup(177),177ll equ $-line3xx equ (80-ll)/2line4 db "serial ports com1 and com2 automatic test program "l equ $-line4i equ (80-l)/2;每次右移位显示的起始列号为Ij equ i+l-1;第一次左移位显示的起始列号为Jlorg db j+1lorg1 db l/2+20-3lorg2 db l/2+i+3count dw 0count1 dw 0data ends;-----------------------------CODE SEGMENTASSUME CS:CODE,DS:CODE,es:datastart:MOV AX,CODEMOV DS,AXmov ax,0b800hMOV ES,AXcldAGAIN: MOV AX,3INT 10Hlea dx,MENU ;主菜单mov ah,9int 21hinput:mov ah,0int 16hcp1:cmp al,'1'jnz cp2call sub01 ;字符串左右移动jmp AGAIN ;返回到主菜单cp2:cmp al,'2'jnz cp3call sub02 ;字符串左右移动jmp AGAIN ;返回到主菜单cp3:cmp al,'3'jnz cp4;call sub03 ;字符串左右移动jmp AGAIN ;返回到主菜单cp4:cmp al,'4'jnz cp5;call sub04 ;字符串左右移动jmp AGAIN ;返回到主菜单cp5:cmp al,'5'jnz cp6;call sub05 ;字符串左右移动jmp AGAIN ;返回到主菜单cp6:cmp al,'6' ;返回DOS jnz inputlea dx,MESGmov ah,9int 21hmov ah,1int 21hMOV AH,4CHINT 21Hsub01:;---------------------------------START1:mov ax,datamov ds,axmov es,axmov ax,3int 10h;clear the window;------------------------------disp line+0,xx,ll,color,0,line1disp line+1,xx,ll,color,0,line2disp line+2,xx,ll,color,0,line3;-----------------------------; init the board;左移位loopstr:inc count;每一次左移位或右移位需要打印的字符数mov cx,countdec lorgmov dl,lorg;每次循环减一,使得打印的起始列值左移一位mov bp,offset line4disp line+1,dl,cx,color,1,bp;显示右边的数进行左移位call delay;右移位mov bp,offset line4+l;每次都先使BP指向最后一个字符‘M’的后面一位mov cx,countsub bp,cx;使得BP指向要打印的第一个字符disp line+1,i,cx,color,1,bp;显示右边的数进行右移位call delay;调用延迟子程序cmp count,l;判断是否全部打印结束jne loopstrs: dec countjnz sa:inc lorgcmp lorg,j+1jnz ajmp startmov ah,01h;调用Dos功能的键盘输入mov ah,4ch;结束int 21hRETsub02:mov ax,datamov ds,axmov es,axmov ax,3int 10h;clear the window;------------------------------disp line+0,xx,ll,color,0,line1disp line+1,xx,ll,color,0,line2disp line+2,xx,ll,color,0,line3;-----------------------------; init the board;左移位loopstr1:inc count1;每一次左移位或右移位需要打印的字符数mov cx,count1dec lorg1mov dl,lorg1;每次循环减一,使得打印的起始列值左移一位mov bp,offset line4disp line+1,dl,cx,color,1,bp;显示右边的数进行左移位call delay;右移位mov bp,offset line4+l;每次都先使BP指向最后一个字符‘M’的后面一位mov cx,count1;inc lorg1;mov dh,lorg1sub bp,cx;使得BP指向要打印的第一个字符disp line+1,lorg2,cx,color,1,bp;显示右边的数进行右移位call delay;调用延迟子程序cmp count1,l/2;判断是否全部打印结束jne loopstr1s1: dec count1jnz s1a1:inc lorg1cmp lorg1,l/2+20-3a2:inc lorg2cmp lorg2,l/2+i+3jnz a2jmp startmov ah,01h;调用Dos功能的键盘输入int 21hmov ah,4ch;结束int 21hret;------------------------------;延迟子程序DELAY procpush cxpush dxmov ah,86hd1:mov cx,0ffffh;千分秒,延迟时间loop $dec dxjnz d1mov dx,800int 15hpop dxpop cxRETMENU DB 5 DUP(0AH)DB 31 DUP(' '),'MAIN MENU',0DH,0AHDB 25 DUP(' '),201,21 DUP(205),187,0DH,0AHDB 25 DUP(' '),186,' 1.Origine ',186,0DH,0AH DB 25 DUP(' '),186,' 2.middle1 ',186,0DH,0AH DB 25 DUP(' '),186,' 3.middle2 ',186,0DH,0AH DB 25 DUP(' '),186,' 4.asymchronical ',186,0DH,0AH DB 25 DUP(' '),186,' 5.two lines ',186,0DH,0AH DB 25 DUP(' '),200,21 DUP(205),188,0DH,0AHDB 28 DUP(' '),'Choice(1,2,3,4,5):$'MESG DB 0dh,0ah,0dh,0ah,9,'Press any key to exit ...$' CODE ENDSEND start。
微机原理上机实验报告综合实验:1.LED 16x16点阵显示实验竖向显示改横向显示2.电子钟功能修改微机原理综合实验报告综合实验1:LED 16x16点阵竖向显示改横向显示实验一、实验目的1、熟悉8255的功能,了解点阵显示的原理及控制方法;2、学会使用LED点阵,通过编程显示不同字符;3、认真预习本节实验内容,可尝试自行编写程序,做好实验准备工作,填写实验报告。
二、实验内容1、编写程序,用B4区的二片74HC273控制16X16点阵的行;8255的PA、PB口控制16X16点阵的列;显示字符。
2、按图连接线路;运行程序,观察实验结果,学会编程控制LED点阵显示字符。
三、实验原理图四、实验步骤2、运行程序,观察实验结果。
运行演示程序将会看到字符“欢迎使用星研实验仪”在点阵上自下而上循环移动显示。
五、实验代码对实验六中的代码做一定的修改,将原程序中使LED显示屏从上至下显示的功能改为从左至右滚动显示有框线部分为修改部分ADDR_8255_PA EQU 270H ;8255 PA口ADDR_8255_PB EQU 271H ;8255 PB口ADDR_8255_C EQU 273H ;8255控制口ADDR_273 EQU 230H ;IO区74HC273(16位I/O)LINE EQU A DDR_273 ;行线1, 行线2ROW1 EQU A DDR_8255_PA ;列线1ROW2 EQU A DDR_8255_PB ;列线2_STACK SEGMENT STACKDW 1024 DUP(?)_STACK ENDS_DATA SEGMENT WORD PUBLIC 'DATA'HUANDB 00H,0C0H,00H,0C0H,0FEH,0C0H,07H,0FFH,0C7H,86H,6FH,6CH,3CH,60H,18H,60HDB 1CH,60H,1CH,70H,36H,0F0H,36H,0D8H,61H,9CH,0C7H,0FH,3CH,06H,00H,00HYINGDB 60H,00H,31H,0C0H,3FH,7EH,36H,66H,06H,66H,06H,66H,0F6H,66H,36H,66HDB 37H,0E6H,37H,7EH,36H,6CH,30H,60H,30H,60H,78H,00H,0CFH,0FFH,00H,00HSHIDB 00H,00H,06H,30H,07H,30H,0FH,0FFH,0CH,30H,1FH,0FFH,3BH,33H,7BH,33HDB 1BH,0FFH,1BH,33H,19H,0B0H,18H,0E0H,18H,60H,18H,0FCH,19H,8FH,1FH,03HYONGDB 00,0,1FH,0FEH,18H,0C6H,18H,0C6H,18H,0C6H,1FH,0FEH,018H,0C6H,18H,0C6HDB 18H,0C6H,1FH,0FEH,18H,0C6H,18H,0C6H,30H,0C6H,30H,0C6H,60H,0DEH,0C0H,0CCH XINGDB 00H,00H,1FH,0FCH,18H,0CH,1FH,0FCH,18H,0CH,1FH,0FCH,01H,80H,19H,80HDB 1FH,0FEH,31H,80H,31H,80H,6FH,0FCH,01H,80H,01H,80H,7FH,0FFH,00H,00HYANDB 00H,00H,0FFH,0FFH,18H,0CCH,18H,0CCH,30H,0CCH,30H,0CCH,7FH,0FFH,7CH,0CCH DB 0FCH,0CCH,3CH,0CCH,3CH,0CCH,3DH,8CH,3DH,8CH,33H,0CH,06H,0CH,0CH,0CHSHI0DB 01H,80H,00H,0C0H,3FH,0FFH,3CH,06H,67H,0CCH,06H,0C0H,0CH,0C0H,07H,0C0HDB 06H,0C0H,7FH,0FFH,00H,0C0H,01H,0E0H,03H,30H,06H,18H,1CH,1CH,70H,18HYAN0DB 00H,00H,0FCH,60H,0CH,60H,6CH,0F0H,6CH,0D8H,6DH,8FH,6FH,0F8H,7EH,00HDB 06H,0C6H,07H,66H,3FH,0ECH,0E7H,0ECH,06H,18H,1FH,0FFH,0CH,00H,00H,00HYIDB 0CH,0C0H,0CH,60H,18H,7CH,1BH,6CH,33H,0CH,73H,18H,0F1H,98H,31H,98HDB 30H,0F0H,30H,0F0H,30H,60H,30H,0F0H,31H,98H,33H,0FH,3EH,06H,30H,00HNONEDB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00HCHANGE_RESULTDB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00HDB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H_DATA ENDSCODE SEGMENTSTART PROC NEARASSUME CS:CODE, DS:_DATA,SS:_STACKMOV AX,_DATAMOV DS,AXNOPCALL INIT_IOCALL TEST_LED ;调用测试子程序,测试LED是;显示一个16*16点阵字子程序,字型码放在DPTR指出的地址DISP_CH PROC NEAR ;把每个汉字的32个字节读完PUSH CXMOV CX,8DISP_CH_1:CALL DISP1LOOP DISP_CH_1POP CXRETDISP_CH ENDP;显示一个16*16点阵字子程序,字型码放在显示缓冲区XBUFFDISP1 PROC NEARPUSH SIPUSH CXMOV CX,16MOV BL,0FEHMOV BH,0FFHREPEAT:MOV AX,BXOUT LODSBCALL ADJUSTMOV DX,ROW1OUT DX,ALLODSBCALL ADJUSTMOV DX,ROW2OUT DX,ALCALL DL10MSCALL CLEARSTCRCL BL,1RCL BH,1LOOP REPEATPOP CXPOP SIRETDISP1 ENDPINIT_IO PROC NEARMOV AL,80HOUT RETINIT_IO ENDPCLEAR PROC NEARMOV AX,0FFFFHMOV DX,LINEMOV AL,0MOV OUT DX,ALMOV DX,ROW2OUT DX,ALRETCLEAR ENDP;测试LED子程序,点亮LED并延时1STEST_LED PROC NEARMOV DX,LINEXOR AX,AXOUT DX,AXMOV AL,0FFHMOV DX,ROW1OUT DX,ALMOV DX,ROW2OUT DX,ALCALL DL500msCALL DL500msRETTEST_LED ENDP;调整AL中取到的字型码的一个字节,将最高位调整位最低位,最低位调整为最高位ADJUST PROC NEARPUSH CXMOV CX,8ADJUST1:RCL AL,1XCHG AL,AHRCR AL,1XCHG AL,AHLOOP ADJUST1MOV AL,AHPOP CXRETADJUST ENDPDL10ms PROC NEARPUSH CXMOV CX,133LOOP $POP CXRETDL10ms ENDPDL500ms PROC NEARPUSH CXMOV CX,0FFFFHLOOP $POP CXRETDL500ms ENDPSTART ENDPCODE ENDSEND STARTCODE SEGMENTSTART PROC NEARASSUME CS:CODE, DS:_DATA,SS:_STACKMOV AX,_DATAMOV DS,AXMOV ES,AXNOPCALL INIT_IOCALL TEST_LED实验十四:电子钟一、实验目的进一步熟悉8253、8259、8279二、实验内容1、使用8253定时功能,产生0.5S的定时中断给82592、在F5区的数码管上显示时间3、允许设置时钟初值三、实验步骤2、运行程序,按F5区的F键,设置时钟初值。
微机原理课设报告学生姓名:常卫洪学号:130704101 专业班级:电子科学与技术131班课程名称:微型计算机原理及应用技术学年学期:2015-2016学年第1 学期指导教师:赵艳2 015年12 月课程设计成绩评定表目录一、设计目的--------------------------------------------4二、设计任务与要求-------------------------------------4三、小组分工--------------------------------------------4四、实现方法--------------------------------------------4五、功能效果展示---------------------------------------11六、改进以及及建意-------------------------------------13七、心得体会---------------------------------------------14八、参考资料--------------------------------------------14九、附源程序--------------------------------------------14一、设计目的:1、掌握汇编语言,会利用汇编语言编写一定功能的程序;2、熟悉DOS环境以及在DOS下会调试编写好的汇编程序;3、熟悉常用的DOS功能;4、小组合作完成设计题目。
二、设计任务与要求设计内容要求:1、菜单内容包括:①输入字符串;②字符串动画显示;③退出。
2、输入字符串选择该项后,可以输入一个字符串。
该字符串即为动画显示时所显示的字符串。
3、字符串动画显示所示字符串在一矩形框内一半从左另一半从右向中间移动,当两半相遇时又分别向两边移动,直至遇到两侧的边框双重新向中间移动,重复上述过程直至按任意键,则停止字符串动画显示返回到主菜单。
河北科技大学课程设计报告学生姓名张青学号:09L专业班级:电科L092课程名称:字符串动态显示学年学期:2 0 1 1—2 0 1 2学年第1学期指导教师:张永强赵艳2 0 11年12月课程设计成绩评定表学生姓名张青学号09L 成绩专业班级电科L092 起止时间2011-12-24 至2011-12-28 设计题目字符串动画显示指导教师评语指导教师:年月日一、课程设计的目的和任务课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识解决实际工程设计和应用问题的能力的重要教学环节,它具有动手、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一种较好方法。
《微机原理及应用》是一门应用性、综合性、实践性较强的课程,没有实际的有针对性的设计环节,学生就不能很好的理解和掌握所学的技术知识,更缺乏解决实际问题的能力。
所以通过有针对性的课程设计,使学生学会系统地综合运用所学的理论知识,提高学生在微机应用方面的开发与设计本领,系统的掌握微机硬软件设计方法。
通过课程设计实践,不仅要培养学生的实际动手能力,检验学生对本门课学习的情况,更要培养学生在实际的工程设计中查阅专业资料、工具书或参考书,掌握工程设计手段和软件工具,并能用设计报告表达设计思想和结果的能力。
培养学生事实求是和严肃认真的工作态度。
通过设计过程,要求学生熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使学生得到微机开发应用方面的初步训练。
让学生独立或集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。
通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。
微机原理动态显示的原理
动态显示(也称为动态扫描显示)是一种在微机原理中常用的显示技术,它能够通过逐个刷新若干行或列来显示连续的图像或动画。
动态显示的原理基于人眼的视觉暂留效应。
当人眼接收到一帧图像后,并不能立即消失掉,而是会持续一段时间停留在视网膜上。
利用这一特性,动态显示使用持续刷新的方式,每次只显示部分图像或动画的一帧,通过高速刷新,误导人眼认为整个屏幕上的图像在同一时间点同时显示。
具体实现时,动态显示通常通过两个重要的组件来实现:驱动电路和显示单元。
驱动电路负责生成适当的信号,以控制显示单元的开关状态。
通常采用的方式是使用一个控制器和一套计数器以及行选通器和列选通器。
控制器通过计数器来生成适当的时序信号,以便逐行或逐列地选择和激活每一行或列的显示单元。
显示单元是由多个光敏二极管或液晶单元组成的阵列,通常构成一个像素矩阵。
每个像素可以根据驱动电路的信号,选择性地开关,使其显示出相应的亮度或颜色。
在图像或动画显示过程中,刷新频率通常要足够高,以使人眼无法察觉到实际的刷新过程。
一般来说,刷新频率应该大于人眼视觉暂留效应的时间,即一般应大于16毫秒,以确保图像的连续性和流畅性。
总结而言,动态显示的原理是通过快速刷新和合理控制驱动电路,使得人眼感知到的是一组连续的图像帧,从而实现连续显示的效果。
河南农业大学课程设计报告题目:移动动画显示设计课程:微型计算机原理专业:电子信息工程班级:09电信(2)班学生姓名:学号:指导教师:朱娟花完成日期:2011.12.26机电工程学院目录前言 (1)1.1实习目的 (1)1.2实习要求 (1)第一章绪言 (1)第二章软件系统介绍 (2)2.1关于emulator的软件介绍 (2)第三章程序设计分析 (5)3.1 程序设计思路 (7)3.2 程序流程图设计 (7)3.3软件各模块内容 (9)3.4程序清单及详细注释 (9)3.5实验结果 (15)第四章系统实现 (16)4.1 程序源代码 (17)总结 (18)参考文献 (18)前言1实习目的汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机硬件特性并能直接控制硬件的唯一语言。
汇编语言程序设计课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。
因此,要求我们能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。
对我们掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。
培养我们综合运用所学知识独立完成汇编程序课题的能力。
使我们能够较全面地巩固和应用课堂中所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。
提高我们对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。
培养我们从资料文献、科学实验中获得知识的能力,提高我们从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。
培养我们勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。
1实习要求动画程序设计要求完成一个在显示器上显示一个图形动画设计,即当程序运行时可看到移动的图形或图像。
此程序涉及到宏和I/O中断的调用,要求我们掌握对宏的定义和使用,使用汇编语言对I/O中断的使用。
微机原理动态显示的原理微机原理动态显示的原理是指通过控制电信号,使得显示器能够实时更新并显示出动态画面的技术。
在计算机领域,动态显示主要是指视频显示,即能够连续显示一系列静态图像的显示方式。
动态显示的原理主要包括两个方面:信号处理和显示器控制。
首先,信号处理是指对于要显示的动态图像,计算机通过图像处理算法将其转换为一系列的数字信号。
这些信号包含了每个像素点的亮度和颜色信息。
计算机将这些信号按照一定的帧率发送到显示器,以便能够实时更新显示内容。
其次,显示器控制是指通过接收信号并解码,将数字信号转换为相应的像素点显示出来。
常见的显示器控制技术包括光电二极管(LED)、液晶显示(LCD)和有机发光二极管(OLED)等。
这些显示器控制技术都具有自身的特点和优势。
LED显示技术是一种基于半导体发光原理的显示技术。
在LED显示器中,通过对不同颜色的LED灯的亮灭来控制像素点的亮度和颜色。
通过改变LED灯的亮灭状态,可以实现像素点的动态显示。
LCD显示技术是一种基于液晶原理的显示技术。
在LCD显示器中,通过电场作用,控制液晶分子的方向和排列,从而控制光的透过和阻挡。
通过调整电场的强弱和方向,可以实现像素点的亮度和颜色的变化,从而实现动态显示。
OLED显示技术是一种基于有机半导体发光原理的显示技术。
在OLED显示器中,通过在有机材料中施加电场,激发电子和空穴的复合,从而发出光。
通过调整电场的强弱和方向,可以实现像素点的亮度和颜色的变化,实现动态显示。
除了以上的基本原理,动态显示还需要其他的辅助技术和功能,例如扫描技术、刷新率调整和图像处理算法等。
扫描技术用于逐行或逐列地读取像素点的信息,以便显示器能够准确地显示图像。
刷新率调整是指调整显示器刷新图像的频率,使其与输入信号的帧率匹配,以达到流畅的显示效果。
图像处理算法用于对输入信号进行处理和优化,以提高图像的质量和清晰度。
总之,微机原理动态显示的实现是通过信号处理和显示器控制两方面的协同作用来实现的。
微机原理与接口技术课程设计设计课题:动画程序设计班级:学号:姓名:指导教师:2010 年12月24日一、设计题目动画程序设计二、设计内容1、主要内容:利用BIOS系统功能调用,进行简单的动画设计。
利用BIOS中断的10号、21号功能,进行简单的动画设计,并根据以下提示信息进行选择:(1)小鸟从屏幕飞过。
(2)汽车按水平方向从屏幕上开过去。
(3)退出。
2、基本功能:(1)清屏宏定义观察程序流程图,在显示小鸟图形,汽车图形时,要先清屏,所以在编写程序使用到宏,因为宏定义只需在汇编语言原程序中定义一次,便可以多次反复调用。
调用时只需要一条宏指令即可。
程序中的清屏定义为:CLEAR MACRO pch,pcl,pdh,pdl,pbhMOV AH,0MOV AL,02HINT 10HMOV AL,0MOV CH,pchMOV CL,pclMOV DH,pdhMOV DL,pdlMOV BH,pbhINT 10HENDM宏指令名为CLEAR,定义了五个形式参数,分别为:pch,pcl,pdh,pdl,pbh,把pch,pcl 的值分别传给窗口左上角行号、列号,pdh,pdl的值分别传给窗口右下角行号、列号,pbh 的值则传给窗口底部卷入行属性。
利用已经定义好的宏,清屏时可以宏调用。
宏调用语句为:CLEAR 0,0,24,79,7(2)子程序设计在接受键盘输入后,判断AL的值,如果是“1”就调用小鸟子程序,如果是“2”就调用汽车子程序,如果是“3”就结束退出。
在小鸟子程序中又嵌套了延时子程序,在汽车子程序中又嵌套了多个子程序。
(3)显示小鸟字符图形程序中利用BIOS系统功能中10H中断的09号功能进行小鸟字符图形的显示,程序段如下:MOV AH,9MOV AL,76HMOV BL,10INT 10H要是小鸟字符图形显示的更清晰,则需要延时。
循环指令LOOP,当CX不为零时,执行循环转移分支;当CX为零时,退出循环。
河南农业大学课程设计报告题目:移动动画显示设计课程:微型计算机原理专业:电子信息工程班级:09电信(2)班学生姓名:学号:指导教师:朱娟花完成日期:2011.12.26机电工程学院目录前言 (1)1.1实习目的 (1)1.2实习要求 (1)第一章绪言 (1)第二章软件系统介绍 (2)2.1关于emulator的软件介绍 (2)第三章程序设计分析 (5)3.1 程序设计思路 (7)3.2 程序流程图设计 (7)3.3软件各模块内容 (9)3.4程序清单及详细注释 (9)3.5实验结果 (15)第四章系统实现 (16)4.1 程序源代码 (17)总结 (18)参考文献 (18)前言1实习目的汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机硬件特性并能直接控制硬件的唯一语言。
汇编语言程序设计课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。
因此,要求我们能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。
对我们掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。
培养我们综合运用所学知识独立完成汇编程序课题的能力。
使我们能够较全面地巩固和应用课堂中所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。
提高我们对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。
培养我们从资料文献、科学实验中获得知识的能力,提高我们从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。
培养我们勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。
1实习要求动画程序设计要求完成一个在显示器上显示一个图形动画设计,即当程序运行时可看到移动的图形或图像。
此程序涉及到宏和I/O中断的调用,要求我们掌握对宏的定义和使用,使用汇编语言对I/O中断的使用。
小组成员分工协作完成。
要求我们每个成员有自己相对独立的模块,同时要了解其他组员完成的内容。
学生查阅相关资料,自学具体课题中涉及到的新知识,能够按照老师的要求对待设计的系统的程序流程图进行正确地绘制。
学生在老师的指导下,能够写出相应的源程序代码,采用结构化、模块化程序设计方法,功能要完善,界面要美观。
所设计的系统原则上要能够运行无误,结果准确。
在条件允许的情况下,学生能够最终将系统所要实现的功能演示出来。
最后经验收合格后,按要求写出课程设计报告。
总体设计应配合软件总体模块结构图来说明软件应具有的功能。
详细设计应用传统或N-S流程图和屏幕抓图说明,调试的叙述应配合出错场景的抓图来说明出现了哪些错误,如何解决的。
一、绪言课程设计的运行环境:Windows XP/98/2000操作系统、文本编辑器使用EDIT或NOTEPAD,汇编程序使用MASM.EXE,连接程序使用LINK.EXE,调试程序使用DEBUG.EXE。
课程设计所涉及的知识点有:定义数据段,设置主要参数:设置9号中断向量地址,9号中断向量首址;定义时间参数为秒、分、小时。
在代码段,调用10中断、21中断,整个程序使用序分化各子功能。
二、软件系统介绍2.1关于emulator的软件介绍Emu8086为8086 microprocessor emulator(8086微处理器模拟器),它是Windows 平台的一款80x86CPU模拟器,可以用于8086CPU的模拟运行。
经测试可以运行于Windows7 64bit/32bit,Windows XP 32bit。
详细介绍:Emu即是Emulator的意思,即这是一款模拟某个东西工作的软件。
说得通俗点就是(假定是一台计算机),给一段代码给这个软件,它可以模拟真实的硬件工作并输出结果。
Emu8086便是输入80X86汇编语言的并模拟其真实CPU工作的软件,不过这里的模拟并不是100%的和真实一模一样,比如遇到中止的机器码,模拟器不会中止退出,只会提醒输入代码程序halt。
同样,由于是模拟的,那么模拟器中的内存大小、CPU频率等实际问题也是理想化的(可以自己设定,毕竟环境是模拟的嘛),而不是实际的。
现在的CPU都普遍从32bit向64bit升级,从CPU构架上来说是从X86构架向X64构架(AMD64或者EMI64都是X64构架下的指令集)。
但在最基础的学习过程中,16bit的8086CPU依然是微机原理实模式和汇编语言讲解的实例。
不止如此,在64位操作系统开始流行时(编者认为这是计算机发展的进步),操作系统平台下的16bit软件(比如Windows下的debug 程序)必须废弃不能使用了。
在此,Emu8086显得非常有教育意义:及在一个64bit的环境中可以通过模拟器这个工具来制造一个独特的环境来学习汇编等。
同样,Emu8086可以用来分析汇编代码在CPU执行中的每一个步骤。
不同计算机环境,内存分配等实际问题是不一样的,假设Emu8086就是一个基于80x86的计算机系统,但这个系统提供了一些功能,比如自己设定CPU的速度(即指令执行周期),单步执行——而不是真实机器的除非你代码规定了,不然就从头执行到位的过程。
总而言之,由于它是一个模拟器,所以它提供了一个模拟的环境,可以使用汇编语言,并提供了一系列的功能可以了解CPU的实际工作。
第三章设计分析3.1软件设计思路3.1.1变换颜色此模块主要是想呈现一个颜色改变的效果,字体颜色随时改变,同时背景颜色可由键盘控制。
联系实际,可以通过变换字符的颜色来实现这一效果,画不同颜色的字符同样需要调用10中断的9号功能,把想要变换的颜色属性值存放到寄存器DL即可显示出不同颜色的字符。
实现背景色变换需要调用10号中断的0B号功能,颜色还需考虑时间和顺序,所以需要根据需要来设置时间和行列变化方向,可根据想要呈现的图形效果具体设计。
3.1.2变化位置此模块主要用来控制屏幕上所显示字符的位置,通过行列的加减从而控制字符的移动位置及角度。
具体实现步骤是:首先确定动画开始的起始位置,如第五行第一列显示字符MOV DX,0501H,然后行列同时加一则字符按屏幕呈45度角运动,达到边界时,既行或者列达到最大值时再进行行列的加减。
行和列先达到最大或最小值(既边界)的则先进行减或加操作,若行和列同时达到最大或最小值则同时进行减或加操作。
此模块可实现字符按与屏幕边界呈45度角反射。
3.1.3字符的显示此模块是运用取模工具进行取模,从而来确定字符的显示。
3.2程序流程图设计3.3软件各模块内容3.3.1确定动画字符显示样式模块,程序如下:STACK SEGMENTDW 100 DUP(?)STACK ENDScode segmentassume cs:codedot:db 0F7h,0AFh, 14h,0A1h, 14h,0A1h,0F4h,0AFhdb 84h,0A8h, 84h,0A8h,0F7h,0AFh, 00h, 00hdb 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00hdb 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h3.3.2确定边界模块:MOV DX,0501H;确定屏幕显示起始坐标JMP L1L21:CMP DL,24JE L3L1:DISINC DLINC DHCMP DH,18JE L12CMP DL,24JE L3LOOP L1;1 行增列增;行最大值->2;列最大值->3;行列同时达最大值->4L12:CMP DL,24JE L4L2:DISDEC DHINC DLCMP DH,0JE L21CMP DL,24JE L4LOOP L2;2 行减列增;行最小值->1;列最大值->4;行达最小值时列达最大值->3 L43:CMP DL,0JE L1L3:DISINC DHDEC DLCMP DH,18JE L34CMP DL,0JE L1LOOP L3;3 行增列减;行最大值->4;列最小值->1;行达最大值时列达最小值->2L34:CMP DL,0JE L2L4:DISDEC DHDEC DLCMP DH,0JE L43CMP DL,0JE L2LOOP L4;4 行减列减;行最小值->3;列最小值->2;行列同时达最小值->11 行增列增行最大值-》2 列最大值-》3 行列同时达最大值-》42 行减列增行最小值-》1 列最大值-》4 行达最小值时列达最大值-》33 行增列减行最大值-》4 列最小值-》1 行达最大值时列达最小值-》24 行减列减行最小值-》3 列最小值-》2 行列同时达最小值-》13.3.3字符颜色显示SHOW PROC NEARMOV CX,8;显示8列MOV BL,ALS1: MOV AH,2INT 10H;设定光标SHL BL,1JNB S2;CF为0的时候跳转S2PUSH DXADD DL,070HMOV AL,DL;字的颜色POP DXJMP S3S2: MOV AL,00HS3: PUSH BXPUSH CXMOV BL,AL;字符颜色MOV AL,1H;显示太阳MOV CX,1;次数MOV AH,9;功能号INT 10H;写字符到当前光标处POP CXPOP BXINC DL;列+1LOOP S1RETSHOW ENDP3.3.4延时程序;***延时子程序***DLY PROC NEARPUSH CXPUSH DXMOV DX,10000;外循环次数初值DL1:MOV CX,7000;内循环次数初值DL2:LOOP DL2DEC DX;CX为0时DX减1JNZ DL1;DX不为零时跳转至DL1POP DXPOP CX;***将键盘扫描增加至延时函数*** SCANKEYJE DL3INPKEYCMP BL,71HJE QUITCMP BL,51HJE QUIT;按q或Q键跳转至退出CMP BL,70HJE PAUSECMP BL,50HJE PAUSE;按P或p跳转至暂停DL3:RETDLY ENDP3.5实验结果通过调试可实现字符按与屏幕边界呈45度角反射,并且字符颜色随机改变,屏幕背景色可由键盘控制随机改变,通过控制键盘来控制动画的暂停,重启与开始。
动画截图如下:第四章系统实现4.1程序源代码;***读取键盘缓冲区状态*** SCANKEY MACROPUSH AXMOV AH, 01HINT 16HPOP AXENDM;***读取键盘值*** INPKEY MACROPUSH AX MOV AH, 00HINT 16HMOV BL, ALPOP AXENDM;***显示程序宏*** DIS MACROPUSH DXPUSH DXPUSH CXMOV AX,0600HMOV CX,0000HMOV DX,01927HINT 10HPOP CXPOP DXLEA SI,ZM2012CALL DRAWCALL DLYPOP DXENDMSTACK SEGMENTDW 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODESTRING: DB 'Press anykey to start,Press q/Q to quit press p/P to pause!$'ZM2012:DB 0F7H,0AFH, 14H,0A1H, 14H,0A1H,0F4H,0AFHDB 84H,0A8H, 84H,0A8H,0F7H,0AFH, 00H, 00HSTART:PUSH CSPOP DSMOV DX,0909HMOV AH,02HINT 10HLEA DX,STRINGMOV AH,9INT 21HINPKEYCMP BL,71HJE QUIT MOV AX,13HINT 10H;AL=13 320×200 256色图形(EGA)CLD;清方向标志使DF=0;按增量的方式修改串指针MOV DI,BXMOV BH,0MOV BL,05HMOV AH,0BH;背景色INT 10HMOV BX,DIMOV DX,0501H;确定屏幕显示起始坐标JMP L1L21:CMP DL,24JE L3L1:DISINC DLINC DHCMP DH,18JE L12CMP DL,24JE L3LOOP L1;1 行增列增;行最大值->2;列最大值->3;行列同时达最大值->4L12:CMP DL,24JE L4L2:DISDEC DHINC DLCMP DH,0JE L21CMP DL,24JE L4LOOP L2;2 行减列增;行最小值->1;列最大值->4;行达最小值时列达最大值->3L43:CMP DL,0JE L1L3:DISINC DHDEC DLCMP DH,18JE L34CMP DL,0JE L1LOOP L3;3 行增列减;行最大值->4;列最小值->1;行达最大值时列达最小值->2L34:CMP DL,0JE L2L4:DISDEC DHDEC DL CMP DH,0JE L43CMP DL,0JE L2LOOP L4;4 行减列减;行最小值->3;列最小值->2;行列同时达最小值->1;退出QUIT:MOV AH,4CHINT 21H;返回DOS;暂停PAUSE:SCANKEYJE PAUSEINPKEYCMP BL,70HJE DL3CMP BL,50HJE DL3CMP BL,71HJE QUITCMP BL,51HJE QUITJMP PAUSEDRAW:MOV BP,8T1:PUSH DXLODSB;把SI寻址的源串的数据 ;字节送AL, 并SI++CALL SHOWLODSBCALL SHOWPOP DXINC DH ;行+1DEC BPJNZ T1RET;***显示子程序***SHOW PROC NEARMOV CX,8;显示8列MOV BL,ALS1: MOV AH,2INT 10H;设定光标SHL BL,1JNB S2;CF为0的时候跳转S2 PUSH DXADD DL,070HMOV AL,DL;字的颜色POP DXJMP S3S2: MOV AL,00HS3: PUSH BXPUSH CXMOV BL,AL;字符颜色MOV AL,1H;显示太阳MOV CX,1;次数MOV AH,9;功能号INT 10H;写字符到当前光标处 POP CXPOP BXINC DL;列+1LOOP S1RET SHOW ENDP;***延时子程序***DLY PROC NEARPUSH CXPUSH DXMOV DX,10000;外循环次数初值DL1:MOV CX,7000;内循环次数初值DL2:LOOP DL2DEC DX;CX为0时DX减1JNZ DL1;DX不为零时跳转至DL1POP DXPOP CX;***将键盘扫描增加至延时函数***SCANKEYJE DL3INPKEYCMP BL,71HJE QUITCMP BL,51HJE QUIT;按q或Q键跳转至退出CMP BL,70HJE PAUSECMP BL,50HJE PAUSE;按P或p跳转至暂停DL3:RETDLY ENDP ;********END STARTCODE ENDS总结在这次的课程设计中,通过实践操作,加深了对汇编语言的了解,增强了汇编的使用能力,有了整体的了解和把握。