999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

俄羅斯方塊的結(jié)構(gòu)化匯編語(yǔ)言程序設(shè)計(jì)

2012-09-25 02:59:16于龍海羅辰杰王曉萍梁宜勇
關(guān)鍵詞:單片機(jī)程序游戲

于龍海,羅辰杰,王曉萍,梁宜勇

(浙江大學(xué) 光電信息工程學(xué)系,杭州 310027)

引 言

匯編語(yǔ)言是一種用助記符表示的面向機(jī)器的程序設(shè)計(jì)語(yǔ)言。助記符使得原來(lái)的機(jī)器語(yǔ)言變得相對(duì)較為直觀、易懂、易用,并且匯編語(yǔ)言與機(jī)器語(yǔ)言具有一一對(duì)應(yīng)的關(guān)系,因此它繼承了機(jī)器語(yǔ)言直接、快速、高效的特點(diǎn),是一種底層語(yǔ)言。但是匯編語(yǔ)言的劣勢(shì)也十分明顯,如對(duì)于編寫(xiě)較大的程序需要考慮諸多硬件存儲(chǔ)器的分配以及中斷程序的處理等非常細(xì)節(jié)的問(wèn)題,否則容易出現(xiàn)寄存器沖突,從而導(dǎo)致程序崩潰。為了簡(jiǎn)化匯編語(yǔ)言的編寫(xiě)過(guò)程,本文提出了一種結(jié)構(gòu)化的匯編編程思路,并以基于AT89C51芯片(以下對(duì)匯編語(yǔ)言的討論針對(duì)51單片機(jī)系統(tǒng))的俄羅斯方塊游戲?yàn)槔瑏?lái)展現(xiàn)在51單片機(jī)中匯編語(yǔ)言結(jié)構(gòu)化編寫(xiě)的優(yōu)勢(shì)。

1 匯編語(yǔ)言的結(jié)構(gòu)化設(shè)計(jì)思想

1.1 變量定義

匯編語(yǔ)言中無(wú)需變量的聲明,因?yàn)閰R編語(yǔ)言是直接對(duì)具體的內(nèi)存單元操作,而每個(gè)單元有16進(jìn)制的地址碼,因此所有變量都可人為地由該地址碼表示。但是匯編語(yǔ)言提供了EQU偽指令,可以將特定的內(nèi)存空間標(biāo)記為特定的名稱,這就為變量定義提供了可能。而使用EQU偽指令的好處就是將抽象的物理內(nèi)存分化為具體的變量名,避免了內(nèi)存沖突,同時(shí)又增加了程序可讀性。

1.2 子函數(shù)設(shè)計(jì)

子函數(shù)對(duì)程序結(jié)構(gòu)化的作用是其可簡(jiǎn)化主函數(shù)的編寫(xiě),使得程序主干的編寫(xiě)思路清晰化,而一些復(fù)雜的算法與功能則放在一層層的子函數(shù)中實(shí)現(xiàn)。但是,匯編語(yǔ)言在調(diào)用子函數(shù)的過(guò)程中如果處理不當(dāng),極其容易造成堆棧錯(cuò)誤、內(nèi)存沖突等問(wèn)題。本文提出了一種優(yōu)化的子函數(shù)設(shè)計(jì)方案。

首先,把51單片機(jī)內(nèi)存的4組工作寄存器區(qū)(00H~1FH),用作子函數(shù)的臨時(shí)變量存放區(qū),如圖1所示;另一部分是用戶區(qū)(20H~7FH),用作主函數(shù)變量與堆棧區(qū)域。其次,4組工作寄存器區(qū)的每一組用作同一層次的子函數(shù)的臨時(shí)變量,低層次的子函數(shù)只能被高層次的子函數(shù)調(diào)用,同一層次的子函數(shù)不允許相互嵌套調(diào)用。所有的子函數(shù)在編寫(xiě)時(shí)需要聲明其使用的工作寄存器組編號(hào),以防止沖突。在函數(shù)嵌套時(shí),用RS1、RS0兩個(gè)標(biāo)志位的切換來(lái)實(shí)現(xiàn)工作寄存器組的切換,如此就可以方便可靠地實(shí)現(xiàn)子函數(shù)的調(diào)用和嵌套。

圖1 工作寄存器區(qū)臨時(shí)變量存放層次結(jié)構(gòu)

1.3 中斷函數(shù)設(shè)計(jì)

