




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、【摘要】实现类似FLAPPY BIRD的效果,用单脉冲触发IRQ中断来控制向上运动,同时在数码管上显示当前分数,并在每得一分时发出提示音【】 并行接口8255A、定时/计数器8253、中断控制器 8259、微机内8255A、8253及扬声器一、目标要求1. 利用1616LED点阵实现FLAPPY BIRD效果2. 通过点击单脉冲出发IRQ中断来控制向上运动3. 实现分数在数码管上实时显示4. 每得一分通过微机内扬声器发出提示音5. 实现的初始界面和结束界面二、设计和实施方案1. 设计方案选择与论述FLAPPY BIRD是最近在APP STORE上非常火的一款,由于该的简单易玩性,再由示例代码L
2、ED6PKU,使我联想到用LED点阵加上单脉冲中断的组合来实现的基本功能。(一)界面LED点阵LED点阵可以分为两个部分,一是地图的显示,即不断向后运动的柱子,该部分可以通过预先设好的地图在LED点阵上循环显示;另一部分即“小鸟”的显示,由于LED点阵的局限性,所以选择用LED点阵上的一个点来代表“小鸟”,同时用一个向量“小鸟”的高度。然后就是将两部分相结合,即判断当LED点阵刷新到“小鸟”所在的列时,将高度向量和要刷新的地图合并输出。最后就是LED点阵刷新控制,在该实验中利用定时器8253,通过设置初值,来控制LED点阵的刷新时间间隔。(二)控制单脉冲触发IRQ中断由于考虑到IRQ中断响应的
3、实时性,所以采用中断控制更能精确的控制“小鸟”,每次触发中断时“小鸟”即上升一格,除此之外还“小鸟”下降,为了模拟重力加速度的效果,从上一次单脉冲触发开始计时,通过计时来使“小鸟”降落的速度越来越快。(三)其他功能首先是的计分功能,通过判断“小鸟”是否成功通过一个柱子来计分,并通过8255在数码管上实时显示当前的得分。然后由于微机也配备了一片8253,其GATE2由微机所配备的8255A的PB0控制、CLK2 的输入时钟频率为1.19MHz、OUT2 输出和8255A的PB1相“与”后经过驱动连接到了微机的扬声器上,利用这一资源实现当每得一分时驱动扬声器最后就是的初始界面和结束界面,初始界面实
4、现在LED点阵上循环显示的名称“FLY DOT”,按任意键开始,当失败后,LED点阵显示“LOSE”,按ESC退出游戏,按其他键返回初始界面2. 对硬件资源的利用和分配(1)8255A:利用了两片8255A,其中一片用于控制LED点阵的输出,另一片C口用于输出数码管,B口用于控制数码管显示以及A口用于接受8253定时器信号(2)8253:利用实验板上的1MHz脉冲计数,来控制LED刷新延迟(3)单脉冲:用于触发IRQ中断(4)微机内8255A、8253及扬声器:用于发出提示音3. 电路连线图8255A0E488HRESET8255A0E48BHCSPB01PA0PC8253LED 点阵1MHz
5、+5VCLK0GATE0OUT0数码管控制 S0,S1数码管IRQCS0E480H单脉冲4.流程图中断服务程序CS RESET主程序5.主要模块说明主要函数及其功能主程序:刷新显示LED 点阵DELAY:刷新延时函数DOWN:控制“小鸟”下落DISP1,DISP2:分别控制输出数码管 1 和数码管 2,显示分数的十位和个位 BEEP:发出得分时的提示音E:显示欢迎界面及结束界面IRQ:中断处理程序,控制“小鸟”向上运动三、实施条件微机一台、并行接口8255A、定时/计数器8253、中断控制器8259、微机内8255A、8253及扬声器、LED点阵、七段数码管四、功能测试及结果分析1. 功能及使
6、用方法说明运行程序,LED点阵开始显示欢迎界面,即循环显示“FLY DOT”字母,按下键盘任意按键即可开始,点阵的点即为“小鸟”,过程中,点击单脉冲可以操作“小鸟”向上运动,数码管上显示当前的分数,每得一分会有提示音,“小鸟”装上柱子后,即为失败,此时显示失败界面,点阵上循环显示“LOSE”字母,按ESC即可退出,按其他键可返回欢迎界面重新开始。2. 测试及结果分析程序基本可以按照上述过程进行,调试过程中,有时会发生中断异常,即也可能会出现“小鸟”突然从点阵上的情况,经各种DEBUG也没有完全发现出错的原因,出现异常后重启或是更换机器可以暂时解决,这也是程序的一个隐患吧。五、该程序基本实现了类
7、似FLAPPY BIRD的功能,但还是有很多可以改进的地方,例如可以增加难度的选择,这个可以通过改变地图以及提高速度来实现,另外数码管只实现了显示两位数的功能,并未实现显示三位数的功能。六、结束语短短的半个学期转眼就过去,从这门课还是学到了不少知识,特别是对于微机原理书本上的知识有了更深入的了解,在调试综合实验的过程中,也提高了自己的动手能力、以及独立处理问题的能力,熟练掌握了并行接口8255A、定时/计数器8253的基本用法,虽然这些都已经过时,但其中的原理对于今后更深入的学习还是非常有帮助的,最后也感谢杨老师的耐心指导。七、附录程序代码及注释STACK SEGMENT PARA STACK
8、DW 128H DUP(0) STACK ENDSdata segmentLED DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H DB 7FH, 67H, 77H, 7CH, 39H, 5EH, 79H, 71H;play1地图db 080h, 0F8h, 0F8h, 080h, 080h, 080h, 0F0h, 0F0h, 080h, 080h, 080h, 0F8h, 0F8h,080h, 080h, 080hplay2db 001h, 01Fh, 01Fh, 001h, 001h, 001h, 03Fh, 03Fh, 001h, 001h, 001h
9、, 07Fh, 07Fh,001h, 001h, 001h;欢迎界面we1db 0ffh, 090h, 090h, 000h, 000h, 0ffh, 001h, 001h, 001h, 000h, 080h, 060h, 01Fh, 060h,080h, 000hwe2db 000h, 07Fh, 041h, 041h, 03Eh, 000h, 03Eh, 041h, 041h, 041h, 03Eh, 000h, 040h, 07Fh,040h, 000h;失败界面lo1db 000h, 0ffh, 000h, 000h, 07Fh, 080h, 080h, 07Fh, 000h, 0FF
10、h, 081h, 081h, 000h, 0FFh,081h, 081hlo2db 000h, 0ffh, 001h, 001h, 0FEh, 001h, 001h, 0FEh, 000h, 001h, 001h, 0FFh, 000h, 0FFh,001h, 001hindex db 00h looptimer db 00h lose db 00h FALL DB 00H FALLTIME DB 00H;控制小鸟下降FALLDOWN DB 00H, 00H, 00h, 01H, 00H, 00H, 01H, 00H, 01H, 01H, 01H, 01H, 01H ,01H, 01H, 01
11、H, 01H, 01H, 01H, 01H, 01HSCORE DB 00H GETSCORE DB 00H EXC DB 00H HEIGHT DW 0100Hdata endscode segment;当前得分;小鸟当前位置astart:me cs:code, ds:dataMOV MOV MOVMOVAX,DS,DX,AX, 21HCS AXOFFSET IRQ250EH;初始化IRQ中断CLI MOV MOV OUT INC MOVOUTDX,AL,DX, DX AL,DX,0EC4CH43H AL1DHALIN AL, 21HAND OUT MOVMOVAL, 10111111B 2
12、1H, ALAX, DATADS, AXMOV MOVOUTDX, 0E4BBH AL, 10010000BDX, AL;初始化8255,用于数码管的显示again:MOV MOVmov mov MOVMOVINDEX, 00H LOOPTIMER, 00Hlose, 00h height, 0100h FALL, 00HFALLTIME, 00H;初始化全局参数CALLEmov mov outmovdx,0e48bh al,80h dx,albx,00hs0:movmovdx,0e488hal,index;apush bxmovbx, offset play2;在点阵上刷新地图xlatpxc
13、mp bl, 0fh jne w1call disp1w1:CMP BL, 7 JNE N0call disp2call down;是否刷新到小鸟所在列;显示得分;控制小鸟下落CMP AL, 001HJE NPCMP JNE INCMOVGETSCORE, 0 NFSCOREGETSCORE, 1;判断是否得分CALL BEEP;发出提示音P2:JMPNFNP:NF:MOVGETSCORE, 0PUSH BXMOVmovBX, HEIGHTah, altest bl, bl jz o1OR AL, BLcmp ah, al jne o1jmp outsPX;判断是否撞上柱子o1:N0:out
14、dx,almov dx,0e489h;mov al,0feh;088h;bmov al,indexpush bxmov bx, offset play1 xlatpxCMP BL, 7JNE N1PUSH BXMOV BX, HEIGHTmov ah, al test bh, bh jz oOR AL, BHcmp ah, al jne ojmp outsPXo:N1:out dx,alinc indexcmp index, 010h jnz goonsub index, 010hJMP GOONJ: JMP S0goon:mov movoutdx,0e48ah al,bl;09h;bldx,
15、al;cCALL DELAY;延时函数add cmp jnz mov inc cmpjnzbl,1h bl,010h;0bh;0eh;8;010h key0bl,0 looptimerlooptimer,04fhkey0sub inc cmp jnzsublooptimer,04fh indexindex, 010h key0index, 010hkey0:movah,116h s0jmpouts:mov callcmplose, 1e lose, 1je exitsjmp exits:movagainah,4ch21hDOWNPROC NEAR PUSH AX PUSH BX PUSH DX
16、PUSH DSMOVMOVAX, DATADS, AXMOV INC MOV CMPJNEBL, FALLTIME BLFALLTIME, BLbl, 03fh QMOVMOVAL, FALLBX, OFFSET FALLDOWN;根据上次中断后计时查表决定下落XLATMOVCL, ALMOVSHRBX, HEIGHTbx, clMOV HEIGHT, BXMOV BL, FALL INC BLMOV FALL, BLMOV FALLTIME, 0Q:POP DS POP DX P XPOP AX RETENDPDOWNDISP1 PROC NEAR PUSH AX PUSH BX PUSH
17、DXPUSH DS;显示分数MOVMOVAX,DS,DATAAX;MOV DX, 0E4BBH;MOV AL, 10010000B;OUT DX, ALXORMOV MOVAH,AL,BL,AHSCORE 10IDIV BLPUSH AXMOV MOV OUTPOPAL,DX,DX, AX01H0E4B9H ALMOVMOVAL,BX,AHOFFSET LEDXLATMOVOUTDX,DX,0E4BAHALPOP DS POP DX P XPOP AX RETDISP1 ENDPDISP2 PROC NEAR PUSH AX PUSH BX PUSH DXPUSH DSMOVMOVAX,DS,
18、DATAAXMOV MOVOUTAL,DX,DX,02H0E4B9H ALXOR MOVMOVAH,AL,BL,AH SCORE10IDIV BLMOVBX,OFFSET LEDXLATMOVOUTDX,DX,0E4BAHALPOP POP P POPRETDS DX XAXDISP2 ENDPBEEPPROC NEAR PUSH AX PUSH BX PUSH CXMOV AL, 10110110B; 发出提示音OUT 43H, AL MOV AX, 1190 OUT 42H, AL MOV AL, AH OUT 42H, AL IN AL, 61H MOV AH, ALOR AL, 03H
19、OUTMOV MOV61H, AL CX, 0BL, 50L0:LOOP L0DEC JNZ MOV OUT POP P POP RETENDPBL L0AL, AH 61H, AL CXXAXBEEPDELAY PROC NEAR PUSH AXPUSH DX;延时函数MOV DX, 0E483H MOV AL, 10HOUT DX, ALMOV DX, 0E480H MOV AL, 80OUT DX, ALKKK:MOV DX, 0E4B8H IN AL, DX TEST AL, 01JZ KKKPOP DX POP AX RETDELAY ENDPE PROC near PUSH AX
20、PUSH BX PUSH CX PUSH DXPUSH DS;显示欢迎和失败界面movmovax,datads,axmov mov outmovdx,0e48bh al,80h dx,albx,0hA0:movdx,0e488h;a;mov al,07eh;33hmoval,indexpush bxcmplose, 00hje ae2mov jmpmovbx, offset lo2 be2bx, offset WE2ae2:be2:xlatpxoutmovdx,aldx,0e489h;mov al,0feh;088h;bmoval,indexpush bxcmplose, 00hje ae1mov bx, offset lo1 jmp be1mov bx, offset WE1 xlatpxae1:be1:out
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 吊顶材料合同范例
- 卫生用品合同范本
- 下水管改造合同范本
- eve快递合同范本
- 合作开宾馆合同范本
- 卫浴仓库用工合同范本
- 区域包干合同范本
- 住户拆迁补偿合同范例
- 卤菜素菜采购合同范本
- 制沙机合同范本
- 2024解析:第八章牛顿第一定律、二力平衡-基础练(解析版)
- 《传媒法的原则》课件
- 2024解析:第十三章内能-基础练(解析版)
- 2024年网格员考试题库含答案
- GB/Z 44047-2024漂浮式海上风力发电机组设计要求
- (完整)2019年风廉政建设主体责任落实情况监督检查记录表
- 《selenium安装教程》课件
- 2024年辽宁省中考数学真题卷及答案解析
- 绝句迟日江山丽说课稿
- 物业员工安全知识教育培训
- 动物性食品卫生检验教案2
评论
0/150
提交评论