找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4047|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)2位LED數(shù)碼顯示“秒表”課程設(shè)計(論文)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:217690 發(fā)表于 2017-7-6 17:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
課程設(shè)計(論文)任務(wù)及評語
院(系):電子與信息工程學(xué)院                      教研室:計算機(jī)
  
學(xué)
  
130401003
學(xué)生姓名
張斌
專業(yè)班級
計算機(jī)141
課程設(shè)計(論文)題目
秒表設(shè)計
課程設(shè)計(論文)任務(wù)
設(shè)計內(nèi)容
  
用AT89C51設(shè)計一個2位LED數(shù)碼顯示“秒表”,顯示時間為00~99秒,每秒自動加一。
  
性能指標(biāo)及技術(shù)要求
  
了解8051芯片的的工作原理和工作方式 ,使用該芯片對LED數(shù)碼管進(jìn)行顯示控制,實(shí)現(xiàn)用單片機(jī)的端口控制數(shù)碼管,顯示分、秒,并能用按鈕實(shí)現(xiàn)秒表起動、停止、清零功能,精確到0.1秒。
指導(dǎo)教師評語及成績
  
  
  
  
  
  
  
  
  
  
平時成績:   答辯成績: 論文成績:
  
總成績:                  指導(dǎo)教師簽字:
  
                                         年    月    日
注:平時成績占20%,答辯成績占40%,論文成績占40%。


摘 要
本設(shè)計是設(shè)計一個單片機(jī)控制的多功能秒表系統(tǒng)。
近年來隨著科技的飛速發(fā)展,單片機(jī)的應(yīng)用正在不斷地走向深入,同時帶動著傳統(tǒng)控制檢測日新月異的更新。在實(shí)時檢測和自動控制的單片機(jī)應(yīng)用系統(tǒng)中,單片機(jī)往往是作為一個核心部件來使用,僅單片機(jī)方面的知識是不夠的,還要根據(jù)具體的硬件結(jié)構(gòu),以及針對具體的應(yīng)用對象的軟件結(jié)合,加以完善。秒表的出現(xiàn),解決了傳統(tǒng)的由于人為因素造成的誤差和不公平性。
本設(shè)計的多功能秒表系統(tǒng)采用AT89C51單片機(jī)為中心器件,利用其定時器/計數(shù)器定時和記數(shù)的原理,結(jié)合顯示電路、電源電路、LED數(shù)碼管以及按鍵電路來設(shè)計計時器。將軟、硬件有機(jī)地結(jié)合起來,使得系統(tǒng)能夠正確地進(jìn)行計數(shù),并且結(jié)合相應(yīng)的顯示驅(qū)動程序,使數(shù)碼管能夠正確地顯示時間,暫停和中斷。我們設(shè)計的秒表可以同時記錄八個相對獨(dú)立的時間,通過上翻下翻來查看這八個不同的計時值,可謂功能強(qiáng)大。其中軟件系統(tǒng)采用匯編語言編寫程序,包括顯示程序,計數(shù)程序,中斷,延時程序,按鍵消抖程序等,硬件系統(tǒng)利用PROTEUS強(qiáng)大的功能來實(shí)現(xiàn),簡單且易于觀察,在仿真中就可以觀察到實(shí)際的工作狀態(tài)。






目 錄
目 錄.. II
第一章 概述.. 1
1.1設(shè)計目的.. 1
1.2設(shè)計要求.. 1
1.3 設(shè)計意義.. 1
第二章 詳細(xì)分析.. 1
2.1系統(tǒng)總體方案.. 1
2.2硬件設(shè)計.. 1
2.3晶體振蕩電路.. 3
2.4復(fù)位電路.. 3
2.5按鍵電路.. 3
2.6顯示電路.. 4
第三章 軟件設(shè)計.. 5
第四章PROTEUS仿真.. 12
第五章 課程設(shè)計體會.. 14
第六章 參考文獻(xiàn).. 15



第一章 概述1.1設(shè)計目的
設(shè)計一個單片機(jī)控制的秒表系統(tǒng)。利用單片機(jī)的定時器/計數(shù)器定時和記數(shù)的原理,結(jié)合顯示電路、LED數(shù)碼管以及按鍵來設(shè)計秒表。將軟、硬件有機(jī)地結(jié)合起來,使得系統(tǒng)能夠正確地進(jìn)行計時,同時具有開始/暫停,記錄,上翻下翻,清零等功能。
1.2設(shè)計要求
(1)共四位LED顯示,顯示時間為00:00~59.99
(2)共五個按鍵,分別是開始/暫停,記錄,上翻,下翻,清零鍵;
(3)能同時記錄多個相對獨(dú)立的時間并分別顯示;
(4)翻頁按鈕查看多個不同的計時值;

