基於微控制器的88俄羅斯方塊遊戲

2022-10-15 22:54:09 字數 4508 閱讀 4734

摘要:本文集中論述了如何使用at89c52微控制器來實現8*8俄羅斯方塊遊戲,該系統能具體根據8*8俄羅斯方塊遊戲的基本規則進行遊戲,並通過微控制器控制點陣屏顯示其8*8俄羅斯方塊遊戲介面。系統具有實用實時性強、操作簡單、娛樂效能好,擴充套件效能較好**便宜等特點。

關鍵詞:微控制器;at89c52;點陣屏顯示管;俄羅斯方塊遊戲

一前言組合語言易學易用的特點,特別適合於初學者學習微控制器系統程式設計。隨著21世紀資訊社會的到來,計算機在人們的工作和生活中的深入,要求我們越來越多地與計算機打交道,為了使使用者在繁忙的日程工作中得到放鬆,於是出現了各種各樣的休閒軟體,如聊天工具,遊戲等等。於是我們著手設計開始乙個這樣的遊戲軟體。

通過組合語言的學習,我初步掌握了組合語言的最基本的知識,於是在王箏老師的指導下動手用組合語言編寫俄羅斯方塊遊戲。

無可爭議,《俄羅斯方塊》是有史以來最偉大的遊戲之一。它是永恆的娛樂經典,但它實際上又和那些傳統的經典娛樂方式不同,因為它的本質是電子化的,所以它的確屬於現代產物。《俄羅斯方塊》舉世聞名的遊戲性,在該遊戲新鮮出爐時就顯得非常直觀。

某些與墜落的玩具碎片和它們的形狀有關的東西,使得哪怕新手也會很自然地企圖把它們排列起來,並加以適當組合,就好似《俄羅斯方塊》觸動了我們某些內在的感官,使得哪怕是我們當中最雜亂無章的人也要把事情整理妥當。

在曾經發布過的所有遊戲中,《俄羅斯方塊》還被認為是僅有的乙個能夠真正吸引廣泛人群的作品。

為了懷念經典,也為了能夠給大多的計算機使用者在工作之餘找到乙個休閒、娛樂的乙個方式,我們小組開始著手用組合語言開發乙個經典的俄羅斯方塊遊戲,本文就是介紹一種採用52系列單片at89c52為中心器件來實現8*8俄羅斯方塊遊戲,下面就設計過程及關鍵技術作一些具體介紹。

該文將主要為硬體和軟體兩部分來介紹如何用at89c52實現8*8俄羅斯方塊遊戲。

二設計思路,方案比較、設計與論證

1、微控制器的總體設計思路:

2、電源提供方案:

為使模組穩定工作,須有可靠電源。我們考慮了兩種電源方案。

方案一:採用獨立的穩壓電源。此方案的優點是穩定可靠,且有各種成熟電路可選用;缺點是各模組都採用獨立電源,會使系統複雜,且可能影響電路電平。

方案二:採用微控制器控制模組提供電源。改方案的優點是系統簡明扼要,節約成本;缺點是輸出功率不高。

綜上所述,我們選擇第二種方案。

3、顯示介面方案:

該系統要求完成遊戲介面方塊的移動,旋轉等功能。基於上述原因,我們考慮了三種方案:

方案一:完全採用數碼管顯示。這種方案只顯示有限的符號和數碼字苻,無法勝任題目要求。

方案二:完全採用點陣式led 顯示。這種方案實現可行,這種方案既滿足系統功能要求,又減少了系統實現的複雜度。

我們決定採用方案二以實現系統的顯示功能。

4、輸入方案:

題目要求系統能手動復位遊戲、左右下鍵處理,旋轉鍵處理。我們討論了兩種方案:

方案一:採用矩陣按鍵。該方案的優點是:充分利用i/o 口。若用該方案,可提供較多i/o 口,但按鍵少,體現不了矩陣按鍵的優勢,而且操作起來稍顯複雜。

方案二: 採用獨立按鍵,直接在i/o口線上接上按鍵開關。因為設計時精簡和優化了電路,所以剩餘的口資源還比較多,我們使用四個按鍵,分別是旋轉鍵,下鍵,左鍵,右鍵。

由於該系統對於8*8俄羅思方塊遊戲控制,只用微控制器本身的i/o 口就可實現,且本身的計數器及ram已經夠用,故選擇方案二。

三 8*8俄羅思方塊遊戲硬體系統設計

(一)、微控制器最小系統:

1、電源(5v的穩壓電源,通過整流,濾波,穩壓得到)

2、復位電路(1)自動上電復位(rc延時電路)當剛接上電源的瞬間,電容c兩端相當於短路,即相當於給reset9號引腳乙個高電平,等充電結束時(這個時間很短暫),電容相當於斷開,這時已經完成了復位動作。

(2)手動復位電路

3、晶振電路(提供時鐘脈衝)

18,19號管腳,如下圖分別接30pf的電容。

(二)、點陣顯示屏及其驅動電路:

三極體採用pnp型,發光二極體採用共陽型。微控制器的p1口作為資料端,p2口作為片選端。

點陣顯示屏及其驅動電路圖

點陣顯示屏及其驅動電路**圖

(三)、獨立按鍵電路:

按鍵k1定義為右鍵,按鍵k2定義為左鍵,按鍵k3定義為下鍵,按鍵k4定義為旋轉鍵。

