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