單片機課程設計(實驗)--led顯示游戲機_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  電機學院課程設計任務書</p><p><b>  目錄</b></p><p><b>  一、摘要1</b></p><p><b>  二、設計要求1</b></p><p><b>  三、正文1</b></p&g

2、t;<p>  1.單片機AT89S511</p><p>  1.1 AT89S51的引腳說明2</p><p>  2、Keil 工程的建立4</p><p><b>  2.1編輯4</b></p><p>  2.2Keil 的調(diào)試命令、在線匯編與斷點設置5</p><

3、p>  2.3常用調(diào)試命令6</p><p><b>  3系統(tǒng)軟件設計8</b></p><p>  3.1.程序流程圖8</p><p><b>  3.2參考程序9</b></p><p>  4系統(tǒng)硬件設計11</p><p>  4.1硬件結構圖1

4、1</p><p><b>  4.2電路圖12</b></p><p><b>  5.硬件調(diào)試13</b></p><p>  5.1硬件實物圖13</p><p>  5.2檢驗是否短路13</p><p>  5.3、電路焊接順序13</p>

5、<p>  5.4調(diào)試現(xiàn)象14</p><p><b>  四、心得體會15</b></p><p><b>  LED顯示的游戲機</b></p><p><b>  一.摘要</b></p><p>  單片機即單片微型計算機,由RAM、ROM、CPU構成,定

6、時、計數(shù)和多種接口于一體的微控制器。它體積小、成本低、功能強,廣泛應用于智能產(chǎn)業(yè)和工業(yè)自動化上。這次課程設計通過對它的學習、設計、開發(fā)軟、硬的能力。</p><p>  對于此課題項目整個過程就是先設計和焊接好硬件電路,再通過匯編語言編寫應用程序并下載到單片機上實現(xiàn)我們需要的功能。由于本實驗的硬件電路的結構簡單、直觀,所以軟件的編程及調(diào)試是本次課程設計的重點和難點。</p><p>  關

7、鍵字:AT89S51、LED顯示、無規(guī)律亮滅</p><p><b>  二.設計要求</b></p><p>  LED顯示游戲機功能描述:設定開關1啟動游戲,開關2停止游戲。編程使8個LED發(fā)光二極管隨機亮滅(不能有規(guī)律亮滅)。利用開關3作為自鎖控制按鈕,當按鈕被按下,8個LED發(fā)光二極管固定在當前的亮滅狀態(tài)上,再次按下開關3,重新開始。</p>&

8、lt;p><b>  三.正文</b></p><p>  1.單片機AT89S51 </p><p>  經(jīng)綜合分析選用單片機AT89S51適合。AT89S51是一種低功耗高性能的8位單片機,片內(nèi)帶有一個4KB的Flash在線可編擦除只讀存儲器,它采用了CMOS工藝和ATMEL公司的高密度非易失性存儲器技術,而且其輸出引腳和指令系統(tǒng)和51系列單片機兼容。片內(nèi)

9、的存儲器允許在線重新編程或用常規(guī)的非易失性存儲器編程器來編程。同時已具有三級程序存儲器保密的性能。在眾多的51系列單片機中,要算ATMEL公司的AT89S51更實用,因為它不僅和MCU-51系列單片機指令、管腳完全兼容,而且它將通用CPU和在線可編程Flash集成在一個芯片上。這種單片機對開發(fā)設備的要求很低,開發(fā)時間也大大縮短。 </p><p>  1.1 AT89S51的引腳說明</p><

10、;p>  AT89S51是一個低功耗高性能單片機,40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內(nèi)含2個外中斷口,2個16位可編程定時計數(shù)器,2個全雙工串行通信口,AT89S51可以按照常規(guī)方法進行編程,也可以在線編程。其將通用的微處理器和Flash存儲器結合在一起,特別是可反復擦寫的Flash存儲器可有效地降低開發(fā)成本。</p><p>  圖2-1 AT89S51引腳圖</p>

