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

下載本文檔

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

文檔簡介

1、<p><b>  課程設(shè)計任務(wù)書</b></p><p>  題 目:基于51單片機的秒表設(shè)計</p><p><b>  初始條件:</b></p><p>  具備Keil編程能力和Proteus仿真能力;</p><p>  熟悉定時器/計數(shù)器的實現(xiàn)原理;</p>

2、<p>  提供編程所需要的計算機一臺</p><p>  要求完成的主要任務(wù):(包括課程設(shè)計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)</p><p>  1、用定時器/計數(shù)器設(shè)計一個簡單的秒表,能顯示計時狀態(tài)和結(jié)果。</p><p>  2、進行電路實驗或仿真,并使用C語言進行程序的開發(fā)。</p><p>  3、完成符

3、合學(xué)校要求的設(shè)計說明書</p><p><b>  時間安排:</b></p><p>  一周,其中3天程序設(shè)計,2天程序調(diào)試</p><p>  指導(dǎo)教師簽名: 年 月 日</p><p>  系主任(或責(zé)任教師)簽名: 年 月

4、日</p><p><b>  摘要</b></p><p>  單片機控制秒表是集于單片機技術(shù)、模擬電子技術(shù)、數(shù)字技術(shù)為一體的機電一體化高科技產(chǎn)品,具有功耗低,安全性高,使用方便等優(yōu)點。本次設(shè)計內(nèi)容為以 8051 單片機為核心的秒表,它采用鍵盤輸入,單片機技術(shù)控制。設(shè)計內(nèi)容以硬件電路設(shè)計,軟件設(shè)計和制作三電路板部分來設(shè)計。利用單片機的定時器/計數(shù)器定時和計數(shù)的原理,

5、用集成電路芯片、LCD1602液晶以及按鍵來設(shè)計計時器。將軟、硬件有機地結(jié)合起來,使它擁有正確的計時、暫停、清零、所計時間的存儲和查看、并同時可以用液晶顯示,在現(xiàn)實生中應(yīng)用廣泛。</p><p>  關(guān)鍵詞:秒表;8051;定時器</p><p><b>  1.概述</b></p><p>  《單片機應(yīng)用實踐》課程設(shè)計是學(xué)好本門課程的又一重

6、要實踐性教學(xué)環(huán)節(jié),課程設(shè)計的目的就是配合本課程的教學(xué)和平時實驗,以達到鞏固消化課程的內(nèi)容,進一步加強綜合應(yīng)用能力及單片機應(yīng)用系統(tǒng)開發(fā)和設(shè)計能力的訓(xùn)練,啟發(fā)創(chuàng)新思維,使之具有獨立單片機產(chǎn)品和科研的基本技能,是以培養(yǎng)學(xué)生綜合運用所學(xué)知識的過程,是知識轉(zhuǎn)化為能力和能力轉(zhuǎn)化為工程素質(zhì)的重要階段。</p><p>  本次設(shè)計內(nèi)容為以 8051 單片機為核心的秒表,它采用鍵盤輸入,單片機技術(shù)控制。設(shè)計內(nèi)容以硬件電路設(shè)計,軟

7、件設(shè)計和制作三電路板部分來設(shè)計。利用單片機的定時器/計數(shù)器定時和計數(shù)的原理,用集成電路芯片、LCD1602液晶以及按鍵來設(shè)計計時器。將軟、硬件有機地結(jié)合起來,使它擁有正確的計時、暫停、清零、所計時間的存儲和查看、并同時可以用液晶顯示。</p><p><b>  2.理論分析</b></p><p><b>  2.1 設(shè)計內(nèi)容</b></

8、p><p>  開始時,顯示“00:000”,按下按鈕1后開始從0計時,顯示精度為0.001s;共有5個功能按鍵,第1個按鍵開始計時,第2個按鍵暫停,第3個按鍵復(fù)位,第4個按鍵記錄時間,第五個按鍵查看時間。</p><p>  根據(jù)8051芯片的的工作原理和工作方式,對LCD1602液晶進行顯示控制,并能用按鈕實現(xiàn)秒表起動、停止、復(fù)位、所計時間的存儲和查看、清零功能,精確到0.001秒。<

9、;/p><p>  要求選用定時器的工作方式,畫出使用單片機控制LCD1602液晶顯示的電路圖,并實現(xiàn)其硬件電路,并編程完成軟件部分,最后調(diào)試秒表起動、停止、清零等功能。</p><p><b>  2.2 具體步驟</b></p><p>  單片機電子秒表需要解決三個主要問題:</p><p>  一是有關(guān)單片機定時器的

