;/////////////////////////////////////////// ;王筝 QQ:408864998 ;本程序利用LED点阵实现俄罗斯方块 ;/////////开始自定义及初始化//////////////// SHUJU EQU P0 ;数据口高电平亮 PIANXUAN EQU P1 ; 已经外接154 LATCH_H EQU P3.0 ;上锁存信号 1表示片选 不片选的时候输出低电平 LATCH_L EQU P3.1 ;下锁存信号
XUANJIAN EQU P2.5 ;旋转按键 ZUOJIAN EQU P2.7 ;左移按键 YOUJIAN EQU P2.6 ;右移按键 XIAJIAN EQU P3.2 ;下移按键
CBUFTH0 EQU 3EH ;定时器TH0基数存储单元 CBUFTL0 EQU 3FH ;定时器TL0基数存储单元
XUAN0 EQU 20H ;第0列旋转数据 XUAN1 EQU 21H ;第1列旋转数据 XUAN2 EQU 22H ;第2列旋转数据 X_X EQU 29H ;异地旋转X-X Y_Y EQU 2AH ;异地旋转Y-Y HANGSHU EQU 2BH SUIJISHU EQU 28H ;随机数
BT0 BIT 2FH.0 ;节拍法标志位 CHONGHE BIT 2FH.1 ;闪烁标志位 CHONGTU BIT 2FH.2 ;冲突标志位,冲突就合成 HANZI BIT 2FH.3 ;显示汉字标志位 GUANSHU EQU 2DH
ANJIAN1 BIT 2FH.4 ANJIAN2 BIT 2FH.5 ANJIAN3 BIT 2FH.6 ANJIAN4 BIT 2FH.7 TINGZHI BIT 2EH.2 ;停止标志位 JIA BIT 2EH.3 ;加速标志位 GUOGUAN BIT 2EH.4 XUAN3 EQU 23H ;第3列旋转数据 XUAN11 EQU 25H XUAN12 EQU 26H XUAN13 EQU 27H FENSHUZHI EQU 4EH FENSHUZHI1 EQU 4FH SUDU EQU 3BH FXUAN EQU 24H ;用来存储旋转溢出 BEI0 EQU 30H ;第0列数据 BEI1 EQU 31H ;第1列数据 BEI2 EQU 32H ;第2列数据 BEI3 EQU 33H ;第3列数据 BEI4 EQU 34H ;第4列数据 BEI5 EQU 35H ;第5列数据 BEI6 EQU 36H ;第6列数据 BEI7 EQU 37H ;第7列数据 BEI8 EQU 38H ;第8列数据 BEI9 EQU 39H ;第9列数据 背景数据 上面两排左边10列 BEI10 EQU 40H ;第0列数据 BEI11 EQU 41H ;第1列数据 BEI12 EQU 42H ;第2列数据 BEI13 EQU 43H ;第3列数据 BEI14 EQU 44H ;第4列数据 BEI15 EQU 45H ;第5列数据 BEI16 EQU 46H ;第6列数据 BEI17 EQU 47H ;第7列数据 BEI18 EQU 48H ;第8列数据 BEI19 EQU 49H ;第9列数据 背景数据 下面两排左边10列
XIAN0 EQU 50H ;第0列显示数据 XIAN1 EQU 51H ;第1列显示数据 XIAN2 EQU 52H ;第2列显示数据 XIAN3 EQU 53H ;第3列显示数据 XIAN4 EQU 54H ;第4列显示数据 XIAN5 EQU 55H ;第5列显示数据 XIAN6 EQU 56H ;第6列显示数据 XIAN7 EQU 57H ;第7列显示数据 XIAN8 EQU 58H ;第8列显示数据 XIAN9 EQU 59H ;第9列显示数据 显示数据 上面两排左边10列
XIAN10 EQU 60H ;第0列显示数据 XIAN11 EQU 61H ;第1列显示数据 XIAN12 EQU 62H ;第2列显示数据 XIAN13 EQU 63H ;第3列显示数据 XIAN14 EQU 64H ;第4列显示数据 XIAN15 EQU 65H ;第5列显示数据 XIAN16 EQU 66H ;第6列显示数据 XIAN17 EQU 67H ;第7列显示数据 XIAN18 EQU 68H ;第8列显示数据 XIAN19 EQU 69H ;第9列显示数据 显示数据 下面两排左边10列
YIDONG0 EQU 70H ;第0列移动数据 YIDONG1 EQU 71H ;第1列移动数据 YIDONG2 EQU 72H ;第2列移动数据 YIDONG3 EQU 73H ;第3列移动数据 YIDONG4 EQU 74H ;第4列移动数据 YIDONG5 EQU 75H ;第5列移动数据 YIDONG6 EQU 76H ;第6列移动数据 YIDONG7 EQU 77H ;第7列移动数据 YIDONG8 EQU 78H ;第8列移动数据 YIDONG9 EQU 79H ;第9列移动数据
YIDONG10 EQU 6AH ;第0列移动数据 YIDONG11 EQU 6BH ;第1列移动数据 YIDONG12 EQU 6CH ;第2列移动数据 YIDONG13 EQU 6DH ;第3列移动数据 YIDONG14 EQU 6EH ;第4列移动数据 YIDONG15 EQU 6FH ;第5列移动数据 YIDONG16 EQU 5AH ;第6列移动数据 YIDONG17 EQU 5BH ;第7列移动数据 YIDONG18 EQU 5CH ;第8列移动数据 YIDONG19 EQU 5DH ;第9列移动数据
ORG 00H LJMP START ORG 000BH JMP T_0 START: MOV R0,#7FH FUWEI: MOV @R0,#00H DJNZ R0,FUWEI
MOV FENSHUZHI,#00 ;最开始的时候分数为0 MOV FENSHUZHI1,#9 MOV GUANSHU,#0 MOV SUDU,#50 START1: CALL CHUZHI1 ;最开始的时候产生的积木 MOV SUIJISHU,#6 ;最开始的时候产生的随机数为6(随机产生积木) CLR HANZI ;在最开始的时候,把HANZI置成1用来显示汉字 MAIN1: MOV SP,#7AH MOV TMOD,#01H MOV DPTR,#65536-20000 MOV TH0,DPH MOV TL0,DPL MOV CBUFTH0,DPH MOV CBUFTL0,DPL
SETB EA SETB ET0 SETB TR0 SETB BT0 ;中断标志位 CLR CHONGTU ;数据冲突标志位,等于0表示不冲突,能选择等 CLR ANJIAN1 ;按键1已经按下的的标志位 CLR ANJIAN2 ;按键2已经按下的的标志位 CLR ANJIAN3 ;按键3已经按下的的标志位 CLR ANJIAN4 ;按键4已经按下的的标志位 CLR GUOGUAN CLR CHONGHE ;用来出1S的标志 MOV R2,#0 ;X坐标 MOV X_X,#1 ;Y坐标 MOV Y_Y,#1 CALL YOUYI2 ;三次右移,让产生的数字在中间 CALL YOUYI2 CALL YOUYI2 MOV 50H,#0 ;显示汉字的初始值 MOV R0,50H MOV 51H,#0
MAIN: JNB BT0,MAIN ;等待中断的到来(执行中断返回后,BT0等于1) CLR BT0 JNB HANZI,HUNAN ;HANZI等于0就去显示汉字 LJMP YUANDIAN HUNAN: MOV R0,50H LCALL KAISHIXIANSHI LCALL FUWEI5 jb xuanjian,taiqi44 jb anjian1,taiqi44 setb anjian1 SETB HANZI ;旋转键按下就开始游戏 LCALL FUWEI4 LJMP MAIN1
taiqi44: jnb xuanjian,GGG clr anjian1 GGG: INC R2 CJNE R2,#5,MAIN MOV R2,#0 INC 50H INC 50H MOV A,50H CJNE A,#228,MAIN MOV 50H,#0 LJMP MAIN YUANDIAN: CALL FENSHU CALL FENSHU1 JNB GUOGUAN,CCRR ;是否过关 MOV FENSHUZHI,#0 LCALL FUWEI4 MOV A,SUDU ;过关后速度加快 CJNE A,#5,HHRR MOV A,#50
HHRR: SUBB A,#5 MOV SUDU,A LJMP START1 CCRR: CALL HECHENG ;背景合成显示 CALL SUIJI ;用来显示下一个图形 CALL XIANSHI ;调用显示子程序
CALL JIANPAN ;按键判断子程序 SETB HANZI INC R2 MOV A,R2 ;判断是否来了1秒 CJNE A,SUDU,MAIN ;1S没有来什么事情都不干 MOV R2,#0 ;来了 CALL XIAYI ;下移子程序 JB CHONGTU,WANG60 ;不能继续下移,就去合成并判断是否能消行 JNB CHONGHE,HYY ;判断是否已经触底,等于1表示已经触底 WANG60: CALL BEIJINGHECHENG ;数据已经保存到背景里面了 CALL XIAOHANG ;消行 WANG88: MOV R0,#49H FUWEI3: MOV @R0,#00h DEC R0 CJNE R0,#3FH,FUWEI3
MOV R0,#39H FUWEI55: MOV @R0,#00h DEC R0 CJNE R0,#2FH,FUWEI55
LCALL SUIJI ;随机产生下一个积木 LCALL TIHUAN3 LCALL TIHUAN LCALL CHUSUIJI ;产生随机数 MOV SHUJU,#00 SETB HANZI LJMP MAIN1 HYY: LJMP MAIN
FUWEI4: MOV R0,#39H FUWEI78:MOV @R0,#00h DEC R0 CJNE R0,#2FH,FUWEI78 MOV R0,#49H FUWEI79:MOV @R0,#00h DEC R0 CJNE R0,#3FH,FUWEI79 RET
FUWEI5:
MOV R0,#79H FUWEI77:MOV @R0,#00h DEC R0 CJNE R0,#69H,FUWEI77
MOV R0,#5DH FUWEI66:MOV @R0,#00h DEC R0 CJNE R0,#59H,FUWEI66 RET ;///////////////显示汉字子程序/////////////////// ;输入:"" ;输出: "" ;实现的功能:滚动显示湖南源点教育 KAISHIXIANSHI: LOOP: MOV SHUJU,#00H CLR LATCH_H ;下面的两个点阵不亮
SETB LATCH_L ;开上面的两个点阵 MOV PIANXUAN,51H MOV DPTR,#TAB4 MOV A,R0 MOVC A,@A+DPTR MOV SHUJU,A CALL DELAY MOV SHUJU,#00
CLR LATCH_L
SETB LATCH_H INC R0
MOV PIANXUAN,51H MOV DPTR,#TAB4 MOV A,R0 MOVC A,@A+DPTR MOV SHUJU,A CALL DELAY MOV SHUJU,#00
INC R0 INC 51H MOV A,51H CJNE A,#16,LOOP MOV 51H,#0 OUT3: RET
TAB4: DB 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h DB 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h DB 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h DB 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
;湖[16*16]下上列排 DB 04h, 10h, 0FCh, 21h, 02h, 62h, 01h, 16h DB 7Fh, 90h, 20h, 90h, 20h, 0FFh, 20h, 90h DB 0BFh, 0D0h, 40h, 90h, 3Fh, 0FEh, 42h, 22h DB 82h, 22h, 7Fh, 0FFh, 00h, 02h, 00h, 00h
;南[16*16]下上列排 DB 00h, 04h, 0FFh, 0E4h, 00h, 24h, 09h, 24h DB 09h, 64h, 09h, 0A4h, 09h, 24h, 7Fh, 3Fh DB 09h, 24h, 09h, 0A4h, 09h, 64h, 49h, 24h DB 80h, 24h, 7Fh, 0F6h, 00h, 24h, 00h, 00h
;源[16*16]下上列排 DB 04h, 10h, 04h, 22h, 0FEh, 64h, 41h, 0Ch DB 30h, 80h, 0Fh, 0FEh, 20h, 02h, 13h, 0E2h DB 5Ah, 0A2h, 82h, 0B2h, 7Eh, 0AEh, 02h, 0A2h DB 0Ah, 0A2h, 13h, 0F3h, 30h, 22h, 00h, 00h
;点[16*16]下上列排 DB 80h, 00h, 40h, 00h, 37h, 0C0h, 04h, 40h DB 14h, 40h, 64h, 40h, 04h, 7Fh, 14h, 48h DB 24h, 48h, 64h, 48h, 04h, 48h, 17h, 0E8h DB 20h, 4Ch, 0C0h, 08h, 00h, 00h, 00h, 00h
;教[16*16]下上列排 DB 02h, 20h, 12h, 24h, 51h, 24h, 90h, 0A4h DB 7Eh, 0FFh, 0Ah, 0A4h, 89h, 0B4h, 40h, 0ACh DB 20h, 20h, 0Bh, 9Fh, 04h, 10h, 0Bh, 10h DB 60h, 0F0h, 0C0h, 18h, 40h, 10h, 00h, 00h
;育[16*16]下上列排 DB 00h, 04h, 00h, 04h, 00h, 24h, 0FFh, 0A4h DB 0Ah, 0B4h, 0Ah, 0ACh, 0Ah, 0A5h, 0Ah, 0A6h DB 0Ah, 0A4h, 4Ah, 0A4h, 8Ah, 0A4h, 7Fh, 0B4h DB 00h, 64h, 00h, 06h, 00h, 04h, 00h, 00h
DB 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h DB 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h DB 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h DB 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
;///////////////显示子程序/////////////////// ;输入:"" ;输出: "" ;实现的功能:显示 XIAN0- XIAN9 XIAN10- XIAN19的内容 XIANSHI: MOV SHUJU,#00H CLR LATCH_L ;下面的两个点阵不亮 SETB LATCH_H ;开上面的两个点阵 MOV R0,#50H MOV R1,#00 WANG: MOV PIANXUAN,R1 ;片选 MOV SHUJU,@R0 ;数据 CALL DELAY ;延时 MOV SHUJU,#00 ;关屏幕 INC R0 INC R1 CJNE R0,#5AH,WANG
MOV PIANXUAN,#10 MOV SHUJU,#0FFH CALL DELAY MOV SHUJU,#00
;显示分数 LCALL FENSHU1 LCALL FENSHU2
MOV PIANXUAN,#12 MOV SHUJU,XUAN11 CALL DELAY MOV SHUJU,#00
MOV SHUJU,50H CALL DELAY MOV SHUJU,#00
MOV PIANXUAN,#13 MOV SHUJU,XUAN12 CALL DELAY MOV SHUJU,#00
MOV SHUJU,51H CALL DELAY MOV SHUJU,#00
MOV PIANXUAN,#14 MOV SHUJU,XUAN13 CALL DELAY MOV SHUJU,#00
MOV SHUJU,52H CALL DELAY MOV SHUJU,#00
MOV PIANXUAN,#15 MOV SHUJU,53H CALL DELAY MOV SHUJU,#00 CLR LATCH_H SETB LATCH_L MOV R0,#60H MOV R1,#00 ZHENG: MOV PIANXUAN,R1 MOV SHUJU,@R0 ;数据 CALL DELAY ;延时 MOV SHUJU,#00 ;关屏幕 INC R0 INC R1 CJNE R0,#6AH,ZHENG MOV PIANXUAN,#10 MOV SHUJU,#0FFH CALL DELAY MOV SHUJU,#00H LCALL FENSHU1 MOV A,B LCALL FENSHU2 MOV FENSHUZHI,#00 MOV PIANXUAN,#12 MOV SHUJU,50H CALL DELAY MOV SHUJU,#00 MOV PIANXUAN,#13 MOV SHUJU,51H CALL DELAY MOV SHUJU,#00 MOV PIANXUAN,#14 MOV SHUJU,52H CALL DELAY MOV SHUJU,#00
MOV PIANXUAN,#15 MOV SHUJU,53H CALL DELAY MOV SHUJU,#00 RET ;///////////////分数子程序//////////////////// ;输入:"" ;输出: "" ;实现的功能: FENSHU: MOV R5,FENSHUZHI CJNE R5,#0,PANFEN1 RET PANFEN1: CJNE R5,#1,PANFEN2 INC FENSHUZHI1 RET PANFEN2:CJNE R5,#2,PANFEN3 MOV A,FENSHUZHI1 ADD A,#3 MOV FENSHUZHI1,A RET PANFEN3: CJNE R5,#3,PANFEN4 MOV A,FENSHUZHI1 ADD A,#6 MOV FENSHUZHI1,A RET PANFEN4: CJNE R5,#4,PANFEN5 MOV A,FENSHUZHI1 ADD A,#10 MOV FENSHUZHI1,A PANFEN5: RET
FENSHU1: MOV B,#10 MOV A,FENSHUZHI1 DIV AB CJNE A,GUANSHU,VVVV RET VVVV: MOV GUANSHU,A SETB GUOGUAN RET FENSHU2: CLR C RLC A MOV DPTR,#TAB1 JMP @A+DPTR
TAB1: AJMP SUB00 AJMP SUB10 AJMP SUB20 AJMP SUB30 AJMP SUB40 AJMP SUB50 AJMP SUB60 AJMP SUB70 AJMP SUB80 AJMP SUB90 SUB00: MOV 50H,#70H ;分数0的显示 MOV 51H,#88H MOV 52H,#88H MOV 53H,#70H RET SUB10: MOV 50H,#00H MOV 51H,#00H MOV 52H,#00H MOV 53H,#0F8H RET SUB20: MOV 50H,#0E8H MOV 51H,#0A8H MOV 52H,#0A8H MOV 53H,#0B8H RET SUB30: MOV 50H,#0A8H MOV 51H,#0A8H MOV 52H,#0A8H MOV 53H,#0F8H RET SUB40: & |