11、<p>  VCC(40腳):供電電壓。     GND(20腳):接地。   P0口(32腳~39腳):P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫“1”時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時

12、,P0輸出原碼,此時P0外部必須被拉高。  P1口(1腳~8腳):P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入“1”后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。   P2口(21腳~28腳):P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,

13、P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出</p><p>  表2-1 P3口第二功能</p><p>  P3口同時為閃爍編程和編程校驗接收一些控制信號。 

14、60;RST(9腳):復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。 ALE/PROG(30腳):當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE

15、的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。  /PSEN(29腳):外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。   /EA/VPP(31腳):當/EA保持低電平時

16、,則在此期間外部程序存儲器(0000H- FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部</p><p>  2、Keil 工程的建立</p><p><b>  2.1編輯</b></p><p>  首先啟動 Keil 軟件的集成開發(fā)環(huán)境,這里假設讀者已正確安裝了該軟件,可以從桌面 上直接雙擊 uVision 的圖標

17、以啟動該軟件。</p><p>  UVison 啟動后,程序窗口的左邊有一個工程管理窗口,該窗口有 3 個標簽,分別是Files、Regs、和 Books,這三個標簽頁分別顯示當前項目的文件結構、CPU 的寄存器及部份特殊 功能寄存器的值(調(diào)試時才出現(xiàn))和所選 CPU 的附加說明文件,如果是第一次啟動 Keil, 那么這三個標簽頁全是空的。</p><p>  在項目開發(fā)中,并不是僅有一

18、個源程序就行了,還要為這個項目選擇 CPU(Keil 支持數(shù) 百種 CPU,而這些 CPU 的特性并不完全相同),確定編譯、匯編、連接的參數(shù),指定調(diào)試 的方式,有一些項目還會有多個文件組成等,為管理和使用方便,Keil 使用工程(Project) 這一概念,將這些參數(shù)設置和所需的所有文件都加在一個工程中,只能對工程而不能對單一 的源程序進行編譯(匯編)和連接等操作,下面我們就一步一步地來建立工程。</p><p>

19、;  圖 2 選擇目標 CPU</p><p>  點擊“Project->New Project… ”菜單,出現(xiàn)一個對話框,要求給將要建立的工程起一個 名字,你可以在編緝框中輸入一個名字 (設為 exam1),不需要擴展名。點擊“保 存”按鈕,出現(xiàn)第二個對話框,如圖 2所示,這個對話框要求選擇目標 CPU(即 你所用芯片的型號),Keil 支持的 CPU 很多,我們選擇 Atmel 公司的 89C51 芯

20、 片。點擊 ATMEL 前面的“+”號,展開該層,點擊其中的 89C51,然后再點擊“確定”按鈕,回到主界面,此時,在 工程窗口的文件頁中,出現(xiàn)了“Target1”,前面有“+”號,點擊“+”號展開,可以看到下一層的“ Source Group1”,這 時的工程還是一個空的工程,里面什么文件也沒有,需要手動把剛才編寫好的源程序加入,點擊“Source Group1”使 其反白顯示,然后,點擊鼠標右鍵,出現(xiàn)一個下 拉菜單,如圖 3 所示。

21、選中其中的“Add file to Group”Source Group1”,出現(xiàn)一個對話框,要求 尋找源文件,注意,該對話框下面的“文件類型” 默認為 C source file(*.c),也就是以 </p><p>  雙擊 exam1.asm 文件,將文件加入項目,注意,在文件加入項目后,該對話框并不消失,等待繼續(xù)加入其它文件,但初學時常 會誤認為操作沒有成功而再次雙擊同一文 件,這時會出現(xiàn)如圖 4 所示的

22、對話框,提 示你所選文件已在列表中,此時應點擊“確 定”,返回前一對話框,然后點擊“Close” 即可返回主界面,返回后,點擊“Source Group 1”前的加號,會發(fā)現(xiàn) exam1.asm 文 件已在其中。雙擊文件名,即打開該源程 序。</p><p><b>  圖 3 加入文件</b></p><p>  2.2Keil 的調(diào)試命令、在線匯編與斷點設置<

23、;/p><p>  我們學習了如何建立工程、匯編、連接工程,并獲得目標代碼,但是做到這一 步僅僅代表你的源程序沒有語法錯誤,至于源程序中存在著的其它錯誤,必須通過調(diào)試才能 發(fā)現(xiàn)并解決,事實上,除了極簡單的程序以外,絕大部份的程序都要通過反復調(diào)試才能得到 正確的結果,因此,調(diào)試是軟件開發(fā)中重要的一個環(huán)節(jié),這一講將介紹常用的調(diào)試命令、利 用在線匯編、各種設置斷點進行程序調(diào)試的方法,并通過實例介紹這些方法的使用。</

24、p><p><b>  2.3常用調(diào)試命令</b></p><p>  在對工程成功地進行匯編、連接以后,按 Ctrl+F5 或者使用菜單 Debug->Start/Stop Debug Session 即可進入調(diào)試狀態(tài),Keil 內(nèi)建了一個仿真 CPU 用來模擬執(zhí)行程序,該仿真 CPU 功 能強大,可以在沒有硬件和仿真機的情況下進行程序的調(diào)試,下面將要學的就是該模

25、擬調(diào)試 功能。不過在學習之前必須明確,模擬畢竟只是模擬,與真實的硬件執(zhí)行程序肯定還是有區(qū) 別的,其中最明顯的就是時序,軟件模擬是不可能和真實的硬件具有相同的時序的,具體的 表現(xiàn)就是程序執(zhí)行的速度和各人使用的計算機有關,計算機性能越好,運行速度越快。</p><p>  進入調(diào)試狀態(tài)后,界面與編緝狀態(tài)相比有明顯的變化,Debug 菜單項中原來不能用的命 令現(xiàn)在已可以使用了,工具欄會多出一個用于運行和調(diào)試的工具條,如

26、圖 1 所示,Debug 菜 單上的大部份命令可以在此找到對應的快捷按鈕,從左到右依次是復位、運行、暫停、單步、 過程單步、執(zhí)行完當前子程序、運行到當前行、下一狀態(tài)、打開跟蹤、觀察跟蹤、反匯編窗 口、觀察窗口、代碼作用范圍分析、1#串行窗口、內(nèi)存窗口、性能分析、工具按鈕等命令。</p><p>  圖 1 調(diào)試工具條     </p><p>  學習程序調(diào)試

27、,必須明 確兩個重要的概念,即單步執(zhí)行與全速運行。全速執(zhí)行 是指一行程序執(zhí)行完以后緊接著執(zhí)行下一行程序,中間不停止,這樣程序執(zhí)行的速度很快,并可以看到該段程序執(zhí)行的總體效果,即最終結果正確 還是錯誤,但如果程序有錯,則難以確認錯誤出現(xiàn)在哪些程 序行。單步執(zhí)行是每次執(zhí)行一行程序,執(zhí)行完該行程序以后 即停止,等待命令執(zhí)行下一行程序,此時可以觀察該行程序 執(zhí)行完以后得到的結果,是否與我們寫該行程序所想要得到 的結果相同,借此可以找到程序中問題

28、所在。程序調(diào)試中, 這兩種運行方式都要用到。 </p><p>  使用菜單 STEP 或相應的命令按鈕或使用快捷鍵 F11 可 以單步執(zhí)行程序,使用菜單 STEP OVER 或功能鍵 F10 可以 以過程單步形式執(zhí)行命令,所謂過程單步,是指將匯編語言 中的子程序或高級語言中的函數(shù)作為一個語句來全速執(zhí)行。</p><p><b>  圖 2 調(diào)試窗口</b></

29、p><p>  按下 F11 鍵,可以看到源程序窗口的左邊出現(xiàn)了一個黃色調(diào)試箭頭,指向源程序的第一行,如圖 2 所示。每按一次 F11,即執(zhí)行該箭頭所指程序行,然后箭頭指向下一行,當箭頭 指向 LCALL DELAY 行時,再次按下 F11,會發(fā)現(xiàn),箭頭指向了延時子程序 DELAY 的第 一行。不斷按 F11 鍵,即可逐步執(zhí)行延時子程序。</p><p>  通過單步執(zhí)行程序,可以找出一些問題

30、的所在,但是僅依靠單步執(zhí)行來查錯有時是困難 的,或雖能查出錯誤但效率很低,為此必須輔之以其它的方法,如本例中的延時程序是通過將 D2: DJNZ R6,D2 這一行程序執(zhí)行六萬多次來達到延時的目的,如果用按 F11 六萬多次的方法來執(zhí)行完該程序行,顯然不合適,為此,可以采取以下一些方法,第一,用鼠標在 子程序的最后一行( ret)點一下,把光標定位于該行,然后用菜單 Debug->Run to Cursor line(執(zhí)行到光標所

31、在行),即可全速執(zhí)行完黃色箭頭與光標之間的程序行。第二,在進入該子程序后,使用菜單 Debug->Step Out of Current Function(單步執(zhí)行到該函數(shù)外),使用該命令 后,即全速執(zhí)行完調(diào)試光標所在的子程序或子函數(shù)并指向主程序中的下一行程序(這里是 JMP LOOP 行)。第三種方法,在開始調(diào)試的,按 F10 而非 F11,程序也將單步執(zhí)行,不同 的是,執(zhí)行到 lcall delay 行時,按下 F10 鍵,調(diào)

32、試光標不進入子程序的內(nèi)部,而是全速 執(zhí)行完該子程序,然后直接指向下一行“JMP LOOP”。靈活應</p><p><b>  3系統(tǒng)軟件設計</b></p><p><b>  3.1.程序流程圖</b></p><p><b>  3.2參考程序</b></p><p> 

33、 #include<reg51.h></p><p>  #include<stdlib.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  #define led P1</p>&l

34、t;p>  sbit buzzer=P3^7;</p><p>  sbit switch1=P3^0;//起始開關</p><p>  sbit switch2=P3^1;//停止開關</p><p>  sbit switch3=P3^2; //自鎖控制開關</p><p>  sbit segon1=P3^5;//十位控制

35、開關</p><p>  sbit segon2=P3^4;//個位控制開關</p><p>  void delayms(uint j); //延時函數(shù)聲明</p><p>  uchar number;</p><p>  void main()</p><p><b>  { </b&g

36、t;</p><p>  buzzer=0;</p><p>  EA=1; //開啟外部中斷0;</p><p><b>  EX0=1;</b></p><p><b>  IT0=0;</b></p><p><b>  while(1)</b&

37、gt;</p><p><b>  { </b></p><p>  if(switch1==0) //啟動開關打開</p><p><b>  {</b></p><p>  if(switch2==0) //當按下定時開關swithc2時</p><p>

38、;<b>  {</b></p><p><b>  led=0xff;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p>

39、<p>  number=rand()%256; //隨機數(shù)放在變量data中</p><p>  led=number; //顯示隨機數(shù)</p><p>  delayms(100);</p><p><b>  }</b></p><p><b>  }</b>&l

40、t;/p><p><b>  else</b></p><p><b>  {</b></p><p><b>  led=0xff;</b></p><p><b>  } </b></p><p><b> 

41、 }</b></p><p><b>  } </b></p><p>  void delayms(uint j) //延時函數(shù)</p><p><b>  {</b></p><p><b>  uint i;</b></p><p&

42、gt;  for(;j>0;j--)</p><p><b>  {</b></p><p><b>  i=250;</b></p><p>  while(--i);</p><p><b>  i=249;</b></p><p>  whi

43、le(--i);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void int0() interrupt 0</p><p><b>  { </b></p><p><b>  EX0

44、=0;</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  if(switch3==1) //暫停開關松開時</p><p><b>  { </b></p><p&

45、gt;<b>  EX0=1;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  led=number;</p><p><b>  } </b></p><p>

46、;<b>  }</b></p><p><b>  4系統(tǒng)硬件設計</b></p><p><b>  4.1硬件結構圖</b></p><p><b>  4.2電路圖</b></p><p><b>  5.硬件調(diào)試</b>&l

47、t;/p><p><b>  5.1硬件實物圖</b></p><p>  5.2檢驗是否短路 </p><p>  用萬用表檢查P2兩端是短路。電阻為0,則短路,電阻為一適值,電路正常。 </p><p>  5.3、電路焊接順序 </p><p>  焊接的順序很重要

48、,按功能劃分的器件進行焊接,順序是功能部件的焊接--調(diào)試--另一功能部件的焊接,這樣容易找到問題的所在。   </p><p><b>  3、器件功能 </b></p><p>  1)檢查原理圖連接是否正確 </p><p>  2)檢查原理圖與電路圖是否一致 </p>

