基于89c51單片機(jī)的秒表課程設(shè)計(jì) 2_第1頁(yè)
已閱讀1頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

16、鍵1則又可重新開(kāi)始計(jì)時(shí)。</p><p>  3.3 程序流程及實(shí)驗(yàn)效果</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 源程序及說(shuō)明</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表示開(kāi)始計(jì)時(shí)</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) //計(jì)時(shí)開(kāi)始</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; //賦計(jì)數(shù)初值</p><p>  TL0=(65536-1000)%256;</p><p>  EA=1; //開(kāi)總斷</p><p>  ET0=1;//開(kāi)啟定時(shí)器中斷</p><p>  TR0=1;//啟動(dòng)定時(shí)器&

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) //時(shí)間的記錄&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) //查看所記錄的時(shí)間</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); //讀寫(xiě)操作使能位檢測(cè)</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);//開(kāi)顯示,關(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>  通過(guò)最后軟件對(duì)程序的編譯,組建,執(zhí)行,還有最終生成.hex 文件,把.hex下載到TX-1C開(kāi)發(fā)板的 STC89C52RC 單片機(jī)上的最終效果圖如下:</p><p>  (1)開(kāi)始從“00:000”</p><p>  圖4.1 復(fù)位從“00:000”計(jì)時(shí)

59、</p><p><b> ?。?)開(kāi)始計(jì)時(shí)</b></p><p><b>  圖4.2 開(kāi)始計(jì)時(shí)</b></p><p><b> ?。?)暫停功能:</b></p><p><b>  圖4.3 暫停功能</b></p><p&g

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

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

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論