打印

51单片机做的青蛙过河游戏(代码较小)

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

相关帖子

沙发
szsfy| | 2009-4-17 18:39 | 只看该作者

卖菜的比俺这所谓的电工厉害

使用特权

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

大哥 别策我咯

大哥 我也是业务的!比起你来说我差远了A@

使用特权

评论回复
地板
杜专| | 2009-4-17 19:59 | 只看该作者

还是买菜的也能玩51,牛!  顶啊!

使用特权

评论回复
5
长沙卖菜王|  楼主 | 2009-4-17 20:01 | 只看该作者

业余业余

   生意不好!想转行!

使用特权

评论回复
6
杜专| | 2009-4-17 20:02 | 只看该作者

汇编麻烦!

王筝哥,你写的程序怎么比我的少啊!我写了几十KB的汇编呢!

使用特权

评论回复
7
长沙卖菜王|  楼主 | 2009-4-17 20:10 | 只看该作者

几十K不是吧,你用什么写的啊

   你用什么写的啊!

使用特权

评论回复
8
古道热肠| | 2009-4-18 12:00 | 只看该作者

咋玩的,详细说说,如何过河,蛮有趣的.

使用特权

评论回复
9
长沙卖菜王|  楼主 | 2009-4-18 13:36 | 只看该作者

和卖的俄罗斯方块一样

    基本功能和卖的一样,青蛙(1个点)不能撞到河中的鳄鱼(一个点表示),如果撞到了就OVER,当青蛙过了河之后,青蛙就成了新的鳄鱼跟着河水一块流动,下一个青蛙不能撞它,

使用特权

评论回复
10
杜专| | 2009-4-19 11:14 | 只看该作者

还是到长沙南门口去买菜咯!

使用特权

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

哎 自己顶下

  哎 自己顶下

使用特权

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

评为酷啊

   酷啊 酷啊 加油啊 

使用特权

评论回复
13
长沙卖菜王|  楼主 | 2009-4-25 21:52 | 只看该作者

我要工作啊

使用特权

评论回复
14
Sjj爱| | 2009-4-28 16:15 | 只看该作者

顶下

使用特权

评论回复
15
strang| | 2009-4-28 18:50 | 只看该作者

楼主,有没有C语言的啊?

汇编看起来太痛苦了拉!

使用特权

评论回复
16
长沙卖菜王|  楼主 | 2009-5-9 15:19 | 只看该作者

自己顶下 呵呵

使用特权

评论回复
17
蓝昕儿| | 2009-5-9 15:33 | 只看该作者

工作狂!

看你写了这么多的程序
头不疼啊
我看着都头晕了
真是佩服!

使用特权

评论回复
18
天夏| | 2009-5-9 20:29 | 只看该作者

呵呵 顶那

哈哈  加油啊!

使用特权

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

本版积分规则

23

主题

201

帖子

0

粉丝