汇编俄罗斯方块8.8点阵
- 格式:doc
- 大小:112.00 KB
- 文档页数:25
本科课程设计题目:基于单片机的8*8LED 俄罗斯方块设计姓名孙俊学号2008130346院(系)物理与信息科学学院电子系专业、年级电子信息科学与技术2008级指导教师刘美容二○一一年十月基于单片机的8x8 俄罗斯方块设计一、设计任务《俄罗斯方块》是一款世人皆知,看似简单实则变化无穷的小游戏。
本次设计以51单片机为基础,设计一款功能简单的8*8点阵俄罗斯方块游戏,我们将以汇编语言编程实现以下操作:图形的显示合成,通过按键控制图形的移动和旋转,满格消行,手动复位等。
本次设计俄罗斯方块功能简单,用单片机的最小系统就能得以实现。
而单片机的最小系统设计中实际上最重要的就是对键盘/显示器接口电路的设计,由于系统功能不同所以要求就不同,接口设计也就不同。
对一个键盘/显示器接口设计应从整个系统出发,综合考虑软、硬件特点。
其中,硬件设计包括初始的设计原理和原理图介绍,到最终的电路图实际焊接以及布局,软件设计我们会给出具体的设计方案,比如图形的显示合成,通过按键控制图形的移动和旋转,满格消行等的设计流程图,以及具体的汇编程序。
二、设计方案本次设计初期是在keil和proteus联合仿真中进行,编程语言为51汇编语言,后期是进行实物焊接。
本次我们采用单片机STC89C52控制模块提供电源,以点阵式LED 显示,采用独立按键,直接在I/O口线上接上按键开关。
因为设计时精简和优化了电路,所以剩余的口资源还比较多,我们使用四个按键,分别是旋转键,下键,左键,右键。
这种方案实现可行,既满足系统功能要求,又减少了系统实现的复杂度。
而由于STC89C52是一种带8K 字节闪烁可编程可檫除只读存储器的低电压,高性能COMOS8的微处理器,该器件采用ATMEL 搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
89C52内置8位中央处理单元、256字节内部数据存储器RAM 、8k 片内程序存储器(ROM )32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。
俄罗斯方块游戏是VHDL 应用于复杂数字系统的一个经典设计,本章将详细介绍该游戏的设计原理和设计方法。
其中包括系统构成、系统设计原理和系统各个模块的实现方法。
8.1 系统结构原理8.1.1 系统端口图8.1给出了系统的顶层设计符号,其端口包括:1)kc :PS/2键盘时钟输入; 2)kd :PS/2键盘数据输入; 3)mclk :系统主时钟输入;4)blue :蓝色信号输出到VGA 显示器接口; 5)grn :绿色信号输出到VGA 显示器接口; 6)red :红色信号输出到VGA 显示器接口; 7)hs :行扫描信号到VGA 显示器接口;8)vs :列扫描信号到VGA 显示器接口要开始一个游戏按F2键,但是当游戏正在运行时,不允许按键F2,如果要开始一个新的游戏必须停止它或者按键F1。
该游戏有5个不同的目标,可以对它进行旋转和左移或右移。
该游戏有4种不同的速度,当分数增加的时候,速度也随之增加,按键S 将增加速度,直到目标到达最底部。
速度和分数的关系是: 1)当分数<100,速度等级为1;2)当分数在(100,200)之间时,速度等级为2; 3)当分数在(200,300)之间时,速度等级为3; 4)当分数在>300时,速度等级为4;如图8.2所示,有两种不同的目标:右边是文本框,左边是俄罗斯方块。
使用两个BRAM 存储数据。
文本框中包含了32x16=512个字符,每个字符包含8比特,所以需要使用BRAM 。
在俄罗斯方块部分也使用了一个BRAM ,但其实这不是必须的,因为这增加了gamecontrol 模块的设计复杂度(只能在一个时钟周期访问一个BRAM )。
俄罗斯方块有10x20个块组成,每个块保存了4位(第1位用于说明是否有其它东西,其它3位保持着颜色)。
在屏幕上画像素需要25MHz 时钟,在设计中使用3线来传送颜色。
这也就是说,只能画出8种颜色(红,绿,蓝,黄,黑,白,浅绿和紫红)。
目录1 需求分析 (2)1.1前言 (2)1.2课题设计内容 (2)1.3设计目的 (2)2 总体设计 (3)2.1设计思路 (3)2.2方案设计 (3)3 详细设计 (5)3.1硬件系统电路设计 (5)3.1.1控制电路设计 (5)3.1.2主要功能特性: (6)3.2控制系统的软件设计 (7)3.2.1 主程序 (7)3.2.2初始化程序 (7)3.2.3显示程序 (8)3.2.4程序设计清单 (8)4 实现 (9)4.1元器件的选择 (9)4.2元器件焊接 (9)4.2.1焊接准备 (9)4.2.2焊接过程 (9)4.3软件的调试和烧入 (11)5 使用说明 (12)5.1各部分组成及功能 (12)5.1.1 LED显示屏 (12)5.1.2以单片机为核心的动态扫描电路 (12)5.2显示时间的分析 (13)6 实验小结 (14)7 收获体会 (15)附录一 (16)附录二 (16)附录三 (17)1 需求分析1.1前言当今世界,电子技术迅猛发展,点阵式显示器件作为现代信息显示的重要媒体,在金融证券、体育、机场、交通、商业、广告宣传、邮电电信、指挥调度、国防军事等许多领域中得到了广泛应用。
因此点阵式显示器件的研制、生产也的到了迅速的发展,并逐步形成产业,成为光电子行业的新兴产业领域。
由于LED电子显示屏具有所显内容信息量大,外形美观大方,操作使用方便灵活.适用于火车,汽车站,码头,金融证券市场,文化中心,信息中心体育设施等公共场所。
该项目广泛涉及了计算机及电子技术中的电源技术、单片机技术、数据通讯技术、显示技术、存储技术、系统软件技术、接口及驱动等技术。
LED显示又可以分为单色显示和双色显示,可以按照需要的大小、形状和颜色进行组合,并用单片机控制实现各种文字或图形的变化,达到宣传和提示的目的。
1.2课题设计内容该电路系统是采用AT89C2051单片机为控制器,控制点阵LED显示器进行显示,本电路控制模块有主模块和显示模块组成。
简易俄罗斯方块游戏机实验名称简易俄罗斯方块游戏机姓名AugJ班级信息与通信工程学院09级14班学号辅导老师张咏梅日期2011年10月18日一、设计课题的任务要求1、基本内容用一个8*8点阵做为基本显示屏,一个发光点表示一个图形,完成俄罗斯方块游戏的基本功能:下落、左右移动、消行和显示得分情况,当某一列到顶时游戏结束。
(1)在游戏开始前,请设置一个点阵像素的扫描环节,显示方式自选,以判断点阵的好坏。
(2)游戏结束时,得分保持,按“开始”键游戏重新开始。
2、提高要求(1)选作:用一个8*8点阵做为基本显示屏,用多个亮点组成各种形状的“方块”,实现俄罗斯方块游戏机的基本功能。
(2)自拟其他功能二、系统设计设计思路:由于实验中用到了64个点来完成显示功能,所以可以选用一个64位的向量STATUS(0 TO 63)来存储各点状态,再用两个整型数分别控制当前点的行列坐标,但是若采用该种控制方式会涉及到乘法运算,因此改为8个8位向量STAN (0 TO 7),每个向量代表一列点阵,这样做不仅使控制简单,而且在扫描显示的时候很方便,代码也很简洁。
设计包括2个大的元件,一个是RUSSIA,其功能是存储状态,分频,完成左右下移动以及计分等功能;另一个是RUSSIA_SCAN,主要完成点阵扫描和数码管译码。
具体设计是这样的:8个向量STA0,STA1,STA2,STA3,STA4,STA5,STA6,STA7记录游戏状态,点的坐标由COL 和ROW来控制。
设置两个指针FLAG和ROWCLEAR,如果八列中有一列都为1,表示游戏结束了,置FLAG为1,程序进入NULL并蜂鸣器发声;当最后一行全部为1时,置ROWCLEAR=1,当ROWCLEAR=1时,表示要消行,加分,并且将上一行的值赋到下一行。
游戏继续,如按下左键或右键,程序更根据下一状态决定是否左移或右移。
(BTN5为复位RESET,BTN7为左,BTN6为右,BTN5为扫描)若无键按下,则根据情况当前点是否需要自动下移。
8*8点阵显示程序(汇编)//8*8 点阵LED 显示,用单片机AT89C51 驱动8*8 点阵LED 显示屏//轮流显示0-9 的数字,显示的方式采用自右向左拉幕式显示//源程序和proteus 仿真我一打包,地址:proteus.5d6d/thread-9031-1-1.htmlR_CNTEQU31HNUMBEQU32HTCOUNTEQU33H ORG0000H LJMPSTART ORG0BH ;定时器中断入口地址LJMPINT_T0 ORG0030HSTART:MOVR0,#00H ;显示的幕次(即每一幕显示的:行码起始序号)值0MOVR_CNT,#00H;列码序列号置0MOVTCOUNT,#00H ;行码序列号置0 MOVTMOD,#01H MOVTH0,#(65536-5000)/256 MOVTL0,#(65536-5000)MOD 256SETB TR0 MOVIE,#82HSJMP$//定时器中断处理函数INT_T0:MOVTH0,#(65536-5000)/256MOVTL0,#(65536-5000)MOD 256 MOVDPTR,#TAB ;取列码表首地址MOVA,R_CNTMOVCA,@A+DPTR MOVP3,AMOVDPTR,#NUB ;取行码表首地址MOVA,NUMB MOVCA,@A+DPTR MOVP0,A ;输出行号INCNUMBNEXT1: INCR_CNT MOVA,R_CNT CJNEA,#8,NEXT2 MOVR_CNT,#0 MOVNUMB,R0NEXT2: INCTCOUNT MOVA,TCOUNT CJNEA,#40,NEXT4 ;每个数字显示200msMOVTCOUNT,#00H INC R0 ;上一幕显示行码的起始序列号+1 CJNER0,#88,NEXT3MOVR0,#00HNEXT3:MOVNUMB,R0 ;送新一幕显示行码的起始序列号NEXT4:RETITAB: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH;列值NUB: DB 00H,00H,00H,00H,00H,00H,00H,00H;空DB00H,00H,3EH,41H,41H,41H,3EH,00H;0 DB00H,00H,00H,00H,21H,7FH,01H,00H;1 DB。
纯为个人思路,无特殊,惊人语句….初学完的;程序功能:最原始简单版俄罗斯方块;硬件连接:接双色点阵;晶振型号:12M;单片机:STC89C52;编写时间:;编程人:HANG BIT P2.0 ;点阵行输入HW BIT P2.1HZ BIT P2.2LIE BIT P2.3 ;点阵列输入LW BIT P2.4LZ BIT P2.5WEI BIT P2.6DUAN BIT P2.7XIAN EQU P1BiaoX BIT 20H.0Biao_z BIT 20H.1 ;按键是否按下标志Biao_y BIT 20H.2Biao_x BIT 20H.3Dou_z BIT 20H.4 ;按键相应标志位Ying_z BIT 20H.5Dou_y BIT 20H.6Ying_y BIT 20H.7Dou_x BIT 21H.0Ying_x BIT 21H.1Biao_ZY BIT 21H.2Biao_zt BIT 21H.3 ;开始、暂停标志KEY_z BIT P0.0 ;左、右、旋转按键KEY_y BIT P0.1KEY_x BIT P0.2ORG 0000HAJMP StartORG 0003HAJMP Int0_serORG 000BHAJMP T0_serORG 0030H;*************************Start:MOV R0,#08HMOV R1,#51HMOV R3,#03HMOV R4,#08HMOV 40H,#03HMOV 30H,#0FEHMOV 33H,#0FEHMOV 37H,#80HMOV TMOD,#01HMOV TH0,#(65536-10000) / 256MOV TL0,#(65536-10000) MOD 256SETB EASETB EX0SETB ET0SETB IT0SETB TR0;*****************************Main:CALL Zhanting ;暂停响应CALL Xianshi ;点阵显示CALL CMkey_z ;左移按键CALL CMkey_y ;右移按键CALL CMkey_x ;旋转按键CALL Panduan_z ;判断是否可以左移CALL Panduan_y ;判断是否可以右移CALL Panduan_x ;判断是否可以旋转CALL Panduan_xia ;判断是否可以下移CALL Panduan_xh ;判断消行CALL Saomiao_xh ;扫描消行CALL Jifen ;计算分值CALL JifenXianshi ;分值显示ORL PCON,#01HAJMP Main;*****************************Zhanting:JB Biao_zt,Out_zt ;判断是否暂停Zhanti:MOV A,37H ;显示STARTRLC AMOV 37H,AMOV LIE,CCLR LWSETB LWDJNZ R0,ZhantiMOV R0,#08HCLR LZSETB LZRLC ARR AMOV 37H,AZhan:SETB HANGCLR HWSETB HWDJNZ R0,ZhanMOV R0,#08HMOV A,38HINC 38HMOV DPTR,#TABZMOVC A,@A+DPTRMOV 39H,A Zhant:MOV A,39HRLC AMOV 39H,AMOV HANG,CCLR HWSETB HWDJNZ R0,ZhantMOV R0,#08HCLR HZSETB HZCALL DelayCALL DelayQing:SETB HANGCLR HWSETB HWDJNZ R0,QingMOV R0,#08H Qing1:SETB HANGCLR HWSETB HWDJNZ R0,Qing1MOV R0,#08HCLR HZSETB HZDJNZ R4,ZhantiMOV R4,#08HCLR CYMOV A,38HSUBB A,#08HMOV 38H,A// MOV 38H,#00HMOV A,44HMOV 34H,#00HCJNE A,#10,ZhantingINC 38HMOV 44H,#00HMOV A,38HCJNE A,#31,ZhantingMOV 38H,#00HAJMP ZhantingOut_zt:RET;***************************** Xianshi: ;移动积木显示SETB HANGCLR HWSETB HWDJNZ R0,XianshiMOV R0,#08HLoop:MOV A,30HRLC AMOV 30H,AMOV HANG,CCLR HWSETB HWDJNZ R0,LoopMOV R0,#08HCLR HZSETB HZMOV A,30HRLC ARL AMOV 30H,ACALL XingzMOV A,31HMOVC A,@A+DPTRMOV 32H,ACALL HengyiLoop1:MOV A,32HRLC AMOV 32H,AMOV LIE,CCLR LWSETB LWDJNZ R0,Loop1MOV R0,#08HCLR LZSETB LZCALL DelayCALL QingpingBeijing: ;背景显示SETB HANGCLR HWSETB HWDJNZ R0,BeijingMOV R0,#08HLoop3:MOV A,33HRLC AMOV 33H,AMOV HANG,CCLR HWSETB HWDJNZ R0,Loop3MOV R0,#08HCLR HZSETB HZMOV A,33HRLC ARL AMOV 33H,AMOV A,@R1MOV 50H,ALoop2:MOV A,50HMOV 50H,AMOV LIE,CCLR LWSETB LWDJNZ R0,Loop2MOV R0,#08HINC R1CLR LZSETB LZCALL DelayCALL QingpingCJNE R1,#59H,Xianshi0MOV R1,#51HMOV 31H,#00HRETXianshi0:AJMP Xianshi;************ 确认显示形状Xingz:MOV A,40HCJNE A,#0,S1MOV DPTR,#TAB0RETS1: CJNE A,#1,S2CALL Xuanz1RETS2: CJNE A,#2,S3CALL Xuanz2RETS3: CJNE A,#3,S4CALL Xuanz3RETS4: CJNE A,#4,S5CALL Xuanz4RETS5: CJNE A,#5,S6CALL Xuanz5RETS6: CALL Xuanz6RETXuanz1:MOV A,41HCJNE A,#0,Xu1MOV DPTR,#TAB1RETXu1:CJNE A,#2,Zhuan1MOV DPTR,#TAB1RETZhuan1:MOV DPTR,#TAB1_1RETXuanz2:MOV A,41HCJNE A,#0,Zhuan2_1MOV DPTR,#TAB2RETZhuan2_1:CJNE A,#1,Zhuan2_2MOV DPTR,#TAB2_1RETZhuan2_2:CJNE A,#2,Zhuan2_3MOV DPTR,#TAB2_2RETZhuan2_3:MOV DPTR,#TAB2_3RETXuanz3:MOV A,41HCJNE A,#0,Zhuan3_1MOV DPTR,#TAB3RETZhuan3_1:CJNE A,#1,Zhuan3_2MOV DPTR,#TAB3_1RETZhuan3_2:CJNE A,#2,Zhuan3_3MOV DPTR,#TAB3_2RETZhuan3_3:MOV DPTR,#TAB3_3RETXuanz4:MOV A,41HCJNE A,#0,Zhuan4_1MOV DPTR,#TAB4RETZhuan4_1:CJNE A,#1,Zhuan4_2MOV DPTR,#TAB4_1RETZhuan4_2:CJNE A,#2,Zhuan4_3MOV DPTR,#TAB4_2RETZhuan4_3:MOV DPTR,#TAB4_3RETXuanz5:MOV A,41HCJNE A,#0,Zhuan5_1MOV DPTR,#TAB5RETZhuan5_1:CJNE A,#2,Zhuan5_2MOV DPTR,#TAB5RETZhuan5_2:MOV DPTR,#TAB5_1RETXuanz6:MOV A,41HCJNE A,#0,Zhuan6_1MOV DPTR,#TAB6RETZhuan6_1:CJNE A,#2,Zhuan6_2MOV DPTR,#TAB6RETZhuan6_2:MOV DPTR,#TAB6_1RET;************ 确认左右移动Hengyi:CJNE R3,#03H,H1RETH1: MOV A,32HRL ACJNE R3,#02H,H2AJMP OUT1H2: RL ACJNE R3,#01H,H3AJMP OUT1H3: RL ACJNE R3,#00H,H4AJMP OUT1H4: MOV A,32HRR ACJNE R3,#04H,H5AJMP OUT1H5: RR ACJNE R3,#05H,H6AJMP OUT1H6: RR ACJNE R3,#06H,H7AJMP OUT1H7: RR AOUT1:MOV 32H,ARET;***************************** 左移按键CMkey_z:JB KEY_z,Loopz0JB Dou_z,Loopz2SETB Dou_zRETLoopz2:INC 42HJB Ying_z,OutzSETB Ying_zSETB Biao_zRETLoopz0:CLR Dou_zCLR Ying_zOutz:RET;***************************** 右移按键CMkey_y:JB KEY_y,Loopy0JB Dou_y,Loopy2SETB Dou_yRETLoopy2:INC 42HJB Ying_y,OutySETB Ying_ySETB Biao_yRETLoopy0:CLR Dou_yCLR Ying_yOuty:RET;***************************** 旋转按键CMkey_x:JB KEY_x,Loopx0JB Dou_x,Loopx2SETB Dou_xRETLoopx2:INC 42HJB Ying_x,OutxSETB Ying_xSETB Biao_xRETLoopx0:CLR Dou_xCLR Ying_xOutx:RET;***************************** 左移防冲突Panduan_z:JBC Biao_z,ZuoyiRETZuoyi:SETB Biao_ZYCALL HangyiMOV A,36HJB ACC.7,YesZuoCALL HangerMOV A,36HJB ACC.7,YesZuoCALL HangsanMOV A,36HJB ACC.7,YesZuo ;已到边上,不用移动MOV 45H,R3DEC R3MOV A,35HCJNE A,#0,Zuo_0 ;防移动冲突背景AJMP YesZuoZuo_0:CJNE A,#1,Zuo_1AJMP YesZuoZuo_1:CJNE A,#2,Zuo_2CALL Xuan_1AJMP YesZuoZuo_2:CJNE A,#3,Zuo_3CALL Xuan_2AJMP YesZuoZuo_3:CJNE A,#4,Zuo_4CALL Xuan_3AJMP YesZuoZuo_4:CJNE A,#5,Zuo_5CALL Xuan_4AJMP YesZuoZuo_5:CALL Xuan_5YesZuo:RET;***************************** 右移防冲突Panduan_y:JBC Biao_y,YouyiRETYouyi:SETB Biao_ZYCALL HangyiMOV A,36HJB ACC.0,YesyouCALL HangerMOV A,36HJB ACC.0,YesyouCALL HangsiMOV A,36HJB ACC.0,Yesyou ;已到边上MOV 45H,R3INC R3MOV A,35HCJNE A,#0,You_0 ;防右移冲突背景AJMP YesyouYou_0:CJNE A,#1,You_1AJMP YesyouYou_1:CJNE A,#2,You_2CALL Xuan_1AJMP YesyouYou_2:CJNE A,#3,You_3CALL Xuan_2AJMP YesyouYou_3:CJNE A,#4,You_4CALL Xuan_3AJMP YesyouYou_4:CJNE A,#5,You_5CALL Xuan_4AJMP YesyouYou_5:CALL Xuan_5Yesyou:RET;***************************** 旋转防冲突Panduan_x:JBC Biao_x,XuanzhuanRETXuanzhuan: ;方形不用旋转MOV A,40HCJNE A,#0,BieRETBie:MOV A,35HCJNE A,#0,PanyiRETPanyi:MOV 43H,41HINC 41HMOV A,40HCJNE A,#1,NoyiMOV A,35HCJNE A,#1,XuanyiMOV 41H,43HRETXuanyi:MOV A,41H ;一字型防出边界CJNE A,#1,Yi_1AJMP Yi_hYi_1:CJNE A,#3,Yi_sAJMP Yi_hYi_s: ;一字型防冲突背景CALL HangyiMOV A,36HANL A,#83HCJNE A,#0,NoxuanYi_h:MOV A,35HCJNE A,#2,Yi_h2CALL Xuan_1CALL YesxuanRETYi_h2:MOV A,35HCJNE A,#3,Yi_h3CALL Xuan_2CALL YesxuanRETYi_h3:MOV A,35HCJNE A,#4,Yi_h4CALL Xuan_3CALL YesxuanRETYi_h4:MOV A,35HCJNE A,#5,Yi_h5CALL Xuan_4CALL HangsiMOV A,36HANL A,54HCJNE A,#0,NoxuanCALL YesxuanRETYi_h5:CALL Xuan_5CALL HangsiMOV A,36HANL A,55HCJNE A,#0,NoxuanCALL YesxuanRETNoyi: ;另外五种变形防出边界冲突背景CALL YouchuMOV A,35HCJNE A,#1,Xuanzh1CALL YesxuanRETXuanzh1: ;防冲突背景CJNE A,#2,Xuanzh2CALL Xuan_1CALL YesxuanRETXuanzh2:CJNE A,#3,Xuanzh3CALL Xuan_2CALL YesxuanRETXuanzh3:CJNE A,#4,Xuanzh4CALL Xuan_3CALL YesxuanRETXuanzh4:CJNE A,#5,Xuanzh5CALL Xuan_4CALL YesxuanRETXuanzh5:CALL Xuan_5Yesxuan:MOV A,41HCJNE A,#4,OutqMOV 41H,#00HOutq:RETNoxuan:MOV 41H,43HRETYouchu: ;防右出边界子程序CALL HangyiMOV A,36HJB ACC.0,NoxuanCALL HangerMOV A,36HJB ACC.0,NoxuanCALL HangsanMOV A,36HJB ACC.0,NoxuanRETXuan_1: ;防冲突子程序CALL HangyiMOV A,36HANL A,54HCJNE A,#0,No_zyxRETXuan_2:CALL HangyiMOV A,36HANL A,55HCJNE A,#0,No_zyxCALL HangerMOV A,36HANL A,54HCJNE A,#0,No_zyxRETXuan_3:CALL HangyiMOV A,36HANL A,56HCJNE A,#0,No_zyxCALL HangerMOV A,36HANL A,55HCJNE A,#0,No_zyxCALL HangerMOV A,36HANL A,54HCJNE A,#0,No_zyxRETXuan_4:CALL HangyiMOV A,36HANL A,57HCJNE A,#0,No_zyxCALL HangerMOV A,36HANL A,56HCJNE A,#0,No_zyxCALL HangerMOV A,36HANL A,55HCJNE A,#0,No_zyxRETXuan_5:CALL HangyiMOV A,36HANL A,58HCJNE A,#0,No_zyxCALL HangerMOV A,36HANL A,57HCJNE A,#0,No_zyxCALL HangerMOV A,36HANL A,56HCJNE A,#0,No_zyxRETNo_zyx:JBC Biao_ZY,No_zNo_x:AJMP Noxuan ;旋转冲突背景No_z:MOV R3,45H ;左、右冲突背景RET;***************************** 一秒下移子程序Panduan_xia:MOV A,34HCJNE A,#100,Out_xMOV 34H,#00HMOV A,30HRL AMOV 30H,AINC 35HOut_x:RET;***************************** 判断是否可下移Panduan_xh:MOV A,35HCJNE A,#00H,X1RETX1: CJNE A,#01H,X2CALL XH1RETX2: CJNE A,#02H,X3CALL XH2RETX3: CJNE A,#03H,X4CALL XH3RETX4: CJNE A,#04H,X5CALL XH4RETX5: CJNE A,#05,X6CALL XH5RETX6: CALL XH6RET;************XH1:CALL HangyiMOV A,36HANL A,54HCJNE A,#0,WanRETXH2:CALL HangyiMOV A,36HANL A,55HCJNE A,#0,WanCALL HangerMOV A,36HANL A,54HCJNE A,#0,WanRETWan: ;游戏结束AJMP $XH3: ;防下移冲突背景子程序CALL HangyiMOV A,36HCJNE A,#0,Noxia3CALL HangerMOV A,36HANL A,55HCJNE A,#0,Noxia3CALL HangsanMOV A,36HANL A,54HCJNE A,#0,WanRETNoxia3:CALL HangsanMOV A,36HCJNE A,#0,WanCALL HangyiMOV A,36HORL A,55HMOV 55H,ACALL HangerMOV A,36HORL A,54HMOV 54H,ACALL SMHang ;扫描行RETXH4:CALL HangyiMOV A,36HANL A,57HCJNE A,#0,Noxia4CALL HangerMOV A,36HANL A,56HCJNE A,#0,Noxia4CALL HangsanMOV A,36HANL A,55HCJNE A,#0,Noxia4RETNoxia4:CALL HangsiMOV A,36HCJNE A,#0,WanCALL HangyiORL A,56HMOV 56H,ACALL HangerMOV A,36HORL A,55HMOV 55H,ACALL HangsanMOV A,36HORL A,54HMOV 54H,ACALL SMHang ;扫描行RETXH5:CALL HangyiMOV A,36HANL A,58HCJNE A,#0,Noxia5CALL HangerMOV A,36HANL A,57HCJNE A,#0,Noxia5CALL HangsanMOV A,36HANL A,56HCJNE A,#0,Noxia5RETNoxia5:CALL HangyiMOV A,36HORL A,57HMOV 57H,ACALL HangerMOV A,36HORL A,56HMOV 56H,ACALL HangsanMOV A,36HORL A,55HMOV 55H,ACALL HangsiMOV A,36HORL A,54HMOV 54H,ACALL SMHang ;扫描行RETXH6:CALL HangyiMOV A,36HORL A,58HMOV 58H,ACALL HangerMOV A,36HORL A,57HMOV 57H,ACALL HangsanMOV A,36HORL A,56HMOV 56H,ACALL HangsiMOV A,36HORL A,55HMOV 55H,ACALL SMHang ;扫描行RETSMHang: ;积木停止,出新积木SETB BiaoXMOV 30H,#0FEHMOV 31H,#00HMOV 34H,#00HMOV 35H,#00HRET;************Hangyi:CALL XingzMOV A,#01HMOVC A,@A+DPTRMOV 32H,ACALL HengyiMOV 36H,32HRETHanger:CALL XingzMOV A,#00HMOVC A,@A+DPTRMOV 32H,ACALL HengyiRETHangsan:CALL XingzMOV A,#07HMOVC A,@A+DPTRMOV 32H,ACALL HengyiMOV 36H,32HRETHangsi:CALL XingzMOV A,#06HMOVC A,@A+DPTRMOV 32H,ACALL HengyiMOV 36H,32HRET;***************************** 扫描是否消行Saomiao_xh:JBC BiaoX,SaomiaoRETSaomiao:MOV 41H,#00H ;消行MOV R3,#03HMOV A,42HMOV B,#07HDIV ABMOV 40H,BMOV A,54HCJNE A,#0FFH,Sao1MOV 54H,#00HINC R5Sao1:MOV A,55HCJNE A,#0FFH,Sao2MOV 55H,54HMOV 54H,#00HINC R5Sao2:MOV A,56HCJNE A,#0FFH,Sao3MOV 56H,55HMOV 55H,54HINC R5Sao3:MOV A,57HCJNE A,#0FFH,Sao4MOV 57H,56HMOV 56H,55HMOV 55H,54HMOV 54H,#00HINC R5Sao4:MOV A,58HCJNE A,#0FFH,Sao5MOV 58H,57HMOV 57H,56HMOV 56H,55HMOV 55H,54HMOV 54H,#00HINC R5Sao5:RET;***************************** 消行记分Jifen:CJNE R5,#0,Jia1RETJia1:MOV A,R5MOV R5,#00HCJNE A,#1,Jia2INC 46HRETJia2:CJNE A,#2,Jia3MOV A,#3ADD A,46HMOV 46H,ARETJia3:CJNE A,#3,Jia4MOV A,#7ADD A,46HMOV 46H,ARETJia4:MOV A,#10ADD A,46HMOV 46H,ARET;***************************** 得分显示JifenXianshi:MOV XIAN,#0BFHSETB WEICLR WEIMOV A,46HMOV B,#10DIV ABMOV DPTR,#TABMOVC A,@A+DPTRMOV XIAN,ASETB DUANCLR DUANCALL DelayMOV XIAN,#7FHSETB WEICLR WEIMOV A,BMOVC A,@A+DPTRMOV XIAN,ASETB DUANCLR DUANCALL DelayMOV XIAN,#0FFHSETB WEICLR WEIRET;***************************** 暂停标志位Int0_ser:CPL Biao_ztRETI;***************************** 定时计数,并出随机数T0_ser:MOV TH0,#(65536-10000) / 256MOV TL0,#(65536-10000) MOD 256INC 34HINC 42HINC 44HRETI;***************************** 清屏子程序Qingping:CLR LIECLR LWSETB LWDJNZ R0,QingpingMOV R0,#08HCLR LZSETB LZRET;***************************** 延时子程序Delay:MOV R6,#10D1: MOV R7,#10DJNZ R7,$DJNZ R6,D1RET;***************************** 随机积木7类型TAB0:DB 18H, 18H, 00H, 00H, 00H, 00H, 00H, 00H ;田字型TAB1:DB 00H, 3CH, 00H, 00H, 00H, 00H, 00H, 00H ;一字型TAB1_1:DB 10H, 10H, 00H, 00H, 00H, 00H, 10H, 10HTAB2:DB 38H, 20H, 00H, 00H, 00H, 00H, 00H, 00H ;L型TAB2_1:DB 20H, 30H, 00H, 00H, 00H, 00H, 00H, 20HTAB2_2:DB 08H, 38H, 00H, 00H, 00H, 00H, 00H, 00HTAB2_3:DB 08H, 08H, 00H, 00H, 00H, 00H, 00H, 18HTAB3:DB 38H, 08H, 00H, 00H, 00H, 00H, 00H, 00H ;反L型TAB3_1:DB 20H, 20H, 00H, 00H, 00H, 00H, 00H, 30HTAB3_2:DB 20H, 38H, 00H, 00H, 00H, 00H, 00H, 00HTAB3_3:DB 10H, 30H, 00H, 00H, 00H, 00H, 00H, 10HTAB4:DB 38H, 10H, 00H, 00H, 00H, 00H, 00H, 00H ;T字型TAB4_1:DB 30H, 20H, 00H, 00H, 00H, 00H, 00H, 20HTAB4_2:DB 10H, 38H, 00H, 00H, 00H, 00H, 00H, 00HTAB4_3:DB 30H, 10H, 00H, 00H, 00H, 00H, 00H, 10HTAB5:DB 18H, 30H, 00H, 00H, 00H, 00H, 00H, 00H ;闪电型TAB5_1:DB 30H, 10H, 00H, 00H, 00H, 00H, 00H, 20HTAB6:DB 30H, 18H, 00H, 00H, 00H, 00H, 00H, 00H ;反闪电型TAB6_1:DB 30H, 20H, 00H, 00H, 00H, 00H, 00H, 10H;***************************** 暂停显示START表TABZ:DB 0FFH, 0DBH, 0B5H, 0ADH, 0DBH, 0FFHDB 0FFH, 0FDH, 0FDH, 81H, 0FDH, 0FDH, 0FFHDB 0FFH, 83H, 0EDH, 0EDH, 83H, 0FFHDB 0FFH, 81H, 0F5H, 0E5H, 0D5H, 0BBH, 0FFHDB 0FFH, 0FDH, 0FDH, 81H, 0FDH, 0FDH, 0FFHDB 0FFH, 0FFH, 0FFH, 0FFH, 0FFH, 0FFH;*****************************TAB: DB 3FH, 06H, 5BH, 4FH, 66HDB 6DH, 7DH, 07H, 7FH, 6FH;*****************************END。