按鍵電路圖按鍵電路**圖

(四)、8*8俄羅斯方塊遊戲系統硬體:

(1)選用裝置:at89c51晶元一片,usb資料線一根,共陽極的點陣屏乙個,驅動三極體八個,開關按鍵五個,導線,限流電阻若干。

系統總框圖如圖所示。

硬體系統總框圖

(2) 8*8俄羅斯方塊遊戲控制線路圖

(3) 系統工作原理

1) 程式設計設定好俄羅斯方塊遊戲規則,通過程式設計器寫入89c51微控制器系統。

2) 由89c51微控制器通過p1口輸送資料,p2口片選。

3) 通過89c51微控制器的reset位來控制系統是工作或設定初值,為0就對系統進行初始化,為1系統就開始工作;通過at89c51微控制器的p3.2,p3.3,p3.

4位來控制遊戲方塊的右移,左移,下移,p3.5位來控制俄羅斯方塊的旋轉。

四 8*8俄羅斯方塊遊戲的軟體設計

系統軟體的設定主要包含延遲時間設計、方塊顯示程式設計、判斷按鍵程式、方塊旋轉程式、判斷在下移,左移,右移,旋轉時是否衝突程式、俄羅斯方塊消行程式以及遊戲結束介面顯示程式設計。我們將對每一步的具體如何實現展示給大家。

下面為俄羅斯方塊遊戲主程式流程圖:

主程式/////

main:

jnb ss,$;判斷中斷是否到來

clr ss ;中斷標誌清0

acall hecheng;呼叫移動與背景合成程式

acall display;呼叫動態顯示子程式

acall jianpan ;呼叫鍵盤掃瞄程式

inc r3 ;等待1秒

cjne r3,#50,main

mov r3,#0

acall movingdown1秒到了,下移

acall jieshu呼叫結束

jnbliyongzhi, llll

liyongzhi555:

movr4,#50

oooocalljieshuhou

djnzr4,oooo

mov r4,#50

oooo1call jieshuhou1

djnzr4,oooo1

movr4,#50

oooo2: call jieshuhou2

djnzr4,oooo2

ljmpliyongzhi555

llll: jbchongtu,lee_a ;判斷是否衝突

jnb chonghe,main ;判斷是否需要合成

lee_a: acall backhecheng ;移動合成到背景

acall xiaohang呼叫消行子程式

acall qingchu清除移動區資料

acall chusuiji出隨機數

acall suiji通過隨機數取出積木

acall tihuan3新積木送旋轉區

acall tihuan再送移動區

mov shuchu,#00h ;關螢幕

ajmp main1

1.延時時間程式設計

其中延遲時間設計方法有兩種:一種是採用軟延時的方法;另一種是利用mcs- 51內部定時器產生溢位中斷來延遲時間。具體方案設計如下:

(1) 定時器初值計算

定時器工作時必須給計數器送計數器初值,這個值是送到th和tl上的。它是以加法記數的,並能從全1到全0時自動產生溢位中斷請求。因此可以把計數器記滿為零所需的計數值設定為c和計數初值設定為tc可得到如下計算公式:

tc=m- c式中, m為計數器總值,且在方式1時m為216,( 在方式0時m的值為213,在方式2和3為28)

由此可知:當工作於方式1時,定時時間最長,所以將定時器工作於方式1,即m=216=65536;同時設定微控制器的主脈衝頻率fosc=12mhz。

(2) 軟體計時1秒的方法

在主程式中設定乙個初值為0的軟體計數器和使t0定時1秒。cpu先使軟體計數器加1,然後判斷它是否為50,若為50表示1秒已到。

(3) 定時器計時參考程式**

中斷初始化

;輸入: 無

;輸出: t0jisuqi0,t0jisuqi1,th0,tl0

;功能: 中斷初始化

zdcusihua: movtmod,#01ht0方式1

mov dptr,#65536-20000 ;賦初值

mov th0,dph

movtl0,dpl

movt0jisuqi0,dph ;保護定時器初值

movt0jisuqi1,dpl

setb tr0開啟中斷

setb et0

setb ea

ret中斷子程式

基於微控制器下的考勤機

2 用導線將 txd cpu模組 與 io iccard模組 相連 3 用導線將 t0 cpu模組 與 power iccard模組 相連 4 用導線將 int0 cpu模組 與 sw iccard模組 相連 5 用導線將 int1 cpu模組 與 p cpu掛箱 相連 有關8279模組和鍵盤模組的...

基於微控制器的電梯課程設計

二 一四 二 一五學年第一學期 資訊科學與工程學院 自動化系 課程設計報告書 姓名 余義 學號 201204134019 班級 自動化1201班 課程名稱 微機原理與應用課程設計 指導教師 程磊 1 前言 1 2 現代電梯概述 3 3 硬體部分設計 6 4 軟體部分設計 12 5 電梯執行介面 52...

基於微控制器的電子時鐘設計

ds1302時鐘晶元具有通電自動計時的功能。向ds1302中寫入乙個初值,如寫入2011 05 01 00 00 00 星期日,在通電時,時間就會自動走 過60秒分加1 過60分時加1 過24小時天加1,星期日變成星期一 一周有7天,晶元內的周資訊每7天一迴圈 晶元能夠自動判斷每月有多少天,5月有3...