打印

51单片机做的俄罗斯等游戏

[复制链接]
8610|48
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
长沙卖菜王|  楼主 | 2009-4-15 14:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 ;///////////////////////////////////////////
;王筝 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:
 &

相关帖子

沙发
zyok| | 2009-4-15 14:19 | 只看该作者

LZ,搞单片机还不如卖菜赚钱...

你还是别转行了吧,呵呵...

使用特权

评论回复
板凳
huangqi412| | 2009-4-15 14:27 | 只看该作者

看成卖菜王,汗

使用特权

评论回复
地板
jiyiche| | 2009-4-15 16:12 | 只看该作者

友情UP

使用特权

评论回复
5
叶舞尘扬| | 2009-4-15 16:17 | 只看该作者

感谢源程序

我把楼主的源程序拿去模拟了,楼主不要怪我,谢谢楼主的分享,我帮不上楼主什么,up下。

使用特权

评论回复
6
up_dwon| | 2009-4-16 23:58 | 只看该作者

慢慢看

难怪今年是牛年!

使用特权

评论回复
7
古道热肠| | 2009-4-17 11:35 | 只看该作者

哈哈,用汇编整这个东西,不容易,是该表扬.

宜转向C做此类应用.

使用特权

评论回复
8
箫笑| | 2009-4-17 12:36 | 只看该作者

厉害厉害

竟然用汇编写

使用特权

评论回复
9
zhangna01| | 2009-4-17 12:40 | 只看该作者

太能干了

使用特权

评论回复
10
Batistuta_| | 2009-4-17 14:04 | 只看该作者

用汇编? 厉害阿.

使用特权

评论回复
11
长沙卖菜王|  楼主 | 2009-4-17 15:21 | 只看该作者

感谢古道热肠 箫笑

       感谢古道热肠 箫笑等大虾给予小弟的评价!感谢感谢!本人第一次发帖,第一次在论坛发帖!多谢各位大虾!

使用特权

评论回复
12
a305566| | 2009-4-17 19:42 | 只看该作者

顶顶顶顶

牛人

使用特权

评论回复
13
杜专| | 2009-4-17 21:48 | 只看该作者

俄罗斯

王筝哥,我玩你的俄罗斯到现在还没有发现BUG啊

使用特权

评论回复
14
长沙卖菜王|  楼主 | 2009-4-22 12:47 | 只看该作者

哎 自己顶下

哎 自己顶下

使用特权

评论回复
15
maizijiankang| | 2009-4-22 22:41 | 只看该作者

厉害 啊 竟然用汇编写的  牛!~

使用特权

评论回复
16
渤海三叠浪| | 2009-4-22 23:45 | 只看该作者

汇编需要大智慧!!!百里挑一!!

使用特权

评论回复
17
长沙卖菜王|  楼主 | 2009-4-24 16:18 | 只看该作者

自己顶下

    给我点人气啊!

使用特权

评论回复
18
常来21ic| | 2009-4-24 16:30 | 只看该作者

牛人年年有,今年特别多

使用特权

评论回复
19
equator| | 2009-4-24 17:43 | 只看该作者

牛!

使用特权

评论回复
20
九月888| | 2009-4-25 21:08 | 只看该作者

楼上的太夸张了吧

楼上的说的夸张点了吧?现在的嵌入式应该还可以哦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

201

帖子

0

粉丝