1.3 設(shè)計意義
(1)通過本次課程設(shè)計可以使我們進(jìn)一步熟悉和掌握單片機(jī)內(nèi)部結(jié)構(gòu)和工作原理,了解單片機(jī)應(yīng)用系統(tǒng)設(shè)計的基本步驟和方法。
(2)通過利用AT89C51單片機(jī),理解單片機(jī)在自動化儀表中的作用以及掌握單片機(jī)的編程方法。
(3)通過設(shè)計一個簡單的實(shí)際應(yīng)用輸入及顯示模擬系統(tǒng),掌握單片機(jī)仿真軟件PROTEUS的使用方法。
(4)該實(shí)驗通過單片機(jī)的定時器/計數(shù)器定時和計數(shù)原理,設(shè)計簡單的計時器系統(tǒng),擁有正確的計時、暫停、清零、功能,并能同時記錄多個相對獨(dú)立的時間利用翻頁按鈕查看多個不同的計時值,該種秒表在現(xiàn)實(shí)生活中應(yīng)用廣泛,具有現(xiàn)實(shí)意義。


第二章 詳細(xì)分析2.1系統(tǒng)總體方案
本系統(tǒng)采用AT89C51單片機(jī)為中心器件,利用其定時器/計數(shù)器定時和記數(shù)的原理,結(jié)合硬件電路如電源電路,晶振電路,復(fù)位電路,顯示電路,以及一些按鍵電路等來設(shè)計計時器,將軟、硬件有機(jī)地結(jié)合起來。其中軟件系統(tǒng)采用匯編語言編寫程序,包括顯示,計數(shù),中斷,延時,按鍵消抖程序等,并在編程軟件中調(diào)試運(yùn)行,硬件系統(tǒng)利用PROTEUS強(qiáng)大的功能來實(shí)現(xiàn),簡單且易于觀察,在仿真中就可以觀察到實(shí)際的工作狀態(tài)。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif
圖  系統(tǒng)電路原理

2.2硬件設(shè)計
2.2.189C51單片機(jī)
MCS-51系列單片機(jī)是8位單片機(jī)產(chǎn)品,89C51是其中的典型代表,基本模塊包括以下幾個部分:
(1)CPU:89C51的CPU是8位的,另外89C51內(nèi)部有1個位處理器
(2)R0M:4KB的片內(nèi)程序存儲器,存放開發(fā)調(diào)試完成的應(yīng)用程序
(3)RAM:256B的片內(nèi)數(shù)據(jù)存儲器,容量小,但作用大
(4)I/O口:P0-P3,共4個口32條雙向且可位尋址的I/O口線
(5)中斷系統(tǒng):共5個中斷源,3個內(nèi)部中斷,2個外部中斷
(6)定時器/計數(shù)器:2個16位的可編程定時器/計數(shù)器
(7)通用串行口:全雙工通用異步接收器/發(fā)送器
(8)振蕩器:89C51的外接晶振與內(nèi)部時鐘振蕩器為CPU提供時鐘信號
(9)總線控制:89C51對外提供若干控制總線,便于系統(tǒng)擴(kuò)展

89C51的引腳圖如下:
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg
















