基于51單片機的俄羅斯方塊設計論文,基于,51,單片機,俄羅斯方塊,設計,論文
*******************學院
畢業(yè)設計(論文)
題 目:基于單片機的俄羅斯方塊游戲系統(tǒng)的設計
學習中心:
專 業(yè): 通信工程
年 級:
姓 名:
學 號:
指導教師:
年 月 日
********************學院畢業(yè)設計(論文)
摘 要
俄羅斯方塊是一款風靡全球的電視游戲機和掌上游戲機游戲,它由俄羅斯人阿列克謝·帕基特諾夫發(fā)明,故得此名。俄羅斯方塊的基本規(guī)則是移動、旋轉(zhuǎn)和擺放游戲自動輸出的各種方塊,使之排列成完整的一行或多行并且消除得分。由于上手簡單、老少皆宜,從而家喻戶曉,風靡世界。
這次設計將使用52單片機和HD61202液晶顯示控制驅(qū)動器和JM12864J液晶顯示器組合,來實現(xiàn)比較簡單的俄羅斯方塊設計。
此次設計初期是在keil和proteus聯(lián)合仿真中進行,編程語言為51匯編,后期是進行實物焊接。
論文描述了俄羅斯方塊的主要功能函數(shù)的實現(xiàn)。
關鍵詞:俄羅斯方塊,算法,仿真
Abstract
Tetris is a popular television game machine and game machine game, which Alexei Pajitnov invented by Russians, it was this name. Tetris are the basic rules of movement, rotation and display the game automatically output of the box, which are arranged into a complete one or more rows and eliminate scores. Due to use simple, ages, thus make known to every family, swept the world.
Based on single chip computer of the curriculum design of opportunity, I will use the 51 single-chip microcomputer and HD61202 LCD control driver and JM12864J liquid crystal display combination, to carry out a more simple Russian square design.
This design is in early keil and proteus joint simulation, programming language for 51 assembly, later is welding material.
The paper describes the main functions of the Russian box function of the realization of.
Keywords: Russian square, Algorithm, Simulation
2
***************************學院畢業(yè)設計(論文)
目 錄
摘 要 1
Abstract 2
目 錄 1
引 言 3
1整體設計方案 4
1.1 系統(tǒng)的核心部分單片機 4
1.2 液晶顯示模塊 8
2 系統(tǒng)程序的設計 16
2.1 俄羅斯方塊驅(qū)動流程圖 16
2.2 俄羅斯方塊所有繪圖工作流程圖 17
2.3 俄羅斯方塊中按下鍵的流程圖 18
2.4 俄羅斯方塊所有繪圖工作流程圖 19
3系統(tǒng)仿真 20
3.1 Proteus軟件介紹 20
3.2 Keil軟件介紹 20
3.3俄羅斯方塊系統(tǒng)PROTUES仿真 21
結(jié) 論 24
參 考 文 獻 25
附 錄A 電路原理圖 26
附 錄B 主要程序 28
附 錄C 英文資料和中文翻譯 45
結(jié) 束 語 1
*********************************學院畢業(yè)設計(論文)
引 言
游戲是人們活動中一項非常重要的內(nèi)容,有人認為如果哪一天人類對所有的游戲都失去興趣,恐怕世界的末日就要到了。電腦對游戲的貢獻有目共睹,現(xiàn)在摸過電腦的人很少有沒玩過電腦游戲的,喜歡游戲的人也很少有不玩電腦的。
俄羅斯方塊是一款風靡全球的電視游戲機和掌上游戲機游戲,它曾經(jīng)造成的轟動與造成的經(jīng)濟價值可以說是游戲史上的一件大事。這款游戲最初是由蘇聯(lián)的游戲制作人Alex Pajitnov制作的,它看似簡單但卻變化無窮,令人上癮。相信大多數(shù)用戶都還記得為它癡迷得茶不思飯不想的那個俄羅斯方塊時代。究其歷史,俄羅斯方塊最早還是出現(xiàn)在PC機上,而我國的用戶都是通過紅白機了解、喜歡上它的?,F(xiàn)在聯(lián)眾又將重新掀起這股讓人沉迷的俄羅斯方塊風潮。對一般用戶來說,它的規(guī)則簡單,容易上手,且游戲過程變化無窮,而在"聯(lián)眾俄羅斯方塊"中,更有一些聯(lián)眾網(wǎng)絡游戲所獨有的魅力――有單機作戰(zhàn)與兩人在線對戰(zhàn)兩種模式,用戶可任選一種進行游戲。網(wǎng)絡模式還增加了積分制,使用戶既能感受到游戲中的樂趣,也給用戶提供了一個展現(xiàn)自己高超技藝的場所。
俄羅斯方塊游戲可以說是隨計算機的發(fā)展而發(fā)展,并不斷推陳出新演變出各種類似游戲, 深受廣大玩家喜愛。這個游戲有的簡單, 有的復雜, 但其根本原理是一樣的都是對運動的方塊進行組合, 來訓練玩家的反應能力。本文利用單片機進行俄羅斯方塊設計,采用51匯編語言進行編程,基于匯編語言的原因是在編寫程序的過程中,對于程序的執(zhí)行會有一個比較直觀的表現(xiàn)。
1 系統(tǒng)的核心部分單片機
1.1 單片機的選擇
單片機微型計算機是微型計算機的一個重要分支,也是頗具生命力的機種。單片機微型計算機簡稱單片機,特別適用于控制領域,故又稱為微控制器。
通常,單片機由單塊集成電路芯片構(gòu)成,內(nèi)部包含有計算機的基本功能部件:中央處理器、存儲器和I/O接口電路等。因此,單片機只需要和適當?shù)能浖巴獠吭O備相結(jié)合,便可成為一個單片機控制系統(tǒng)。
20世紀末,電子技術獲得了飛速的發(fā)展,在其推動下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會的各個領域,有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。 時間對人們來說總是那么寶貴,工作的忙碌性和繁雜性容易使人忘記當前的時間。忘記了要做的事情,當事情不是很重要的時候,這種遺忘無傷大雅。但是,一旦重要事情,一時的耽誤可能釀成大禍。
目前,單片機正朝著高性能和多品種方向發(fā)展趨勢將是進一步向著CMOS化、低功耗、小體積、大容量、高性能、低價格和外圍電路內(nèi)裝化等幾個方面發(fā)展。下面是單片機的主要發(fā)展趨勢。單片機應用的重要意義還在于,它從根本上改變了傳統(tǒng)的控制系統(tǒng)設計思想和設計方法。從前必須由模擬電路或數(shù)字電路實現(xiàn)的大部分功能,現(xiàn)在已能用單片機通過軟件方法來實現(xiàn)了。這種軟件代替硬件的控制技術也稱為微控制技術,是傳統(tǒng)控制技術的一次革命。
單片機經(jīng)過3代的發(fā)展,正朝著多功能、高性能、低電壓、低功耗、低價格、大存儲容量、強I/O功能及較好的結(jié)構(gòu)兼容性方向發(fā)展。其發(fā)展趨勢不外乎以下幾個方面:
(1)多功能
單片機中盡可能地把所需要的存儲器和I/O口都集成在一塊芯片上,使得單片機可以實現(xiàn)更多的功能。比如A/D、PWM、PCA(可編程計數(shù)器陣列)、WDT(監(jiān)視定時器---看家狗)、高速I/O口及計數(shù)器的捕獲/比較邏輯等。
有的單片機針對某一個應用領域,集成了相關的控制設備,以減少應用系統(tǒng)的芯片數(shù)量。例如,有的芯片以51內(nèi)核為核心,集成了USB控制器、SMART CARD接口、MP3解碼器、CAN或者I*I*C總線控制器等,LED、LCD或VFD顯示驅(qū)動器也開始集成在8位單片機中。
(2)高效率和高性能
為了提高執(zhí)行速度和執(zhí)行效率,單片機開始使用RISC、流水線和DSP的設計技術,使單片機的性能有了明顯的提高,表現(xiàn)為:單片機的時鐘頻率得到提高;同樣頻率的單片機運行效率也有了很大的提升;由于集成度的提高,單片機的尋址能力、片內(nèi)ROM(FLASH)和RAM的容量都突破了以往的數(shù)量和限制。
由于系統(tǒng)資源和系統(tǒng)復雜程度的增加,開始使用高級語言(如C語言)來開發(fā)單片機的程序。使用高級語言可以降低開發(fā)難度,縮短開發(fā)周期,增強軟件的可讀性和可移植性,便于改進和擴充功能。
(3)低電壓和低功耗
單片機的嵌入式應用決定了低電壓和低功耗的特性十分重要。由于CMOS等工藝的大量采用,很多單片機可以在更低的電壓下工作(1.2V或0.9V),功耗已經(jīng)降低到uA級。這些特性使得單片機系統(tǒng)可以在更小電源的支持下工作更長的時間。
(4)低價格
單片機應用面廣,使用數(shù)量大,帶來的直接好處就是成本的降低。目前世界各大公司為了提高競爭力,在提高單片機性能的同時,十分注意降低其產(chǎn)品的價格。
在此,我們采用型號為AT89S52的單片機。因為: AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。使用Atmel公司高密度非易失性存儲器技術制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。
與MCS-51單片機產(chǎn)品兼容 、8K字節(jié)在系統(tǒng)可編程Flash存儲器、1000次擦寫周期、全靜態(tài)操作:0Hz~33MH、三級加密程序存儲器 、32個可編程I/O口線 、三個16位定時器/計數(shù)器八個中斷源 、全雙工UART串行通道、低功耗空閑和掉電模式 、掉電后中斷可喚醒 、看門狗定時器 、雙數(shù)據(jù)指針 、掉電標識符 。
AT89S52具有以下標準功能:8K字節(jié)Flash,256字節(jié)RAM,32位I/O口線,看門狗定時器,2個數(shù)據(jù)指針,三個16位定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時鐘電路。另外,AT89S52可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復位為止。
AT89S52單片機有PDIP、PLCC、TQFP三種封裝方式,在此我選用DPIP也就是雙列直插封裝的單片機此種封裝有如下特點:
1) 適合PCB的穿孔安裝;
2) 易于對PCB布線;
3) 操作方便;
1.2 AT89S52引腳功能描述
AT89S52單片機的管腳說明如圖2.1所示:
圖2.1 DIP封裝 AT89S52單片機引腳結(jié)構(gòu)圖
(1) VCC:電源。
(2) GND:接地端 。
(3) P0口(P0.0~P0.7):P0口是一個8位漏極開路的雙向I/O口。作為輸出口,每位能驅(qū)動8個TTL邏輯電平。對P0端口寫“1”時,引腳用作高阻抗輸入。當訪問外部程序和數(shù)據(jù)存儲器時,P0口也被作為低8位地址/數(shù)據(jù)復用。在這種模式下,P0具有內(nèi)部上拉電阻。在Flash編程時,P0口也用來接收指令字節(jié);在程序校驗時,輸出指令字節(jié)。程序校驗時,需要外部上拉電阻。
(4)P1口(P1.0~P1.7):P1口是一個具有內(nèi)部上拉電阻的8位雙向I/O口,P1輸出緩沖器能驅(qū)動4個TTL邏輯電平。對P1端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。此外,P1.0和 P1.2分別作定時器/計數(shù)器2的外部計數(shù)輸入(P1.0/T2)和時器/計數(shù)器2的觸發(fā)輸入(P1.1/T2EX),具體如表2-1所示:
在 Flash編程和校驗時,P1口接收低8位地址字節(jié)。
表2-1 P1口第二功能
引腳號
第二功能
P1.0
T2(定時器/計數(shù)器 T2 的外部計數(shù)輸入),時鐘輸出
P1.1
T2EX(定時器/計數(shù)器 T2 的捕捉/重載觸發(fā)信號和方向控制)
P1.5
MOSI(在系統(tǒng)編程用)
P1.6
MISO(在系統(tǒng)編程用)
P1.7
SCK(在系統(tǒng)編程用)
(5)P2口(P2.0~P2.7):P2口是一個具有內(nèi)部上拉電阻的8位雙向I/O口,P2輸出緩沖器能驅(qū)動4個TTL邏輯電平。對P2端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。在訪問外部程序存儲器或用16位地址讀取外部數(shù)據(jù)存儲器(例如執(zhí)行MOVX @DPTR)時,P2口送出高八位地址。在這種應用中,P2口使用很強的內(nèi)部上拉發(fā)送1。在使用8位地址(如 MOVX @RI)訪問外部數(shù)據(jù)存儲器時,P2口輸出P2 鎖存器的內(nèi)容。在flash編程和校驗時,P2口也接收高8位地址字節(jié)和一些控制信號。
(6)P3口(P3.0~P3.7):P3 口是一個具有內(nèi)部上拉電阻的8位雙向I/O口,P2輸出緩沖器能驅(qū)動4個TTL邏輯電平。對P3端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。P3口亦作為 AT89S52第二功能使用,如表2-2所示:
表2-2 P3口第二功能
引腳號
第二功能
P3.0
RXD(串行輸入)
P3.1
TXD(串行輸出)
P3.2
I(外部中斷 0)
P3.3
I(外部中斷 0)
P3.4
T0(定時器 0 外部輸入)
P3.5
T1(定時器 1 外部輸入)
P3.6
(外部數(shù)據(jù)存儲器寫選通)
P3.7
(外部數(shù)據(jù)存儲器寫選通)
在 flash 編程和校驗時,P3 口也接收一些控制信號。RST:復位輸入。晶振工作時,RST腳持續(xù)2個機器周期高電平將使單片機復位??撮T狗計時完成后,RST腳輸出96個晶振周期的高電平。特殊寄存器 AUXR(地址8EH)上的DISRTO位可以使此功能無效。DISRTO默認狀態(tài)下,復位高電平有效。
ALE/:地址鎖存控制信號(ALE)是訪問外部程序存儲器時,鎖存低8位地址的輸出脈沖。在flash編程時,此引腳(PROG)也用作編程輸入脈沖。在一般情況下,ALE以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時器或時鐘使用。然而,特別強調(diào),在每次訪問外部數(shù)據(jù)存儲器時,ALE 脈沖將會跳過。如果需要,通過將地址為8EH的SFR的第0位置“1”,ALE操作將無效。這一位置“1”,ALE 僅在執(zhí)行MOVX或MOVC指令時有效。否則,ALE將被微弱拉高。這個ALE使能標志位(地址為8EH的SFR的第0位)的設置對微控制器處于外部執(zhí)行模式下無效。
:外部程序存儲器選通信號(PSEN)是外部程序存儲器選通信號。當 AT89S52從外部程序存儲器執(zhí)行外部代碼時,PSEN在每個機器周期被激活兩次,而在訪問外部數(shù)據(jù)存儲器時,PSEN將不被激活。
A/VPP:訪問外部程序存儲器控制信號。為使能從0000H到FFFFH的外部程序存儲器讀取指令,EA 必須接 GND。為了執(zhí)行內(nèi)部程序指令,EA應該接VCC。在flash編程期間,EA也接收12伏VPP電壓。
XTAL1:振蕩器反相放大器和內(nèi)部時鐘發(fā)生電路的輸入端。
XTAL2:振蕩器反相放大器的輸出端。
1.3 晶振特性
AT89S52單片機有一個用于構(gòu)成內(nèi)部振蕩器的反相放大器,XTAL1和XTAL2分別是放大器的輸入、輸出端。石英晶體和陶瓷諧振器都可以用來一起構(gòu)成自激振蕩器。從外部時鐘源驅(qū)動器件的話,XTAL2可以不接,而從XTAL1接入,如圖2-2所示。由于外部時鐘信號經(jīng)過二分頻觸發(fā)后作為外部時鐘電路輸入的,所以對外部時鐘信號的占空比沒有其它要求,最長低電平持續(xù)時間和最少高電平持續(xù)時間等還是要符合要求的。如圖 2.2 所示:
圖2.2內(nèi)部振蕩電路連接圖
2 液晶顯示模塊
顯示器部分是由HD61202液晶顯示控制驅(qū)動器和JM12864J液晶顯示器組成的,下面對其分別進行介紹。
2.1 液晶顯示控制驅(qū)動器HD61202的特點
HD61202液晶顯示控制驅(qū)動器是一種帶有驅(qū)動輸出的圖形液晶顯示控制器,它可直接與8位微處理器相連,它可與HD61203配合對液晶屏進行行、列驅(qū)動。HD61202是一種帶有列驅(qū)動輸出的液晶顯示控制器,它可與行驅(qū)動器HD61203配合使用,組成液晶顯示驅(qū)動控制系統(tǒng)。
(1)內(nèi)藏64×64=4096位顯示RAM,RAM中每位數(shù)據(jù)對應LCD屏上一個點的亮、暗狀態(tài);
(2)HD61202是列驅(qū)動器,具有64路列驅(qū)動輸出;
(3)HD61202讀、寫操作時序與68系列微處理器相符,因此它可直接與68系列微處理器接口相連;
(4)HD61202的占空比為1/32~1/64。
2.2 液晶顯示控制驅(qū)動器HD61202的引腳功能
引腳CS1,CS2,CS3 為芯片的片選端;引腳 E 為讀寫使能信號,它是在下降沿時數(shù)據(jù)被鎖存入HD61202的;在E 高電平期間,數(shù)據(jù)被讀出;R/W 為讀寫選擇信號,當它為一時為讀選通,為零時為寫選通;DB0-DB7為數(shù)據(jù)總線RST 為復位信號復位信號有效時,關閉液晶顯示,使顯示起始行為0,RST可跟MCU相連,由MCU控制;也可直接接VDD,使之不起作用。HD61202的引腳功能如下表2-3所示:
表2-3 HD61202的引腳功能
引腳符號
狀態(tài)
引腳名稱
功能
CS1,CS2,CS3
輸入
芯片片選端
CS1和CS2低電平選通,CS3高電平選通。
E
輸入
讀寫使能信號
在E下降沿,數(shù)據(jù)被鎖存(寫)入HD61202;在E高電平期間,數(shù)據(jù)被讀出
R/W
輸入
讀寫選擇信號
R/W=1為讀選通,R/W=0為寫選通
RS
輸入
數(shù)據(jù)、指令選擇信號
RS=1為數(shù)據(jù)操作
RS=0為寫指令或讀狀態(tài)
DB0-DB7
三態(tài)
數(shù)據(jù)總線
RST
輸入
復位信號
復位信號有效時,關閉液晶顯示,使顯示起始行為0,RST可跟MCU相連,由MCU控制;也可直接接VDD,使之不起作用。
2.3 液晶顯示控制驅(qū)動器HD61202的指令系統(tǒng)
HD61202的指令系統(tǒng)比較簡單,總共只有七種?,F(xiàn)分別介紹如下:
1. 顯示開/關指令
R/W RS
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0
0 0 1 1 1 1 1 1/0
當DBO=1時,LCD顯示RAM中的內(nèi)容;DBO=0時,關閉顯示。
2. 顯示起始行(ROW)設置指令
該指令設置了對應液晶屏最上一行的顯示RAM的行號,有規(guī)律的改變顯示起始行,可以使LCD實現(xiàn)顯示滾屏的效果。
R/W RS
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0
1 1 顯示起始行(0-63)
3. 頁(PAGE)置指令
R/W RS
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0
1
0
1
1
1
頁號(0-7)
顯示RAM共64行,分8頁,每頁8行。
4. 列地址(Y Address)設置指令
R/W RS
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0
0 1 顯示列地址(0-63)
設置了頁地址和列地址,就唯一確定了顯示RAM中的一個單元,這樣MCU就可以用讀、寫指令讀出該單元中的內(nèi)容或向該單元寫進一個字節(jié)數(shù)據(jù)。
5. 讀狀態(tài)指令
R/W RS
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
1 0
BUSY 0 ON/OFF REST 0 0 0 0
該指令用來查詢HD61202的狀態(tài),各參量含義如下:
BUSY: 1-內(nèi)部在工作 0-正常狀態(tài)
ON/OFF:1-顯示關閉 0-顯示打開
REST: 1-復位狀態(tài) 0-正常狀態(tài)
在BUSY和REST狀態(tài)時,除讀狀態(tài)指令外,其它指令均不對HD61202產(chǎn)生作用。在對HD61202操作之前要查詢BUSY狀態(tài),以確定是否可以對HD61202進行操作。
6. 寫數(shù)據(jù)指令
R/W RS
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 1
寫 數(shù) 據(jù)
讀、寫數(shù)據(jù)指令每執(zhí)行完一次讀、寫操作,列地址就自動增一,必須注意的是,進行讀操作之前,必須有一次空讀操作,緊接著再讀才會讀出所要讀的單元中的數(shù)據(jù)。
7. 讀數(shù)據(jù)指令
R/W RS
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
1 1
讀 顯 示 數(shù) 據(jù)
2.4 HD61202的軟件設計
液晶控制器HD61202 一共有七條指令,從作用上可分為兩類,顯示狀態(tài)設置指令和數(shù)據(jù)讀/寫操作指令。詳見指令系統(tǒng)可查看圖形液晶顯示器產(chǎn)品有關手冊。顯示起始行設置中L5~L0 為顯示起始行的地址,取值在0-3FH(1-64 行)范圍內(nèi)。頁面地址設置中P2-P0 為選擇的頁面地址,取值范圍為0-7H,代表1-8 頁。列地址設置中C5-C0 為Y地址計數(shù)器的內(nèi)容,取值在0-3FH(1-64 行)范圍內(nèi)。
顯示器上128 點×64 點,每8點為一字節(jié)數(shù)據(jù),都對應著顯示數(shù)據(jù)RAM(在HD61202 芯片內(nèi)),一點對應一個bit,計算機寫入或讀出顯示存儲器的數(shù)據(jù)代表顯示屏上某一點列上的垂直8 點行的數(shù)據(jù)。D0 代表最上一行的點數(shù)據(jù),D1為第二行的點數(shù)據(jù),……D7為第八行的點數(shù)據(jù)。該bit=1 時該點則顯示黑點出來,該bit=0 時該點則消失。另外LCD 指令中有-條display ON/OFF 指令,display ON 時顯示RAM 數(shù)據(jù)對應顯示的畫面;display OFF 則畫面消失,RAM 中顯示數(shù)據(jù)仍存在。
點陣字模文件的建立:
由于MGLS12864 液晶顯示器沒有內(nèi)部字符發(fā)生器,所以在屏幕上顯示的任何字符、漢字等須自己建立點陣字模庫,然后均按圖形方式進行顯示。由于HD61202 顯示存儲器的特性,不能將計算機內(nèi)的漢字庫和其它字模庫提出直接使用,需要將其旋轉(zhuǎn)90 度后再寫入。點陣字模庫建立包括以下幾個方面:
(1)建立8×16 點陣常用字符、數(shù)字、符號字模庫。
可選用計算機BIOS 中ASCII 的8×16 字模庫,所有字符按照ASCII 值從小到大升序排列。
asm{MOV ax,1130h /*AH=11h—功能調(diào)用。裝入字庫至軟字庫 */
mov bh,6 /*AL=30h 取點陣信息 */
int 10h /*BH=6 取ROM8X16 點陣指針(VGA) */
mov ax,es /*出口:ES:BP 指向字庫指針 */
mov ascii_es,ax
mov ax,bp
mov ascii_bp,ax };
ascii_offset=ascii_bp+16*asciicode;
for(j=0;j<16;j++) buf[j]=peekb(ascii_es,ascii_offset+j); /*讀16 字節(jié)點陣數(shù)據(jù)*/
for(m=0;m<16;m++) /*點陣數(shù)據(jù)轉(zhuǎn)換成LCD 格式數(shù)據(jù)*/
{ if(m<8) { beginbyte= 7; shiftn="7";}
else { beginbyte="15"; shiftn="15";}
for(j=0;j<8;j++)
ascii8x16[m]=(ascii8x16[m]+ (buf[beginbyte-j]>>(shiftn-m))&0x01)<<1;
}
也可選用UCDOS 的ASC16 文件做字模庫。ASC16 文件的字符為8×16 點陣。所有字符按照ASCII值從小到大升序排列。計算字符首地址的公式:字符首地址=字符的ASCII 碼值×16加字模庫首地址。
(2)建立所用到的16×16 點陣字模庫。漢字字符可選用UCDOS 的HZK16 文件做字模庫。HZK16 文件的字符為16×16 點陣。所有字符按照區(qū)位碼從小到大升序排列。計算漢字字符首地址的公式如下:漢字首地址=((區(qū)碼-1)×94+位碼-1)×32。作者用C 語言編寫的讀取UCDOS 點陣字庫字模程序,完成字模讀取。
數(shù)據(jù)重新排列,并按MCS-51 匯編程序的要求寫成相應格式的文本文件。
p=((quma-1)*94+weima-1)*32;
cclibfile="fopen"("HZK16","rb");
fseek(cclibfile,(long)p,SEEK_SET);
fread(buf,sizeof(unsigned char),32,cclibfile); /*讀32 字節(jié)點陣數(shù)據(jù)*/
for(m=0;m<32;m++){ /*點陣數(shù)據(jù)轉(zhuǎn)換成LCD 格式數(shù)據(jù)*/
if(m<8) { beginbyte="14"; shiftn="7";}
else if( m>= 8 && m<16 ) { beginbyte="15"; shiftn="15";}
else if( m>=16 && m<24 ) { beginbyte="30"; shiftn="23";}
else { beginbyte="31"; shiftn="31";}
for(j=0;j<8;j++)
hzk16x16[m]=(hzk16x16[m]+ (buf[beginbyte-2*j] >>(shiftn-m))&0x01)<<1;
}
(3)常用圖形(如產(chǎn)品商標等)的點陣圖形的建立。對已有的圖形可采用掃描儀進行掃描,然后用圖形處理軟件進行處理,再將BMP 格式文件轉(zhuǎn)換成MCS-51的匯編文件的格式。
以上所有的字模數(shù)據(jù)都存放在單片機W78E58 的程序存儲器中,如用到的漢字、圖形較多,可選用較大容量的程序存儲器。
通用子程序:通用子程序分左半屏、右半屏寫指令代碼子程序和寫顯示數(shù)據(jù)子程序。液晶顯示驅(qū)動器HD16202 內(nèi)部有個忙標志寄存器,當BF=1 時,表示內(nèi)部操作正在運行,不能接受外部數(shù)據(jù)或指令。下面子程序中設指令代碼寄存器為COMM,數(shù)據(jù)寄存器為DATA。
(COMM EQU 20H /*指令寄存器*/ DATA EQU 21H /*數(shù)據(jù)寄存器*/)
1)左半屏寫指令子程序
WR_CMD1: MOV DPTR,#CRADR1 ;/*讀狀態(tài)字口地址*/
WAIT1: MOVX A,@DPTR ;/* 讀狀態(tài)字 */
JB ACC.7,WAIT1 ;/*判忙標志BF,如BF=1 忙,等待*/
MOV DPTR,#CWADR1 ;/*寫指令字口地址*/
MOV A,COMM ;/*取指令代碼*/
MOVX @DPTR,A ;/*寫指令代碼*/
RET
2)左半屏寫數(shù)據(jù)子程序
WR_DATA1:MOV DPTR,#CRADR1 ;/*讀狀態(tài)字口地址*/
WAIT11: MOVX A,@DPTR ;/* 讀狀態(tài)字 */
JB ACC.7,WAIT11 ;/*判忙標志BF,如BF=1 忙,等待*/
MOV DPTR,#DWADR1 ;/*寫數(shù)據(jù)字口地址*/
MOV A,DATA ;/*取數(shù)據(jù)/
MOVX @DPTR,A ;/*寫數(shù)據(jù)*/
RET
3)右半屏寫指令子程序WR_CMD2 和右半屏寫數(shù)據(jù)子程序WR_DATA2 的編制同左半屏子程序相同,只是對應口地址不同。
2.5 JM12864J的電路結(jié)構(gòu)特點
JM12864J是使用HD61202及其兼容控制驅(qū)動器作為列驅(qū)動器,同時使用HD61203作為行驅(qū)動器的液晶模塊。由于HD6120不與MPU發(fā)生聯(lián)系,只要提供電源就能產(chǎn)生行驅(qū)動信號和各種同步信號,比較簡單,因此這里就不作介紹了。下面主要介紹一下JM12864J的邏輯電路圖。
JM12864J共有兩片HD61202及其兼容控制驅(qū)動器和一片HD61203,如圖2.3所示:
圖2.3 JM12864J的邏輯電路圖
在JM12864J中,兩片HD61202的ADC均接高電平,RST也接高電平,這樣在使用JM12864J時就不必再考慮這兩個引腳的作用。跟HD61202(1)的相連;跟HD61202(2)的CS1相連,因此、選通組合信號為,=01選通(1),,=10選通(2)。對于JM12864J,只要供給VDD、VSS和V0即可,HD61202和HD61203所需的電源將由模塊內(nèi)部電路在VDD和V0、VSS的作用下產(chǎn)生。
2.6 JM12864J的應用
以下內(nèi)容為以單片機89S52為例機的接口電路,控制電路為直接訪問方式的接口電路。電路原理圖如圖2.4所示:
圖2.4 AT89S52 與液晶的接口電路
根據(jù)以上電路原理圖中液晶的各引腳與單片機的接法,可得本設計的液晶模塊電路如圖2.5所示:
由圖2.5可以看出:VSS接地;數(shù)字電源VDD接+5V;數(shù)據(jù)、指令選擇信號RS接單片機P3.2口;讀寫選擇信號R/W接單片機P3.1口;DB0~DB7分別接單片機的P2.0~P2.7口;芯片1、芯片2的片選分別接單片機的P3.4、P3.3口;復位端RST、背光正電源LEDA接+5V;液晶驅(qū)動電壓VEE、背光負電源LEDK接地。
圖2.5液晶模塊電路
2.7 鍵盤電路
鍵盤電路本設計共采用按鍵3個,分別與單片機的 P1.0、P3.5、P3.6、P3.7口相連,分別對應旋轉(zhuǎn)、左移、下、右移。
3 系統(tǒng)程序的設計
行滿
表格滿
消除行并把上面的行數(shù)據(jù)下移并置清行為true、當前圖改變?yōu)閒alse
清所有數(shù)據(jù)
繪圖(清屏)
N
Y
N
提示圖形變量給當前圖形
隨機生成一個圖形交給提示圖形變量
游戲結(jié)束
繪圖
結(jié)束
Y
Y
繪圖一次
Y
圖形到底了嗎
根據(jù)變化繪圖(繪提示圖和當前圖形)
隨機生成一個圖形
交給提示圖形變量
開始
隨機生成一個圖形
交給當前圖形變量
圖形下降一行
N
3.1 俄羅斯方塊驅(qū)動流程圖
圖3.1俄羅斯方塊驅(qū)動圖流程圖
3.2 俄羅斯方塊所有繪圖工作流程圖
開始
輸出分數(shù)
清除剛才位置的圖形
N
當前圖形改變
Y
繪當前圖的現(xiàn)在位置
提示圖形改變真?
N
Y
繪提示圖
消行動作為真?
N
從消行的那一行的第一列開始
Y
為空數(shù)據(jù)
N
Y
繪白色;相當于清除色彩
表格中對應的色彩
行+1到移動數(shù)據(jù)最后一行
N
Y
結(jié)束
圖3.2 俄羅斯方塊所有繪圖工作流程圖
3.3 俄羅斯方塊中按下鍵的流程圖
按下鍵
記下下降圖形時的位置()
直接把圖形下降到底
行滿
N
N
消除行并把上面的行數(shù)據(jù)下移并置清行為true、當前圖改變?yōu)閒alse
Y
Y
表格滿
繪圖(清屏)
清所有數(shù)據(jù)
游戲結(jié)束
提示圖形變量給當前圖形
繪圖
隨機生成一個圖形交給提示圖形變量
結(jié)束
圖3.3 俄羅斯方塊按下鍵的流程圖
第 54 頁 共 52 頁
***********************學院畢業(yè)設計(論文)
4 系統(tǒng)仿真
4.1 Proteus軟件介紹
Proteus軟件是來自英國Labcenter electronics公司的EDA工具軟件。 Proteus軟件有十多年的歷史,在全球廣泛使用,除了其具有和其它EDA工具一樣的原理布圖、PCB自動或人工布線及電路仿真的功能外,其革命性的功能是,他的電路仿真是互動的,針對微處理器的應用,還可以直接在基于原理圖的虛擬原型上編程,并實現(xiàn)軟件源碼級的實時調(diào)試,如有顯示及輸出,還能看到運行后輸入輸出的效果,配合系統(tǒng)配置的虛擬儀器如示波器、邏輯分析儀等,不需要別的,Proteus建立了完備的電子設計開發(fā)環(huán)境!
Proteus組合了高級原理布圖、混合模式SPICE仿真,PCB設計以及自動布線來實現(xiàn)一個完整的電子設計系統(tǒng)。此系統(tǒng)受益于15年來的持續(xù)開發(fā),被《電子世界》在其對PCB設計系統(tǒng)的比較文章中評為最好產(chǎn)品—“The Route to PCB CAD”。Proteus 產(chǎn)品系列也包含了革命性的VSM技術,用戶可以對基于微控制器的設計連同所有的周圍電子器件一起仿真。用戶甚至可以實時采用諸如LED/LCD、鍵盤、RS232終端等動態(tài)外設模型來對設計進行交互仿真。
其功能模塊:—個易用而又功能強大的ISIS原理布圖工具;Proteus混合模型SPICE仿真; ARES PCB設計。Proteus 仿真器的一個擴展Proteus VSM:便于包括所有相關的器件的基于微處理器設計的協(xié)同仿真。此外,還可以結(jié)合微控制器軟件使用動態(tài)的鍵盤,開關,按鈕,LEDs甚至LCD顯示CPU模型。
(1)支持許多通用的微控制器,如PIC,AVR,HC11以及8051;
(2)交互的裝置模型包括:LED和LCD顯示,RS232終端,通用鍵盤;
(3)強大的調(diào)試工具,包括寄存器和存儲器,斷點和單步模式;
(4)IAR C-SPY 和Keil uVision3等開發(fā)工具的源層調(diào)試;
(5)應用特殊模型的DLL界面-提供有關元件庫的全部文件。
4.2 Keil軟件介紹
Keil C51 μVision2集成開發(fā)環(huán)境是Keil Software,Inc/Keil Elektronik GmbH開發(fā)的基于80C51內(nèi)核的微處理器軟件開發(fā)平臺,內(nèi)嵌多種符合當前工業(yè)標準的開發(fā)工具,可以完成從工程建立到管理、編譯、鏈接、目標代碼的生成、軟件仿真、硬件仿真等完整的開發(fā)流程尤其是C編譯工具在產(chǎn)生代碼的準確性和效率方面達到了較高的水平,而且可以附加靈活的控制選項,在開發(fā)大型項目時非常理想。Keil C51集成開發(fā)環(huán)境的主要功能有以下幾點:
(1)μVision2 for Windows:是一個集成開發(fā)環(huán)境,它將項目管理、源代碼編輯和程序調(diào)試等組合在一個功能強大的環(huán)境中;
(2)C51國際際準化C交叉編譯器:從C源代碼產(chǎn)生可重定位的目標模塊;
(3)A51宏匯編器:從80C51匯編源代碼產(chǎn)生可重定位的目標模塊;
(4)BL51鏈接器/定位器:組合由C51和A51產(chǎn)生的可重定位的目標模塊,生成絕對目標模塊;
(5)LIB51庫管理器:從目標模塊生成連接器可以使用的庫文件;
(6)OH51目標文件至HEX格式的轉(zhuǎn)換器,從絕對目標模塊生成Intel Hex文件;
(7)RTX-51實時操作系統(tǒng):簡化了復雜的實時應用軟件項目的設計。
這個工具套件是為專業(yè)軟件開發(fā)人員設計的,但任何層次的編程人員都可以使用,并獲得80C51單片機的絕大部分應用。Keil Software提供了一流的80C51系列開發(fā)工具軟件,下面描述每個套件及其內(nèi)容:
1)PK51專業(yè)開發(fā)套件:PK51專業(yè)開發(fā)套件提供了所有工具,適合專業(yè)開發(fā)人員建立和調(diào)試80C51系列微控制器的復雜嵌入式應用程序。專業(yè)開發(fā)套件可針對80C51及其所有派生系列進行配置使用;
2)DK51開發(fā)套件:DK51開發(fā)套件是PK51的精簡版,它不包括RTX51 Tiny實時操作系統(tǒng)。開發(fā)套件可針對80C51及其所以派生系列進行配置使用;
3)編譯器套件:如果開發(fā)者只需要一個C編譯器而不需要調(diào)試系統(tǒng),則CA51編譯器套件就是最好的選擇。CA51編譯器套件只包含μVision2 IDE集成開發(fā)環(huán)境,CA51不提供μVision2調(diào)試器的功能。這個套件包括了要建立嵌入式應用的所有工具軟件,可針對80C51及其所有派生系列進行配置使用;
表4-1 開發(fā)套件和工具對照表
Components
PK51
DK51
CA51
A51
FR51
uVision2 Project Management&Editor
√
√
√
√
A51 Assembler
√
√
√
√
C51 Compiler
√
√
√
BL51 Liker/locator
√
√
√
√
LIB51 Library Magaer
√
√
√
√
uVision2 Debugger/Simulator
√
√
RTX51 Tiny
√
RTX51 Full
√
4)A51匯編器套件:A51匯編器套件包括一個匯編器和創(chuàng)建嵌入式應用所需要的所有工具。它可針對80C51及其所有派生系列進行配置使用;
5)RTX51實時操作系統(tǒng)(FR51):RTX51實時操作系統(tǒng)是80C51系列微控制器的一個實時內(nèi)核。RTX51 Full提供RTX51 Tiny的所以功能和一些擴展功能,并且包括CAN通信協(xié)議接口子程序;
6)比較表:表4-1列出了每個套件的功能,表的頂上一欄為工具套件名稱,表的左邊一列為軟件組成部分,使用這個對照表可以選擇符合需要的套件。
4.3俄羅斯方塊系統(tǒng)PROTUES仿真
用Proteus軟件,根據(jù)俄羅斯方塊電路原理圖,畫出仿真圖。
電路圖畫完后使用Proteus與Keil聯(lián)調(diào),這里使用的軟件是Keil μVision3.8與Proteus7.4。
(1)打開PROTEUS的安裝目錄,進入help目錄,打開ARM.HLP幫助文檔,點擊聯(lián)接:Remote Debugger Drivers/Download and Install remote debugger driver for Keil uVision3, 下載VDMAGDI.EXE, 運行安裝到KEIL安裝目錄VDM51.dll文檔會自動安裝到KEIL\C51\BIN目錄。
(2)打開KEIL中打開要聯(lián)調(diào)的項目,在project workspace的“target1”上點右鍵/options for target'target1'。
在打開的對話框中點擊到Debug選項卡,在右上角上先中USE選項, 并在下拉菜單中選中proteus VSM Simulator,在旁邊的Settings點一下,如果是proteus在同一臺電腦,host:127.0.0.1, port:8000, 點確定/OK保存。
(3)打開proteus并打開要仿真的圖紙,點擊Debug菜單/選中Use Remote Debug Monitor。
(4)完成,如果程序和電路圖沒問題,在KEIL中build all并且仿真運行后,可以在proteus看到實時效果了如圖4.1所示:
圖4.1 Protues仿真
結(jié) 論
通過3個月地全心投入和辛苦努力,終于完成了基于單片機的俄羅斯方塊游戲的設計,設計的過程就是綜合運用所學知識和學習新知識的過程。由于經(jīng)驗不足,難免出現(xiàn)一些小的失誤,但無論怎樣,本次畢業(yè)設計對于我來說都是一次難得的鍛煉機會,使我積累了許多寶貴的經(jīng)驗。
本文對單片機制作的俄羅斯方塊游戲的運行原理進行了分析,全面、詳細地闡述了俄羅斯方塊游戲的設計過程。本游戲機已經(jīng)達到了掌上娛樂的要求,但在設計上還留有進一步改善的余地,如可以美化游戲界面、加入背景和動作音樂、力回饋系統(tǒng)等。
畢業(yè)設計的整個開發(fā)過程是曲折的,首先在硬件設計上,由于開始對LCD液晶屏不熟悉,加之其程序量較多,所以,在設計的過程中,不免有些困難,通過我多方面的查找資料,并不斷的向老師和同學請教,結(jié)合網(wǎng)絡資源,最終找出比較完善的方案,在理論上能夠?qū)崿F(xiàn)功能要求。經(jīng)過幾個月的前期學習,我積累了很多的關于液晶顯示方面和C語言設計方面的資料,并對電路的整合有了一個基本的概念,最后設計出總的電路圖,經(jīng)過不斷的測試與修改,最終完善了硬件電路的設計。
對于軟件設計,因為以前的編程經(jīng)驗不夠,再加上對AT89S52這一芯片的了解不是很徹底,因此,在這方面花費了很多的精力和時間。當然這個過程不乏有同學的幫助,我要非常感謝實驗室同學的幫助在我的軟件調(diào)試過程中給了我至關重要的幫助,并給了我很多非常好的建議。
當然由于我在理論和實踐方面存在一定的不足,所以在設計思路和實現(xiàn)功能上難免有不足和沒有想到的地方,還請各位老師給予指正。
參 考 文 獻
[1]高凌琴,陳青華.俄羅斯方塊游戲關鍵技術探討[J]. 信息技術與信息化.2008.
[2]譚浩強. C程序設計.[M] 北京:清華大學出版社,2003.
[3]張齊.杜群貴.單片機應用系統(tǒng)設計技術——基于C語言編程[M].北京:電子工業(yè)出版社,2004.
[4]劉洪波.AT89C2051單片機及I/O口的擴展方法[J].山東電子,1997,1:16-18
[5]胡漢才.單片機原理及其接口技術[M].清華大學出版社,2000
[6]王彥朝. 二維數(shù)組在俄羅斯方塊游戲編程中的應用[J].信息與電腦(理論版),2010-04:46-47
[7]王曉威,唐叔進,邢瑞.基于單片機和液晶顯示器的游戲開發(fā)[J].電子世界,2005,7:30-31
[8]徐金增.單片機編程仿真實驗系統(tǒng)的設計與實現(xiàn)[D].山東師范大學,2009,4
[9] George Lee,Karina Ng,Edmond Kwang.Design of ring oscillator based voltage controlled oscillator. Project Final Report[R]. 2005
[10] Yeager Brent.How to troubleshoot your electronic scale[J].Powder and Bulk Engineering,1995
附 錄A 電路原理圖
附 錄B 主要程序
#include
#define uchar unsigned char
#define uint unsigned int
#define DOWNTIME 30
#define MAXHANG 20
#define MAXLIE 16
#define MAXPIX 3
#define PUSHON 50
#define LCD P2
#define EN P3_0
#define RW P3_1
#define RS P3_2
#define CS1 P3_3
#define CS2 P3_4
#define KEYLEFT P3_5
#define KEYDOWN P3_6
#define KEYRIGH P3_7
#define KEYROTATION P1_0
uchar gkey=0xff,keystate=0,t0ms1=0,t0ms=0,downtimegap=0;
uchar miao=0,fen=0;
uchar downok;
bit keyflag,timeupdate,fashionupdate;
uchar idata cubeMap[MAXHANG][2];
typedef struct{
uchar code * box;
uchar cube : 4;
uchar state : 4;
char row;
char column;
} block;
block this;
uint score=0;
uchar speed=1;
uchar code bittable[8]={1,2,4,8,0x10,0x20,0x40,0x80};
uchar code cube[]=
{
/* ■
■■■
*/
0,4,0xe,0, 0,2,6,2, 0,7,2,0, 4,6,4,0,
/*■
■■■
*/
0,8,0xe,0, 0,4,4,0xc, 0,0,0xe,2, 0,6,4,4,
/*■■■
■
*/
0,0xe,8,0, 0,4,4,6, 0,1,7,0, 6,2,2,0,
/*■■
■■
*/
0,0xc,6,0, 0,2,6,4, 0,6,3,0, 2,6,4,0,
/* ■■
■■
*/
0,6,0xc,0, 0,4,6,2, 0,3,6,0, 4,6,2,0,
/*■■■■
*/
0,0xf,0,0, 4,4,4,4, 0,0,0xf,0, 2,2,2,2,
/*■■
■■
*/
0,6,6,0, 0,6,6,0, 0,6,6,0, 0,6,6,0
};
uchar code asii[]=
{
0x3E,0x51,0x49,0x45,0x3E, // -0-
0x00,0x42,0x7F,0x40,0x00, // -1-
0x62,0x51,0x49,0x49,0x46, // -2-
0x21,0x41,0x49,0x4D,0x33, // -3-
0x18,0x14,0x12,0