49、<p>  3)檢查原理圖與器件的DATASHEET上引腳是否一致 </p><p>  4)用萬用表檢查是否有虛焊,引腳短路現(xiàn)象 </p><p>  5)查詢器件的DATASHEET,分析一下時序是否一致,同時分析一下命令字是否正確 </p><p>  6)通過示波器對芯片各個引腳進行檢查,檢查地址線是否有信號的&#

50、160;</p><p>  7)飛線。用別的的口線進行控制,看看能不能對其進行正常操作,多試驗,才能找到問題出現(xiàn)在什么地方。</p><p><b>  5.4調(diào)試現(xiàn)象</b></p><p><b>  四.心得體會</b></p><p>  單片機課程設計很快就結束了,在課程設計的這段時間里

51、,我不僅學到了許多新的知識,而且加深了我對以前學習的理論知識的掌握。 </p><p>  以前我們學的東西僅限于課本,對實實在在的應用還比較模糊,這次課程設計有利于同學們學習目的的明確性和主動性。通過這次課程設計,我們知道了哪些東西是應該確實掌握的,在學校里,沒有實實在在的實習,我們總以為學的東西沒太多用,當我們在課程設計過程中了解到我們學的東西是如此重要時,我們學習的積極性有了,目的性提高了。

52、60;</p><p>  通過單片機課程設計,我不僅加深了對單片機理論的理解,將理論很好地應用到實際當中去,而且我還學會了如何去培養(yǎng)我們的創(chuàng)新精神,從而不斷地戰(zhàn)勝自己,超越自己。創(chuàng)新,是要我們學會將理論很好地聯(lián)系實際,并不斷地去開動自己的大腦,從為人類造福的意愿出發(fā),做自己力所能及的,別人卻沒想到的事。使之不斷地戰(zhàn)勝別人,超越前人。同時,更重要的是,我在這一設計過程中,學會了堅持不懈,不輕易言棄。設計過程,也好

53、比是我們?nèi)祟惓砷L的歷程,常有一些不如意,也許這就是在對我們提出了挑戰(zhàn),勇敢過,也戰(zhàn)勝了,勝利的鐘聲也就一定會為我們而敲響。 </p><p>  這個設計過程中,我們遇到過許多次失敗的考驗,就比如,自己對實際生活中的交通秩序的不了解給整個設計帶來的困擾,真想要就此罷休,然而,就在想要放棄的那一刻,我們明白了,原來結果并不那么重要,我們更應該注重的是這一整個過程。于是,我們堅持了下來。當然最終,這個設計很

溫馨提示

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

評論

0/150

提交評論