【正文】
L model stack 0x00xFF 。 h Stack Space for reentrant functions in the SMALL model. 。 。/h 。 。 i The length of XDATA memory in bytes. XDATALEN EQU 0 。 o XDATASTART: XDATA memory start address 0x00xFFFF 。 o IDATALEN: IDATA memory size 0x00x100 。 。 。 To link the modified file to your application use the following 。 To translate this file use A51 with the following invocation: 。 *** Use Configuration Wizard in Context Menu *** 。 This file is part of the C51 Compiler package 。單片機(jī)程序前前后后有不少聯(lián)系,可能前面用的的某個(gè)變量跟后面重復(fù)、字與字節(jié)搞亂等等細(xì)小的問(wèn)題,如果不能耐心、細(xì)心地去尋找,很難發(fā)現(xiàn)。但是如果由于一些搞不清楚的原因遲遲達(dá)不到目標(biāo),也是最讓人煩躁的。執(zhí)行四次,此過(guò)程旋轉(zhuǎn)結(jié)束。此行不全為零時(shí)只需令 R2=R2+1,直到 R2=128消層過(guò)程結(jié)束。同時(shí)游戲中的那些方塊被存放在一個(gè)類似于一維的數(shù)組之中,每一個(gè)方塊對(duì)應(yīng)四個(gè)小方塊,根據(jù)偽隨機(jī)數(shù)將這四個(gè)小方塊對(duì)應(yīng)的值裝入 RAM固定的區(qū)域內(nèi)。如果有鍵按下,程序?qū)⒏鶕?jù)按下的鍵來(lái)改變圖形存儲(chǔ)區(qū)的值,同時(shí)程序?qū)⑴袛鄨D形是否已到達(dá)邊界,當(dāng)圖形最上層到達(dá)顯示區(qū)頂部,則游戲結(jié)束,此時(shí)將清除顯示緩沖的內(nèi)容,游戲重新開(kāi)始。 1 《單片機(jī)原理及應(yīng)用》課程設(shè)計(jì)報(bào)告 基于 MCS51 單片機(jī)的俄羅斯方塊游戲設(shè)計(jì) 學(xué) 號(hào) 姓 名 同 組 成 員 專 業(yè) 電氣工程及其自動(dòng)化 班 級(jí) 0905 班 指 導(dǎo) 教 師 院(系、所) 電氣與電子工程學(xué)院 華中科技大學(xué)教務(wù)處制 2 目錄 一、課程設(shè)計(jì)的目的 .............................................................................. 4 二、題目要求 ......................................................................................... 4 三、原理概述 ......................................................................................... 4 四、調(diào)試過(guò)程 ......................................................................................... 4 五、驗(yàn)收結(jié)果 ......................................................................................... 4 六、個(gè)人體會(huì) ....................................................................................... 10 七、參考文獻(xiàn) ....................................................................................... 10 八、致謝 ............................................................................................... 10 附錄一:外電路原理圖 ........................................................................ 11 附錄二:程序清單 ............................................................................... 12 3 一、課程設(shè)計(jì)的目的 1. 加深對(duì)單片機(jī)的理解,熟悉單片機(jī)的原理,掌握單片機(jī)的編程方法與技巧 2. 靈活運(yùn)用單片機(jī)的基礎(chǔ)知識(shí),增強(qiáng)利用理論知識(shí)解決實(shí)際問(wèn)題的能力 二、題目要求 ,先在仿真機(jī)的 LED上顯示自己學(xué)號(hào)的后 6位,再進(jìn)行相應(yīng)內(nèi)容驗(yàn)收。 2.圖形顯示 QH12864T 液晶顯示器一共有 128*64個(gè)像素點(diǎn),本程序中每個(gè)像素點(diǎn)用一個(gè)坐標(biāo)表示,左上角為( 0,0),右下角為( 128,64)。如果要顯示方塊只需將這些方塊所對(duì)應(yīng)的點(diǎn)寫入緩沖區(qū)就可以了。 4.旋轉(zhuǎn)算法 首先要確定一個(gè)旋轉(zhuǎn)中心,假如旋轉(zhuǎn)中心的編號(hào)是 n,將 n 除以 64,商是 m 存入 R1余數(shù)是 l 存入 R2,及時(shí)用商和余數(shù)建立坐標(biāo)系。 四、 調(diào)試過(guò)程 學(xué)號(hào)顯示部分單獨(dú)調(diào)試 這個(gè)在之前的很多實(shí)驗(yàn)中都有涉及,程序較為簡(jiǎn)單,語(yǔ)句也不復(fù)雜,本實(shí)驗(yàn)中才用的是并行動(dòng)態(tài)顯示,調(diào)試一次成功。而其中的問(wèn)題,只能漫無(wú)目的地去嘗試,無(wú)法在邏輯中得到答案,我個(gè)人遇到了這種狀況,確實(shí)很無(wú)奈。 最后,我還體會(huì)到了,硬件學(xué)習(xí)是編寫程序前最重要的部分,只有對(duì)所使用的硬件設(shè)備完全了解才能編寫出適合使用的程序,否則會(huì)做很多無(wú)用功,浪費(fèi)很多時(shí)間和精力。 Copyright (c) 19882020 Keil Elektronik GmbH and Keil Software, Inc. 。 。 。 Lx51 invocation: 。 。 With the following EQU statements the initialization of memory 。 i Note: The absolute startaddress of IDATA memory is always 0 。 i The absolute start address of XDATA memory XDATASTART EQU 0 。 13 。 o PDATALEN: PDATA memory size 0x00xFF 。 。 The following EQU statements define the stack pointer for reentrant 。 q IBPSTACK: Enable SMALL model reentrant stack 。 i Set the top of the stack to the highest location. IBPSTACKTOP EQU 0xFF +1 。 h Stack Space for reentrant functions in the LARGE model. 。 o XBPSTACKTOP: End address of LARGE model stack 0x00xFFFF 。 。 set to 1 if pact reentrant is used. 。 default 0FFH+1 。 。 iDefine the XDATA page used for PDATA variables. 。 set to 1 if pdata object are used. 。 。 /e 。h Code Banking 。/h LJMP ?C_START END include include include define X_START 5 define Y_START 0 define MIN_SLOW_SPEED 300 define BX_START 30 define BY_START 15 define Nothing 100 //全局?jǐn)?shù)據(jù) 17 code uchar Game_Char[]={0x27,0x41,0x4d,0x45}。 static uchar xdata Platform[14][21]。 //等級(jí)速度,正常情況,方塊下降的速度 static uchar Game_Stop=1。 }。 //////////////////////////////////////////////////////////////////////////// //************************************************************************** //= 函數(shù)原型 :void Init_GamePlatform() //= 功 能 : 初始化游戲平臺(tái) //= 參 數(shù) : 無(wú) //= 返 回 值 : 無(wú) //= 函數(shù)性質(zhì):公有函數(shù) //= 注 意: //*************************************************************************** void Show_score(uchar)。 Wr_line(1,33,13,64,1 )。 //畫左豎線 Wr_line(1,33,115,64,1)。 //畫右豎線 // for(i=1。j++) { Platform[i][j]=0。 //游戲平臺(tái)最下面一行的每一個(gè)方塊位置為1,作為下邊界 } for(j=0。 } // hanzhi(13,3,6,1)。 //顯示初始等級(jí)水平 Game_Speed=MIN_SLOW_SPEED/(Game_Level+1)。 } ////////////////////////Init_Game///////////////////// void Init_Game() { Game_Stop=1。 //顯示 7 hanzhi(7,8,10,1)。 uchar i。 //畫一條橫線 } y1+=4。 //畫第二條橫線 } for(i=0。 for(i=0。 for(i=0。i5。i5。i++) { Point(x1,y1i,0)。i++) { Point(x1,y1i,0)。i++) { Point(x1i,y1+i,0)。i++) { if(Platform[xx+shape[This_shape].point[i].x1][yy+shape[This_shape].point[i].y]==1) return 1。i4。 for(i=0。 } //////////////////////////////////改變形狀時(shí)產(chǎn)生的沖突檢測(cè) //////////////////// bit Change_Shape_Anti() { uchar i。 //檢測(cè)一個(gè)形狀的沖突情況 } return 0。 } //////////////計(jì)分函數(shù) ,參數(shù)為 消行行數(shù) n/////////////////////////////////////// 23 void Sh