基于51單片機(jī)的俄羅斯方塊設(shè)計(jì)論文
基于51單片機(jī)的俄羅斯方塊設(shè)計(jì)論文,基于,51,單片機(jī),俄羅斯方塊,設(shè)計(jì),論文
摘 要
從十九世紀(jì)末到二十世紀(jì)五、六十年代,從內(nèi)容單一的投幣游戲機(jī)到科技發(fā)達(dá)的電子計(jì)算機(jī)游戲一個(gè)娛樂(lè)業(yè)革命也在醞釀之中。本系統(tǒng)主要的是基于單片機(jī)的俄羅斯方塊游戲,設(shè)計(jì)的主要部分有了解俄羅斯方塊游戲的游戲規(guī)則、設(shè)計(jì)出整個(gè)系統(tǒng)的硬件結(jié)構(gòu)并進(jìn)行實(shí)物焊接、編寫(xiě)軟件代碼并進(jìn)行調(diào)試。由于顯示部分是用基于KS0108內(nèi)核的液晶模塊FG12864E,所以需要弄清楚FG12864E液晶顯示屏的詳細(xì)介紹以及KS0108的指令集。本系統(tǒng)模擬出的俄羅斯方塊游戲,具有難度依次加大、速度依次加快、按鍵發(fā)聲、系統(tǒng)低功耗、可實(shí)現(xiàn)在線(xiàn)調(diào)試等特點(diǎn)。本系統(tǒng)是以單片機(jī)為其控制核心,以有源晶振構(gòu)成的電路作為時(shí)鐘信號(hào),通過(guò)方向鍵的選擇向單片機(jī)控制系統(tǒng)發(fā)出磚塊移動(dòng)控制命令,控制系統(tǒng)接收命令后做出一系列必要的判斷后,控制磚塊的移動(dòng)和旋轉(zhuǎn)。然后通過(guò)對(duì)數(shù)組的控制,在液晶屏上顯示出游戲的畫(huà)面,通過(guò)液晶顯示畫(huà)面,顯示出磚塊的移動(dòng)和旋轉(zhuǎn)。本設(shè)計(jì)已通過(guò)了硬件測(cè)試,系統(tǒng)運(yùn)行穩(wěn)定。用本系統(tǒng)設(shè)計(jì)的硬件結(jié)構(gòu)還可以運(yùn)行其他對(duì)顯示要求不大的小游戲,如貪吃蛇、推箱子、五子棋。
關(guān)鍵詞:AT89S52單片機(jī);俄羅斯方塊;KS0108;FG12864E液晶顯示;C語(yǔ)言
Abstract
From the 19th century to the twentieth century 1950s &1960s, from the content of the single slot game to advanced technology of computer games a revolution in the brewing industry. This system mainly based on single-chip microcomputer is the game tetris, design of the main parts of the game tetris know the rules of the game, the whole system design of the hardware structure and physical welding, write software code and debugging. As the display part of the kernel is based on KS0108 LCD module FG12864E, so it is necessary to clarify FG12864E LCD KS0108 details and instruction set. The system simulates the Tetris game, with the increasing order of difficulty, speed, turn speed up, key voice, low-power system can be realized online debugging and so on. The system is based on the core of its control MCU to active crystal form of the circuit as a clock signal, through the choice of keys issued to the microcomputer control system blocks move control command, the control system receives a command to make the necessary judgments , the control blocks the movement and rotation. Then through an array of control, the LCD screen shows the game screen, through the liquid crystal display screen, showing the movement and rotation blocks. This design has already passed the test of the operation of the system, hardware. In this system, the design of hardware structure can run on display are required in other games, such as the Snake, Boxy Pocket, backgammon
Key Words:AT89S52 SCM; Russian square; KS0108; FG12864E LCD display; C language
目 錄
1 引 言 1
2 課題任務(wù)及方案論證 2
2.1主要任務(wù) 2
2.2 方案論證 2
2.2.1 主控制器的選擇 2
2.2.2 液晶屏的選擇 4
3 系統(tǒng)的硬件組成及接口介紹 6
3.1電源部分 6
3.2單片機(jī)部分 7
3.2.1 AT89S52單片機(jī)的介紹 7
3.2.2 復(fù)位電路 7
3.2.3 晶振電路 8
3.3液晶顯示芯片與單片機(jī)接口電路 9
3.4控鍵、蜂鳴器與單片機(jī)接口電路 9
4 軟件部分設(shè)計(jì)及調(diào)試 10
4.1 C語(yǔ)言程序設(shè)計(jì) 10
4.1.1 C語(yǔ)言簡(jiǎn)介 10
4.1.2 C語(yǔ)言特點(diǎn) 10
4.2游戲運(yùn)行方式 11
4.2.1游戲規(guī)則介紹 11
4.2.2流程圖 11
4.3部分子程序 13
4.3.1液晶屏初始化函數(shù) 13
4.3.2液晶屏寫(xiě)指令和寫(xiě)數(shù)據(jù)函數(shù) 13
4.3.3方塊生成函數(shù) 14
4.3.4移動(dòng)和旋轉(zhuǎn)函數(shù) 15
4.4程序調(diào)試過(guò)程 16
4.4.1電路檢測(cè) 16
4.4.2調(diào)試步驟 16
4.4.3調(diào)試遇到的問(wèn)題及解決方案 16
5程序調(diào)試和仿真軟件 17
5.1 Keil2介紹及編程 17
5.1.1軟件介紹 17
5.1.2軟件應(yīng)用 17
5.2 Proteus介紹及應(yīng)用 18
5.2.1軟件介紹 18
5.2.2軟件應(yīng)用 19
總 結(jié) 20
參考文獻(xiàn) 21
附 錄1 總電路圖 22
附 錄2 系統(tǒng)程序 23
致 謝 50
1 引 言
如今,游戲機(jī)風(fēng)行的程度,是第一臺(tái)電子游戲機(jī)的研制者諾蘭-布什納爾先生始料不及的。在全世界最大的城市,直至最小的村莊,從紐約最輝煌的游樂(lè)場(chǎng),到高加索最小的鄉(xiāng)鎮(zhèn)兒童娛樂(lè)點(diǎn),在千家萬(wàn)戶(hù),正在進(jìn)行著千千萬(wàn)萬(wàn)這樣的“戰(zhàn)斗”,伴隨著無(wú)數(shù)成功與失敗,興奮與懊喪。游戲機(jī)帶來(lái)了一個(gè)全球性的瘋狂癥,其他任何娛樂(lè)與之相比都望塵莫及。然而,究竟是什么原因使游戲機(jī)如此風(fēng)行呢? 在回顧了游戲機(jī)發(fā)展簡(jiǎn)史之后,我們不難悟出,技術(shù)進(jìn)步在游戲機(jī)發(fā)展過(guò)程中起到了極大的促進(jìn)作用。
第二次世界大戰(zhàn)以后,電子計(jì)算機(jī)技術(shù)得到了突飛猛進(jìn)的發(fā)展。先是由晶體管代替了笨重的真空管,后來(lái)出現(xiàn)了集成電路和大規(guī)模集成電路,使電子計(jì)算機(jī)一代一代實(shí)現(xiàn)更新,同時(shí)軟件技術(shù)也發(fā)展迅速。在美國(guó),集中了許多計(jì)算機(jī)軟件的設(shè)計(jì)人才,他們工作之余,時(shí)常喜愛(ài)編一種能與人斗智的“游戲”,以此來(lái)鍛煉編程的能力。這種“游戲”花樣繁多,但其特點(diǎn)都是利用計(jì)算機(jī)軟件事先設(shè)計(jì)好的“分析”、“判斷”能力反過(guò)來(lái)與人較量。由于不斷修改更新,使計(jì)算機(jī)的“智力”水平與人難分高低。
隨著深藍(lán)計(jì)算機(jī)與人的棋類(lèi)對(duì)決,到現(xiàn)在的PSP游戲機(jī)或者是家庭用的X-BOX游戲機(jī),游戲機(jī)的技術(shù)是日益的發(fā)展、進(jìn)步。
但是,技術(shù)進(jìn)步絕不是游戲機(jī)風(fēng)行的唯一因素。隨著終端設(shè)備開(kāi)發(fā)能力的加強(qiáng),作為娛樂(lè)終端的游戲機(jī)也得到了很大程度的發(fā)展。只有得到了游戲終端技術(shù)的支持,才能做出更新、更高難的游戲。這也加速了游戲機(jī)在全球風(fēng)行程度,所以對(duì)于游戲機(jī)的研究和設(shè)計(jì)具有很重要的意義,這也是本課題研究的來(lái)源
2 課題任務(wù)及方案論證
2.1主要任務(wù)
現(xiàn)如今,游戲風(fēng)靡全球,各種游戲?qū)映霾桓F,大到網(wǎng)絡(luò)型的復(fù)雜游戲,小到手機(jī)游戲、單機(jī)游戲、智力游戲等簡(jiǎn)單游戲。但是這種簡(jiǎn)單也是相對(duì)于網(wǎng)絡(luò)游戲等大型游戲而言的,小游戲本身的代碼還是相當(dāng)繁雜,它要執(zhí)行一系列指令才能正確的完成一個(gè)簡(jiǎn)單的操作,才能按照玩家的意志工作。所以我們現(xiàn)在見(jiàn)到的游戲多是在基于電腦這種高速執(zhí)行指令的平臺(tái)上運(yùn)行的,脫離了它就什么事都做不了了。那么推箱子這種小游戲能否在單片機(jī)上編出來(lái)呢?答案是肯定的,現(xiàn)從以下幾個(gè)方面加以論證。
2.2 方案論證
首先,我們編寫(xiě)的這個(gè)游戲是一個(gè)小型游戲,實(shí)現(xiàn)的功能比較簡(jiǎn)單,不像大型游戲那樣功能復(fù)雜,它只要控制俄羅斯磚塊放到正確的位置即可,難度隨著磚塊的增多而加大,對(duì)于實(shí)現(xiàn)這樣一個(gè)功能,程序不是太復(fù)雜,用一塊單片機(jī)足以達(dá)到目的。其次,它的控件也比較少只有4個(gè)方向鍵和2個(gè)輔助的功能鍵,這些控鍵在Proteus中用彈跳式按鍵代替即可。第三,游戲地圖相對(duì)比較小、畫(huà)面簡(jiǎn)單,只有幾個(gè)圖形,這些在一塊稍大的液晶屏上就足以顯示,用不著電腦顯示屏。第四,就編程語(yǔ)言方面來(lái)說(shuō),編寫(xiě)這樣一個(gè)簡(jiǎn)單的小游戲不需要什么高級(jí)的語(yǔ)言,C語(yǔ)言或匯編語(yǔ)言就足以完成,C語(yǔ)言是一種通用型的語(yǔ)言,編程靈活、可讀性強(qiáng)、移植性好;匯編語(yǔ)言是一種直接面向硬件的基礎(chǔ)語(yǔ)言,最接近機(jī)器語(yǔ)言,執(zhí)行速度快(本游戲采用C語(yǔ)言編寫(xiě))。由以上幾點(diǎn)可知:?jiǎn)纹瑱C(jī)上運(yùn)行推箱子游戲在硬件和軟件兩個(gè)方面都是可行的。
2.2.1 主控制器的選擇
AT89S52是標(biāo)準(zhǔn)的40引腳雙列直插式集成電路芯如圖2-1所示,AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱(chēng)單片機(jī)。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。
AT89S52 具有以下標(biāo)準(zhǔn)功能:8K 字節(jié) Flash,256 字節(jié) RAM,32 位 I/O 口線(xiàn),看門(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é)電模式??臻e模式下,CPU 停止工作,允許 RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工 作。掉電保護(hù)方式下,RAM 內(nèi)容被保存,振蕩器被凍結(jié), 單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。
圖2-1 AT89S52的引腳圖
(1)管腳功能
①輸入/輸出口
P0.0~P0.7 P0口8位雙向口
P1.0~P1.7 P1口8位雙向口
P2.0~P2.7 P2口8位雙向口
P3.0~P3.7 P3口8位雙向口
② ALE 地址鎖存控制信號(hào)
在系統(tǒng)擴(kuò)展時(shí),ALE用于控制把P0口輸出的低8位地址送入鎖存器鎖存起來(lái),以實(shí)現(xiàn)低位地址和數(shù)據(jù)的分時(shí)傳送。此外由于ALE是以六分之一晶振頻率的固定頻率輸出的正脈沖,因此可作為外部時(shí)鐘或外部定時(shí)脈沖使用。
③ PSEN 外部程序存儲(chǔ)器讀選通信號(hào)
在讀外部ROM時(shí) PSEN有效(低電平),以實(shí)現(xiàn)外部ROM單元的讀操作。
④ EA 訪(fǎng)問(wèn)程序存儲(chǔ)器控制信號(hào)
當(dāng) EA 信號(hào)為低電平時(shí),對(duì)ROM的讀操作限定在外部程序存儲(chǔ)器;而當(dāng) EA信號(hào)為高電平時(shí),則對(duì)ROM的讀操作是從內(nèi)部程序存儲(chǔ)器開(kāi)始,并可延續(xù)至外部程序存儲(chǔ)器。
⑤ RST 復(fù)位信號(hào)
當(dāng)輸入的復(fù)位信號(hào)延續(xù)2個(gè)機(jī)器周期以上高電平時(shí)即為有效,用以完成單片機(jī)的復(fù)位操作。
⑥ XTAL1和XTAL2 外接晶體引線(xiàn)端
當(dāng)使用芯片內(nèi)部時(shí)鐘時(shí),此二引線(xiàn)端用于外接石英晶體和微調(diào)電容;當(dāng)使用外部時(shí)鐘時(shí),用于接外部時(shí)鐘脈沖信號(hào)。
⑦ Vss 地線(xiàn)
Vcc +5V電源
(2) 常見(jiàn)的第二功能信號(hào)
① P3口線(xiàn)的第二功能
P3的8條口線(xiàn)都定義有第二功能如表2-1所示
表2-1 端口第二功能
口線(xiàn)
第二功能
信號(hào)名稱(chēng)
P3.0
RXD
串行數(shù)據(jù)接收
P3.1
TXD
串行數(shù)據(jù)發(fā)送
P3.2
INT0
外部中斷0申請(qǐng)
P3.3
INT1
外部中斷1申請(qǐng)
P3.4
T0
定時(shí)器/計(jì)數(shù)器0記數(shù)輸入
P3.5
T1
定時(shí)器/計(jì)數(shù)器1記數(shù)輸入
P3.6
WR
外部RAM寫(xiě)選通
P3.7
RD
外部RAM讀選通
(3) EPROM存儲(chǔ)器程序固化所需要的信號(hào)
有內(nèi)部EPROM的單片機(jī)芯片(例如80C51),為寫(xiě)入程序需提供專(zhuān)門(mén)的編程脈沖和編程電源,它們也是由信號(hào)引腳以第二功能的形式提供的,即:
編程脈沖:30腳(ALE/ PROG)
編程電壓(25V):31腳(EA/Vpp)
2.2.2 液晶屏的選擇
HS12864-1 是一種圖形點(diǎn)陣液晶顯示器,它主要由行驅(qū)動(dòng)器/列驅(qū)動(dòng)器及12864 全點(diǎn)陣液晶顯示器組成,可完成圖形顯示,也可以顯示84 個(gè)(16*16點(diǎn)陣)漢字。
主要技術(shù)參數(shù):
1.電源 VDD +5V 模塊內(nèi)自帶-10V 負(fù)壓 用于LCD 的驅(qū)動(dòng)電壓
2.顯示內(nèi)容 128(列) 64(行)
3.全屏幕點(diǎn)陣
4.七種指令
5.與CPU 接口采用8 位數(shù)據(jù)總線(xiàn)并行輸入輸出和8 條控制線(xiàn)
6.占空比 1/64
7.工作溫度 -10~+55 存儲(chǔ)溫度 -20~+60
模塊的外部接口如表2-2所示:
表2-2 管腳功能
管腳
管腳名稱(chēng)
LEVER
管腳功能描述
1
VSS
0V
電源地
2
VDD
5V
電源電壓
3
V0
-
對(duì)比度,亮度調(diào)整
4
D/I
H/L
D/I=H 表示DB7—DB0為顯示數(shù)據(jù)
D/I=L 表示DB7—DB0為顯示指令數(shù)據(jù)
5
R/W
H/L
R/W=H E=H 數(shù)據(jù)被讀到DB7—DB0
R/W=L E=H→L DB7—DB0的數(shù)據(jù)被寫(xiě)到IR或DR
6
E
H/L
使能信號(hào)
7
DB0
H/L
三態(tài)數(shù)據(jù)線(xiàn)
8
DB1
H/L
三態(tài)數(shù)據(jù)線(xiàn)
9
DB2
H/L
三態(tài)數(shù)據(jù)線(xiàn)
10
DB3
H/L
三態(tài)數(shù)據(jù)線(xiàn)
11
DB4
H/L
三態(tài)數(shù)據(jù)線(xiàn)
12
DB5
H/L
三態(tài)數(shù)據(jù)線(xiàn)
13
DB6
H/L
三態(tài)數(shù)據(jù)線(xiàn)
14
DB7
H/L
三態(tài)數(shù)據(jù)線(xiàn)
15
CS1
H/L
片選,選左半屏
16
CS2
H/L
片選,選右半屏
17
RET
H/L
復(fù)位信號(hào),低電平復(fù)位
18
VEE
-
LCD驅(qū)動(dòng)電壓輸出端
19
A
VDD
LED 背光正源
20
K
VSS
LED 背光負(fù)源
3 系統(tǒng)的硬件組成及接口介紹
3.1電源部分
電源裝置是電路的能量提供者,該設(shè)計(jì)中所制作的電源為單相小功率電源,它將50HZ、有效值為220V的單相交流電壓轉(zhuǎn)換為幅值穩(wěn)定、輸出電流為幾十安以下的直流電壓。單相交流電經(jīng)過(guò)電源變壓器、整流電路、濾波電路和穩(wěn)壓電路轉(zhuǎn)換成穩(wěn)定的直流電壓,其方框圖如圖3.1所示。
圖3.1直流穩(wěn)壓電源的方框圖
直流電源的輸入為220V的電網(wǎng)電壓(即市電),一般情況下,所需直流電壓的數(shù)值和電網(wǎng)電壓的有效值相差很大,因而需要通過(guò)電源變壓器降壓后,在對(duì)交流電壓進(jìn)行處理。變壓器副邊電壓有效值決定于后面電路的需要。
變壓器副邊電壓通過(guò)整流電路從交流電壓轉(zhuǎn)換為直流電壓,即將正弦波交流電壓轉(zhuǎn)換為單一方向的脈動(dòng)電壓,但由整流電路輸出的電壓含有較大的交流分量,會(huì)影響負(fù)載電路的正常工作。
為了減少電壓的脈動(dòng),需通過(guò)低通濾波電路濾波,使輸出電壓平滑。理想情況下,應(yīng)將交流分量全部濾掉,使濾波電路的輸出電壓僅為直流電壓。然而,由于濾波電路為無(wú)源電路,所以接入負(fù)載后勢(shì)必影響其濾波效果。對(duì)于穩(wěn)定性要求不高的電子電路,整流、濾波后的直流電壓可以作為供電電源。
交流電壓通過(guò)整流、濾波后雖然變?yōu)榻涣鞣至枯^小的直流電壓,但是當(dāng)電網(wǎng)電壓波動(dòng)或者負(fù)載變化時(shí),其平均值也將隨之變化。穩(wěn)壓電路的功能是使輸出直流電壓基本不受電網(wǎng)電壓波動(dòng)和負(fù)載電阻變化的影響,從而獲得足夠高的穩(wěn)定性。
由于系統(tǒng)的要求,需要用5V的穩(wěn)壓直流電源對(duì)系統(tǒng)中的芯片進(jìn)行供電,電路采用7805進(jìn)行設(shè)計(jì)。7800系列的最后兩位數(shù)字表示該集成穩(wěn)壓器的輸出電壓值,其輸出電壓的偏差在2%以?xún)?nèi)。固定輸出的集成穩(wěn)壓電源的基本電路如圖3.2所示。Ui是整流濾波以后的未經(jīng)穩(wěn)壓的輸入電壓;Uo是穩(wěn)壓電源的輸出電壓??傮w電源電路如圖3.3所示:
7805
Uo
Ui
圖3.2 7805接線(xiàn)圖
圖3.3 電源電路
3.2單片機(jī)部分
3.2.1 AT89S52單片機(jī)的介紹
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)提供高靈活、超有效的解決方案。 AT89S52具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,256字節(jié)RAM,32 位I/O 口線(xiàn),看門(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é)電模式??臻e模式下,CPU 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié), 單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。8 位微控制器 8K 字節(jié)在系統(tǒng)可編程 Flash AT89S52。
在硬件設(shè)計(jì)時(shí)用到了P1口、P2口、P3口,作為IO口進(jìn)行數(shù)據(jù)的傳輸。
3.2.2 復(fù)位電路
單片機(jī)上電,當(dāng)振蕩器正在運(yùn)行時(shí),只要持續(xù)給RST引腳兩個(gè)機(jī)器周期的電平便可完成系統(tǒng)復(fù)位。外部復(fù)位電路是為內(nèi)部復(fù)位電路提供兩個(gè)幾個(gè)機(jī)器周期以上的高電平而設(shè)計(jì)的。系統(tǒng)采用上電自動(dòng)復(fù)位,上電瞬間電容器上的電壓不能突變,RST上的電壓是VCC和電容器上電壓差,因而RST電壓大小與VCC相同。隨著充電的進(jìn)行,電容器上電壓不斷上升,RST電壓就隨著下降,RST引腳只要保持10ms以上高電平系統(tǒng)就會(huì)有效復(fù)位。電容C可取10~33Uf,電阻R可取1.2~10K。系統(tǒng)設(shè)計(jì)中C取10uF,電阻R取10K,充電時(shí)間常數(shù)為100ms。
上電復(fù)位采用電平方式開(kāi)關(guān)復(fù)位。如圖3-4所示。 上電復(fù)位用RC電路,電容用10uF,電阻用10K。
圖3-4 復(fù)位電路
3.2.3 晶振電路
XTAL1和XTAL2引腳分別構(gòu)成片內(nèi)振蕩器反相放大器的輸入和輸出端,外接石英晶體或陶瓷振蕩器以及補(bǔ)償電容C1、C2構(gòu)成并聯(lián)諧振電路。當(dāng)外接石英晶體時(shí),電容C1、C2選30pF;當(dāng)外接陶瓷振蕩器時(shí),電容C1、C2選47pF.AT89S52系統(tǒng)中晶振可在0~24MHz選擇.外接電容C1、C2的大小會(huì)影響振蕩器頻率的高低、振蕩頻率的穩(wěn)定度、起振時(shí)間及溫度穩(wěn)定性。在設(shè)計(jì)電路板時(shí),晶振和電容應(yīng)靠近單片機(jī)芯片,以便減少寄生電容,保證振蕩器穩(wěn)定可靠工作。在系統(tǒng)設(shè)計(jì)中,為保證串行通信波特率的誤差應(yīng)選擇12MHz的標(biāo)準(zhǔn)石英晶振,電容C2、C3為33pF。如圖3-5所示
圖3-5 晶振電路
3.3液晶顯示芯片與單片機(jī)接口電路
液晶顯示屏共有20個(gè)引腳,其中VDD接電源,VSS接地,RS接單片機(jī)的P1.0腳,RW接單片機(jī)的P1.1腳,使能端E接P1.2腳,片選端接P1.3和P1.4,D0~D7數(shù)據(jù)段接口接P2.0~P2.7。如圖3-6所示
圖3-6 液晶顯示與單片機(jī)相連電路圖
其中傳輸數(shù)據(jù)和指令的時(shí)候需要配置P1.0,P1.1,P1.2口,其中P1.2口控制的是液晶顯示的E使能端,下降沿有效。P1.0控制的是液晶顯示的I/O端,高電平的時(shí)候傳輸數(shù)據(jù),低電平的時(shí)候傳輸指令。
3.4控鍵、蜂鳴器與單片機(jī)接口電路
本游戲共有6個(gè)控鍵,分別是:三個(gè)方向鍵,用于控制俄羅斯方塊的移動(dòng)方向;一個(gè)確定鍵,用于刷新初始化界面進(jìn)入游戲界面;一個(gè)暫停鍵,用于暫停,一個(gè)變形鍵,用于將方塊轉(zhuǎn)換方向。一個(gè)蜂鳴器,用于按鍵發(fā)聲,以提示按鍵是否有效。
控件、喇叭與單片機(jī)的接線(xiàn)是:下移鍵接P3.0;左移鍵接P3.1;右移鍵接P3.3;暫停鍵接P3.2;確定鍵接P3.5;變形鍵接P3.4;蜂鳴器與P3.6相連。
程序通過(guò)查詢(xún)的方式檢查是否有按鍵按下,調(diào)用移動(dòng)或旋轉(zhuǎn)函數(shù)。每次有按鍵按下都會(huì)觸發(fā)蜂鳴器,提示按鍵有效按下。
4 軟件部分設(shè)計(jì)及調(diào)試
4.1 C語(yǔ)言程序設(shè)計(jì)
4.1.1 C語(yǔ)言簡(jiǎn)介
C語(yǔ)言是在70年代初問(wèn)世的。一九七八年由美國(guó)電話(huà)電報(bào)公司(AT&T)貝爾實(shí)驗(yàn)室正式發(fā)表了C語(yǔ)言。同時(shí)由B.W.Kernighan和D.M.Ritchit合著了著名的“THE C PROGRAMMING LANGUAGE”一書(shū)。通常簡(jiǎn)稱(chēng)為《K&R》,也有人稱(chēng)之為《K&R》標(biāo)準(zhǔn)。但是,在《K&R》中并沒(méi)有定義一個(gè)完整的標(biāo)準(zhǔn)C語(yǔ)言,后來(lái)由美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì)在此基礎(chǔ)上制定了一個(gè)C 語(yǔ)言標(biāo)準(zhǔn),于一九八三年發(fā)表。通常稱(chēng)之為ANSI C。
早期的C語(yǔ)言主要是用于UNIX系統(tǒng)。由于C語(yǔ)言的強(qiáng)大功能和各方面的優(yōu)點(diǎn)逐漸為人們認(rèn)識(shí),到了八十年代,C開(kāi)始進(jìn)入其它操作系統(tǒng),并很快在各類(lèi)大、中、小和微型計(jì)算機(jī)上得到了廣泛的使用。成為當(dāng)代最優(yōu)秀的程序設(shè)計(jì)語(yǔ)言之一。
C語(yǔ)言是一種結(jié)構(gòu)化語(yǔ)言。它層次清晰,便于按模塊化方式組織程序,易于調(diào)試和維護(hù)。C語(yǔ)言的表現(xiàn)能力和處理能力極強(qiáng)。它不僅具有豐富的運(yùn)算符和數(shù)據(jù)類(lèi)型,便于實(shí)現(xiàn)各類(lèi)復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。它還可以直接訪(fǎng)問(wèn)內(nèi)存的物理地址,進(jìn)行位(bit)一級(jí)的操作。由于C語(yǔ)言實(shí)現(xiàn)了對(duì)硬件的編程操作,因此C語(yǔ)言集高級(jí)語(yǔ)言和低級(jí)語(yǔ)言的功能于一體。既可用于系統(tǒng)軟件的開(kāi)發(fā),也適合于應(yīng)用軟件的開(kāi)發(fā)。此外,C語(yǔ)言還具有效率高,可移植性強(qiáng)等特點(diǎn)。因此廣泛地移植到了各類(lèi)各型計(jì)算機(jī)上,形成了多種版本的C語(yǔ)言。
C語(yǔ)言對(duì)操作系統(tǒng)和系統(tǒng)使用程序以及需要對(duì)硬件進(jìn)行操作的場(chǎng)合,用C語(yǔ)言明顯優(yōu)于其它高級(jí)語(yǔ)言,許多大型應(yīng)用軟件都是用C語(yǔ)言編寫(xiě)的。
C語(yǔ)言具有繪圖能力強(qiáng),可移植性,并具備很強(qiáng)的數(shù)據(jù)處理能力,因此適于編寫(xiě)系統(tǒng)軟件,三維,二維圖形和動(dòng)畫(huà)它是數(shù)值計(jì)算的高級(jí)語(yǔ)言。
4.1.2 C語(yǔ)言特點(diǎn)
(1)簡(jiǎn)潔緊湊、靈活方便: C語(yǔ)言一共只有32個(gè)關(guān)鍵字,9種控制語(yǔ)句,程序書(shū)寫(xiě)自由,主要用小寫(xiě)字母表示。它把高級(jí)語(yǔ)言的基本結(jié)構(gòu)和語(yǔ)句與低級(jí)語(yǔ)言的實(shí)用性結(jié)合起來(lái)。
(2)運(yùn)算符豐富: C的運(yùn)算符包含的范圍很廣泛,共有種34個(gè)運(yùn)算符。C語(yǔ)言把括號(hào)、賦值、強(qiáng)制類(lèi)型轉(zhuǎn)換等都作為運(yùn)算符處理。從而使C的運(yùn)算類(lèi)型極其豐富表達(dá)式類(lèi)型多樣化,靈活使用各種運(yùn)算符可以實(shí)現(xiàn)在其它高級(jí)語(yǔ)言中難以實(shí)現(xiàn)的運(yùn)算。
(3)數(shù)據(jù)結(jié)構(gòu)豐富: C的數(shù)據(jù)類(lèi)型有:整型、實(shí)型、字符型、數(shù)組類(lèi)型、指針類(lèi)型、結(jié)構(gòu)體類(lèi)型、共用體類(lèi)型等。能用來(lái)實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)類(lèi)型的運(yùn)算。并引入了指針概念,使程序效率更高。另外C語(yǔ)言具有強(qiáng)大的圖形功能, 支持多種顯示器和驅(qū)動(dòng)器。且計(jì)算功能、邏輯判斷功能強(qiáng)大。
(4) C是結(jié)構(gòu)式語(yǔ)言:結(jié)構(gòu)式語(yǔ)言的顯著特點(diǎn)是代碼及數(shù)據(jù)的分隔化,即程序的各個(gè)部分除了必要的信息交流外彼此獨(dú)立。這種結(jié)構(gòu)化方式可使程序?qū)哟吻逦? 便于使用、維護(hù)以及調(diào)試。C語(yǔ)言是以函數(shù)形式提供給用戶(hù)的,這些函數(shù)可方便的調(diào)用,并具有多種循環(huán)、條件語(yǔ)句控制程序流向,從而使程序完全結(jié)構(gòu)化。
(5) C語(yǔ)法限制不太嚴(yán)格、程序設(shè)計(jì)自由度大:一般的高級(jí)語(yǔ)言語(yǔ)法檢查比較嚴(yán),能夠檢查出幾乎所有的語(yǔ)法錯(cuò)誤。而C語(yǔ)言允許程序編寫(xiě)者有較大的自由度。
(6) C語(yǔ)言允許直接訪(fǎng)問(wèn)物理地址,可以直接對(duì)硬件進(jìn)行操作:因此既具有高級(jí)語(yǔ)言的功能,又具有低級(jí)語(yǔ)言的許多功能,能夠象匯編語(yǔ)言一樣對(duì)位、字節(jié)和地址進(jìn)行操作,而這三者是計(jì)算機(jī)最基本的工作單元,可以用來(lái)寫(xiě)系統(tǒng)軟件。
(7) C語(yǔ)言程序生成代碼質(zhì)量高,程序執(zhí)行效率高:一般只比匯編程序生成的目標(biāo)代碼效率低10へ20%。
(8) C語(yǔ)言適用范圍大,可移植性好:C語(yǔ)言有一個(gè)突出的優(yōu)點(diǎn)就是適合于多種操作系統(tǒng), 如DOS、UNIX,也適用于多種機(jī)型。
4.2游戲運(yùn)行方式
4.2.1游戲規(guī)則介紹
游戲規(guī)則介紹:
最開(kāi)始顯示開(kāi)機(jī)畫(huà)面并由按鍵B進(jìn)入游戲,進(jìn)入游戲后將會(huì)選擇方塊下降速度,然后由按鍵A控制游戲開(kāi)始隨機(jī)出現(xiàn)由四個(gè)小方塊組成的一個(gè)圖形,從屏幕上方落到下方,由按鍵左、右控制方塊的左移和右移,由按鍵下控制方塊快速下降,由按鍵A控制方塊的形狀,可以將方塊進(jìn)行旋轉(zhuǎn),用以放到合適的位置。
當(dāng)某一行被擺滿(mǎn)之后進(jìn)行消除這一行,并在分?jǐn)?shù)上加一。當(dāng)某一列被擺滿(mǎn)時(shí),游戲結(jié)束,顯示結(jié)束畫(huà)面。在游戲過(guò)程中,由按鍵上暫停游戲,再次按下按鍵上可以繼續(xù)游戲。
當(dāng)消夠三十行時(shí),速度會(huì)加一。
4.2.2流程圖
單片機(jī)控制電路采用AT89S52。主要實(shí)現(xiàn)對(duì)俄羅斯方塊的控制,控制方塊的移動(dòng)和旋轉(zhuǎn),顯著特點(diǎn)是用軟件簡(jiǎn)便實(shí)現(xiàn)某些硬件功能。
主流程圖如圖4-1所示:
顯示結(jié)束畫(huà)面
Y
N
游戲是否結(jié)束
執(zhí)行移動(dòng)或者旋轉(zhuǎn)程序
N
Y
是否有按鍵按下
掃面端口
Y
開(kāi)始游戲
N
是否有按鍵按下
掃面端口
顯示開(kāi)機(jī)畫(huà)面
初始化液晶屏
開(kāi)始
圖4-1 主流程圖
接通電源后系統(tǒng)將初始化液晶屏,然后執(zhí)行清屏程序。一切準(zhǔn)備就緒后,顯示開(kāi)始畫(huà)面。當(dāng)按確定鍵后進(jìn)入游戲,進(jìn)入游戲時(shí)先通過(guò)左右鍵選擇游戲速度,即方塊下降的速度。
然后按旋轉(zhuǎn)鍵,進(jìn)入游戲畫(huà)面,系統(tǒng)隨機(jī)生成方塊形狀。這時(shí)單片機(jī)查詢(xún)按鍵是否按下,如果沒(méi)有按鍵按下,畫(huà)面上的方塊將下降。一旦查詢(xún)到按鍵按下,擇調(diào)用相應(yīng)的執(zhí)行函數(shù)。如果按下左、右或者下,則調(diào)用移動(dòng)函數(shù),如果按下旋轉(zhuǎn)鍵,則調(diào)用旋轉(zhuǎn)函數(shù),如果按下暫停鍵,則調(diào)用暫停函數(shù)。如果一次按下的按鍵超過(guò)一個(gè),則按預(yù)定的優(yōu)先順序執(zhí)行,優(yōu)先順序?yàn)樾D(zhuǎn)、下、左、右、暫停。
當(dāng)有一行被填滿(mǎn)時(shí),執(zhí)行消行函數(shù),并計(jì)分,滿(mǎn)三十行,速度將加一。當(dāng)某一列被填滿(mǎn)時(shí),游戲結(jié)束,顯示結(jié)束畫(huà)面。按下開(kāi)始鍵,返回開(kāi)始畫(huà)面。
4.3部分子程序
4.3.1液晶屏初始化函數(shù)
void LCD_initialize()
{
LCD_RST=0;
_nop_();
_nop_();
LCD_RST=1;
LCD_W_code(0x3f,0); //開(kāi)顯示設(shè)置
LCD_W_code(0xc0,0); //設(shè)置顯示起始行為第一行
LCD_W_code(0xb8,0); //頁(yè)面地址設(shè)置
LCD_W_code(0x40,0); //列地址設(shè)為0
LCD_W_code(0x3f,1);
LCD_W_code(0xc0,1);
LCD_W_code(0xb8,1);
LCD_W_code(0x40,1);
}
液晶屏初始化函數(shù)可以將液晶開(kāi)顯示,然后準(zhǔn)備好液晶的頁(yè)地址、行地址和列地址,0x3f是開(kāi)顯示代碼,0xb8是頁(yè)地址,0x40是行地址0xc0是列地址。本設(shè)計(jì)只需開(kāi)一次顯示,之后就不再關(guān)顯示了。頁(yè)地址、行地址和列地址,分別是首頁(yè)、首行和首列的地址,之后顯示的時(shí)候需要在屏幕的哪個(gè)地方顯示就加上它的頁(yè)地址和列地址就可以了。經(jīng)過(guò)循環(huán)就可以顯示出字母、漢字或者是圖畫(huà)了。
4.3.2液晶屏寫(xiě)指令和寫(xiě)數(shù)據(jù)函數(shù)
void LCD_W_code(unsigned char tpcode,bit cs)
{
// LCD_check_busy();
LCD_RS=0;
LCD_RW=0;
LCD_CS2=cs;
LCD_CS1=~cs;
LCD_DATA=tpcode;
LCD_E=1;
_nop_();
LCD_E=0;
}//寫(xiě)指令代碼(cs為0選左屏,cs為1選右屏)
void LCD_W_data(unsigned char tpdata,bit cs)
{
// LCD_check_busy();
LCD_RS=1;
LCD_RW=0;
LCD_CS2=cs;
LCD_CS1=~cs;
LCD_DATA=tpdata;
LCD_E=1;
_nop_();
LCD_E=0;
}//寫(xiě)數(shù)據(jù)(cs為0選左屏,cs為1選右屏)
當(dāng)LCD_RS和LCD_RW都為地電平的時(shí)候,單片機(jī)向液晶顯示屏寫(xiě)指令即地址,準(zhǔn)備向該地址寫(xiě)入數(shù)據(jù),當(dāng)LCD_RS為高、LCE_RW為低的時(shí)候,單片機(jī)向液晶顯示屏寫(xiě)數(shù)據(jù)即顯示內(nèi)容,然后再使能端E的下降沿傳入液晶顯示屏。
4.3.3方塊生成函數(shù)
struct
{
unsigned char mode;//類(lèi)型
unsigned char shape;//形狀
unsigned char x;//x坐標(biāo)
unsigned char y;//y坐標(biāo)
unsigned int box;//定義方塊緩存
}s_box; //定義方塊結(jié)構(gòu)體
void box_build()
{
s_box.mode=next_mode;
s_box.shape=next_shape;
s_box.x=3;
s_box.y=0;
next_mode=TL0%7;//產(chǎn)生隨機(jī)數(shù),但是是偽隨機(jī)的
next_shape=TL0%4;//產(chǎn)生隨機(jī)數(shù),但是是偽隨機(jī)的
show_next_box();
}//方塊生成函數(shù)
先用結(jié)構(gòu)體將方塊的類(lèi)型、形狀和將出現(xiàn)時(shí)的位置用一個(gè)結(jié)構(gòu)體儲(chǔ)存起來(lái),然后調(diào)用結(jié)構(gòu)體,產(chǎn)生方塊和下一方塊。利用定時(shí)器0的第八位與7和4分別取模,得到下一方塊的類(lèi)型和形狀,不是隨機(jī)產(chǎn)生的方塊,是偽隨機(jī)的,但是定時(shí)器運(yùn)轉(zhuǎn)很快,所以可以看作是隨機(jī)產(chǎn)生的方塊。
4.3.4移動(dòng)和旋轉(zhuǎn)函數(shù)
void game_button()
{
switch(basic_button())
{
case 1: if(s_box.y!=0)//1表示down被按下
{
EA=0;//關(guān)中斷,如果不關(guān)的話(huà)可能引起游戲顯示混亂
while(check_cover(s_box.x,s_box.y+1,s_box.box))//檢測(cè)是否能下降,指導(dǎo)不能再下降為止
{
s_box.y++;
box_to_Box_Ram(s_box.x,s_box.y-1,s_box.box);
}
destroy_row();
box_build();
box_load();
box_to_Box_Ram(s_box.x,s_box.y,s_box.box);
EA=1;//開(kāi)中斷
}break;
case 4: if(s_box.y!=0)//4表示left被按下
{
EA=0;//關(guān)中斷,如果不關(guān)的話(huà)可能引起游戲顯示混亂
speaker=1;
if(check_cover(s_box.x-1,s_box.y,s_box.box))
{
s_box.x--;
box_to_Box_Ram(s_box.x+1,s_box.y,s_box.box);
}
EA=1;//開(kāi)中斷
speaker=0;
}break;
case 5: if(s_box.y!=0)//5表示right被按下
{
EA=0;//關(guān)中斷,如果不關(guān)的話(huà)可能引起游戲顯示混亂
speaker=1;
if(check_cover(s_box.x+1,s_box.y,s_box.box))
{
s_box.x++;
box_to_Box_Ram(s_box.x-1,s_box.y,s_box.box);
}
EA=1;//開(kāi)中斷
speaker=0;
}break;
}
}
因?yàn)殒I盤(pán)是直接接到P3口的,所以用掃描鍵盤(pán)的方式編程,當(dāng)掃描到有左鍵、右鍵和下鍵被按下時(shí),執(zhí)行相應(yīng)的移動(dòng)函數(shù),如果button_A鍵被按下,執(zhí)行旋轉(zhuǎn)函數(shù)。所有的函數(shù)都是對(duì)數(shù)組的編輯,對(duì)數(shù)組里的數(shù)進(jìn)行運(yùn)算,將一個(gè)方塊看作一個(gè)整體,讓它所占的數(shù)組進(jìn)行變換,即可在屏幕上的到相應(yīng)的變化。
4.4程序調(diào)試過(guò)程
4.4.1電路檢測(cè)
將電路各個(gè)部分按照電路圖所示焊接好,如不能正常工作,按原理圖分模塊進(jìn)行電路檢測(cè),是否有虛焊或漏焊現(xiàn)象;如焊接正常,在按信號(hào)傳遞的方向逐級(jí)檢測(cè),找出出問(wèn)題的一級(jí),并向該級(jí)的上級(jí)進(jìn)行檢測(cè),直到將故障排除。
4.4.2調(diào)試步驟
將液晶測(cè)試軟件燒入到單片機(jī)中,檢查液晶屏是否完好,電路是否錯(cuò)誤。檢查硬件線(xiàn)路是否有短路或焊接不牢的問(wèn)題
4.4.3調(diào)試遇到的問(wèn)題及解決方案
最開(kāi)始焊接好的電路后發(fā)現(xiàn)程序不能被燒錄到單片機(jī)中去,經(jīng)過(guò)檢查發(fā)現(xiàn)是由于有一根線(xiàn)的絕緣皮破裂,導(dǎo)致硬件電路短路,修改后可以成功燒錄程序。
調(diào)試液晶顯示器的時(shí)候?qū)⒁壕э@示器的測(cè)試程序燒錄到單片機(jī)中后,發(fā)現(xiàn)不能顯示,經(jīng)過(guò)檢查后發(fā)現(xiàn)是由于液晶顯示屏的對(duì)比對(duì)調(diào)節(jié)出現(xiàn)了問(wèn)題,經(jīng)過(guò)修改,可以成功顯示。
最初編程的時(shí)候不能生成HEX文件,不能燒錄入單片機(jī)中,經(jīng)過(guò)檢查是由于電腦的系統(tǒng)和Keil2軟件兼容性差所導(dǎo)致的原因,將Keil2軟件從新激活后問(wèn)題得大了解決。
5程序調(diào)試和仿真軟件
5.1 Keil2介紹及編程
5.1.1軟件介紹
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ì)。
μVision2支持所有的Keil 80C51的工具軟件,包括C51編譯器、宏匯編器、鏈接器/定位器和目標(biāo)文件至Hex格式轉(zhuǎn)換器,μVision2可以自動(dòng)完成編譯、匯編、鏈接程序等操作。
5.1.2軟件應(yīng)用
建立一個(gè)C項(xiàng)目,使用C語(yǔ)言需要要使用到C編譯器,以便把寫(xiě)好的C程序編譯為機(jī)器碼,這樣單片機(jī)才能執(zhí)行編寫(xiě)好的程序。
編程之前先建立一個(gè)Project和一個(gè)后綴為.c的文件,用來(lái)編輯系統(tǒng)程序,選擇系統(tǒng)用的AT89S52單片機(jī),然后在編輯區(qū)編輯系統(tǒng)程序。編輯好程序后,進(jìn)入調(diào)試階段先編譯程序,檢查程序中是否有錯(cuò)誤,當(dāng)顯示0錯(cuò)誤、0警告時(shí),就可以對(duì)整個(gè)程序運(yùn)行并生成HEX文件,用ISP方式,將HEX文件燒錄到單片機(jī)中,然后就可以進(jìn)行硬件調(diào)試。
5.2 Proteus介紹及應(yīng)用
5.2.1軟件介紹
Proteus軟件是來(lái)自英國(guó)Labcenter electronics公司的EDA工具軟件,Proteus軟件有十多年的歷史,在全球廣泛使用,除了其具有和其它EDA工具一樣的原理布圖、PCB自動(dòng)或人工布線(xiàn)及電路仿真的功能外,其革命性的功能是,他的電路仿真是互動(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 Lite可以完全免費(fèi),也可以花微不足道的費(fèi)用注冊(cè)達(dá)到更好的效果;功能最強(qiáng)的Proteus專(zhuān)業(yè)版也非常便宜,人人用得起,對(duì)高校還有更多優(yōu)惠。
Proteus組合了高級(jí)原理布圖、混合模式SPICE仿真,PCB設(shè)計(jì)以及自動(dòng)布線(xiàn)來(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原理布圖工具;PROSPICE混合模型SPICE仿真; ARES PCB設(shè)計(jì).
PROSPICE 仿真器的一個(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. 最新支持ARM
2.交互的裝置模型包括: LED和LCD顯示,RS232終端,通用鍵盤(pán),I2C,SPI器件
3.強(qiáng)大的調(diào)試工具,包括寄存器和存儲(chǔ)器,斷點(diǎn)和單步模式
4.IAR C-SPY 和Keil uVision2等開(kāi)發(fā)工具的源層調(diào)試
5.應(yīng)用特殊模型的DLL界面-提供有關(guān)元件庫(kù)的全部文件
6.最新版支持非常豐富仿真元件共7000多種,還有很多第三方模型。如MMC卡,以太網(wǎng)卡,ATA硬盤(pán),麥克風(fēng),等等。
該軟件的特點(diǎn):① 全部滿(mǎn)足我們提出的單片機(jī)軟件仿真系統(tǒng)的標(biāo)準(zhǔn),并在同類(lèi)產(chǎn)品中具有明顯的優(yōu)勢(shì)。 ② 具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真、RS232 動(dòng)態(tài)仿真、I2C 調(diào)試器、SPI 調(diào)試器、鍵盤(pán)和LCD 系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號(hào)發(fā)生器等。③ 目前支持的單片機(jī)類(lèi)型有:68000系列、8051系列、AVR 系列、PIC12 系列、PIC16 系列、PIC18 系列、Z80 系列、HC11系列以及各種外圍芯片。④支持大量的存儲(chǔ)器和外圍芯片??傊撥浖且豢?集單片機(jī)和SPICE 分析于一身的仿真軟件,功能極其強(qiáng)大,是其他任何一款軟件不能相比的。
5.2.2軟件應(yīng)用
本軟件是單片機(jī)仿真軟件,在軟件中繪制出系統(tǒng)電路圖,并將Heil2生成的HEX文件調(diào)入到仿真軟件的AT89S52單片機(jī)中。經(jīng)檢查仿真軟件中的電路圖無(wú)誤后,可以進(jìn)行仿真調(diào)試,電機(jī)仿真開(kāi)始,可以在仿真界面里看到液晶顯示出的圖像,并可以對(duì)整個(gè)電路進(jìn)行控制,仿真出硬件電路的調(diào)試過(guò)程。
18
總 結(jié)
總 結(jié)
通過(guò)此次畢業(yè)設(shè)計(jì),我不僅把知識(shí)融會(huì)貫通,而且豐富了大腦,同時(shí)在查找資料的過(guò)程中也了解了許多課外知識(shí),開(kāi)拓了視野,認(rèn)識(shí)了將來(lái)電子的發(fā)展方向,使自己在專(zhuān)業(yè)知識(shí)方面和動(dòng)手能力方面有了質(zhì)的飛躍。
“基于單片機(jī)的游戲機(jī)設(shè)計(jì)與實(shí)現(xiàn)”是從我們的日常生活而來(lái)的一個(gè)課題,該課題本身不是那么復(fù)雜,而且當(dāng)今市場(chǎng)上賣(mài)的游戲機(jī)也是高級(jí)得多。選這個(gè)課題并不是要做多么高級(jí)的游戲機(jī),或者是游戲。通過(guò)這么一個(gè)普通的游戲機(jī)的設(shè)計(jì),可以更深刻的了解單片機(jī)的構(gòu)造,和對(duì)C語(yǔ)言的運(yùn)用。游戲不是最主要的,主要的是在焊接和編輯的過(guò)程中,對(duì)程序的理解,數(shù)組的運(yùn)用。
本課題的設(shè)計(jì)過(guò)程中,最為復(fù)雜的部分就是軟件編程的調(diào)試,在程序調(diào)試過(guò)程中遇到一些問(wèn)題,例如最初的液晶屏無(wú)法正常顯示,但通過(guò)檢查電路,都得到了圓滿(mǎn)的解決。
之前看似簡(jiǎn)單的程序竟然讓我感覺(jué)到無(wú)從下手,有時(shí)一個(gè)數(shù)組算了好久,經(jīng)過(guò)調(diào)試發(fā)現(xiàn)錯(cuò)了一位。
現(xiàn)在我明白知識(shí)必須通過(guò)應(yīng)用才能實(shí)現(xiàn)其價(jià)值!有些東西以為學(xué)會(huì)了,但真正到用的時(shí)候才發(fā)現(xiàn)是兩回事,所以我認(rèn)為只有到真正會(huì)用的時(shí)候才是真的學(xué)會(huì)了。
在此要感謝我的指導(dǎo)老師丁學(xué)文老師對(duì)我悉心的指導(dǎo),感謝老師給我的幫助。我通過(guò)查閱大量的有關(guān)資料,與同學(xué)交流經(jīng)驗(yàn)和自學(xué),并向老師請(qǐng)教等方式,使自己學(xué)到了不少知識(shí),也經(jīng)歷了不少艱辛,但收獲同樣巨大。在整個(gè)設(shè)計(jì)中我懂得了許多東西,也培養(yǎng)了我獨(dú)立工作的能力,樹(shù)立了對(duì)自己工作能力的信心,相信會(huì)對(duì)今后的學(xué)習(xí)工作生活有非常重要的影響。而且大大提高了動(dòng)手的能力,使我充分體會(huì)到了在創(chuàng)造過(guò)程中探索的艱難和成功時(shí)的喜悅。雖然這個(gè)設(shè)計(jì)做的也不是特別完美,但是在設(shè)計(jì)過(guò)程中所學(xué)到的東西是這次畢業(yè)設(shè)計(jì)的最大收獲和財(cái)富,使我終身受益。
0
參考文獻(xiàn)
參考文獻(xiàn)
[1]全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽組委會(huì).第五屆全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽獲獎(jiǎng)作品選編.北京理工大學(xué)出版社,2005. 10-17
[2] 康華光,陳大欽.電子技術(shù)基礎(chǔ)模擬部分第四版. 第四版.北京:高等教育出版社,1999.82-155
[3] 康華光,鄒壽彬.電子技術(shù)基礎(chǔ)數(shù)字部分第四版. 第四版.北京:高等教育出版社,2000. 83-155
[4]周堅(jiān).如何用C語(yǔ)言編寫(xiě)計(jì)數(shù)器程序.無(wú)線(xiàn)電合訂本,2004年(下):213-214
[5]黃智偉,王彥,陳文光.全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽訓(xùn)練教程.電子工業(yè)出版社,2005.304-314
[6]張萬(wàn)奎.《模擬電子技術(shù)》[M].湖南.湖南大學(xué)出版社,2005:226-229.
[7]彭為,黃科,雷道仲.單片機(jī)典型系統(tǒng)設(shè)計(jì)實(shí)例精講.電子工業(yè)出版社.2006.5
[8]李廣弟,朱月秀,王秀山.單片機(jī)基礎(chǔ).第2版.北京航空航天大學(xué)出版社,2001.13-71
[9]梅麗風(fēng),王艷秋,張軍等.單片機(jī)原理及接口技術(shù).清華大學(xué)出版社,2004.296-323
[10] 涂時(shí)亮等.單片機(jī)軟件設(shè)計(jì)技術(shù). 科學(xué)技術(shù)文獻(xiàn)出版社重慶分社:1998
[11] 席德勛.現(xiàn)代電子技術(shù)[D].北京.高等教育出版社,2002:121-125.
[12] 陸子明,徐長(zhǎng)根.單片機(jī)設(shè)計(jì)與應(yīng)用基礎(chǔ)[M].北京:國(guó)防工業(yè)出版社,2005
[13] 劉勝利.新型顯示器電路分析.北京:電子工業(yè)出版社,1999.122-344
[14] 胡偉.單片機(jī)C程序設(shè)計(jì)及應(yīng)用實(shí)例.北京:人民郵電出版社, 2003.1-247
[15] 實(shí)用電子元器件手冊(cè).上海:上??茖W(xué)技術(shù)出版社,1998.1-21
[16] 李廣弟等.單片機(jī)基礎(chǔ) (修訂本).北京:北京航空航天大學(xué)出版社,2002.1-223
[17] 胡漢才.單片機(jī)原理及接口技術(shù).清華大學(xué)出版社,1996
[18] 劉征宇,韋立華.最新74系列IC特性代換手冊(cè).福州:福建科學(xué)技術(shù)出版社,2002.1-122
[19] 李玉峰等 MCS-51系列單片機(jī)原理與借口技術(shù). 北京:人民郵電出版社2004.12-55
1
附錄1
附 錄1 總電路圖
0
附錄2
附 錄2 系統(tǒng)程序
#include
#include"pic.c"
#include
#define LCD_DATA P2
#define button_delay 150 //按鍵延時(shí)
#define button_acceleration 65 //按鍵加速度閾值
#define GAME_LOCATION 30
sbit button_a = P3^4;
sbit button_b = P3^5;
sbit up = P3^2;
sbit down = P3^0;
sbit left = P3^1;
sbit right = P3^3;
sbit speaker=P3^6;
sbit LCD_RS=P1^0;
sbit LCD_RW=P1^1;
sbit LCD_E=P1^2;
sbit LCD_CS2=P1^4; //右屏選擇(左右屏有時(shí)候相反)
sbit LCD_CS1=P1^3; //左屏選擇
sbit LCD_RST=P3^7;
unsigned int up_reg=button_delay; //按鍵up累加器
unsigned int down_reg=button_delay; //按鍵down累加器
unsigned int left_reg=button_delay; //按鍵left累加器
unsigned int right_reg=button_delay; //按鍵right累加器
unsigned int button_a_reg=button_delay; //按鍵button_a累加器
unsigned int button_b_reg=button_delay; //按鍵button_b累加器
unsigned int right_acceleration=0; //按鍵right加速度寄存器
unsigned int left_acceleration=0; //按鍵left加速度寄存器
unsigned int idata Box_Ram[19];//定義游戲點(diǎn)陣緩存10*16
unsigned char box_down_reg;//定義方塊下落累加寄存器
unsigned char time0_reg;//定義定時(shí)器0累加寄存器
unsigned char next_mode;//定義下一個(gè)方塊的類(lèi)型
unsigned char next_shape;//定義下一個(gè)方塊的形狀
unsigned int destroy_row_num=0;//定義所消的行數(shù)
unsigned char speed_num=0;//定義游戲速度等級(jí)
unsigned char level_num;//定義游戲難度等級(jí)
bit game_over_flag;//游戲結(jié)束標(biāo)志位置0表示游戲未結(jié)束
bit pause_game_flag;/
壓縮包目錄 | 預(yù)覽區(qū) |
|
請(qǐng)點(diǎn)擊導(dǎo)航文件預(yù)覽
|
編號(hào):3955038
類(lèi)型:共享資源
大小:1.16MB
格式:ZIP
上傳時(shí)間:2019-12-25
25
積分
積分
- 關(guān) 鍵 詞:
- 基于 51 單片機(jī) 俄羅斯方塊 設(shè)計(jì) 論文
- 資源描述:
-
基于51單片機(jī)的俄羅斯方塊設(shè)計(jì)論文,基于,51,單片機(jī),俄羅斯方塊,設(shè)計(jì),論文展開(kāi)閱讀全文
裝配圖網(wǎng)所有資源均是用戶(hù)自行上傳分享,僅供網(wǎng)友學(xué)習(xí)交流,未經(jīng)上傳用戶(hù)書(shū)面授權(quán),請(qǐng)勿作他用。
鏈接地址:http://m.appdesigncorp.com/p-3955038.html