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