2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩18頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  《單片機(jī)原理及應(yīng)用》</p><p><b>  課程設(shè)計(jì)報(bào)告</b></p><p>  題 目:俄羅斯方塊游戲機(jī)</p><p>  專 業(yè):電子信息工程技術(shù)</p><p>  班 級:電子B1512班</p><p><b>  學(xué)

2、號:</b></p><p><b>  姓 名:</b></p><p><b>  指導(dǎo)老師:</b></p><p>  2017-12-01</p><p><b>  目 錄</b></p><p>  1.設(shè)計(jì)題目、要

3、求及分工2</p><p>  1.1 設(shè)計(jì)題目2</p><p>  1.2 設(shè)計(jì)要求2</p><p><b>  1.3 分工2</b></p><p><b>  2.設(shè)計(jì)方案2</b></p><p>  3.系統(tǒng)硬件電路設(shè)計(jì)2</p>&

4、lt;p>  3.1硬件設(shè)計(jì)整體方框圖2</p><p><b>  3.2電源系統(tǒng)2</b></p><p>  3.3 STC89C52單片機(jī)介紹3</p><p>  3.4 復(fù)位電路設(shè)計(jì)4</p><p>  3.5時(shí)鐘電路設(shè)計(jì)5</p><p>  3.6液晶屏顯示模塊

5、6</p><p>  3.7按鍵電路設(shè)計(jì)6</p><p>  4.軟件系統(tǒng)的分析與設(shè)計(jì)7</p><p>  4.1系統(tǒng)界面整體分析7</p><p>  5.調(diào)試結(jié)果記錄及分析7</p><p><b>  5.1仿真結(jié)果8</b></p><p>  5.

6、2實(shí)物調(diào)試結(jié)果8</p><p><b>  6.心得體會9</b></p><p><b>  參考文獻(xiàn)11</b></p><p><b>  附錄112</b></p><p><b>  附錄213</b></p><

7、p><b>  附錄314</b></p><p>  1.設(shè)計(jì)題目、要求及分工</p><p><b>  1.1 設(shè)計(jì)題目</b></p><p>  本課程設(shè)計(jì)題目是基于51單片機(jī)的俄羅斯方塊游戲機(jī)。</p><p><b>  1.2 設(shè)計(jì)要求</b></

8、p><p>  本課程設(shè)計(jì)主要器件是STC89C52單片機(jī)和液晶12864,通過單片機(jī)發(fā)生信號控制液晶屏的顯示,使用按鍵實(shí)現(xiàn)游戲的開始、暫停、移動(dòng)、翻轉(zhuǎn)等。</p><p><b>  1.3 分工</b></p><p>  在本次設(shè)計(jì)中,張榮俊同學(xué)主要負(fù)責(zé)軟件的設(shè)計(jì)與分析,湯青紅同學(xué)負(fù)責(zé)硬件電路的設(shè)計(jì)。</p><p>

9、<b>  2.設(shè)計(jì)方案</b></p><p>  本次設(shè)計(jì)采用STC89C52單片機(jī)控制模塊,USB電源模塊來提供電源,復(fù)位模塊,12864LCD顯示屏進(jìn)行屏顯,晶振與電容實(shí)現(xiàn)時(shí)鐘電路,按鍵直接接入I/O口,這樣可以簡化電路。另外我們還采用了6個(gè)按鍵,分別是左移,右移,下移、方塊變化鍵、確定按鍵與暫停按鍵。</p><p>  3.系統(tǒng)硬件電路設(shè)計(jì)</p&g

10、t;<p>  3.1硬件設(shè)計(jì)整體方框圖</p><p>  圖3.1 硬件設(shè)計(jì)框圖</p><p><b>  3.2電源系統(tǒng)</b></p><p>  本設(shè)計(jì)的電源系統(tǒng)比較簡單,由USB電源輸出5V電源進(jìn)行供電,具體電路如下圖所示:</p><p><b>  圖3.2 電源電路</b

11、></p><p>  3.3 STC89C52單片機(jī)介紹</p><p>  圖3.3 STC89C52引腳圖</p><p><b>  P1口</b></p><p>  P1 是一個(gè)帶內(nèi)部上拉電阻的8 位雙向I/O 口, P1的輸出緩沖級可驅(qū)動(dòng)(吸收或輸出電流)4 個(gè)TTL 邏輯門電路。對端口寫"