10、使用;</p><p>  二是如何實現(xiàn)LCD1602液晶的顯示;</p><p>  三是如何對鍵盤輸入進行編程。</p><p>  定時器:51有4種工作方式,本方案采用工作方式1,即為16位定時器。在高八位和低八位分別置數(shù)。由于定時器做的是加法計數(shù),則應(yīng)該將要定時的數(shù)以補碼的形式,存放在定時器中。</p><p>  LCD1602液

11、晶:液晶用RS、RW、EA三個控制端口進行顯示等控制。D0-D7口分別接單片機的P0并行口,進行數(shù)據(jù)的傳輸。液晶的具體顯示方式及其時序圖在其資料中進行查閱并應(yīng)用。</p><p>  鍵盤:鍵盤函數(shù)可以作為一個子程序,在main函數(shù)中循環(huán)查找調(diào)用,根據(jù)按鍵的功能,我們在按鍵中寫入相應(yīng)的程序,在按鍵1中開中斷,并且對定時器進行設(shè)初值。即可實現(xiàn)開始計時。在按鍵2中關(guān)中斷,則可實現(xiàn)計時暫停。按鍵3即為復(fù)位鍵,則可復(fù)位為

12、初始值00:000。按鍵4即為記錄鍵,對時間進行記錄。按鍵5即為查看鍵,對所記錄的時間進行查看。</p><p><b>  3 程序設(shè)計</b></p><p><b>  3.1設(shè)計思路</b></p><p>  單片機應(yīng)用系統(tǒng)由硬件系統(tǒng)和軟件系統(tǒng)兩部分組成。硬件系統(tǒng)是指單片機以及擴展的存儲器、I\O 接口、外圍擴展

13、的功能電路。軟件系統(tǒng)包括監(jiān)控程序和各種應(yīng)用程序。 </p><p>  在單片機應(yīng)用系統(tǒng)中,單片機是整個系統(tǒng)的核心,對整個系統(tǒng)的信息輸入、處理、信息輸出進行控制。與單片機配套的有相應(yīng)的時鐘電路如圖3.1所示以及擴展的存儲器和 I\O 接口,使單片機應(yīng)用系統(tǒng)能夠運行。</p><p>  在一個單片機應(yīng)用系統(tǒng)中,往往都會輸入信息和顯示信息,這就涉及鍵盤和顯示器。在單片機應(yīng)用系統(tǒng)中,一般都根據(jù)

14、系統(tǒng)的要求配置相應(yīng)的鍵盤和顯示器。配置鍵盤和顯示器一般都沒有統(tǒng)一的規(guī)定,有的系統(tǒng)功能復(fù)雜,需輸入的信息和顯示的信息量大,配置的鍵盤和顯示器功能相對強大,而有些系統(tǒng)輸入/輸出的信息少,這時可能用幾個按鍵和幾個 LED 指示燈就可以進行處理了。在單片機應(yīng)用系統(tǒng)在中配置的鍵盤可以是獨立鍵盤,也可能是矩陣鍵盤。</p><p><b>  3.2設(shè)計過程</b></p><p&g

15、t;  3.2.1 系統(tǒng)設(shè)計思路及描述</p><p>  本設(shè)計在LCD1602液晶上顯示時間,則可利用MCS-51系列單片機的芯片AT89C52的P3.0,P3.1 ,P3.2,P3.3作為按鍵的入口;定時器 T0 作為每 0.001 秒加一的定時器;其中“開始”按鍵按下時開始計時,按下按鍵2則暫停;按下按鍵3對時間進行記錄,按下按鍵4對所記錄的時間進行查看。“清零”按鍵即為復(fù)位按鍵,復(fù)位清零,此時若再按下按

16、鍵1則又可重新開始計時。</p><p>  3.3 程序流程及實驗效果</p><p>  3.3.1 程序流程圖</p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b></p>

17、;<p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b></p>

18、<p>  圖3.1 主程序流程圖</p><p>  3.3.2 源程序及說明</p><p>  #include "reg51.h"</p><p>  #include "string.h"</p><p>  #include "stdio.h"</p&

19、gt;<p>  #include <stdlib.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  void Initialize_LCD();</p><p>  void ShowStri

20、ng(uchar x,uchar y,uchar *str);</p><p>  sbit K1 = P3^2; //K1表示開始計時</p><p>  sbit K2 = P3^3; //暫停</p><p>  sbit K3 = P3^4; //記錄</p><p>  sbit K4 = P3^5; //查看</p&

21、gt;<p>  uchar code prompt[]="PRESS K1 START " ;</p><p>  uchar a[]="00:000";</p><p><b>  int k3=0;</b></p><p><b>  int numb;</b>&