與順序設(shè)計(jì)的程序不同,51系列單片機(jī)還需考慮中斷函數(shù)的設(shè)計(jì)。51單片機(jī)的中斷有外部中斷、定時(shí)器中斷、串口中斷等。中斷程序在中斷源觸發(fā)后即起作用,換句話說(shuō),中斷程序可能隨時(shí)中止主程序的運(yùn)行。如果在這個(gè)時(shí)候,中斷函數(shù)與主程序中的主函數(shù)或子函數(shù)享用相同的臨時(shí)變量,那么在中斷發(fā)生時(shí),這些臨時(shí)變量就會(huì)被改寫(xiě),從而導(dǎo)致內(nèi)存沖突。因此,中斷函數(shù)的臨時(shí)變量體系應(yīng)與主程序有別,以下是三種可選方案:

第一種方案是將工作寄存器區(qū)分為兩類,一類用作主程序函數(shù)的臨時(shí)變量,另一類用作中斷函數(shù)的臨時(shí)變量。這種方案中,單片機(jī)工作寄存器的組數(shù)對(duì)函數(shù)設(shè)計(jì)起限制作用。

第二種方案允許中斷函數(shù)與主程序的子函數(shù)共用工作寄存器區(qū),但是代價(jià)是在調(diào)用中斷時(shí)必須保護(hù)和恢復(fù)現(xiàn)場(chǎng),即在中斷函數(shù)的開(kāi)始、結(jié)尾必須將中斷函數(shù)及其子函數(shù)使用的工作寄存器的數(shù)據(jù)壓入、彈出堆棧,從而保證中斷前后主程序函數(shù)臨時(shí)變量的一致。

第三種方法是通過(guò)設(shè)置標(biāo)志變量,避免在中斷函數(shù)中插入子函數(shù)。在中斷程序中,根據(jù)狀態(tài)修改標(biāo)志變量后即返回主函數(shù)。在主函數(shù)中,判斷相應(yīng)的中斷標(biāo)志執(zhí)行相應(yīng)的子程序。這種編程方法的優(yōu)點(diǎn)是中斷程序十分簡(jiǎn)單,能在很短的時(shí)間內(nèi)完成,減少了中斷出錯(cuò)的可能性;其缺點(diǎn)是中斷執(zhí)行的反應(yīng)速度會(huì)有所降低,因?yàn)橹骱瘮?shù)對(duì)中斷標(biāo)志位一定是滯后于中斷發(fā)生的,且如果主函數(shù)的結(jié)構(gòu)是大循環(huán)型的,那么一次循環(huán)中只能處理若干次中斷(大多數(shù)情況往往只為一次),這種編程方法對(duì)需要高頻中斷的功能是不合適的。

2 俄羅斯方塊的軟件實(shí)現(xiàn)方法

俄羅斯方塊是一款風(fēng)靡全世界的十分經(jīng)典的休閑游戲。本文在基于MCS-51單片機(jī)和具有矩陣式按鍵、雙色LED點(diǎn)陣和數(shù)碼管等功能模塊的實(shí)驗(yàn)系統(tǒng)上,采用以上所述的匯編語(yǔ)言結(jié)構(gòu)化的編程思想,編寫(xiě)能夠運(yùn)用按鍵操作游戲、將游戲圖像顯示于16×8的LED雙色點(diǎn)陣上,將玩家分?jǐn)?shù)顯示在靜態(tài)數(shù)碼管上、并伴隨游戲產(chǎn)生音樂(lè)效果的俄羅斯方塊游戲。

2.1 功能分析

俄羅斯方塊游戲的規(guī)則很簡(jiǎn)單,屏幕上方隨機(jī)產(chǎn)生不同形狀的方塊并以一定速度落下,玩家可以控制方塊的左右位置以及旋轉(zhuǎn)方塊,巧妙地布置安排使方塊落下后充分利用屏幕空間。每當(dāng)屏幕的一整行被方塊排滿時(shí),該行方塊從屏幕上消失,其上的方塊依次下降一行,玩家獲得一定的分?jǐn)?shù)。當(dāng)方塊堆積達(dá)到屏幕頂端的時(shí)候,游戲結(jié)束。本游戲的主要功能包括:

①開(kāi)機(jī)進(jìn)入開(kāi)機(jī)歡迎界面。按任意鍵進(jìn)入游戲難度選擇界面,難度選擇后,按確定鍵進(jìn)入游戲界面。