12、1",通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號拉低時(shí)會輸出一個(gè)電流(IIL)。與AT89C51 不同之處是,P1.0 和P1.1還可分別作為定時(shí)/計(jì)數(shù)器2 的外部計(jì)數(shù)輸入(P1.0/T2)和(P1.1/T2EX)。</p><p><b>  P2口</b></p><p>  P2 是一個(gè)

13、帶有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 的輸出緩沖級可驅(qū)動(dòng)(吸收或輸出電流)4 個(gè)TTL 邏輯門電路。對端口P2 寫"1",通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口,作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號拉低時(shí)會輸出一個(gè)電流(IIL)。在訪問外部程序存儲器或16 位地?cái)?shù)據(jù)存儲器(例如執(zhí)行MOVX @DPTR 指令)時(shí),P2 口送出高8 位地址數(shù)據(jù)。在訪問8 位地址的外部數(shù)據(jù)存儲器(如

14、執(zhí)行MOVX@RI 指令)時(shí),P2 口輸出P2鎖存器的內(nèi)容。Flash編程或校驗(yàn)時(shí),P2亦接收高位地址和一些控制信號。</p><p><b>  P3 口</b></p><p>  P3 口是一組帶有內(nèi)部上拉電阻的8 位雙向I/O 口。P3 口輸出緩沖級可驅(qū)動(dòng)(吸收或輸出電流)4 個(gè)TTL 邏輯門電路。對P3 口寫入"1"時(shí),它們被內(nèi)部上拉電阻

15、拉高并可作為輸入端口。此時(shí),被外部拉低的P3 口將用上拉電阻輸出電流(IIL)。P3 口除了作為一般的I/O 口線外,更重要的用途是它的第二功能P3 口還接收一些用于Flash閃速存儲器編程和程序校驗(yàn)的控制信號。</p><p><b>  RST</b></p><p>  復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將使單片機(jī)復(fù)位。</p&

16、gt;<p><b>  ALE/PROG</b></p><p>  當(dāng)訪問外部程序存儲器或數(shù)據(jù)存儲器時(shí),ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8 位字節(jié)。一般情況下,ALE 仍以時(shí)鐘振蕩頻率的1/6 輸出固定的脈沖信號,因此它可對外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲器時(shí)將跳過一個(gè)ALE 脈沖。對Flash存儲器編程期間,該引腳還用于輸入編程脈沖

17、(PROG)。如有必要,可通過對特殊功能寄存器(SFR)區(qū)中的8EH 單元的D0 位置位,可禁止ALE 操作。該位置位后,只有一條MOVX 和MOVC指令才能將ALE 激活。此外,該引腳會被微弱拉高,單片機(jī)執(zhí)行外部程序時(shí),應(yīng)設(shè)置ALE 禁止位無效。</p><p><b>  PSEN</b></p><p>  程序儲存允許(PSEN)輸出是外部程序存儲器的讀選通信

18、號,當(dāng)AT89C52 由外部程序存儲器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次PSEN 有效,即輸出兩個(gè)脈沖。在此期間,當(dāng)訪問外部數(shù)據(jù)存儲器,將跳過兩次PSEN信號。</p><p><b>  EA/VPP</b></p><p>  外部訪問允許。欲使CPU 僅訪問外部程序存儲器(地址為0000H-FFFFH),EA 端必須保持低電平(接地)。需注意的是:如果加密位L

19、B1 被編程,復(fù)位時(shí)內(nèi)部會鎖存EA端狀態(tài)。如EA端為高電平(接Vcc端),CPU 則執(zhí)行內(nèi)部程序存儲器中的指令。Flash存儲器編程時(shí),該引腳加上+12V 的編程允許電源Vpp,當(dāng)然這必須是該器件是使用12V編程電壓Vpp。</p><p><b>  XTAL1</b></p><p>  振蕩器反相放大器及內(nèi)部時(shí)鐘發(fā)生器的輸入端。</p><p

20、><b>  XTAL2</b></p><p>  振蕩器反相放大器的輸出端。</p><p>  3.4 復(fù)位電路設(shè)計(jì)</p><p>  單片機(jī)在啟動(dòng)時(shí)都需要復(fù)位,以使CPU及系統(tǒng)各部件處于確定的初始狀態(tài),并從初態(tài)開始工作。89系列單片機(jī)的復(fù)位信號是從RST引腳輸入到芯片內(nèi)的施密特觸發(fā)器中的。當(dāng)系統(tǒng)處于正常工作狀態(tài)時(shí),且振蕩器穩(wěn)定后