22、lt;/p><p>  void Delayxms(uint ms)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  while(ms--)</p><p><b>  {</b></p

23、><p>  for(i=0;i<120;i++);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void keyscan()</p><p><b>  {</b></p><

24、;p>  if(K1==0) //計時開始</p><p><b>  {</b></p><p>  Delayxms(1);</p><p><b>  if(K1==0)</b></p><p><b>  {</b></p><p&g

25、t;  TMOD=0x11;</p><p>  TH0=(65536-1000)/256; //賦計數(shù)初值</p><p>  TL0=(65536-1000)%256;</p><p>  EA=1; //開總斷</p><p>  ET0=1;//開啟定時器中斷</p><p>  TR0=1;//啟動定時器&

26、lt;/p><p>  while(!K1);//等待按鍵釋放</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(K2==0)//暫停</p><p><b>  {</b></p>

27、<p><b>  EA=0;</b></p><p><b>  ET0=0;</b></p><p><b>  TR0=0;</b></p><p><b>  }</b></p><p>  if(K3==0) //時間的記錄&l

28、t;/p><p><b>  { </b></p><p><b>  int k;</b></p><p>  Delayxms(50);</p><p>  for(k=0;k<6;k++) </p><p><b>  {</b></p&

29、gt;<p>  b[k3][k]=a[k];</p><p><b>  }</b></p><p><b>  k3++;</b></p><p>  while(!K3);</p><p><b>  }</b></p><p>  

30、if(K4==0) //查看所記錄的時間</p><p><b>  {</b></p><p>  uchar c[6];</p><p><b>  int num;</b></p><p>  Delayxms(50);</p><p>  if(K4==0) {&

31、lt;/p><p>  while(1) {</p><p>  for(num=0;num<6;num++) {</p><p>  c[num]=b[0][num];</p><p><b>  } </b></p><p>  ShowString(1,1,c);</p>&

32、lt;p>  Delayxms(50);</p><p>  if(K4==0) {</p><p>  Delayxms(50);</p><p>  if(K4==0) {</p><p><b>  while(1){</b></p><p>  for(num=0;num<6;

33、num++) {</p><p>  c[num]=b[1][num];</p><p><b>  } </b></p><p>  ShowString(1,1,c);}</p><p><b>  }</b></p><p><b>  }</b>

34、</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void main()</p>&l

35、t;p><b>  {</b></p><p>  Initialize_LCD();</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  keyscan();</p><p>  S

36、howString(1,0,prompt);</p><p>  ShowString(1,1,a);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void time() interrupt 1</p><p>&

37、lt;b>  {</b></p><p>  TH0=(65536-1000)/256;</p><p>  TL0=(65536-1000)%256;</p><p>  a[5]++;//初值為0</p><p>  if(a[5]==0X3A) </p><p><b>  { &

38、lt;/b></p><p>  a[5]=0X30;</p><p><b>  a[4]++;</b></p><p><b>  }</b></p><p>  if(a[4]==0X3A)</p><p><b>  { </b></

39、p><p>  a[4]=0X30;</p><p><b>  a[3]++;</b></p><p><b>  }</b></p><p>  if(a[3]==0X3A)</p><p><b>  {</b></p><p>

40、;  a[3]=0X30;</p><p><b>  a[1]++;</b></p><p><b>  }</b></p><p>  if(a[1]==0X3A)</p><p><b>  {</b></p><p>  a[1]=0X30;&l

41、t;/p><p><b>  a[0]++;</b></p><p><b>  }</b></p><p>  if(a[0]==0X3A)</p><p><b>  {</b></p><p>  a[]="00:000";<

42、/p><p><b>  }</b></p><p><b>  }</b></p><p>  //************1602***********//</p><p>  #include <reg52.h></p><p>  #include <i

43、ntrins.h></p><p>  #include <string.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  sbit RS = P0^7;</p><p>  s

44、bit RW = P0^6;</p><p>  sbit EN = P0^5;</p><p>  void Delayms(uint ms)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  while(ms

45、--)</p><p><b>  {</b></p><p>  for(i=0;i<120;i++);</p><p><b>  }</b></p><p><b>  }</b></p><p>  uchar Busy_Check()

46、 </p><p><b>  {</b></p><p>  uchar LCD_Status;</p><p><b>  RS = 0;</b></p><p><b>  RW = 1;</b></p><p><b>  EN =

47、1;</b></p><p>  Delayms(1);</p><p>  LCD_Status = P0;</p><p><b>  EN = 0;</b></p><p>  return LCD_Status;</p><p><b>  }</b>&l

48、t;/p><p>  void Write_LCD_Command(uchar cmd)</p><p><b>  {</b></p><p>  while((Busy_Check()&0x80)==0x80); //讀寫操作使能位檢測</p><p><b>  RS = 0;</b>&l

49、t;/p><p><b>  RW = 0;</b></p><p><b>  EN = 0;</b></p><p><b>  P0 = cmd;</b></p><p><b>  EN = 1;</b></p><p>  D

50、elayms(1);</p><p><b>  EN = 0;</b></p><p><b>  }</b></p><p>  void Write_LCD_Data(uchar dat)</p><p><b>  {</b></p><p> 

51、 while((Busy_Check()&0x80)==0x80);</p><p><b>  RS = 1;</b></p><p><b>  RW = 0;</b></p><p><b>  EN = 0;</b></p><p><b>  P0

52、= dat;</b></p><p><b>  EN = 1;</b></p><p>  Delayms(1);</p><p><b>  EN = 0;</b></p><p><b>  }</b></p><p>  void I

53、nitialize_LCD()</p><p><b>  {</b></p><p>  Write_LCD_Command(0x38);//功能選擇</p><p>  Delayms(1);</p><p>  Write_LCD_Command(0x01);//清屏</p><p

54、>  Delayms(1);</p><p>  Write_LCD_Command(0x06);//增量顯示,整體不移屏</p><p>  Delayms(1);</p><p>  Write_LCD_Command(0x0c);//開顯示,關(guān)消影,關(guān)閃爍</p><p>  Delayms(1);</p&

55、gt;<p><b>  }</b></p><p>  void ShowString(uchar x,uchar y,uchar *str)</p><p><b>  {</b></p><p>  uchar i = 0;</p><p><b>  uint a=0

56、;</b></p><p>  a = strlen(str);</p><p>  if(y == 0)</p><p>  Write_LCD_Command(0x80 | x);</p><p>  if(y == 1)</p><p>  Write_LCD_Command(0xc0 | x);&l

57、t;/p><p>  for(i=0;i<a;i++)</p><p><b>  {</b></p><p>  Write_LCD_Data(str[i]);</p><p><b>  }</b></p><p><b>  }</b><

58、/p><p><b>  4.仿真效果</b></p><p>  通過最后軟件對程序的編譯,組建,執(zhí)行,還有最終生成.hex 文件,把.hex下載到TX-1C開發(fā)板的 STC89C52RC 單片機上的最終效果圖如下:</p><p> ?。?)開始從“00:000”</p><p>  圖4.1 復(fù)位從“00:000”計時