②每4個(gè)格點(diǎn)(雙色LED)組成一個(gè)圖形,游戲中共有7種方塊圖形。屏幕上端隨機(jī)產(chǎn)生一種方塊圖形,并按著一定的時(shí)間周期向下移動(dòng)。當(dāng)前一個(gè)方塊無(wú)法再次移動(dòng)時(shí),產(chǎn)生下一個(gè)方塊。

③當(dāng)方塊向下移動(dòng)時(shí),玩家可以通過(guò)上、下、左、右4個(gè)按鍵分別調(diào)整方塊的角度、加速方塊的下移速度、向左移動(dòng)方塊1格、向右移動(dòng)方塊1格。

④游戲中,玩家可以按停止鍵,選擇停止游戲并返回到開(kāi)始界面;或者是按暫停鍵,暫停游戲;再次按暫停鍵時(shí),游戲繼續(xù)進(jìn)行。

⑤當(dāng)一個(gè)方塊無(wú)法繼續(xù)向下移動(dòng)時(shí),判斷此時(shí)能否將屏幕的一行或多行完全填滿。若能則將這些行的方塊閃爍后消除,玩家獲得相應(yīng)的分?jǐn)?shù)(每消去一行,玩家得到10分),并顯示玩家總的分?jǐn)?shù);而未被消除的方塊則會(huì)一直積累。隨著玩家分?jǐn)?shù)的增加,游戲的難度會(huì)增加,方塊下落的速度會(huì)加快。

⑥如果未被消除的方塊堆放的高度很高,達(dá)到屏幕頂端以至無(wú)法產(chǎn)生新方塊,則游戲結(jié)束,返回到開(kāi)始?xì)g迎界面。

⑦游戲開(kāi)始、結(jié)束、按鍵以及消行時(shí)會(huì)產(chǎn)生一定的音樂(lè)效果。

2.2 變量定義與子函數(shù)模塊

根據(jù)結(jié)構(gòu)化的編程思想,程序中需要對(duì)變量進(jìn)行空間分配,并根據(jù)其功能進(jìn)行命名,以增加程序的可讀性,使得后期的調(diào)試工作更加方便。變量定義的具體內(nèi)容包括單片機(jī)及功能模塊所需的引腳命名、功能模塊所需的常量命名、單片機(jī)用戶儲(chǔ)存空間的預(yù)分配和命名。

首先列出需要用到的所有引腳和變量,并將總程序空間分塊并合理分配每一塊的大小。本程序?qū)AM空間劃分為即時(shí)調(diào)用區(qū)、固定區(qū)和堆棧區(qū)。即時(shí)調(diào)用區(qū)為通用寄存器組,地址00H~1FH;固定區(qū)為用戶存儲(chǔ)區(qū)的20H~5FH;堆棧區(qū)為60H開(kāi)始的剩余空間。

對(duì)于函數(shù)的調(diào)用方法、數(shù)據(jù)的應(yīng)用輸出、寄存器工作組的使用等關(guān)系到程序儲(chǔ)存空間的細(xì)節(jié)問(wèn)題,前文已經(jīng)作出論述。子函數(shù)與主函數(shù)的數(shù)據(jù)接口采用C51的4個(gè)工作寄存器組存放,在子函數(shù)調(diào)用時(shí)將臨時(shí)數(shù)據(jù)存入相應(yīng)的工作寄存器進(jìn)行處理,執(zhí)行完畢后將數(shù)據(jù)返回上一級(jí)函數(shù)。

2.3 中斷的設(shè)計(jì)

中斷的使用和中斷程序的設(shè)計(jì)是單片機(jī)應(yīng)用的難點(diǎn)之一。

首先,要根據(jù)程序功能設(shè)計(jì)中斷的邏輯流程。80C51單片機(jī)中有兩個(gè)定時(shí)器/計(jì)數(shù)器T0、T1。程序要求同時(shí)實(shí)現(xiàn)定時(shí)掃描顯示以及播放音樂(lè)的功能(音樂(lè)功能通過(guò)一條口線和蜂鳴器實(shí)現(xiàn)),所以要同時(shí)使用T0和T1的中斷:T0控制顯示模塊,中斷間隔時(shí)間較長(zhǎng),優(yōu)先級(jí)較低;T1控制音樂(lè)模塊,中斷間隔較短,中斷中執(zhí)行的代碼也較短,優(yōu)先級(jí)較高。