21、,如果RST引腳上有一個(gè)高電平并維持2個(gè)機(jī)器周期(24個(gè)振蕩周期)以上,則CPU就可以響應(yīng)并將系統(tǒng)復(fù)位。單片機(jī)系統(tǒng)的復(fù)位方式有:手動(dòng)按鈕復(fù)位和上電復(fù)位。  手動(dòng)按鈕復(fù)位需要人為在復(fù)位輸入端RST上加入高電平(圖1)。一般采用的辦法是在RST端和正電源Vcc之間接一個(gè)按鈕。當(dāng)人為按下按鈕時(shí),則Vcc的+5V電平就會直接加到RST端。手動(dòng)按鈕復(fù)位的電路如所示。由于人的動(dòng)作再快也會使按鈕保持接通達(dá)數(shù)十毫秒,所以,完全能夠滿足復(fù)位的

22、時(shí)間要求。復(fù)位電路連接如圖所示:</p><p><b>  圖3.4復(fù)位電路</b></p><p><b>  3.5時(shí)鐘電路設(shè)計(jì)</b></p><p>  8XX51系列單片機(jī)的時(shí)鐘信號通常用兩種電路形式得到:內(nèi)部振蕩方式和外部振蕩方式。在引腳XTAL1和XTAL2外接晶振,就構(gòu)成了內(nèi)部振蕩方式。由于單片機(jī)內(nèi)部有一

23、個(gè)高增益反相放大器,當(dāng)外接晶振后,就構(gòu)成了自激振蕩器,并產(chǎn)生振蕩時(shí)鐘脈沖。晶振通常選用6MHz、12MHz或24MHz。</p><p>  本次設(shè)計(jì)中我們選用了12MHz的晶振,晶振與鎖相環(huán)電路配合使用,以提供系統(tǒng)所需的時(shí)鐘頻率。設(shè)計(jì)中STC89C52使用12MHz晶體振蕩器作為振蕩源,由于單片機(jī)內(nèi)部帶有振蕩電路,所以外部只要連接一個(gè)晶振和兩個(gè)電容即可,電容容量一般在15pF到50pF之間,我們選用電容容量為3

24、3pF的電容,如圖所示即為本設(shè)計(jì)的振蕩電路。</p><p><b>  圖3.5 時(shí)鐘電路</b></p><p>  3.6液晶屏顯示模塊</p><p>  液晶顯示屏是整個(gè)系統(tǒng)硬件的重要組成部分,擔(dān)當(dāng)著人機(jī)交互的重要角色。本設(shè)計(jì)采用銘正同公司生產(chǎn)的MzL02D-12864液晶點(diǎn)陣屏作為顯示器件。它是一塊128*64點(diǎn)陣的LCD顯示模組,

25、模組上的LCM采用COG技術(shù)將控制(包括顯存)、驅(qū)動(dòng)器集成在LCM的玻璃上,接口簡單,操作方便。其特點(diǎn)為單電源供電,對比度編程可調(diào),可采用并行接口為6800/8080時(shí)序或者串行SPI的MPU接口方式,整塊液晶屏由3.3V的白色LED背光,美觀大方。其外接部分分為電源端口、數(shù)據(jù)端口和命令端口三部分組成。本設(shè)計(jì)中LCD的數(shù)據(jù)端口連接到STC89C51單片機(jī)的P0端口,LCD命令端口連接到單片機(jī)的P2端口。具體實(shí)物如圖所示:</p&g

26、t;<p>  圖3.6 液晶屏正面圖 圖3.7 液晶屏反面圖</p><p>  圖3.8 液晶屏顯示電路</p><p><b>  3.7按鍵電路設(shè)計(jì)</b></p><p>  按鍵電路模塊是智能俄羅斯方塊游戲系統(tǒng)的輸入器件,它的控制器包括六個(gè)按鍵,分別為:左移、變形、右移、暫停、下降、確定。具

27、體硬件電路如下圖所示。</p><p><b>  圖3.8 按鍵電路</b></p><p><b>  4.軟件系統(tǒng)的設(shè)計(jì)</b></p><p>  4.1軟件系統(tǒng)設(shè)計(jì)框圖 </p><p><b>  Y</b></p><p>  圖4.1軟件