2.3晶體振蕩電路
89C51芯片內(nèi)部有一個高增益反相放大器,用于構(gòu)成振蕩器。引線 XTAL1和XTAL2分別為反向放大器的輸入和輸出,兩端跨接石英晶體及兩個電容就可構(gòu)成穩(wěn)定的自激振蕩器。
這里,我們選用51單片機(jī)12MHZ的內(nèi)部振蕩方式,電容器C1,C2起穩(wěn)定振蕩頻率,并對振蕩頻率有微調(diào)作用,C1和C2可在20-100PF之間取值,這里取33P。
2.4復(fù)位電路
采用上電加按鍵復(fù)位電路,上電后,由于電容充電,使RST持續(xù)一段高電平時間。當(dāng)單片機(jī)已在運(yùn)行之中時,按下復(fù)位鍵也能使RST持續(xù)一段時間的高電平,從而實(shí)現(xiàn)上電加按鍵復(fù)位的操作。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image005.jpg
2.5按鍵電路
在按鍵電路中,我們可以在I/O口上直接接按鍵,或者通過I/O口設(shè)計一個鍵盤,然后通過鍵盤掃描程序判斷是否有鍵按下等。鍵盤掃描電路節(jié)省I/O口,但編程有些復(fù)雜,在這里,由于我們所用的按鍵較少,且系統(tǒng)是一個小系統(tǒng),有足夠的I/O口可以使用,為了使程序簡化,我們采用按鍵電路,用部分P1口做開關(guān),P1.0開始/暫停,P1.1記錄,P1.2上翻,P1.3下翻,P1.4清零。對于按鍵的設(shè)計,采用了防抖動的程序設(shè)計,使系統(tǒng)的性能得到進(jìn)一步的提升。當(dāng)按鍵被按下時,相應(yīng)的引腳被拉低,經(jīng)掃描后,獲得鍵值,并執(zhí)行鍵功能程序,因此按下不同的按鍵,將執(zhí)行不同的功能程序。
2.6顯示電路
顯示電路既可以選用液晶顯示器,也可以選用數(shù)碼管顯示。我們采用的是數(shù)碼管顯示電路。用四個共陰極LED顯示,LED是七段式顯示器,內(nèi)部有7個條形發(fā)光二極管和1個小圓點(diǎn)發(fā)光二極管組成,根據(jù)各管的亮暗組合成字符。
在用數(shù)碼管顯示時,我們有靜態(tài)和動態(tài)兩種選擇,靜態(tài)顯示程序簡單,顯示穩(wěn)定,但是占用端口比較多;動態(tài)顯示所使用的端口比較少,可以節(jié)省單片機(jī)的I/O口。
在設(shè)計中,我們采用LED動態(tài)顯示,用P0口驅(qū)動顯示。由于P0口的輸出級是開漏電路,用它驅(qū)動時需要外接上拉電阻才能輸出高電平。

第三章 軟件設(shè)計
3.1設(shè)計特點(diǎn)

在軟件設(shè)計中,一般采用模塊化的程序設(shè)計方法,它具有明顯的優(yōu)點(diǎn)。把一個多功能的復(fù)雜的程序劃分為若干個簡單的、功能單一的程序模塊,有利于程序的設(shè)計和調(diào)試,優(yōu)化和分工,提高了程序的閱讀性和可靠性,使程序的結(jié)構(gòu)層次一目了然。
應(yīng)用系統(tǒng)的程序由包含多個模塊的主程序和各種子程序組成。各程序模塊都要完成一個明確的任務(wù),實(shí)現(xiàn)某個具體的功能,如:計數(shù)、延時、和顯示等,在具體需要時調(diào)用相應(yīng)的模塊即可。
功能描述:用四位LED數(shù)碼管顯示時間。一個"開始/暫停"鍵,一個"復(fù)位"鍵,一個“記錄”鍵,可同時記錄八個相對獨(dú)立的時間;一個“上翻”鍵,一個“下翻”鍵,查看八個不同的計時值。五個按鍵分別通過五個端口控制秒表的五個功能。
3.2程序流程圖
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.gif


3.3程序源代碼
/*
1、程序目的:使用定時器學(xué)習(xí)秒表計時,記錄8組數(shù)據(jù),通過上翻、下翻鍵查看記錄的數(shù)據(jù)
2、硬件要求:數(shù)碼管、晶振12M
*/
#include <reg52.h>
Code unsigned chartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰數(shù)碼管 0-9
code unsigned chartab1[]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF} ;//共陰數(shù)碼管0-9帶小數(shù)點(diǎn)
sbit key1 = P1^0;         //開始、暫停
sbit key2 = P1^1;         //記數(shù)
sbit key3 = P1^2;         //上翻
sbit key4 = P1^3;         //下翻
sbit key5 = P1^4;         //清零
static unsigned char     ms,sec;
static unsigned char Sec[8],Ms[8];
static int i ,j;
void delay(unsigned int cnt)   //延時程序
{
while(--cnt);
}
                        
