基于單片機實現的俄羅斯方塊游戲
MCU based Russia block game 摘要 本設計是通過AT89S52單片機來實現俄羅斯方塊游戲的設計,使用C語言進行編程,并通過Proteus來進行仿真。 本設計要實現的基本功能是:應用按鍵來控制方塊的變換與移動;消除一行并計分;消除多行額外獎勵記分,方塊堆滿時結束游戲等俄羅斯方塊的基本功能。單片機在手持娛樂設備上的應用具有非常大的潛力,它能將其帶入到一個新的階段。為了解決外部電路圖,必須充分了解所用液晶的顯示方法和單片機的外部接口功能,和所需要處理的邏輯關系;還要理解LCD液晶的控制原理,來通過數據端口和控制端口來實現畫面在液晶上面的顯示。 程序則要求對外部電路了解的情況下完成自己所需要的功能,并將所要完成的功能用編程語言的形式來實現。然后通過Protues仿真實現通過外部按鍵來控制各種不同圖形的方塊來玩游戲,并且實現記錄分數和通過過關數來改變方塊下降的速度。最后將程序下載至AT89S52單片機并進行實際運行,實際運行表明,本設計可以實現基本的游戲功能,達到預期的目的
計算機系統的發展已明顯地朝三個方向發展;這三個方向就是:巨型化,單片化,網絡化。以解決復雜系統計算和高速數據處理的仍然是巨型機在起作用,故而,巨型機在目前在朝高速及處理能力的方向努力。單片機在出現時,Intel公司就給其單片機取名為嵌入式微控制器(embedded microcontroller)。單片機的最明顯的優勢,就是可以嵌入到各種儀器、設備中。這一點是巨型機和網絡不可能做到的。單片機在內部已集成了越來越多的部件,這些部件包括一般常用的電路,例如:定時器,比較器,A/D轉換器,D /A轉換器,串行通信接口,Watchdog電路,LCD控制器等。
單片機微型計算機是微型計算機的一個重要分支,也是頗具生命力的機種。單片機微型計算機簡稱單片機,特別適用于控制領域,故又稱為微控制器。 通常,單片機由單塊集成電路芯片構成,內部包含有計算機的基本功能部件:中央處理器、存儲器和I/O接口電路等。因此,單片機只需要和適當的軟件及外部設備相結合,便可成為一個單片機控制系統。 20世紀末,電子技術獲得了飛速的發展,在其推動下,現代電子產品幾乎滲透了社會的各個領域,有力地推動了社會生產力的發展和社會信息化程度的提高,同時也使現代電子產品性能進一步提高,產品更新換代的節奏也越來越快。 時間對人們來說總是那么寶貴,工作的忙碌性和繁雜性容易使人忘記當前的時間。忘記了要做的事情,當事情不是很重要的時候,這種遺忘無傷大雅。但是,一旦重要事情,一時的耽誤可能釀成大禍。 目前,單片機正朝著高性能和多品種方向發展趨勢將是進一步向著CMOS化、低功耗、小體積、大容量、高性能、低價格和外圍電路內裝化等幾個方面發展。下面是單片機的主要發展趨勢。單片機應用的重要意義還在于,它從根本上改變了傳統的控制系統設計思想和設計方法。從前必須由模擬電路或數字電路實現的大部分功能,現在已能用單片機通過軟件方法來實現了。這種軟件代替硬件的控制技術也稱為微控制技術,是傳統控制技術的一次革命。 單片機經過3代的發展,正朝著多功能、高性能、低電壓、低功耗、低價格、大存儲容量、強I/O功能及較好的結構兼容性方向發展。其發展趨勢不外乎以下幾個方面: 單片機中盡可能地把所需要的存儲器和I/O口都集成在一塊芯片上,使得單片機可以實現更多的功能。比如A/D、PWM、PCA(可編程計數器陣列)、WDT(監視定時器---看家狗)、高速I/O口及計數器的捕獲/比較邏輯等。 有的單片機針對某一個應用領域,集成了相關的控制設備,以減少應用系統的芯片數量。例如,有的芯片以51內核為核心,集成了USB控制器、SMART CARD接口、MP3解碼器、CAN或者I*I*C總線控制器等,LED、LCD或VFD顯示驅動器也開始集成在8位單片機中。 2.高效率和高性能 為了提高執行速度和執行效率,單片機開始使用RISC、流水線和DSP的設計技術,使單片機的性能有了明顯的提高,表現為:單片機的時鐘頻率得到提高;同樣頻率的單片機運行效率也有了很大的提升;由于集成度的提高,單片機的尋址能力、片內ROM(FLASH)和RAM的容量都突破了以往的數量和限制。 由于系統資源和系統復雜程度的增加,開始使用高級語言(如C語言)來開發單片機的程序。使用高級語言可以降低開發難度,縮短開發周期,增強軟件的可讀性和可移植性,便于改進和擴充功能。 3.低電壓和低功耗 單片機的嵌入式應用決定了低電壓和低功耗的特性十分重要。由于CMOS等工藝的大量采用,很多單片機可以在更低的電壓下工作(1.2V或0.9V),功耗已經降低到uA級。這些特性使得單片機系統可以在更小電源的支持下工作更長的時間。 4.低價格 單片機應用面廣,使用數量大,帶來的直接好處就是成本的降低。目前世界各大公司為了提高競爭力,在提高單片機性能的同時,十分注意降低其產品的價格。 在此,我們采用型號為AT89S52的單片機。因為: AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統可編程Flash存儲器。使用Atmel公司高密度非易失性存儲器技術制造,與工業80C51產品指令和引腳完全兼容。片上Flash允許程序存儲器在系統可編程,亦適于常規編程器。在單芯片上,擁有靈巧的8位CPU和在系統可編程Flash,使得AT89S52為眾多嵌入式控制應用系統提供高靈活、超有效的解決方案。 與MCS-51單片機產品兼容 、8K字節在系統可編程Flash存儲器、1000次擦寫周期、全靜態操作:0Hz~33MH、三級加密程序存儲器 、32個可編程I/O口線 、三個16位定時器/計數器八個中斷源 、全雙工UART串行通道、低功耗空閑和掉電模式 、掉電后中斷可喚醒 、看門狗定時器 、雙數據指針 、掉電標識符 。 AT89S52具有以下標準功能:8K字節Flash,256字節RAM,32位I/O口線,看門狗定時器,2個數據指針,三個16位定時器/計數器,一個6向量2級中斷結構,全雙工串行口,片內晶振及時鐘電路。另外,AT89S52可降至0Hz 靜態邏輯操作,支持2種軟件可選擇節電模式。空閑模式下,CPU停止工作,允許RAM、定時器/計數器、串口、中斷繼續工作。掉電保護方式下,RAM內容被保存,振蕩器被凍結,單片機一切工作停止,直到下一個中斷或硬件復位為止。 AT89S52單片機有PDIP、PLCC、TQFP三種封裝方式,在此我選用DPIP也就是雙列直插封裝的單片機此種封裝有如下特點: 1. 適合PCB的穿孔安裝; 2. 易于對PCB布線; 3. 操作方便; AT89S52單片機的管腳說明如圖2-1所示:
圖2-1 DIP封裝 AT89S52單片機引腳結構圖
1.VCC:電源。 2.GND:接地端 。 3.P0口(P0.0~P0.7):P0口是一個8位漏極開路的雙向I/O口。作為輸出口,每位能驅動8個TTL邏輯電平。對P0端口寫“1”時,引腳用作高阻抗輸入。當訪問外部程序和數據存儲器時,P0口也被作為低8位地址/數據復用。在這種模式下,P0具有內部上拉電阻。在Flash編程時,P0口也用來接收指令字節;在程序校驗時,輸出指令字節。程序校驗時,需要外部上拉電阻。 4.P1口(P1.0~P1.7):P1口是一個具有內部上拉電阻的8位雙向I/O口,P1輸出緩沖器能驅動4個TTL邏輯電平。對P1端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(IIL)。此外,P1.0和 P1.2分別作定時器/計數器2的外部計數輸入(P1.0/T2)和時器/計數器2的觸發輸入(P1.1/T2EX),具體如表2-1所示: 在 Flash編程和校驗時,P1口接收低8位地址字節。 表2-1 P1口第二功能 | | | T2(定時器/計數器 T2 的外部計數輸入),時鐘輸出 | | T2EX(定時器/計數器 T2 的捕捉/重載觸發信號和方向控制) | | | | | | |
5.P2口(P2.0~P2.7):P2口是一個具有內部上拉電阻的8位雙向I/O口,P2輸出緩沖器能驅動4個TTL邏輯電平。對P2端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(IIL)。在訪問外部程序存儲器或用16位地址讀取外部數據存儲器(例如執行MOVX @DPTR)時,P2口送出高八位地址。在這種應用中,P2口使用很強的內部上拉發送1。在使用8位地址(如 MOVX @RI)訪問外部數據存儲器時,P2口輸出P2 鎖存器的內容。在flash編程和校驗時,P2口也接收高8位地址字節和一些控制信號。 6.P3口(P3.0~P3.7):P3 口是一個具有內部上拉電阻的8位雙向I/O口,P2輸出緩沖器能驅動4個TTL邏輯電平。對P3端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(IIL)。P3口亦作為 AT89S52第二功能使用,如表2-2所示: 表2-2 P3口第二功能 | | | | | | | I
(外部中斷 0) | | I
(外部中斷 0) | | | | | |
(外部數據存儲器寫選通) | |
(外部數據存儲器寫選通) |
在 flash 編程和校驗時,P3 口也接收一些控制信號。RST:復位輸入。晶振工作時,RST腳持續2個機器周期高電平將使單片機復位。看門狗計時完成后,RST腳輸出96個晶振周期的高電平。特殊寄存器 AUXR(地址8EH)上的DISRTO位可以使此功能無效。DISRTO默認狀態下,復位高電平有效。 ALE/
:地址鎖存控制信號(ALE)是訪問外部程序存儲器時,鎖存低8位地址的輸出脈沖。在flash編程時,此引腳(PROG)也用作編程輸入脈沖。在一般情況下,ALE以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時器或時鐘使用。然而,特別強調,在每次訪問外部數據存儲器時,ALE 脈沖將會跳過。如果需要,通過將地址為8EH的SFR的第0位置“1”,ALE操作將無效。這一位置“1”,ALE 僅在執行MOVX或MOVC指令時有效。否則,ALE將被微弱拉高。這個ALE使能標志位(地址為8EH的SFR的第0位)的設置對微控制器處于外部執行模式下無效。
:外部程序存儲器選通信號(PSEN)是外部程序存儲器選通信號。當 AT89S52從外部程序存儲器執行外部代碼時,PSEN在每個機器周期被激活兩次,而在訪問外部數據存儲器時,PSEN將不被激活。
A/VPP:訪問外部程序存儲器控制信號。為使能從0000H到FFFFH的外部程序存儲器讀取指令,EA 必須接 GND。為了執行內部程序指令,EA應該接VCC。在flash編程期間,EA也接收12伏VPP電壓。 XTAL1:振蕩器反相放大器和內部時鐘發生電路的輸入端。 XTAL2:振蕩器反相放大器的輸出端。 AT89S52單片機有一個用于構成內部振蕩器的反相放大器,XTAL1和XTAL2分別是放大器的輸入、輸出端。石英晶體和陶瓷諧振器都可以用來一起構成自激振蕩器。從外部時鐘源驅動器件的話,XTAL2可以不接,而從XTAL1接入,如圖2-2所示。由于外部時鐘信號經過二分頻觸發后作為外部時鐘電路輸入的,所以對外部時鐘信號的占空比沒有其它要求,最長低電平持續時間和最少高電平持續時間等還是要符合要求的。如圖 2-2 所示:
圖2-2內部振蕩電路連接圖
顯示器部分是由HD61202液晶顯示控制驅動器和JM12864J液晶顯示器組成的,下面我們對其分別進行介紹。 HD61202液晶顯示控制驅動器是一種帶有驅動輸出的圖形液晶顯示控制器,它可直接與8位微處理器相連,它可與HD61203配合對液晶屏進行行、列驅動。HD61202是一種帶有列驅動輸出的液晶顯示控制器,它可與行驅動器HD61203配合使用,組成液晶顯示驅動控制系統。 1.內藏64×64=4096位顯示RAM,RAM中每位數據對應LCD屏上一個點的亮、暗狀態; 2.HD61202是列驅動器,具有64路列驅動輸出; 3.HD61202讀、寫操作時序與68系列微處理器相符,因此它可直接與68系列微處理器接口相連; 4.HD61202的占空比為1/32~1/64。 引腳CS1,CS2,CS3 為芯片的片選端;引腳 E 為讀寫使能信號,它是在下降沿時數據被鎖存入HD61202的;在E 高電平期間,數據被讀出;R/W 為讀寫選擇信號,當它為一時為讀選通,為零時為寫選通;DB0-DB7為數據總線RST 為復位信號復位信號有效時,關閉液晶顯示,使顯示起始行為0,RST可跟MCU相連,由MCU控制;也可直接接VDD,使之不起作用。HD61202的引腳功能如下表2-3所示: 表2-3 HD61202的引腳功能 | | | | | | | | | | | 在E下降沿,數據被鎖存(寫)入HD61202;在E高電平期間,數據被讀出 | | | | | | | | | | | |
| | | | 復位信號有效時,關閉液晶顯示,使顯示起始行為0,RST可跟MCU相連,由MCU控制;也可直接接VDD,使之不起作用。 |
HD61202的指令系統比較簡單,總共只有七種。現分別介紹如下: 1. 顯示開/關指令 | DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 | | |
當DBO=1時,LCD顯示RAM中的內容;DBO=0時,關閉顯示。 2. 顯示起始行(ROW)設置指令 該指令設置了對應液晶屏最上一行的顯示RAM的行號,有規律的改變顯示起始行,可以使LCD實現顯示滾屏的效果。 | DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 | | |
3. 頁(PAGE)置指令 | DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 | | | | | | | |
顯示RAM共64行,分8頁,每頁8行。 4. 列地址(Y Address)設置指令 | DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 | | |
設置了頁地址和列地址,就唯一確定了顯示RAM中的一個單元,這樣MCU就可以用讀、寫指令讀出該單元中的內容或向該單元寫進一個字節數據。 5. 讀狀態指令 | DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 | | BUSY 0 ON/OFF REST 0 0 0 0 |
該指令用來查詢HD61202的狀態,各參量含義如下: BUSY: 1-內部在工作 0-正常狀態 ON/OFF:1-顯示關閉 0-顯示打開 REST: 1-復位狀態 0-正常狀態 在BUSY和REST狀態時,除讀狀態指令外,其它指令均不對HD61202產生作用。在對HD61202操作之前要查詢BUSY狀態,以確定是否可以對HD61202進行操作。 6. 寫數據指令 | DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 | | |
讀、寫數據指令每執行完一次讀、寫操作,列地址就自動增一,必須注意的是,進行讀操作之前,必須有一次空讀操作,緊接著再讀才會讀出所要讀的單元中的數據。 7. 讀數據指令 | DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 | | |
液晶控制器HD61202 一共有七條指令,從作用上可分為兩類,顯示狀態設置指令和數據讀/寫操作指令。詳見指令系統可查看圖形液晶顯示器產品有關手冊。顯示起始行設置中L5~L0 為顯示起始行的地址,取值在0-3FH(1-64 行)范圍內。頁面地址設置中P2-P0 為選擇的頁面地址,取值范圍為0-7H,代表1-8 頁。列地址設置中C5-C0 為Y地址計數器的內容,取值在0-3FH(1-64 行)范圍內。 顯示器上128 點×64 點,每8點為一字節數據,都對應著顯示數據RAM(在HD61202 芯片內),一點對應一個bit,計算機寫入或讀出顯示存儲器的數據代表顯示屏上某一點列上的垂直8 點行的數據。D0 代表最上一行的點數據,D1為第二行的點數據,……D7為第八行的點數據。該bit=1 時該點則顯示黑點出來,該bit=0 時該點則消失。另外LCD 指令中有-條display ON/OFF 指令,display ON 時顯示RAM 數據對應顯示的畫面;display OFF 則畫面消失,RAM 中顯示數據仍存在。 點陣字模文件的建立: 由于MGLS12864 液晶顯示器沒有內部字符發生器,所以在屏幕上顯示的任何字符、漢字等須自己建立點陣字模庫,然后均按圖形方式進行顯示。由于HD61202 顯示存儲器的特性,不能將計算機內的漢字庫和其它字模庫提出直接使用,需要將其旋轉90 度后再寫入。點陣字模庫建立包括以下幾個方面: 1.建立8×16 點陣常用字符、數字、符號字模庫。 可選用計算機BIOS 中ASCII 的8×16 字模庫,所有字符按照ASCII 值從小到大升序排列。 asm{MOV ax,1130h /*AH=11h—功能調用。裝入字庫至軟字庫 */ 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 字節點陣數據*/ for(m=0;m<16;m++) /*點陣數據轉換成LCD 格式數據*/ { 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 點陣。所有字符按照區位碼從小到大升序排列。計算漢字字符首地址的公式如下:漢字首地址=((區碼-1)×94+位碼-1)×32。作者用C 語言編寫的讀取UCDOS 點陣字庫字模程序,完成字模讀取。 數據重新排列,并按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 字節點陣數據*/ for(m=0;m<32;m++){ /*點陣數據轉換成LCD 格式數據*/ 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.常用圖形(如產品商標等)的點陣圖形的建立。對已有的圖形可采用掃描儀進行掃描,然后用圖形處理軟件進行處理,再將BMP 格式文件轉換成MCS-51的匯編文件的格式。 以上所有的字模數據都存放在單片機W78E58 的程序存儲器中,如用到的漢字、圖形較多,可選用較大容量的程序存儲器。 通用子程序:通用子程序分左半屏、右半屏寫指令代碼子程序和寫顯示數據子程序。液晶顯示驅動器HD16202 內部有個忙標志寄存器,當BF=1 時,表示內部操作正在運行,不能接受外部數據或指令。下面子程序中設指令代碼寄存器為COMM,數據寄存器為DATA。 (COMM EQU 20H /*指令寄存器*/ DATA EQU 21H /*數據寄存器*/) 1.左半屏寫指令子程序 WR_CMD1: MOV DPTR,#CRADR1 ;/*讀狀態字口地址*/ WAIT1: MOVX A,@DPTR ;/* 讀狀態字 */ JB ACC.7,WAIT1 ;/*判忙標志BF,如BF=1 忙,等待*/ MOV DPTR,#CWADR1 ;/*寫指令字口地址*/ MOV A,COMM ;/*取指令代碼*/ MOVX @DPTR,A ;/*寫指令代碼*/ RET 2.左半屏寫數據子程序 WR_DATA1:MOV DPTR,#CRADR1 ;/*讀狀態字口地址*/ WAIT11: MOVX A,@DPTR ;/* 讀狀態字 */ JB ACC.7,WAIT11 ;/*判忙標志BF,如BF=1 忙,等待*/ MOV DPTR,#DWADR1 ;/*寫數據字口地址*/ MOV A,DATA ;/*取數據/ MOVX @DPTR,A ;/*寫數據*/ RET 3.右半屏寫指令子程序WR_CMD2 和右半屏寫數據子程序WR_DATA2 的編制同左半屏子程序相同,只是對應口地址不同。 JM12864J是使用HD61202及其兼容控制驅動器作為列驅動器,同時使用HD61203作為行驅動器的液晶模塊。由于HD6120不與MPU發生聯系,只要提供電源就能產生行驅動信號和各種同步信號,比較簡單,因此這里就不作介紹了。下面主要介紹一下JM12864J的邏輯電路圖。 JM12864J共有兩片HD61202及其兼容控制驅動器和一片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所需的電源將由模塊內部電路在VDD和V0、VSS的作用下產生。 以下內容為以單片機89S52為例機的接口電路,控制電路為直接訪問方式的接口電路。電路原理圖如圖2-4所示:
圖2-4 AT89S52 與液晶的接口電路
根據以上電路原理圖中液晶的各引腳與單片機的接法,可得本設計的液晶模塊電路如圖2-5所示: 由圖2-5可以看出:VSS接地;數字電源VDD接+5V;數據、指令選擇信號RS接單片機P3.2口;讀寫選擇信號R/W接單片機P3.1口;DB0~DB7分別接單片機的P2.0~P2.7口;芯片1、芯片2的片選分別接單片機的P3.4、P3.3口;復位端RST、背光正電源LEDA接+5V;液晶驅動電壓VEE、背光負電源LEDK接地。
圖2-5液晶模塊電路
鍵盤電路本設計共采用按鍵3個,分別與單片機的 P1.0、P3.5、P3.6、P3.7口相連,分別對應旋轉、左移、下、右移。
天津職業技術師范大學2010屆本科生設計 Proteus軟件是來自英國Labcenter electronics公司的EDA工具軟件。 Proteus軟件有十多年的歷史,在全球廣泛使用,除了其具有和其它EDA工具一樣的原理布圖、PCB自動或人工布線及電路仿真的功能外,其革命性的功能是,他的電路仿真是互動的,針對微處理器的應用,還可以直接在基于原理圖的虛擬原型上編程,并實現軟件源碼級的實時調試,如有顯示及輸出,還能看到運行后輸入輸出的效果,配合系統配置的虛擬儀器如示波器、邏輯分析儀等,不需要別的,Proteus建立了完備的電子設計開發環境! Proteus組合了高級原理布圖、混合模式SPICE仿真,PCB設計以及自動布線來實現一個完整的電子設計系統。此系統受益于15年來的持續開發,被《電子世界》在其對PCB設計系統的比較文章中評為最好產品—“The Route to PCB CAD”。Proteus 產品系列也包含了革命性的VSM技術,用戶可以對基于微控制器的設計連同所有的周圍電子器件一起仿真。用戶甚至可以實時采用諸如LED/LCD、鍵盤、RS232終端等動態外設模型來對設計進行交互仿真。 其功能模塊:—個易用而又功能強大的ISIS原理布圖工具;Proteus混合模型SPICE仿真; ARES PCB設計。Proteus 仿真器的一個擴展Proteus VSM:便于包括所有相關的器件的基于微處理器設計的協同仿真。此外,還可以結合微控制器軟件使用動態的鍵盤,開關,按鈕,LEDs甚至LCD顯示CPU模型。 1.支持許多通用的微控制器,如PIC,AVR,HC11以及8051; 2.交互的裝置模型包括:LED和LCD顯示,RS232終端,通用鍵盤; 3.強大的調試工具,包括寄存器和存儲器,斷點和單步模式; 4.IAR C-SPY 和Keil uVision3等開發工具的源層調試; 5.應用特殊模型的DLL界面-提供有關元件庫的全部文件。 Keil C51 μVision2集成開發環境是Keil Software,Inc/Keil Elektronik GmbH開發的基于80C51內核的微處理器軟件開發平臺,內嵌多種符合當前工業標準的開發工具,可以完成從工程建立到管理、編譯、鏈接、目標代碼的生成、軟件仿真、硬件仿真等完整的開發流程尤其是C編譯工具在產生代碼的準確性和效率方面達到了較高的水平,而且可以附加靈活的控制選項,在開發大型項目時非常理想。Keil C51集成開發環境的主要功能有以下幾點: 1.μVision2 for Windows:是一個集成開發環境,它將項目管理、源代碼編輯和程序調試等組合在一個功能強大的環境中; 2.C51國際際準化C交叉編譯器:從C源代碼產生可重定位的目標模塊; 3.A51宏匯編器:從80C51匯編源代碼產生可重定位的目標模塊; 4.BL51鏈接器/定位器:組合由C51和A51產生的可重定位的目標模塊,生成絕對目標模塊; 5.LIB51庫管理器:從目標模塊生成連接器可以使用的庫文件; 6.OH51目標文件至HEX格式的轉換器,從絕對目標模塊生成Intel Hex文件; 7.RTX-51實時操作系統:簡化了復雜的實時應用軟件項目的設計。 這個工具套件是為專業軟件開發人員設計的,但任何層次的編程人員都可以使用,并獲得80C51單片機的絕大部分應用。Keil Software提供了一流的80C51系列開發工具軟件,下面描述每個套件及其內容: (1)PK51專業開發套件:PK51專業開發套件提供了所有工具,適合專業開發人員建立和調試80C51系列微控制器的復雜嵌入式應用程序。專業開發套件可針對80C51及其所有派生系列進行配置使用; (2)DK51開發套件:DK51開發套件是PK51的精簡版,它不包括RTX51 Tiny實時操作系統。開發套件可針對80C51及其所以派生系列進行配置使用; (3)編譯器套件:如果開發者只需要一個C編譯器而不需要調試系統,則CA51編譯器套件就是最好的選擇。CA51編譯器套件只包含μVision2 IDE集成開發環境,CA51不提供μVision2調試器的功能。這個套件包括了要建立嵌入式應用的所有工具軟件,可針對80C51及其所有派生系列進行配置使用; 表4-1 開發套件和工具對照表 | | | | | | uVision2 Project Management&Editor | | | | |
| | | | | |
| | | | |
|
| | | | | |
| | | | | |
| uVision2 Debugger/Simulator | | |
|
|
| | |
|
|
|
| |
|
|
|
| |
(4)A51匯編器套件:A51匯編器套件包括一個匯編器和創建嵌入式應用所需要的所有工具。它可針對80C51及其所有派生系列進行配置使用; (5)RTX51實時操作系統(FR51):RTX51實時操作系統是80C51系列微控制器的一個實時內核。RTX51 Full提供RTX51 Tiny的所以功能和一些擴展功能,并且包括CAN通信協議接口子程序; (6)比較表:表4-1列出了每個套件的功能,表的頂上一欄為工具套件名稱,表的左邊一列為軟件組成部分,使用這個對照表可以選擇符合需要的套件。 用Proteus軟件,根據俄羅斯方塊電路原理圖,畫出仿真圖。 電路圖畫完后使用Proteus與Keil聯調,這里使用的軟件是Keil μVision3.8與Proteus7.4。 1.打開PROTEUS的安裝目錄,進入help目錄,打開ARM.HLP幫助文檔,點擊聯接:Remote Debugger Drivers/Download and Install remote debugger driver for Keil uVision3, 下載VDMAGDI.EXE, 運行安裝到KEIL安裝目錄VDM51.dll文檔會自動安裝到KEILC51BIN目錄。
圖4-1 Protues仿真
2.打開KEIL中打開要聯調的項目,在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所示: 經Proteus仿真,證明此俄羅斯方塊游戲能正常運行,可以進入實物焊接階段。 1
天津職業技術師范大學2010屆本科生設計 1.焊前準備 首先要熟悉所焊印制電路板的裝配圖,并按圖紙配料,檢查元器件型號、規格及數量是否符合圖紙要求,并做好裝配前元器件引線成型等準備工作,由于制作的是便攜式的俄羅斯方塊游戲機,所以在這里我選用了電池來做電源。 2.焊接順序 元器件裝焊順序依次為:電阻器、電容器、二極管、三極管、集成電路、大功率管,其它元器件為先小后大。 3.對元器件焊接要求 (1) 電阻器焊接 按圖將電阻器準確裝人規定位置。要求標記向上,字向一致。裝完同一種規格后再裝另一種規格,盡量使電阻器的高低一致。焊完后將露在印制電路板表面多余引腳齊根剪去。 (2) 電容器焊接 將電容器按圖裝人規定位置,并注意有極性電容器其 “+” 與 “-” 極不能接錯,電容器上的標記方向要易看可見。先裝玻璃釉電容器、有機介質電容器、瓷介電容器,最后裝電解電容器。 (3) 二極管的焊接 二極管焊接要注意以下幾點:第一,注意陽極陰極的極性,不能裝錯;第二,型號標記要易看可見;第三,焊接立式二極管時,對最短引線焊接時間不能超過 2S 。 (4) 三極管焊接 注意 e 、b 、c 三引線位置插接正確;焊接時間盡可能短,焊接時用鑷子夾住引線腳,以利散熱。焊接大功率三極管時,若需加裝散熱片,應將接觸面平整、打磨光滑后再緊固,若要求加墊絕緣薄膜時,切勿忘記加薄膜。管腳與電路板上需連接時,要用塑料導線。 (5) 集成電路焊接 首先按圖紙要求,檢查型號、引腳位置是否符合要求。焊接時先焊邊沿的二只引腳,以使其定位,然后再從左到右自上而下逐個焊接。 對于電容器、二極管、三極管露在印制電路板面上多余引腳均需齊根剪去。 焊接完成后,將電源接通,游戲畫面出現后,分別按下左、右、下、旋轉等按鈕,均能正常在屏幕上做出反應。當方塊堆滿一行時,方塊正確消除,并將分數累計在屏幕右側,同時消除多行方塊時,分數有額外獎勵。達到一定分數時,方塊下落速度加快,難度提高。當屏幕中方塊有觸及頂端的時候,游戲結束。
結 論通過半個學期地全心投入和辛苦努力,終于完成了基于單片機的俄羅斯方塊游戲的設計,設計的過程就是綜合運用所學知識和學習新知識的過程。由于經驗不足,難免出現一些小的失誤,但無論怎樣,本次設計對于我來說都是一次難得的鍛煉機會,使我積累了許多寶貴的經驗。 本文對單片機制作的俄羅斯方塊游戲的運行原理進行了分析,全面、詳細地闡述了俄羅斯方塊游戲的設計過程。本游戲機已經達到了掌上娛樂的要求,但在設計上還留有進一步改善的余地,如可以美化游戲界面、加入背景和動作音樂、力回饋系統等。 設計的整個開發過程是曲折的,首先在硬件設計上,由于開始對LCD液晶屏不熟悉,加之其程序量較多,所以,在設計的過程中,不免有些困難,通過我多方面的查找資料,并不斷的向老師和同學請教,結合網絡資源,最終找出比較完善的方案,在理論上能夠實現功能要求。經過幾個月的前期學習,我積累了很多的關于液晶顯示方面和C語言設計方面的資料,并對電路的整合有了一個基本的概念,最后設計出總的電路圖,經過不斷的測試與修改,最終完善了硬件電路的設計。 對于軟件設計,因為以前的編程經驗不夠,再加上對AT89S52這一芯片的了解不是很徹底,因此,在這方面花費了很多的精力和時間。當然這個過程不乏有同學的幫助,我要非常感謝實驗室同學的幫助在我的軟件調試過程中給了我至關重要的幫助,并給了我很多非常好的建議。 當然由于我在理論和實踐方面存在一定的不足,所以在設計思路和實現功能上難免有不足和沒有想到的地方,還請各位老師給予指正。
附錄1:C語言程序
天津職業技術師范大學2010屆本科生設計
附錄2:電路原理圖
概述 8051系列微控制器是基于高度完善的嵌入式控制系統的體系結構。從軍事設備到汽車,再到PC機的鍵盤,它都有很廣泛的應用。另外,對于摩托羅拉公司生產的M68HC11(8位處理器)可以應用于不同廠商生產的8051系列微控制器,如:Intel 、Philips 及Siemens等。這些廠商都對8051增加了許多功能部件和外圍設備,如:12C總線接口、模/數轉換器、監視跟蹤定時器和脈沖寬度調制輸出。8051的允許范圍:時鐘頻率上至40MHz,電壓下至1.5V都是有效的 。一個公司的生產線要完成許多功能,開發人員就不得不學習這個平臺,為此以8051系列作為基本體系結構是最好的選擇,以它為核心得到了廣泛的應用。 基本體系結構由下列功能部件組成: 1.8位ALU; 2.32個I/O引腳(4組,每組8個),可分別存取; 3.2個16位定時/計數器; 4.全雙工通用異步收發器; 5.6個中斷源,2個中斷優先級; 6.128字節隨機存儲器; 7.64字節地址空間,存放數據和代碼。 一個8051的處理器周期是由12個振蕩周期組成。12個振蕩周期中每一個都能完成一種特殊功能,8051的核心如:操作碼的取出、典型的菊花鏈待定中斷。任何8051指令所需的定時都是由時鐘脈沖頻率除以12,再將所得結果乘以處理機所需的循環數計算得到。因此,如果你有一個系統時鐘11.059MHz,你可以用這個值除以12計算出每秒所需指令數。這里我們給出一個指令頻率921583/秒。將它轉化成實際時間,每個指令周期(1.085微妙)。 存儲器組織 8051體系結構為用戶提供了3個物理直接存儲空間。每個存儲空間占用連續地址空間,按字節從0到最大尺寸。地址重疊是通過利用引用特定地址空間指令來解決的。這三個存儲空間功能如下所述: 代碼空間 第一個存儲空間是代碼段,其中用來存放可執行程序。這個段最大可達64K(因為它有16根地址線)。處理機將它視為只讀,能產生相應的信號對一存儲器件進行存取,如可擦可編程只讀存儲器 EPROM。然而,這不意味著代碼段必須作為EPROM的工具。目前,許多嵌入式系統都利用EPROM,通過8051或一個外部設備允許對它存儲或改寫。這可能輕而易舉的提高產品,因為新的軟件可以下載到EPROM,而不必將它分解后再安裝成一個新的 EPROM。 另外,電池后面的靜態存儲器SRAM也可用來代替EPROM。這種方法和加載軟件到電可擦可編程只讀存儲器EEPROM是一樣的,但是EEPROM沒有任何讀/寫周期限制。然而,當電池電源RAM沒電了,也可如此將軟件加載到里面。在開發系統中若用SRAM代替EPROM,則允許在目標系統中快速下載新代碼。如果可以那樣做,它將幫助我們避免對EPROM的循環執行/測試/擦寫,同時也能幫助我們避免對通常很少使用的線路仿真器產生爭論。 除可執行程序代碼之外,8051通常在代碼段存放安裝查找表。為了簡化,8051提供了允許快速存取查找表指令的途徑——數據指針(DPTR)或帶偏移量的程序計數器通過累加器隨意的指向查找表。通常這意味著,一個查找表的基地址能用DPTR來定位,而表中的元素可以通過累加器存儲。用 8051 執行加法,在指令執行期間可以根據情況存放許多循環數。 數據空間 8051輔助存儲空間是128字節的內部RAM,而8052的高128字節是輔助存儲空間。這個段被認為是典型的數據段。RAM定位在這個段,依靠指令循環存取一次或二次。這樣存取時間比存取在XDATA段要快很多,因為存儲器直接給出地址,勝于由存儲指針如DPTR必須先初始化。因此,通常將已用變量和臨時定義變量都放在數據段。然而,這樣的分配會占用段中少量的存儲單元。數據段中的可變存儲器還可以由R0或R1間接存儲。使用寄存器作存儲指針就必須包含已檢索或已改變字節的地址。這些指令可以依靠源/目的數據字節使一個或二個處理機循環。數據段又包含兩個重要的小段。第一個子段由四個寄存器組組成,它占用了RAM的低32字節。8051用這四組(每組8字節)作為缺省寄存器組。寄存器組選定區域在任何時候都通過處理機狀態字(PSW)中的RS1和RS0這兩位來改變。這兩位組合表示數0~3(RS1作最高有效位),用來指明哪個寄存器組在被使用。在8051中,寄存器組開關不但允許快速參數傳遞,而且能打開單任務開關。在數據空間的第二個子段是一個可尋址位段,每一位都能單獨存取。這個段稱為BDATA段。可尋址的位段由內存中四個寄存器組16字節(128位)組成。8051包含許多位指令,它通常用于控制某一位的應用及在8051中用軟件替換外部組合邏輯給予幫助,這樣在目標系統中以減少部分依賴。人們注意到這個16字節還可以按“一位”寬在數據空間像其他字節一樣進行存取。 特殊功能寄存器 8051內部RAM的80H以上的單元為控制寄存器,包含中斷系統和外部設備。這些寄存器稱為特殊功能寄存器(簡稱SFR)。它們大部分是可按位尋址的。在可按位尋址的SFR中的位可以是被訪問的名稱、索引或者是位地址。因此,你可以參看中斷允許SFR中的EA(EA、IE.7或0AFH)位。SFR可控制的東西有:定時/計數器和UART的功能。中斷源以及它們的優先級。這些被訪問的寄存器在數據段中的字節和位是同一張指令表。表A所示SFR的存儲圖中指明了可尋址的位寄存器。 IDATA空間 某些8051家族成員,如8052在內部RAM中包含一個輔助128字節,存放在80H以上的單元。這個典型的RAM段被稱為IDATA段。因為IDATA地址和SFR地址重疊,IDATA RAM和SFR之間的地址沖突是通過分解被存取存儲器的類型來解決,因為IDATA段只能通過間接尋址方式存取。 XDATA空間 8051存儲空間為64K,代碼段可用16根地址線尋址。這個典型空間被稱為外部數據存儲空間(簡稱XDATA段)。這個段通常由各種RAM(通常為SRAM)、I/O設備或外圍設備組成,8051必須通過總線連接。這個段的讀或寫操作至少需兩次循環處理,并且它的執行既要用到DPTR又要用到R0和R1。就DPTR來說,它通常要在執行讀或寫操作所要求的兩個循環外再附加加載兩個或更多循環處理地址。同樣,在一個周期內除了利用存儲器自身存取之外,至少要加載R0或R1。顯而易見,XDATA段的典型操作很簡單,通常最少需三個循環處理。因此,數據段常用來存儲常用變量。 如果8051不需要用總線執行任何I/O設備或者設計者希望當I/O設備通過總線存取時讓RAM循環開、關,那么它可使這個段全部占滿64KRAM。 微機接口 微機接口實現兩種信息形式的交換。在計算機之外,由電子系統所處理以一種物理形式存在,但在程序中,它是用數字表示的。任一接口的功能都可分為以某種形式進行數據變換的一些操作,所以外部和內部形式的轉換由許多步驟完成的。 所示的情況為例加以說明,圖中展示了微計算機和產生的信號和形式被系統的其他部分處理之前需要再次轉換.舉例來說,許多傳感器具有電阻變化,這必須由一專門電路轉換成電壓。這種將傳感器輸出轉換成電壓信號,并與系統的其他電路相連接的過程,稱為信號調理。信號調理部分將源自傳感器的電壓或電流信號范圍轉換用模擬-數字轉換器變成數字形式的信號范圍。 一個模擬-數字轉換器(ADC)用來將連續變化信號變成相應的數字量,這數字量可是可能的二進制數值中的一個固定值。如果傳感器輸出不是連續變化的,就不需要模擬-數字轉換。這種情況下,信號調理單元必須將輸入信號變換成為另一信號,也可直接與接口的下一部分,即微計算機本身的輸入輸出相連接。 輸入/輸出單元將數字"開/關"電壓信號轉換成能通過系統總線傳送到系統總線傳送到計算機的信號。這里每一根線的狀態,無論是"開"或是"關",用相應的"1"或"0"表示。對于已經轉換成數字形式的模擬輸入量,內部表示中用1和0組成的排列形式形成與補轉換量相對應的二進制數。 從接口得到的原數值會受到接口電路設計的限制,而且常需要線性化和量程調整才能形成適合于在主程序中使用的數值。舉例來說,接口可用于轉換范圍為-20oC至50oC的溫度,而8 位轉換器所產生的數值會在范圍0至255之間。顯然,從程序員的觀點,對溫度進行直接的處理要比使用由ADC所產生的與一個給定溫度相一致的值要容易。接口操作需要將控制信號在微機和接口之間進行傳送。根據這些理由,通常使用子程序來監督接口的具體操作,并完成任何所需的量程調整和/或線性化。 輸出接口采用相似的形式,明顯的差別在于信息流的方向相反;是從程序到外部世界。這種情況下,程序可稱為輸出程序,它監督接口的操作并完成數字-模擬轉換器(DAC)所需數字的標定。該子程序依次送出信息給輸出器件,產生相應的電信號,由DAC轉換成模擬形式。最后,信號經調理(通常是放大)以形成適應于執行器操作的形式。 數字接口電路 在微機電路中使用的信號幾乎總是太小而不能被直接地連到“外部世界”,因而必須用某種形式將其轉換成更適宜的形式。接口電路部分的設計是使用微機的工程師所面臨最重要的任務之一。我們已經了解到微機中,信息以離或散的位形式表示。當微機要與只有打開或關閉操作的設備相連時,這種數字形式是最有用的,這里每一位都可表示一個開關或執行器的狀態。 連接邏輯電路時,必須小心翼翼,以保證它們的邏輯電平和電流額定值是兼容的。由邏輯電路產生的輸出電壓通以拉出或灌入最大額定電流時,按最弱情況下數值所定義。這樣VOH是當拉出最大額定“高”輸出電流IOH時的允許最小“高”電壓,而VOL,則是當灌入最大額定“低”輸出電流IOL時允許最“低”電壓。對邏輯輸入也有相應的參數,規定最小輸入電壓為邏輯“高”狀態VIH,以及最大輸入電壓為邏輯“低”狀態VIL。 對于輸入接口,也許設計所面臨的主要問題是電噪聲,小噪聲信號會引起系統工作不良,而大量的噪聲會造成永久性損壞。設計者必須從一開始就清楚這些危險。有許多方法保護接口電路和微機不受各種各樣噪聲影響,下面是一些例子: 1.使用光電隔離或變壓器實現微機系統和外部器件之間的輸入輸出電信號隔離。 2.用一低通濾器和施密特觸發器排除高頻噪聲脈沖。 3.用一對二極管以反向偏置于正常方向的形式連接至電源端,來保護過高的輸入電壓。 對于輸出接口,一個邏輯器件的參數VOH,VOL,IOH,和IOL往往太小而不能直接與負載相連,實踐中必須在一個外部將電流和電壓進行放大以驅動一個負載。現在盡管有一些類型的半導體器件可用于DC和AC的功率控制至若干千瓦,有兩種基本方式將連至負載,并對其進行控制:串聯連接和并聯連接。 對于串聯連接,開關閉合時使電流渡過負載,而當并聯連接時合上開關將使電流繞過負載。兩種方式都可用于低功率電路中,但只有串聯連接才能用于高功率電路,這是因為串聯電阻R上要消耗功率。 AT89C52的使用簡介 AT89C52帶8K字節閃速存儲器的8位單片機特性 于80C51和80C52產品兼容 8K字節編程閃速存儲器壽命:1000次寫/擦循環 ,數據保留時間:10年 全靜態工作:0H——24MHZ 三級程序存儲器鎖定 256×8位內部RAM 三個16位定時器/計數器 8個中斷源 可編程串行通道 低功耗的閑置和掉電模式 說明: AT89C52是一種帶8K字節閃速可編程可擦除只讀存儲器(PEROM)的低電壓、高性能CMOS 8位為控制器。該器件采用ATMEL 非易失存儲器制造技術制造,與工業標準的80C51和 80C52指令集和輸出管腳相兼容。由于將多功能8位CPU和閃速存儲器組合在單個芯片中,ATMEL的AT89C52是一種高效微控制器,為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。 AT89C52具有以下一些標準特性:8K字節的閃速存儲器,256字節RAM,32個I/O線,3個16位定時器/計數器,8個兩級中斷源結構,一個全雙工串行口,片內振蕩器和時鐘電路。此外,AT89C52設有穩態邏輯,可以在低到零頻率的條件下靜態邏輯,支持兩種軟件可選的省電模式。在閑置模式下,CPU停止工作,但RAM、定時器/計數器、串口和中斷系統仍在工作。在掉電模式下,保存RAM的內容并且凍結振蕩器,禁止所用其他芯片功能,直到下一個硬件復位為管腳說明: V
:供電電壓 GND:接地 P0口:P0口為一個8位漏極開路雙向I/O口,作為輸出口,每腳可吸收8TTL門電流。 當P0口的管腳第一次寫1時,被定義為高阻輸入。P0口當用于外部程序數據寄存器,它可以被定義為數據/地址的低八位。在FLASH編程時,P0口作為原碼輸入口。當FLASH進行校驗時,P0輸出原碼,此時P0口外部必須被拉高。 P1口:P1口是一個內部提供上拉8位雙向I/O口。P1口緩沖器能接受輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。P1.0和P1.1顆作為定時器2外部計數器和定時器2外部控制端,如下表所示: 表 接口功能 | | | T
(定時器2/計數器2外部計數輸入)時鐘輸入 | | |
在FLASH編程和校驗時,P1口作為低八位地址接收。 P2口:P2口為帶內部上拉的8位雙向I/O口,P2口緩沖器可接受,輸出4個TTL門電流。當P2口被寫“1”時,其管腳被內部上拉電路拉高,且作為輸入。并因此用作輸入時,P2口的管腳被外部拉低,降輸出電流(I
)這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取(MOVX@DPTR)時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上優勢,當對外部八位地址數據存儲器進行讀寫時(MOVX@RI)P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和其他控制信號。 P3口:P3口管腳時8個帶內部上拉的雙向I/O口管腳。可接受輸出4個TTL門電流P3口可寫入“1”后,他們被內部上拉為高電平,并用作輸入。作為輸入,由于外部P3口也可用作AT89C52的一些特殊功能口。
完整文檔下載(word格式 可編輯):
基于單片機的俄羅斯方塊畢業論文.doc
(1.24 MB, 下載次數: 46)
2017-5-22 14:06 上傳
點擊文件名下載附件
|