久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7726|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

發(fā)一個用匯編寫LCD12864的俄羅斯方塊游戲

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:162136 發(fā)表于 2017-3-29 21:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
先說明:1,游戲頁面是借鑒了網(wǎng)絡(luò)上的圖片的,本想用適合LCD12864的位置顯示,基于學(xué)習(xí)的目的所以高仿游戲頁面。
2,看過網(wǎng)上有的多是C語言寫的,所以特意用匯編編寫。
3,認為程序?qū)懙貌缓谜埐灰R,謝謝。
4,歡迎各位指點。
5,首次發(fā)貼,排版什么的基本都不會,見諒。


匯編源碼:
  1. /*STC12 LCD1286動態(tài)點陣
  2. 高128字節(jié)RAM只能間接尋址,特殊功能寄存器區(qū)只可直接尋址*/

  3.         LCD_RS        EQU                P2.6                //LCD并口端口
  4.         LCD_RW        EQU                P2.5
  5.         LCD_EN        EQU                P2.7
  6.         LCD_PSB        EQU                P3.2
  7.         LCD_RST        EQU                P3.4
  8.         LCD_PD        EQU                P0

  9.         KEY_LEF        EQU                P1.0                ;左移按鍵
  10.         KEY_RIG        EQU                P1.1                ;右稱按鍵
  11.         KEY_TUR        EQU                P1.2                ;轉(zhuǎn)動按鍵
  12.         KEY_DOW        EQU                P1.3                ;下降按鍵
  13.         KEY_SET        EQU                P1.4                ;設(shè)置按鍵

  14.         GDRAM_Y        DATA        30H                        ;LCD_GDRAM_Y軸數(shù)據(jù)
  15.         GDRAM_X        DATA        31H                        ;LCD_GDRAM_X軸數(shù)據(jù)

  16.         SCORE_G        DATA        32H                        ;計分個位
  17.         SCORE_S        DATA        33H                        ;計分十位
  18.         SCORE_B        DATA        34H                        ;計分百位
  19.         SCORE_Q        DATA        35H                        ;計分千位
  20.         SCORE_W        DATA        36H                        ;計分萬位

  21.         ELIM_NUM        DATA        37H                ;1次性消除的行數(shù) 0-4

  22.         SPEED_G        DATA        38H                        ;等級記錄數(shù)據(jù)

  23.         RAN_NUM        DATA        39H                        ;預(yù)覽區(qū)模型數(shù)據(jù)

  24.         RAN_FIGN        EQU        20H.0                ;生成隨機標記
  25.         PRE_FIGN        EQU        20H.1                ;移入模型標記
  26.         SCORE_FIGN        EQU        20H.2                ;分數(shù)刷新標記
  27.         SPEED_FIGN        EQU        20H.3                ;等級刷新標記

  28.         POS_FIGN        EQU        20H.4                ;位置數(shù)據(jù)高低半字節(jié)定位

  29.         LEF_FIGN        EQU        20H.5                ;左移標記,按鍵
  30.         RIG_FIGN        EQU        20H.6                ;右移標記,按鍵
  31.         TUR_FIGN        EQU        20H.7                ;轉(zhuǎn)動標記,按鍵
  32.         DOW_FIGN        EQU        21H.0                ;下移標記,按鍵
  33.         SET_FIGN        EQU        21H.1                ;設(shè)置標記,頁面

  34.         HALF_FIGN        EQU        21H.2                ;上下半屏刷新標記

  35.         REF_FIGN        EQU        21H.3                ;刷新標記

  36.         LOST_FIGN        EQU        21H.4                ;游戲輸了,結(jié)束標記

  37.         BEAT_FIGN        EQU        21H.5                ;游戲達到10W分,通關(guān)標記

  38.         MOD_NUM        DATA        3AH                        ;移動中模型的代碼
  39.         TUR_NUM        DATA        3BH                        ;移到中模型轉(zhuǎn)動的代碼

  40.         BACK_P1        DATA        3CH                        ;0-15        POS_1備份
  41.         BACK_P2        DATA        3DH                        ;0-15        POS_2備份
  42.         BACK_P3        DATA        3EH                        ;0-9        POS_3備份
  43.         BACK_P4        DATA        3FH                        ;0-9        POS_4備份

  44.         POS_1        DATA        40H                        ;0-15        模型最上左位置
  45.         POS_2        DATA        41H                        ;0-15       
  46.         POS_3        DATA        42H                        ;0-9
  47.         POS_4        DATA        43H                        ;0-9        模型最下右位置

  48.         SPEED_DEY        DATA        44H                ;速度延時
  49.         SPEED_NUM        EQU                235                ;游戲速度調(diào)節(jié)

  50.         ISP_CONTR        EQU                0C7H        ;STC12C5A60S2的ISP/IAP控制寄存器地址

  51. ;計分用RAM位置0C0H-0DBH(27字節(jié)),等級數(shù)用RAM位置0E0H-0FB(27字節(jié))

  52.         ORG                00H
  53.         JMP                START
  54. ;        ORG                30H
  55. START:
  56.         MOV                R0,                #0FFH                                        /*清0片內(nèi)256Byte RAM*/
  57.         CLR                A
  58. ST1:
  59.         MOV                @R0,        A
  60.         DJNZ        R0,                ST1                                                ;12MHz 用時約0.15ms
  61.         MOV                SP,                #7FH                                                       
  62. /*                                                                                         */  
  63.         MOV                DPTR,        #0000H                                        /*清0片外1024Byte RAM(0000H-03FFH)*/
  64. ST2:
  65.         CLR                A                    
  66.         MOVX        @DPTR,        A
  67.         INC                DPTR
  68.         MOV                A,                DPH
  69.         CJNE        A,                #04H,        ST2                                ;12MHz 用時約1.2ms
  70. MAIN:                                                                                /*開始*/
  71.         CALL        INIT                                                                                 
  72. ;        SETB        SET_FIGN                                                ;游戲開始先入設(shè)置頁面
  73.         MOV                SPEED_DEY,        #SPEED_NUM                        ;速度初始數(shù)據(jù)
  74. ;        MOV                SPEED_G,        #9                                        ;等級測試
  75. MN1:
  76.         MOV                A,                #40
  77.         CALL        DELAY
  78.         CALL        OUT_LCD                  
  79.         JNB                SET_FIGN,        MN1
  80.         CALL        SETTING                                                                                 
  81. ;        CPL                P2.0                                                        ;程序運行檢測
  82.         JMP                MN1

  83. SETTING:                                                                        /*速度設(shè)置頁面*/
  84.         CALL        SET_DIS                                                        ;設(shè)置顯示
  85.         JNB                LOST_FIGN,        SG1
  86.         JB                KEY_SET,        SETTING
  87.         MOV                A,                #50
  88.         CALL        DELAY
  89.         JB                KEY_SET,        SETTING
  90.         JNB                KEY_SET,        $
  91.         ORL                ISP_CONTR,        #20H                                ;軟件復(fù)位
  92. SG1:               
  93.         CALL        SET_KEYS                                                ;設(shè)置按鍵
  94.         JB                SET_FIGN,        SETTING
  95.         CALL        COME_GAME                                                ;回到游戲
  96.         RET
  97.                                                                                                           
  98. COME_GAME:                                                                        /*回到游戲 清除右邊的內(nèi)容*/
  99.         MOV                R1,                #98H+5
  100.         MOV                R2,                #90H+5
  101.         MOV                R3,                #88H+5
  102.         MOV                R4,                #80H+5
  103.         MOV                R0,                #4
  104. CGE1:
  105.         MOV                A,                @R0
  106.         CALL        LCD_WRITE_CMD
  107.         MOV                R7,                #6
  108.         MOV                A,                #' '                 
  109. CGE2:
  110.         CALL        LCD_WRITE_DAT
  111.         DJNZ        R7,                CGE2
  112.         DJNZ        R0,                CGE1
  113.         RET                                                                                                  
  114.                                                                                         /*
  115. COME_GAME:                                                                        回到游戲 保留右邊內(nèi)容
  116.         MOV                DPTR,        #TAB_CHINESE3                        ;開始
  117.         MOV                A,                #90H+6
  118.         CALL        LCD_WRITE_CMD
  119.         MOV                R7,                #4
  120. CGE1:
  121.         CLR                A
  122.         MOVC        A,                @A+DPTR
  123.         INC                DPTR
  124.         CALL        LCD_WRITE_DAT
  125.         DJNZ        R7,                CGE1
  126.         RET                                                                                                   */

  127. SET_KEYS:                                                                        /*設(shè)置頁面按鍵檢測*/
  128.         JB                KEY_LEF,        SKS1                               
  129.         MOV                A,                #20
  130.         CALL        DELAY
  131.         JB                KEY_LEF,        SKS1
  132.         MOV                A,                SPEED_G
  133.         XRL                A,                #9
  134.         JZ                SKS1
  135.         INC                SPEED_G                                                        ;左按鍵 等級/速度+1
  136.         SETB        SPEED_FIGN                                                ;修改后標記等級刷新標記
  137.         JNB                KEY_LEF,        $
  138. SKS1:
  139.         JB                KEY_RIG,        SKS2
  140.         MOV                A,                #20
  141.         CALL        DELAY
  142.         JB                KEY_RIG,        SKS2
  143.         MOV                A,                SPEED_G
  144.         JZ                SKS2
  145.         DEC                SPEED_G                                                        ;右按鍵 等級/速度-1
  146.         SETB        SPEED_FIGN                                                ;修改后標記等級刷新標記
  147.         JNB                KEY_RIG,        $
  148. SKS2:
  149.         JB                KEY_SET,        SKS3
  150.         MOV                A,                #50
  151.         CALL        DELAY
  152.         JB                KEY_SET,        SKS3
  153.         CLR                SET_FIGN                                                ;設(shè)置頁面標記復(fù)位
  154.         JNB                KEY_SET,        $
  155. SKS3:       
  156.         RET

  157. SET_DIS:                                                                        /*設(shè)置顯示*/
  158.         MOV                A,                #30H
  159.         CALL        LCD_WRITE_CMD
  160.         MOV                DPTR,        #TAB_CHINESE1                        ;游戲
  161.         MOV                A,                #80H+5
  162.         CALL        LCD_WRITE_CMD
  163.         MOV                R7,                #5
  164. SDS1:
  165.         CLR                A
  166.         MOVC        A,                @A+DPTR
  167.         INC                DPTR
  168.         CALL        LCD_WRITE_DAT
  169.         DJNZ        R7,                SDS1
  170.         JNB                BEAT_FIGN,        SDS2
  171.         MOV                DPTR,        #TAB_CHINESE4                        ;通關(guān)
  172.         JMP                SDS3
  173. SDS2:
  174.         JNB                LOST_FIGN,        SDS4
  175.         MOV                DPTR,        #TAB_CHINESE5                        ;結(jié)束
  176.         JMP                SDS3
  177. SDS4:
  178.         MOV                DPTR,        #TAB_CHINESE2                        ;暫停
  179. SDS3:
  180.         MOV                A,                #90H+6
  181.         CALL        LCD_WRITE_CMD
  182.         MOV                R7,                #4
  183. SDS5:
  184.         CLR                A
  185.         MOVC        A,                @A+DPTR
  186.         INC                DPTR
  187.         CALL        LCD_WRITE_DAT
  188.         DJNZ        R7,                SDS5
  189.         MOV                DPTR,        #TAB_CHINESE6                        ;‘SPEED’
  190.         MOV                A,                #88H+5
  191.         CALL        LCD_WRITE_CMD
  192.         MOV                R7,                #6
  193. SDS6:
  194.         CLR                A
  195.         MOVC        A,                @A+DPTR
  196.         INC                DPTR
  197.         CALL        LCD_WRITE_DAT
  198.         DJNZ        R7,                SDS6
  199.         MOV                DPTR,        #TAB_CHINESE7                        ;'0123456789'
  200.         MOV                A,                #98H+6
  201.         CALL        LCD_WRITE_CMD
  202.         MOV                A,                SPEED_G
  203.         MOVC        A,                @A+DPTR
  204.         CALL        LCD_WRITE_DAT
  205.         RET

  206. TAB_CHINESE1:        DB        '游戲:'
  207. TAB_CHINESE2:        DB        '暫停'
  208. TAB_CHINESE3:        DB        '開始'
  209. TAB_CHINESE4:        DB        '通關(guān)'
  210. TAB_CHINESE5:        DB        '結(jié)束'
  211. TAB_CHINESE6:        DB        'SPEED:'
  212. TAB_CHINESE7:        DB        '0123456789'

  213. OUT_LCD:                                                                        /*LCD顯示*/
  214. OUT_LCD_GDRAM:                                                                /*GDRAM顯示*/
  215.         CALL        CAL_SCORE                                                ;分數(shù)處理
  216.         CALL        CAL_SPEED                                                ;等級數(shù)處理
  217.         MOV                A,                #34H                                       
  218.         CALL        LCD_WRITE_CMD                                        ;關(guān)GDRAM顯示
  219.         JNB                SCORE_FIGN,        OLG1
  220.         CALL        OUT_SCORE                                                ;刷新顯示分數(shù)值
  221.         CLR                SCORE_FIGN
  222. OLG1:
  223.         JNB                SPEED_FIGN,        OLG2
  224.         CALL        OUT_SPEED                                                ;刷新顯示等級值
  225.         CLR                SPEED_FIGN
  226. OLG2:
  227.         JNB                RAN_FIGN,        OLG3                                        
  228.         CALL        CAL_MODEL_RAN                                        ;生成隨機模型                                                       
  229.         CALL        PRE_MODEL_RAN                                        ;寫入預(yù)覽隨機模型
  230.         SETB        REF_FIGN                                                ;刷新標記
  231.         CLR                RAN_FIGN
  232. OLG3:
  233.         MOV                A,                ELIM_NUM
  234.         JZ                OLG4                                                        ;沒有消除跳轉(zhuǎn)
  235.         CALL        REFRESH_ALL                                                ;游戲全部刷新
  236.         MOV                ELIM_NUM,        #0
  237.         JMP                OLG5
  238. OLG4:
  239.         JNB                REF_FIGN,        OLG5                                ;模型沒有變動跳轉(zhuǎn)   
  240.         CALL        REFRESH_ALL_POS                                        ;游戲局部刷新
  241.         CLR                REF_FIGN
  242. OLG5:
  243.         MOV                A,                #36H
  244.         CALL        LCD_WRITE_CMD                                        ;開GDRAM顯示
  245.         JNB                PRE_FIGN,        OLG6
  246.         CALL        MODEL_OUT_GAME                                        ;預(yù)覽模型傳到游戲        確定模型位置MODLE_POS       
  247.         CLR                PRE_FIGN
  248.         SETB        RAN_FIGN
  249. OLG6:
  250.         CALL        DRAW_POINTS                                                ;畫點
  251.         CALL        MOVE                                                        ;移動
  252.         CALL        LOST                                                        ;檢查游戲是否結(jié)束
  253.         RET

  254. LOST:                                                                                /*檢查游戲是否結(jié)束*/
  255.         JNB                PRE_FIGN,        LT1
  256.         MOV                R0,                #8
  257.         MOVX        A,                @R0
  258.         JZ                LT1
  259.         SETB        SET_FIGN
  260.         SETB        LOST_FIGN
  261. LT1:
  262.         RET

  263. REFRESH_ALL_POS:                                                        /*刷新 BACK_P1到POS_4 大行位置*/
  264.         MOV                A,                POS_4
  265.         ANL                A,                #0F0H
  266.         MOV                R7,                A                                                ;最低POS_4存入R7
  267.         CLR                C
  268.         SUBB        A,                #40H
  269.         JNC                RAP1                                                        ;A>=30H 跳轉(zhuǎn)
  270.         CLR                A
  271. RAP1:
  272.         MOV                R6,                A                                                ;行地址存入R6
  273. RAP3:
  274.         CALL        REFRESH_POS                                                ;刷新1個點
  275.         MOV                A,                R7
  276.         XRL                A,                R6
  277.         JZ                RAP2
  278.         MOV                A,                R6
  279.         ADD                A,                #10H
  280.         MOV                R6,                A
  281.         JMP                RAP3
  282. RAP2:
  283.         RET                                                                                         

  284. REFRESH_POS:                                                                /*刷新1個點的1大行位置*/
  285.         RLC                A
  286.         MOV                HALF_FIGN,        C
  287.        


  288. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼


下載:
51匯編俄羅斯方塊.rar (68.85 KB, 下載次數(shù): 68)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:573484 發(fā)表于 2019-7-8 23:30 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲 日本 欧美 中文幕 | 免费观看www7722午夜电影 | 国产一级片在线播放 | 亚洲精品一区二区三区在线观看 | 国产自产21区 | 91久久久久久久久 | 精品国产伦一区二区三区观看说明 | 波多野结衣二区 | 操视频网站 | 亚洲一区 中文字幕 | 不卡一区| 四虎成人免费电影 | 亚洲高清一区二区三区 | 国内在线视频 | 国产精品视频一区二区三区不卡 | 麻豆国产一区二区三区四区 | 草久网 | 在线免费看黄 | 五月婷婷色 | 国产japanhdxxxx麻豆 | 激情毛片| 一区二区三区中文字幕 | 婷婷福利视频导航 | 美女一级a毛片免费观看97 | 国产成人网 | 亚洲国产成人av好男人在线观看 | 亚洲成人精品国产 | 天天插天天干 | 国产一区亚洲 | 性欧美xxxx | 日韩在线视频播放 | 亚洲一区二区在线 | 成人精品鲁一区一区二区 | 美女逼网站 | 精品粉嫩aⅴ一区二区三区四区 | 国产高清自拍视频在线观看 | 欧美精品免费观看二区 | 7777在线视频 | 日本成人久久 | 亚洲人久久| 欧美成人精品激情在线观看 |