void main()
{
    unsignedchar key3_flag=0,key4_flag=0;
   TMOD |=0x01;//定時器0 10ms in 12M crystal 用于計時
    TH0=0xd8;
    TL0=0xf0;
    ET0=1;
    TR0=0;
   TMOD |=0x10; //定時器1用于動態(tài)掃描
    TH1=0xF8;
    TL1=0xf0;
    ET1=1;
    TR1=1;
    EA=1;
    sec=0;//初始化
    ms=0;
   P1=0xff;
    i=0;
    j=0;
start:
while(1)
  {     //開始、暫停
      if(!key1)          //判斷是否按下
      {
       delay(50);     //去抖
       if(!key1)
       while(!key1)      //等待按鍵釋放
       {;}
       TR0=!TR0;  
       }
        //記錄
      if(!key2)            //判斷是否按下
      {
       delay(50);       //去抖
       if(!key2)
       {   while(!key2)  //等待按鍵釋放
            {;}                 
           if(i==8)        //8組數(shù)據(jù)記錄完畢
               {TR0=0;goto start;}
            
           Sec=     sec;    //將數(shù)據(jù)存入數(shù)組
           Ms=ms;
           i++;
       }
      }
        //上翻
      if(!key3)   
      {
       delay(50);
        if(!key3)
         { while(!key3)
           {;}
           TR0=0;
           key3_flag=1;      //按鍵3標(biāo)志
           if(j==i)
               goto start;
           else
              if(key4_flag)
              j+=2;
              key4_flag=0;   
           sec=Sec[j];ms=Ms[j]; //顯示數(shù)組里的內(nèi)容
           j++;      
        }
       }
       //下翻
       if(!key4)  
       {
        delay(50);
       if(!key4)
       {
           while(!key4)
           {;}
           TR0=0;
           key4_flag=1;          //按鍵4標(biāo)志
           if(j<0)
              goto start;
           else
               if(key3_flag)
                  j-=2;
              key3_flag=0;
           sec=Sec[j];ms=Ms[j];       //顯示數(shù)組里的內(nèi)容
           j--;
       }   
       }
       //清零
       if(!key5)
       {
        delay(50);
       if(!key5)
       while(!key5)
       {;}
       TR0=0;
       ms=0;
       sec=0;
        for(i=0;i<8;i++)
       {
           Sec=0;Ms=0;
       }
       i=0;
       }
  }
}
/********************************/
/*     定時中斷1                */
/********************************/
void time1_isr(void) interrupt 3 using 0//定時器1用來動態(tài)掃描
{
   static unsigned char num;
    TH1=0xF8;//重入初值
    TL1=0xf0;
    switch(num)
    {
    case 0:    P2=0xfe;P0=tab[sec/10];break;//顯示秒十位
    case 1:    P2=0xfd;P0=tab1[sec%10];break;//顯示秒個位
    case 2:    P2=0xfb;P0=tab[ms/10];break;//顯示十位
    case 3: P2=0xf7;P0=tab[ms%10];break; //顯示個位
    default:break;
    }
    num++;
    if(num==4)
    num=0;
}
/********************************/
/*     定時中斷0                */
/********************************/
void tim(void) interrupt 1 using 1
{
TH0=0xd8;//重新賦值
TL0=0xf0;
  ms++;//毫秒單元加1
     if(ms==100)
     {
        ms=0;//等于100時歸零
        sec++;//秒加1      
        if(sec==60)
        {
            sec=0;//秒等于60時歸零
        }
     }}









































第四章 PROTEUS仿真
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg將以上程序清單導(dǎo)入先前做好的Proteus仿真電路,匯編之后,按
鍵開始進(jìn)行仿真。仿真結(jié)果如下:
下面顯示清零功能:
按下開始鍵后顯示
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image010.gif
按下清零鍵后顯示
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image012.gif
仿真結(jié)果描述:
按“開始”鍵,秒表開始計時;按“暫!辨I,秒表暫停計時;按記錄鍵,秒表記錄時間,共可記錄八個數(shù)值;按上翻下翻鍵,可查看這八個不同的計時值。

結(jié)論及進(jìn)一步設(shè)想:
根據(jù)實(shí)驗要求,本次課設(shè)基本完成了設(shè)計要求,由于秒表系統(tǒng)并不一定僅僅局限于計時,定時等功能,還可以進(jìn)行多項的擴(kuò)展,可以利用AT89C51強(qiáng)大的擴(kuò)展功能,進(jìn)一步豐富秒表的功能,例如可設(shè)定計時時間,倒計時等等眾多功能。單片機(jī)以其強(qiáng)大的功能和良好的兼容性可以更好地為我們服務(wù),通過查閱各種資料,多了解一些單片機(jī)有關(guān)知識,可以為以后的工作和學(xué)習(xí)生活創(chuàng)造更多的便利條件。