59、</p><p><b> ?。?)開始計時</b></p><p><b>  圖4.2 開始計時</b></p><p><b> ?。?)暫停功能:</b></p><p><b>  圖4.3 暫停功能</b></p><p&g

60、t;<b> ?。?)及時歸零:</b></p><p><b>  圖4.4 復(fù)位歸零</b></p><p><b>  5.心得體會</b></p><p>  通過對本次課程的課程設(shè)計,使自己深刻的認識到自己的很多不足之處,在實際動手操作能力的不足,在進行程序編程時,自己需要,認真審題,看懂題

61、目的要求!對于軟件編程不益太簡單或者太難。做到既能把課題完成又能鍛煉 自己的能力!根據(jù)課題要求,復(fù)習(xí)相關(guān)的知識,查詢相關(guān)的資料。根據(jù)課程條件,找到適合的方案,找到需要的元器件及工具,準(zhǔn)備課程。根據(jù)課程設(shè)計的要求和自己所要增加的功能寫好程序流程圖,在程序流程圖的基礎(chǔ)上,根據(jù)芯片的功能寫出相應(yīng)的程序和增加額外的功能程序。然后再進行 程序調(diào)試和相應(yīng)的修改,以達到能夠?qū)崿F(xiàn)所要求的功能的目的。還要根據(jù)課程的實際情況,添加些額外程序來使系統(tǒng)更加的穩(wěn)

62、定,如開關(guān)的去抖(采用延遲)。程序要盡量做到由各個子程序組成,在有些程序后面最好加注釋,這樣在程序出錯的檢查過程中可以更容易查找的到,也更簡潔,更明白易懂。該課程設(shè)計的程序可以參考 MCS-51 系列單片機,也可自己根據(jù)自己熟悉的方 法來編程如單片機 C 語言。在設(shè)計控制開關(guān)時,注意兩個中斷的打開和關(guān)閉的先后順序,否則就會出錯。這次的單片機課程設(shè)計重點是理論與實際的相結(jié)合。該設(shè)計從頭到尾都要自己參與,熟悉了對整個設(shè)計的過程</p&

63、gt;<p><b>  參考文獻</b></p><p>  [1] 孫育才編著.MCS-51 系列單片微型計算機及其應(yīng)用.東南大學(xué)出版社.2009.12 </p><p>  [2] 郭天祥編著.51 單片機C語言教程-入門、提高、開發(fā)全攻略.電子工業(yè)出版社.2010. 05</p><p>  [3] 劉剛編著.Protel

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論