然后,根據(jù)中斷的特點(diǎn),合理設(shè)計(jì)中斷的使用規(guī)則。本程序中設(shè)計(jì)使用雙中斷,這使得程序的主體邏輯流程變得簡(jiǎn)單,但同時(shí)也使得中斷函數(shù)本身的設(shè)計(jì),尤其是即時(shí)數(shù)據(jù)的空間分配和斷點(diǎn)的保護(hù)等,變得十分重要。為了使函數(shù)簡(jiǎn)單可靠,程序中允許中斷函數(shù)與主程序的其他函數(shù)共用工作寄存器區(qū),但是在每次調(diào)用中斷函數(shù)時(shí)都需要全面保護(hù)和恢復(fù)現(xiàn)場(chǎng)。音樂(lè)中斷因?yàn)椴簧婕肮ぷ骷拇嫫鳎灾恍枰Wo(hù)、恢復(fù)基本的數(shù)據(jù)就可以。

2.4 主函數(shù)流程和偽代碼描述

根據(jù)俄羅斯方塊游戲的功能以及結(jié)構(gòu)化的匯編設(shè)計(jì)方法,主函數(shù)流程如圖2所示。

偽代碼如下:

圖2 主函數(shù)流程

2.5 實(shí)驗(yàn)測(cè)試與結(jié)果

開(kāi)機(jī)測(cè)試與結(jié)果:開(kāi)機(jī)全速運(yùn)行程序,LED雙色顯示器上顯示的“Hello”歡迎界面如圖3所示。按任意鍵可進(jìn)入難度選擇界面。

難度選擇界面測(cè)試:進(jìn)入難度選擇界面,雙色LED上顯示紅色的“1 2 3”字樣,并在‘3’下有一綠色小圓點(diǎn),如圖4所示。按數(shù)字鍵1、2、3鍵,用于選擇相應(yīng)的等級(jí),同時(shí)綠色小圓點(diǎn)會(huì)移到相應(yīng)等級(jí)的下方;按“enter”鍵結(jié)束難度選擇,進(jìn)入游戲界面。

圖3 開(kāi)機(jī)界面

圖4 難度選擇界面

游戲流程測(cè)試:進(jìn)入游戲主界面。LED上方產(chǎn)生方塊,不操作時(shí)方塊可以自由下落,此時(shí)方塊為紅色。按動(dòng)‘7’鍵,方塊改變其角度,再次按動(dòng),角度可以繼續(xù)改變;按動(dòng)‘6’鍵,方塊下移一格,并且不影響其自由下落,表現(xiàn)為方塊下移速度加快;按動(dòng)‘2’鍵,方塊向左移動(dòng)一位,當(dāng)移動(dòng)到左邊邊界時(shí),無(wú)法再移動(dòng);按動(dòng)‘A’鍵,方塊向右移動(dòng)一位,當(dāng)移動(dòng)到右邊邊界時(shí),無(wú)法再移動(dòng)。方塊移動(dòng)到無(wú)法再向下時(shí),顏色變?yōu)榫G色,并且在LED上方產(chǎn)生新的方塊,如圖5所示。滿足消行條件時(shí),該行閃爍后即消失,同時(shí)在數(shù)碼管上顯示分?jǐn)?shù)增加10分;多行消除時(shí),為每行依次消除,增加相應(yīng)分?jǐn)?shù),如圖6所示。隨著分?jǐn)?shù)的增加,方塊的自由下落速度加快。按動(dòng)‘8’鍵,游戲暫停,此時(shí)按動(dòng)除‘8’鍵的其他鍵均無(wú)效。當(dāng)再次按動(dòng)‘8’,游戲繼續(xù)進(jìn)行。游戲進(jìn)入、按鍵、消行時(shí),均有音樂(lè)產(chǎn)生,并且兩者同步。

游戲結(jié)束測(cè)試:按‘C’鍵或者游戲結(jié)束時(shí),屏幕所有LED燈從底端到上端逐行點(diǎn)亮,再?gòu)纳隙说降锥酥鹦邢纾藭r(shí)伴隨著音樂(lè)產(chǎn)生,然后進(jìn)入歡迎界面。

圖5 游戲流程

圖6 加分顯示

結(jié) 語(yǔ)