第五章 課程設(shè)計體會
通過本次課程設(shè)計,我深刻地認(rèn)識到自己有很多不足之處,比如在自主學(xué)習(xí)能力方面的不足,實(shí)際動手操作能力的不足等。這次的單片機(jī)課程設(shè)計是理論與實(shí)踐相結(jié)合的范例。該設(shè)計從頭到尾都要自己參與進(jìn)來,熟悉了整個設(shè)計流程才能更快地設(shè)計出方案并完成設(shè)計。
本次課程設(shè)計我主要負(fù)責(zé)硬件電路的設(shè)計和查閱相關(guān)資料。單片機(jī)課程早已結(jié)束,相關(guān)的知識已經(jīng)很模糊,導(dǎo)致我在設(shè)計硬件電路中遇到了不少麻煩。首先是不知從何入手。雖然小組討論后確定了秒表要實(shí)現(xiàn)的功能,可是沒有相關(guān)理論知識的熟知和實(shí)踐操作,畫出硬件設(shè)計圖對我而言毫無頭緒。查閱了與89C51單片機(jī)相關(guān)的資料也閱讀了其他人單片機(jī)數(shù)字秒表的設(shè)計,慢慢地我開始了解其中原理,一步步設(shè)計出了硬件電路的各個部分,如晶體振蕩電路,復(fù)位電路,按鍵電路,顯示電路。完成設(shè)計后需要運(yùn)用PROTEUS軟件進(jìn)行設(shè)計仿真,由于這是第一次接觸這個軟件,還不知怎樣運(yùn)用它,查閱該軟件的相關(guān)資料及看過網(wǎng)上的視頻后便開始著手畫圖,接觸后覺得還是挺簡單的。
這次的課程設(shè)計我與小組同學(xué)進(jìn)行了交流和討論,我們分工進(jìn)行設(shè)計,從搜索資料到硬件、軟件的調(diào)試,每一步、每一個細(xì)節(jié)都經(jīng)過我們自己的思考,我們共同討論各方案的比較選擇、硬件、軟件的設(shè)計和調(diào)試,最終拿出了我們的成果。在做的過程中不但加深了我們對單片機(jī)理論知識的認(rèn)識和理解還認(rèn)識到了這門學(xué)科在應(yīng)用方面的廣闊前景。
實(shí)踐是最有高度也是最能體現(xiàn)整體水平的整個設(shè)計過程中,我們不斷地探索,設(shè)計出了很多不一樣的硬件電路圖,寫過了很多不一樣的程序,正如設(shè)計中如何能使硬件電路圖簡單明了,程序簡單而準(zhǔn)確,如何能準(zhǔn)確的運(yùn)行,都是通過與同學(xué)老師的交流,慢慢摸索出來的。以上的不斷探索,使我們進(jìn)一步熟悉和掌握單片機(jī)內(nèi)部結(jié)構(gòu)和工作原理,了解單片機(jī)應(yīng)用系統(tǒng)設(shè)計的基本步驟和方法。通過利用AT89C51單片機(jī),理解單片機(jī)在自動化儀表中的作用以及掌握單片機(jī)的編程方法。通過設(shè)計一個簡單的實(shí)際應(yīng)用輸入及顯示模擬系統(tǒng),掌握單片機(jī)仿真軟件PROTEUS的使用方法。

第六章 參考文獻(xiàn)
3、《單片機(jī)C語言應(yīng)用程序設(shè)計》,第四版,馬忠梅主編,北京航空航天大學(xué)出版社
4、《單片機(jī)開發(fā)與典型工程項目實(shí)例詳解》,邊海龍、孫永奎編著,電子工業(yè)出版社
5、吳金戎,沈慶陽,郭庭吉. 8051單片機(jī)實(shí)踐與應(yīng)用[M]. 北京:清華大學(xué)出版社,2002
6、夏繼強(qiáng). 單片機(jī)實(shí)驗與實(shí)踐教程[M]. 北京:北京航空航天大學(xué)出版社, 2001
7、肖洪兵. 跟我學(xué)用單片機(jī)[M].北京:北京航空航天大學(xué)出版社,2002.8






140401016晉川明.doc

442 KB, 下載次數(shù): 7, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表