28、系統(tǒng)設(shè)計(jì)框圖</p><p>  5.調(diào)試結(jié)果記錄及分析</p><p><b>  5.1仿真結(jié)果</b></p><p>  圖5.1 仿真電路圖</p><p><b>  5.2實(shí)物調(diào)試結(jié)果</b></p><p>  圖5.2實(shí)物主界面圖

29、圖5.3實(shí)物速度設(shè)置界面圖 </p><p>  圖5.4實(shí)物游戲界面圖圖 5.5實(shí)物游戲得分界面圖</p><p>  5.6實(shí)物游戲結(jié)束界面圖</p><p><b>  6.心得體會</b></p><p>  我在這次中主要負(fù)責(zé)軟件的調(diào)試以及協(xié)調(diào)好軟硬鍵的通訊。軟件調(diào)試中,發(fā)現(xiàn)了亂碼的現(xiàn)

30、象,開始調(diào)試是弄不清是軟件的問題還是硬件的問題,這給了我一個(gè)很大的教訓(xùn),軟件硬件不能同時(shí)調(diào)試,只有確認(rèn)一個(gè)沒問題后才能更好的調(diào)試另一個(gè)。最后發(fā)現(xiàn)是由軟件引起數(shù)據(jù)沖突造成的。此外還出現(xiàn)的各種各樣的BUG,例如游戲得分系統(tǒng)和人機(jī)通訊系統(tǒng)也會出現(xiàn)問題,有個(gè)問題更是莫名其妙,比如按著按著出現(xiàn)界面停頓現(xiàn)象,甚至出現(xiàn)了死機(jī)現(xiàn)象,而實(shí)際游戲中這種現(xiàn)象是萬萬不允許的。開始以為是電平干擾所引起的,但是接穩(wěn)定的電壓也會出現(xiàn)這種情況。回去檢查代碼時(shí)已經(jīng)是10

31、00多行代碼了,從主函數(shù)慢慢往下看,雖然注釋的比較詳細(xì)但是問題卻很難找到,然而BUG事實(shí)卻擺在那里。不修復(fù)則游戲無法進(jìn)行。我終于體會到程序員的辛苦和無奈。只能回到最初的流程圖從底層驅(qū)動(dòng)函數(shù)和算法邏輯慢慢整理,才發(fā)現(xiàn)我的程序出現(xiàn)的多么大的問題,沒有用好指針,指針出現(xiàn)了問題給程序帶來的災(zāi)難性的后果。還有一些變量的初始化沒有賦值,</p><p>  初始化指針中沒用明確的指向,函數(shù)沒有返回。這些都是細(xì)節(jié)問題,任何一個(gè)

32、關(guān)鍵變量沒有用好都會出現(xiàn)很大的問題。更重要的教訓(xùn)是編程思路一定要清晰,這就要求編寫代碼之前流程圖都要畫好。還有就是編寫程序時(shí)頭腦要清醒不能打疲勞戰(zhàn),有時(shí)候變量的賦值過程中腦袋里想的是賦值為1而鍵盤中賦值的確實(shí)0;這種情況也是最難找的,因?yàn)槭亲约簩懙某绦颍瑵撘庾R以為是正確的,就去找別處的錯(cuò)誤了。只有一個(gè)一個(gè)的找才能找出來。找到之后,真的很后悔當(dāng)初的粗心</p><p><b>  參考文獻(xiàn)</b&g

33、t;</p><p>  [1]張毅剛.單片機(jī)原理及接口技術(shù)[M].北京:人民郵電出版社,2013:220-240</p><p>  [2]郭天祥.新概念51單片機(jī)C語言教程[M].北京:電子工業(yè)出版社,2012:230-240</p><p>  [3]韓旭,王娣. C語言從入門到精通[M].北京:清華大學(xué)出版社,2010:244-260</p>

34、<p>  [4]胡仁喜. Altium Designer 16從入門到精通[M].北京:機(jī)械工業(yè)出版社,2016:118-168</p><p>  [5] 王東鋒,董冠強(qiáng).單片機(jī)C語言應(yīng)用100例[M].北京:電子工業(yè)出版社,2009:182-200</p><p><b>  附錄1</b></p><p><b> 