本文以俄羅斯方塊游戲的程序編寫(xiě)為例子,提出、分析并具體說(shuō)明了在功能復(fù)雜的匯編程序設(shè)計(jì)過(guò)程中,采用的結(jié)構(gòu)化編程思路。并從變量定義、子函數(shù)設(shè)計(jì)、中斷函數(shù)設(shè)計(jì)等方面探討了匯編語(yǔ)言結(jié)構(gòu)化設(shè)計(jì)的具體方法,從而有效解決了匯編程序編寫(xiě)中易發(fā)生的寄存器內(nèi)存沖突等問(wèn)題。這種匯編語(yǔ)言編程的結(jié)構(gòu)化思維,對(duì)于運(yùn)用編寫(xiě)匯編大程序具有重要的指導(dǎo)和借鑒作用。

[1]王汀,鄒逢興.微處理機(jī)原理與接口技術(shù)[M].杭州:浙江大學(xué)出版社,2008.

[2]何立民.MCS-51系列單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)——系統(tǒng)配置與接口技術(shù)[M].北京:北京航空航天大學(xué)出版社,1990.

[3]陳汝全.實(shí)用微機(jī)與單片機(jī)控制技術(shù)[M].成都:電子科技大學(xué)出版社,1993.

猜你喜歡
單片機(jī)程序游戲
基于單片機(jī)的SPWM控制逆變器的設(shè)計(jì)與實(shí)現(xiàn)
電子制作(2019年13期)2020-01-14 03:15:28
基于單片機(jī)的層次漸變暖燈的研究
電子制作(2019年15期)2019-08-27 01:12:10
基于單片機(jī)的便捷式LCF測(cè)量?jī)x
電子制作(2019年9期)2019-05-30 09:42:02
試論我國(guó)未決羈押程序的立法完善
“程序猿”的生活什么樣
英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
數(shù)獨(dú)游戲
瘋狂的游戲
飛碟探索(2016年11期)2016-11-14 19:34:47
爆笑游戲
創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
主站蜘蛛池模板: 久草热视频在线| 久久香蕉欧美精品| 成人午夜视频在线| 亚洲午夜片| 国产精品yjizz视频网一二区| 波多野结衣视频网站| 国产一区在线观看无码| 国产人人射| 日本在线免费网站| 日韩国产欧美精品在线| 国产欧美视频在线观看| 欧美中文字幕在线视频 | 国产精品手机在线观看你懂的| 欧美特黄一级大黄录像| 激情综合激情| 日韩毛片视频| 性喷潮久久久久久久久| 亚洲精品日产精品乱码不卡| 中文字幕啪啪| 亚洲第一区在线| 高清不卡一区二区三区香蕉| 99精品国产自在现线观看| 欧美精品高清| 日本妇乱子伦视频| 国产激爽大片高清在线观看| 国产自在自线午夜精品视频| 婷婷激情亚洲| 久久综合丝袜日本网| 国产一级视频在线观看网站| 婷婷成人综合| 日韩二区三区无| 国产女人18水真多毛片18精品| 国产白浆一区二区三区视频在线| 孕妇高潮太爽了在线观看免费| 久久精品波多野结衣| 日本国产精品一区久久久| 天堂久久久久久中文字幕| 国产一区二区人大臿蕉香蕉| 伊人国产无码高清视频| 亚洲欧美日韩色图| 亚洲天堂免费观看| 91色国产在线| 欧美中日韩在线| 亚洲码在线中文在线观看| 伦伦影院精品一区| 91九色国产porny| 国产中文在线亚洲精品官网| 人人妻人人澡人人爽欧美一区| 亚洲大尺度在线| 人妻精品全国免费视频| 国内嫩模私拍精品视频| 欧洲亚洲欧美国产日本高清| 日韩 欧美 国产 精品 综合| 久久人妻xunleige无码| 伊人久久大香线蕉综合影视| 久久久久中文字幕精品视频| 专干老肥熟女视频网站| 免费无码AV片在线观看国产| 欧美成人看片一区二区三区| 久久动漫精品| 成人综合网址| 亚洲天堂色色人体| 蜜臀AVWWW国产天堂| 国产精品漂亮美女在线观看| 在线观看国产精品第一区免费 | 欧美中文字幕在线视频| 亚洲第一精品福利| 韩国自拍偷自拍亚洲精品| 亚洲无码四虎黄色网站| 国产亚洲精久久久久久久91| 久久久久久久久亚洲精品| 日韩午夜福利在线观看| 国产成人无码AV在线播放动漫 | 5555国产在线观看| 97久久精品人人| 精品亚洲国产成人AV| 黄色网址手机国内免费在线观看 | 国产精品极品美女自在线网站| 国产亚洲视频中文字幕视频| 亚洲国产精品无码AV| 日韩欧美中文字幕一本| 国产黄色爱视频|