;/////////////////////////////////////////// ;王筝 QQ:408864998 ;本程序利用LED点阵实现青蛙过河游戏 ;/////////开始自定义及初始化//////////////// SHUJU EQU P0 ;数据口高电平亮 PIANXUAN EQU P1 ; 已经外接154 LATCH_H EQU P3.0 ;上锁存信号 1表示片选 不片选的时候输出
低电平 LATCH_L EQU P3.1 ;下锁存信号
SHANGJIAN EQU P2.5 ;旋转按键 ZUOJIAN EQU P2.7 ;左移按键 YOUJIAN EQU P2.6 ;右移按键 XIAJIAN EQU P3.2 TINGJIAN EQU P2.4 ;下移按键
CBUFTH0 EQU 75H ;定时器TH0基数存储单元 CBUFTL0 EQU 76H ;定时器TL0基数存储单元
XUAN0 EQU 20H ;第0列旋转数据 XUAN1 EQU 21H ;第1列旋转数据 XUAN2 EQU 22H ;第2列旋转数据 XUAN3 EQU 23H ;第3列旋转数据 XUAN11 EQU 25H XUAN12 EQU 26H XUAN13 EQU 27H Y_Y EQU 77H ;Y轴
BT0 BIT 2FH.0 ;节拍法标志位 SANFEIJI 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 ANJIAN5 BIT 2EH.5 TINGZHI BIT 2EH.2 ;停止标志位 ZANTING BIT 2EH.3 ;加速标志位 GUOGUAN BIT 2EH.4
FENSHUZHI EQU 6EH FENSHUZHI1 EQU 78H SUDU EQU 79H SUIJISHU EQU 6FH
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 3AH ;第0列数据 BEI11 EQU 3BH ;第1列数据 BEI12 EQU 3CH ;第2列数据 BEI13 EQU 3DH ;第3列数据 BEI14 EQU 3EH ;第4列数据 BEI15 EQU 3FH ;第5列数据 BEI16 EQU 40H ;第6列数据 BEI17 EQU 41H ;第7列数据 BEI18 EQU 42H ;第8列数据 BEI19 EQU 43H ;第9列数据 背景数据 下面两排左边
10列
XIAN0 EQU 44H ;第0列显示数据 XIAN1 EQU 45H ;第1列显示数据 XIAN2 EQU 46H ;第2列显示数据 XIAN3 EQU 47H ;第3列显示数据 XIAN4 EQU 48H ;第4列显示数据 XIAN5 EQU 49H ;第5列显示数据 XIAN6 EQU 4AH ;第6列显示数据 XIAN7 EQU 4BH ;第7列显示数据 XIAN8 EQU 4CH ;第8列显示数据 XIAN9 EQU 4DH ;第9列显示数据 显示数据 上面两排左
边10列
XIAN10 EQU 4EH ;第0列显示数据 XIAN11 EQU 4FH ;第1列显示数据 XIAN12 EQU 50H ;第2列显示数据 XIAN13 EQU 51H ;第3列显示数据 XIAN14 EQU 52H ;第4列显示数据 XIAN15 EQU 53H ;第5列显示数据 XIAN16 EQU 54H ;第6列显示数据 XIAN17 EQU 55H ;第7列显示数据 XIAN18 EQU 56H ;第8列显示数据 XIAN19 EQU 57H ;第9列显示数据 显示数据 下面两排左
边10列
YIDONG0 EQU 58H ;第0列移动数据 YIDONG1 EQU 59H ;第1列移动数据 YIDONG2 EQU 5AH ;第2列移动数据 YIDONG3 EQU 5BH ;第3列移动数据 YIDONG4 EQU 5CH ;第4列移动数据 YIDONG5 EQU 5DH ;第5列移动数据 YIDONG6 EQU 5EH ;第6列移动数据 YIDONG7 EQU 5FH ;第7列移动数据 YIDONG8 EQU 60H ;第8列移动数据 YIDONG9 EQU 61H ;第9列移动数据
YIDONG10 EQU 62H ;第0列移动数据 YIDONG11 EQU 63H ;第1列移动数据 YIDONG12 EQU 64H ;第2列移动数据 YIDONG13 EQU 65H ;第3列移动数据 YIDONG14 EQU 66H ;第4列移动数据 YIDONG15 EQU 67H ;第5列移动数据 YIDONG16 EQU 68H ;第6列移动数据 YIDONG17 EQU 69H ;第7列移动数据 YIDONG18 EQU 6AH ;第8列移动数据 YIDONG19 EQU 6BH ;第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,#09 MOV GUANSHU,#0 MOV SUDU,#50 START1: CLR HANZI ;在最开始的
时候,把HANZI置成1用来显示汉字 MAIN1: CALL CHUZHI1 ;产生怪物 CALL CHUZHI2 ;产生青蛙
MOV SP,#79H MOV TMOD,#01H MOV DPTR,#65536-20000 MOV TH0,DPH MOV TL0,DPL MOV CBUFTH0,DPH MOV CBUFTL0,DPL MOV Y_Y,#0
SETB EA SETB ET0 SETB TR0 CLR BT0
;中断标志位 ;CLR CHONGTU
;数据冲突标志位,等于0表示不冲突,能选择等 CLR ANJIAN1
;按键1已经按下的的标志位 CLR ANJIAN2
;按键2已经按下的的标志位 CLR ANJIAN3
;按键3已经按下的的标志位 CLR ANJIAN4
;按键4已经按下的的标志位 CLR ANJIAN5 CLR ZANTING CLR GUOGUAN ; CLR CHONGHE
;用来出1S的标志 MOV R2,#0 MOV R3,#0
;X坐标 MOV 73H,#0
;显示汉字的初始值 MOV R0,73H MOV 74H,#0
MAIN: JNB BT0,MAIN CPL P3.3 ;等
待中断的到来(执行中断返回后,BT0等于1) CLR BT0 JNB HANZI,HUNAN
;HANZI等于0就去显示汉字 LJMP YUANDIAN HUNAN: MOV R0,73H LCALL KAISHIXIANSHI jb TINGJIAN,taiqi44 jb anjian1,taiqi44 setb anjian1 SETB HANZI
;旋转键按下就开始游戏 LJMP MAIN
taiqi44: jnb TINGJIAN,GGG clr anjian1 GGG: INC R2 CJNE R2,#5,MAIN MOV R2,#0 INC 73H INC 73H MOV A,73H CJNE A,#228,MAIN MOV 73H,#0 LJMP MAIN
YUANDIAN: CALL FENSHU1 JNB GUOGUAN,CCRR ;是否过关
MOV A,SUDU ;过关后速度
加快 CJNE A,#5,HHRR MOV A,#50 ; HHRR: SUBB A,#5 MOV SUDU,A LJMP START1
CCRR: CALL HECHENG ;背景合成显示 CALL XIANSHI CALL JIANPAN
MOV A,Y_Y CJNE A,#15,TT7 MOV Y_Y,#0 INC FENSHUZHI1 CALL BEIJINGHECHENG LCALL FUWEI4 MOV BEI15,#80H LJMP MAIN ;按键判断子程序 TT7: JNB ZANTING,MAIN JB HANZI,HHH LCALL FUWEI4 LCALL BAOCUN MOV BEI15,#80H CLR ZANTING LJMP MAIN1 HHH: INC R2 MOV A,R2 ;判断是否来
了 CJNE A,SUDU,KKK ;1S没有来什么事情都
不干 MOV R2,#0 ;来了 CALL ZUOYIZHANGAI ;下移子程序 JNB HANZI,JJJ KKK: LJMP MAIN JJJ: LCALL FUWEI4 LCALL BAOCUN MOV BEI15,#80H CLR ZANTING LJMP MAIN1
BAOCUN: MOV A,GUANSHU MOV B,#10 MUL AB MOV FENSHUZHI1,A RET
;CHUSUIJI: MOV A,TL0 ; MOV B,#08 ; DIV AB ; MOV A,B ; MOV SUIJISHU,A ; RET ;CHUFEIJI: ; CLR PSW.7 ; MOV A,R3 ; SUBB A,#8 ; JB PSW.7,III ; MOV R3,#0
; CJNE R3,#8,III ; MOV R3,#0 ; CPL SANFEIJI ; JNB SANFEIJI,III ; CALL CHUSUIJI ; CALL SUIJI ;III: ; RET
; MOV A,SUIJISHU ; CLR C ; RLC A ; MOV DPTR,#TAB ; JMP @A+DPTR ;TAB: AJMP SUB0 ; AJMP SUB1 ; AJMP SUB2 ; AJMP SUB3 ; AJMP SUB4 ; AJMP SUB5 ; AJMP SUB6 ; AJMP SUB7
;SUB0:
; ORL YIDONG0,#0AH ; ORL YIDONG1,#0FH ; ORL YIDONG2,#0AH
;RET ;SUB1: ; ORL YIDONG1,#0AH ;ORL YIDONG2,#0FH ; ORL YIDONG3,#0AH ; RET ;SUB2: ; ; ORL YIDONG2,#0AH ; ORL YIDONG3,#0FH ; ORL YIDONG4,#0AH ; RET
;SUB3:
; ORL YIDONG3,#0AH ; ORL YIDONG4,#0FH ; ORL YIDONG5,#0AH
; RET ;SUB4: ; ORL YIDONG4,#0AH ; ORL YIDONG5,#0FH ; ORL YIDONG6,#0AH ; RET ;SUB5: ;ORL YIDONG5,#0AH ;;ORL YIDONG6,#0FH ; ORL YIDONG7,#0AH ; RET
;SUB6:
; ORL YIDONG6,#0AH ; ORL YIDONG7,#0FH ; ORL YIDONG8,#0AH
; RET ;SUB7: ; ORL YIDONG7,#0AH ; ORL YIDONG8,#0FH ; ORL YIDONG9,#0AH ; RET
FUWEI4: MOV R0,#43H FUWEI78: MOV @R0,#00h DEC R0 CJNE R0,#2FH,FUWEI78 RET
;///////////////替换子程序//////////////////// ;输入:"" ;输出: "" ;实现的功能:将飞机模型载入BEI里面 ;TIHUAN1: ; MOV BEI13,XUAN1 ; MOV BEI14,XUAN2 ; MOV BEI15,XUAN3 ; RET
;///////////////替换子程序//////////////////// ;输入:"" ;输出: "" ;实现的功能:将飞机模型载入BEI里面 ;TIHUAN2: ; MOV YIDONG3,XUAN1 ; MOV YIDONG4,XUAN2 ; MOV YIDONG5,XUAN3 ; RET
;///////////////初值1子程序/////////////////// ;输入:"" ;输出: "" ;实现的功能:产生飞机模型2 CHUZHI1: MOV DPTR,#TAB3 MOV R0,#YIDONG0 MOV R4,#0
MMM: MOV A,R4 MOVC A,@A+DPTR MOV @R0,A INC R0 INC R4 CJNE R4,#21,MMM RET TAB3: DB 00H,44H,10H,40H,10H,44H,10H,04H,10H,44H DB 11H,04H,11H,04H,10H,04H,11H,04H,11H,04H
;///////////////初值1子程序/////////////////// ;输入:"" ;输出: "" ;实现的功能:产生飞机模型 CHUZHI2: MOV BEI15,#80H RET
;///////////////合成子程序/////////////////// ;输入:"背景与移动" ;输出: "显示" ;实现的功能:把背景与移动合成到显示 HECHENG: MOV 73H,#XIAN0 MOV R0,#BEI0 MOV 74H,#YIDONG0 WANG1: MOV A,@R0 MOV R1,74H ORL A,@R1 MOV R1,73H MOV @R1,A INC R0 INC 74H INC 73H CJNE R0,#44H,WANG1 RET
;///////////////显示子程序/////////////////// ;输入:"" ;输出: "" ;实现的功能:显示 XIAN0- XIAN9 XIAN10- XIAN19的内容 XIANSHI: MOV SHUJU,#00H CLR LATCH_L ;下面的两个点阵不亮 SETB LATCH_H ;开上面的两个点阵
MOV R0,#XIAN0 MOV R1,#00 WANG: MOV PIANXUAN,R1 ;片选 MOV SHUJU,@R0 ;数据 CALL DELAY ;延时 MOV SHUJU,#00 ;关屏幕
INC R0 INC R1 CJNE R0,#4EH,WANG
MOV PIANXUAN,#10 MOV SHUJU,#0FFH CALL DELAY MOV SHUJU,#00
;显示分数 LCALL FENSHU1 LCALL FENSHU2
MOV PIANXUAN,#12
MOV SHUJU,44H CALL DELAY MOV SHUJU,#00
MOV PIANXUAN,#13
MOV SHUJU,45H CALL DELAY MOV SHUJU,#00 ; MOV PIANXUAN,#14
MOV SHUJU,46H CALL DELAY MOV SHUJU,#00
MOV PIANXUAN,#15 MOV SHUJU,47H CALL DELAY MOV SHUJU,#00 CLR LATCH_H SETB LATCH_L
MOV R0,#XIAN10 MOV R1,#00 ZHENG: MOV PIANXUAN,R1 MOV SHUJU,@R0 ;数据 CALL DELAY ;延时 MOV SHUJU,#00 ;关屏幕 INC R0 INC R1 CJNE R0,#58H,ZHENG MOV PIANXUAN,#10 MOV SHUJU,#0FFH CALL DELAY MOV SHUJU,#00H
LCALL FENSHU1 MOV A,B LCALL FENSHU2 MOV PIANXUAN,#12 MOV SHUJU,44H CALL DELAY MOV SHUJU,#00 MOV PIANXUAN,#13 MOV SHUJU,45H CALL DELAY MOV SHUJU,#00 MOV PIANXUAN,#14 MOV SHUJU,46H CALL DELAY MOV SHUJU,#00 MOV PIANXUAN,#15 MOV SHUJU,47H CALL DELAY MOV SHUJU,#00 RET
;///////////////显示汉字子程序/////////////////// ;输入:"" ;输出: "" ;实现的功能:滚动显示湖南源点教育 KAISHIXIANSHI: LOOP: MOV SHUJU,#00H CLR LATCH_H ;下面的两个点阵不亮
SETB LATCH_L ;开上面的两个点阵 MOV PIANXUAN,74H 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,74H MOV DPTR,#TAB4 MOV A,R0 MOVC A,@A+DPTR MOV SHUJU,A CALL DELAY MOV SHUJU,#00
INC R0 INC 74H MOV A,74H CJNE A,#16,LOOP MOV 74H,#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   |