35、 整體電路原理圖:</b></p><p><b>  PCB圖:</b></p><p><b>  附錄2</b></p><p><b>  元件清單:</b></p><p><b>  附錄3</b></p><p

36、><b>  關(guān)鍵函數(shù)如下所示:</b></p><p>  ①俄羅斯方塊中文顯示界面</p><p>  void game_start_show()</p><p><b>  {</b></p><p>  bit tpflag=1;//置循環(huán)標(biāo)志位為1</p><p

37、>  LCD_full_draw(start_pic);</p><p>  while(tpflag)</p><p><b>  {</b></p><p>  switch(basic_button())</p><p><b>  {</b></p><p> 

38、 case 6: tpflag=0;</p><p>  speaker=0;</p><p>  while(button_b==0);</p><p>  speaker=1;</p><p><b>  break;</b></p><p><b>  default:;</

39、b></p><p><b>  }</b></p><p>  }//game_start_showÑ­»·</p><p><b>  }</b></p><p><b> ?、谶x擇游戲難度級別</b></p>&

40、lt;p>  void select_speed()</p><p><b>  {</b></p><p>  unsigned char i;</p><p>  bit tpflag=1;//置循環(huán)標(biāo)志為1</p><p>  LCD_clear();</p><p>  for(i=

41、0;i<128;i++)</p><p><b>  {</b></p><p>  LCD_display_byte(i,0,0xff);</p><p>  LCD_display_byte(i,7,0xff);</p><p><b>  }</b></p><p&g

42、t;  LCD_display_byte(60,4,0x7f);</p><p>  LCD_display_byte(59,4,0x3e);</p><p>  LCD_display_byte(58,4,0x1c);</p><p>  LCD_display_byte(57,4,0x08);</p><p>  LCD_display_

43、byte(67,4,0x7f);</p><p>  LCD_display_byte(68,4,0x3e);</p><p>  LCD_display_byte(69,4,0x1c);</p><p>  LCD_display_byte(70,4,0x08);</p><p>  LCD_display_word(speed_data,

44、24,3,52);</p><p>  show_speed_num(62,4);</p><p>  while(tpflag)</p><p><b>  {</b></p><p>  switch(basic_button())</p><p><b>  {</b>

45、</p><p>  case 4: if(speed_num!=0)</p><p><b>  {</b></p><p>  speaker=0;</p><p>  speed_num--;</p><p>  show_speed_num(62,4);</p><p&

46、gt;  speaker=1;</p><p><b>  }</b></p><p>  while(left==0);</p><p><b>  break;</b></p><p>  case 5: if(speed_num!=9)</p><p><b>

47、;  {</b></p><p>  speaker=0;</p><p>  speed_num++;</p><p>  show_speed_num(62,4);</p><p>  speaker=1;</p><p><b>  }</b></p><p&

48、gt;  while(right==0);</p><p><b>  break;</b></p><p>  case 6: tpflag=0;</p><p>  speaker=0;</p><p>  while(button_b==0);</p><p>  speaker=1;<

49、;/p><p><b>  break;</b></p><p><b>  default:;</b></p><p><b>  }</b></p><p>  }//選擇游戲速度循環(huán)</p><p><b>  }</b><

50、/p><p> ?、廴藱C(jī)通信(進(jìn)行游戲)</p><p>  void Tetris_main()</p><p><b>  {</b></p><p>  unsigned char i;</p><p>  for(i=0;i<19;i++)</p><p><

51、;b>  {</b></p><p>  Box_Ram[i]=Box_Ram_data[i];</p><p>  };//載入游戲初始化顯示畫面</p><p>  LCD_draw(mpic);</p><p>  game_over_flag=0;//游戲結(jié)束標(biāo)志位置0表示游戲未結(jié)束</p><p

52、>  box_build();</p><p>  box_load();</p><p>  box_to_Box_Ram(s_box.x,s_box.y,s_box.box);</p><p>  box_down_reg=(20-(speed_num<<1)-1);//為了使方塊一出現(xiàn)就能變換形狀,所以需要盡快使得方塊下降一行,不知道為什么最

53、高行不行變換形狀</p><p>  time0_initialize();</p><p>  while(!game_over_flag)//如果游戲結(jié)束標(biāo)志位置1,表示游戲結(jié)束,打破循環(huán),調(diào)用游戲結(jié)束畫面顯示函數(shù)</p><p><b>  {</b></p><p>  game_button();</p

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論