找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 28731|回復: 31
收起左側

單片機00~99秒表顯示全套資料

  [復制鏈接]
ID:122146 發(fā)表于 2017-12-14 13:43 | 顯示全部樓層 |閱讀模式
本帖最后由 snow_f 于 2017-12-14 16:14 編輯
一個課程設計,兩位秒表,用的AT89C51,附件有仿真,原理,源碼還有用Protel DXP畫的一部分。
0.png

Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.jpg

秒表設計
摘 要: 本設計以 AT89C51 單片機為主控模塊,利用 C 語言編寫兩位數(shù)碼管循環(huán)掃描動態(tài)顯示的專用程序來實現(xiàn)兩位數(shù)碼管動態(tài)顯示系統(tǒng),系統(tǒng)主要由按鍵模塊、復位模塊、外部時鐘電路模塊、數(shù)碼管顯示模塊構成。按鍵電路通過兩個獨立的開關控制數(shù)碼管計數(shù)的開始、停止和復位。復位電路由電容與按鍵的并聯(lián)來實現(xiàn)。時鐘通過外部 12M 的晶振來控制。兩位數(shù)碼管顯示由兩個共陽極的三極管進行驅動。 將 C 語言編寫的兩位數(shù)碼管動態(tài)顯示程序寫入單片機來控制 P0 口,使數(shù)碼管相應段點亮,同時利用人眼視覺暫留的特性和數(shù)碼管的余輝效應,在掃描頻率足夠高時,人眼無法感覺數(shù)碼管的變化,從而實現(xiàn)數(shù)碼的動態(tài)顯示。

目錄
1 設計背景 ........................................................................................................ 1
2 硬件系統(tǒng)設計方案........................................................................................ 1
2.1 硬件電路方案........................................................................................ 1
3 硬件電路設計 ................................................................................................ 2
3.1 單片機選型............................................................................................ 2
3.2 按鍵電路................................................................................................ 4
3.3 復位及振蕩電路.................................................................................... 4
3.4 顯示電路的選擇.................................................................................... 5
3.41 共陽極數(shù)碼管的顯示方法............................................................. 5
3.3.2 共陽極數(shù)碼管的驅動設計............................................................ 5
3.4 連接方式.............................................................................................. 6
4 軟件設計 ....................................................................................................... 7
4.1 匯編程序................................................................................................ 7
4.2 C 語言程序............................................................................................. 8
5 系統(tǒng)仿真結果 ............................................................................................. 12
6 致謝 .................................................................................錯誤!未定義書簽。
參考文獻 .............................................................................錯誤!未定義書簽。

1 設計背景
目前單片機滲透到我們生活的各個領域,幾乎很難找到哪個領域沒有單片機的蹤跡。導彈的導航裝置,飛機上各種儀表的控制,計算機的網(wǎng)絡通訊與數(shù)據(jù)傳輸,工業(yè)自動化過程的實時控制和數(shù)據(jù)處理,廣泛使用的各種智能 IC 卡,民用豪華轎車的安全保障系統(tǒng),錄像機、攝像機、全自動洗衣機的控制,以及程控玩具、電子寵物等等,這些都離不開單片機。更不用說自動控制領域的機器人、智能儀表、醫(yī)療器械了。因此,單片機的學習、開發(fā)與應用將造就一批計算機應用與智能化控制的科學家、工程師。
2 硬件系統(tǒng)設計方案
2.1 硬件電路方案
硬件原理框圖如下:
0.jpg
圖 2-1 硬件組成框圖
該電路的工作原理:單片機從穩(wěn)壓電路中獲得穩(wěn)定的+5V 電壓,接到+5V
端,提供穩(wěn)定的電壓; 單片機口通過電阻接到顯示電路的端口上; 單片機接復位
按鍵電路
復位電路
單片機 顯示電路
時鐘電路


電路,實現(xiàn)電路的復位; 以及單片機需要接晶振電路;整個電路實現(xiàn)循環(huán)動態(tài)顯
示數(shù)字
00~99.
3 硬件電路設計
3.1 單片機選型
MCS51 是指由美國 INTEL 公司生產的一系列單片機的總稱,這一系列單片機包括了很多品種,如 8031, 80518751, 80328052, 8752 等,其中 8051是最早最典型的產品,該系列其它單片機都是在 8051 的基礎上進行功能的增、減、改變而來的,所以人們習慣于用 8051 來稱呼 MCS51 系列單片機,而 8051是目前在我國最流行的單片機,所以很多場合會看到 8051 的名稱。本課題中用到的芯片就是 AT 系列中的 AT89C51 單片機芯片。AT89C51 是一個低電壓,高性能 CMOS 8 位單片機,片內含 4k bytes 的可反復擦寫的 Flash 只讀程序存儲器和 128 bytes 的隨機存取數(shù)據(jù)存儲器(RAM),器件采用 ATMEL 公司的高密度、非易失性存儲技術生產,兼容標準 MCS-51 指令系統(tǒng),內置功能強大的微型計算機的 AT89C51 提供了高性價比的解決方案。AT89C51 具有 PDIP、 PQFP/TQFP PLCC 等三種封裝形式,以適應不同產品的需求。它是一個低功耗高性能單片機, 40 個引腳, 32 個外部雙向輸入/輸出(I/O)端口,同時內含 2 個外中斷口, 2 16 位可編程定時計數(shù)器,2 個全雙工串行通信口, AT89C51 可以按照常規(guī)方法進行編程,也可以在線編程。其將通用的微處理器和 Flash 存儲器結合在一起,特別是可反復擦寫的 Flash 存儲器可有效地降低開發(fā)成本。
如圖所示,圖
3-1 AT89C51 單片機基本構造,其基本性能介紹如下:

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

3.2 按鍵電路
3-2 按鍵電路
按鍵
S1 和按鍵 S2 是控制位,分別接單片機的 P3.4 P3.7I/O 口。當按下
按鍵
S1 時數(shù)碼管計數(shù)開始,再次按下 S1 時數(shù)碼管停止計數(shù)并停留下當前結果;
當按下按鍵
S2 時清空數(shù)碼管顯示結果,重新計數(shù)。
3.3 復位及振蕩電路
圖 3-3 復位電路和振蕩電路
單片機復位是使 CPU 和系統(tǒng)中的其他功能部件都處在一個確定的初始狀

態(tài),并從這個狀態(tài)開始工作,在復位期間(即 RST 為高電平期間), P0 口為高組態(tài), P1P3 口輸出高電平;外部程序存儲器讀選通信號 PSEN 無效。地址鎖存信號 ALE 也為高電平。根據(jù)實際情況選擇如圖 3-3 所示的復位電路。該電路在最簡單的復位電路下增加了手動復位按鍵,在接通電源瞬間,電容 C1 C23pF。 加手動復位按鍵是為了避免死機時無法可靠復位。AT89C51 引腳 XTAL1 XTAL2 與晶體振蕩器及電容 C1、 C2 按圖 3-3 所示方式連接。晶振、電容 C1C2 及片內與非門(作為反饋、放大元件)構成了電容三點式振蕩器,電容 C1、 C2 取值 30pF。 復位電路用電容與按鍵的并聯(lián)來實現(xiàn),將它們并在一起,一端接高電平,另一端接地,從而實現(xiàn)高電平復位的功能。
3.4 顯示電路的選擇
秒表設計顯示電路可以考慮數(shù)碼管或 LCD 屏,由于秒表只要求顯示數(shù)字,
因此對顯示要求較為簡單, 如果選用
LCD 則較為復雜, 數(shù)碼管足以滿足要求。
3.41 共陽極數(shù)碼管的顯示方法
LED 數(shù)碼管是單片機控制系統(tǒng)中最常見的顯示器件之一,一般用來顯示處理結果或輸入輸出信號的狀態(tài)。數(shù)碼管顯示是一個系統(tǒng)工程中必不可少的人機交互環(huán)節(jié),因此關于數(shù)碼管的驅動也就是系統(tǒng)工程中的一個重要的環(huán)節(jié)。數(shù)碼管的驅動分為動態(tài)驅動和靜態(tài)驅動兩種。所謂靜態(tài)驅動,就是指無論多少位 LED 數(shù)碼管,同時處于顯示狀態(tài)。動態(tài)顯示驅動是指無論在任何時刻只有一個 LED 數(shù)碼管處于顯示狀態(tài),及單片機采用“掃描”方式控制各個數(shù)碼管輪流顯示。
3.3.2 共陽極數(shù)碼管的驅動設計
將數(shù)碼管每個 LED 燈對應單片機的一個 I/O 口。通過單片機的 P 口來控制LED 燈的亮和滅。 I/O 口之間互相獨立,需要用 I/O 口直接控制 LED。動態(tài)顯示將數(shù)碼管的每個引腳一對一連接在一起接單片機的數(shù)據(jù),而將各個數(shù)碼管的公共端單獨送至單片機的 I/O 口進行片選。此外,在此基礎上,用單片機與 74LS04
反向器來驅動數(shù)碼管,從而實現(xiàn)數(shù)碼管的動態(tài)顯示。
圖 3-4 數(shù)碼管顯示電路
如圖 3-3 所示,兩位數(shù)碼管分別由兩個 PNP 型三極管驅動,三極管的基極通過限流電阻接在單片機 P1.0、 P1.1,其中 P1.0 控制數(shù)碼管的個位, P1.1 控制數(shù)碼管的十位。數(shù)碼管各段除小數(shù)點段外其余七段(a-g)通過限流電阻接在單片機 P0 口(P0.0-P0.6),兩位數(shù)碼管顯示由單片機內部程序控制相應接口為低電平,從而實現(xiàn)從 00—99 動態(tài)循環(huán)顯示。例如:十位和個位顯示原理相同,謹以個位說明。當個位數(shù)碼管顯示 5 時, 5 在程序中查表對應的十六進制數(shù)為 92H,對應二進制為 10010010B,其中 P0.7、 P0.4、 P0.1 為高電平, DP、 e、 b 段熄滅,P0.6、 P0.5、 P0.3、 P0.2、 P0.0 為低電平, g、 f、 d、 c、 a 段點亮,則此時數(shù)碼管上顯示數(shù)字 5。
3.4 連接方式
單片機采用 P2 口的 I/O 來控制數(shù)碼管的各個引腳。復位鍵接到引腳 9 上,數(shù)碼管的位選通過三極管和電阻分別與單片機的引腳 1 和 39 相連,晶振與單片機的引腳 18 和 19 連接,高電平與 40 引腳連接供電, 20 引腳直接接地。
0.jpg
圖 3-5 硬件設計圖
4 軟件設計
4.1 匯編程序
匯編語言的優(yōu)點是可以表達非常底層的東西
l.可以直接存取寄存器和 I/O
2.編寫的代碼可以非常精確的被執(zhí)行
3.可以編寫出比一般編譯系統(tǒng)高效的代碼
4.可以作為不同語言或不同標準的接口缺點在于匯編語言是一個比較低級的語言
1.非常冗長單調,在 DOS 下編程時就可以體會到
2.易出 BUG,且調試困難
3.代碼不易維護
4.兼容性不好,與硬件關系非常緊密

8 / 14
與 C 語言相比沒有 C 語言簡單易用,且 C 語言的可讀性更高,因此此程序選
用 C 語言編程。
4.2 C 語言程序
采用 C 語言用編寫了兩位數(shù)碼管循環(huán)掃描動態(tài)顯示的專用程序。通過軟件的控制使兩位數(shù)碼管能從 00 計數(shù)到 99,再回到 00,依次進行循環(huán)。若在計數(shù)期間有復位高電平出現(xiàn)時,便重新從 00 開始計數(shù)。并有電源開關控制讓電路是否工作,且有指示燈指示電源是否正常。
程序流程圖如下:
0.jpg
圖 4-1 程序流程圖
程序如下:

5 系統(tǒng)仿真結果
經(jīng)過對不同方案的分析、比較、取舍,然后進行原理圖的設計與仿真, 再經(jīng)過軟件的調試等環(huán)節(jié)的操作,最終實現(xiàn)了讓數(shù)碼管在單片機的控制下循環(huán)顯示兩位數(shù) 00-99。并且在正常的計數(shù)過程中,若按下復位鍵后, 計數(shù)又重新從 00 開始計數(shù), 終現(xiàn)實的結果與預想的結果一致。
0.jpg
圖 5-2 仿真結果圖

單片機源程序如下:
  1. //制作:機械工程學院*****機械設計制造及其自動化專業(yè)//
  2. //作者:*****//
  3. //學號:************//
  4. //設計內容:基于51單片機控制的數(shù)碼管顯示0~99的秒表//

  5. //********************我是分割線********************//

  6. //借口配置說明//
  7. /*
  8. 開始按鍵位P2.0
  9. 復位按鍵P2.1
  10. */

  11. /*
  12. 數(shù)碼管位選驅動端口位P1.0和P2.0
  13. */

  14. //以下是程序正文//

  15. #include <reg52.h>
  16. #define uchar unsigned char   //宏定義
  17. #define uint unsigned int

  18. /*引腳定義*/
  19. sbit START=P2^0;           //開始、停止鍵 低電平有效
  20. sbit RST=P2^1;             //復位鍵

  21. /*定義全局變量*/               
  22. uint time;                           //時間變量

  23. /*數(shù)碼管字模,對應 0-9*/
  24. uchar code table[]={           
  25.                                         0x3f,0x06,0x5b,0x4f,
  26.                                         0x66,0x6d,0x7d,0x07,
  27.                                         0x7f,0x6f};

  28. /*延時函數(shù)*/
  29. void Delay(uint ms)                        //毫秒級延時函數(shù)
  30. {
  31.         uint  i, j;
  32.         for(i =ms; i>0; i--)
  33.                 for(j =110; j>0; j--);
  34. }

  35. /*中斷*/
  36. void time0() interrupt 1               
  37. {
  38.         uchar tt;
  39.         TH0 = 0x4c;                    //晶振11.0592Mhz  
  40.         TL0 = 0x00;                                
  41.         tt++;
  42.         if(tt == 20)
  43.                 {
  44.                         time++;
  45.                         if(time==99)         //到99后在從00開始        
  46.                                 time = 0;
  47.                                 tt = 0;                        
  48.                 }
  49. }

  50. /*顯示函數(shù)*/
  51. void Display(uchar sum)  
  52. {
  53.         uchar shi, ge;
  54.         P0  = 0x00;                                  //消影
  55.         P1  = 0x00;
  56.         shi = table[sum/10];
  57.         P0  = shi;
  58.         P1  = 0xfd;
  59.         Delay(5);

  60.         P0  = 0x00;                                  //消影
  61.         P1  = 0x00;
  62.         ge  = table[sum%10];
  63.         P0  = ge;
  64.         P1  = 0xfe;
  65.         Delay(5);
  66. }

  67. /*按鍵掃描*/
  68. void keyscan()
  69. {
  70.                 if(START==0)           //開始、停止
  71.                 {
  72.                         Delay(10);               //消抖
  73.                         if(START==0)
  74.                         {
  75.                                 TR0 =!TR0;                                
  76.                                 while(!START) Display(time);
  77.                         }
  78.                 }

  79.                 if(RST==0)                                //復位
  80.                 {
  81.                         Delay(10);                        //消抖
  82.                         if(RST==0)
  83.                         {
  84.                                 time=0;
  85.                                 TR0=0;
  86.                                 while(!RST)Display(time);
  87.                         }
  88.                 }
  89. }

  90. //主函數(shù)
  91. void main()         
  92. {
  93. ……………………

  94. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
秒表設計.zip (1.34 MB, 下載次數(shù): 429)


評分

參與人數(shù) 5黑幣 +87 收起 理由
lowsing + 12 很給力!
學習使我快樂呀 + 5 很給力!
353231318 + 5 淡定
神大人 + 5 贊一個!
admin + 60 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:340625 發(fā)表于 2018-5-29 15:19 | 顯示全部樓層
起大作用!
回復

使用道具 舉報

ID:346229 發(fā)表于 2018-6-6 16:08 | 顯示全部樓層

求分享pcb電路圖
回復

使用道具 舉報

ID:304613 發(fā)表于 2018-6-25 10:26 | 顯示全部樓層
剛好需要,不錯
回復

使用道具 舉報

ID:377200 發(fā)表于 2018-7-22 11:23 | 顯示全部樓層

剛好需要,不錯
回復

使用道具 舉報

ID:396367 發(fā)表于 2018-9-11 11:06 來自觸屏版 | 顯示全部樓層
可以用共陰極數(shù)碼管嗎,
回復

使用道具 舉報

ID:396367 發(fā)表于 2018-9-12 16:15 | 顯示全部樓層
延時函數(shù),i =ms是不是少個數(shù)?
回復

使用道具 舉報

ID:388870 發(fā)表于 2018-9-13 10:17 | 顯示全部樓層
謝謝分享!
回復

使用道具 舉報

ID:313328 發(fā)表于 2018-11-9 16:03 | 顯示全部樓層
好東西真火
回復

使用道具 舉報

ID:442343 發(fā)表于 2018-12-8 19:42 | 顯示全部樓層
初學,非常需要!
回復

使用道具 舉報

ID:437261 發(fā)表于 2018-12-9 18:12 | 顯示全部樓層
tyyhlw69 發(fā)表于 2018-9-11 11:06
可以用共陰極數(shù)碼管嗎,

程序里用的就是共陰極。
回復

使用道具 舉報

ID:443846 發(fā)表于 2018-12-11 10:05 | 顯示全部樓層
還可以
?梢杂
回復

使用道具 舉報

ID:445599 發(fā)表于 2018-12-13 13:53 | 顯示全部樓層
沒錢下載啊
回復

使用道具 舉報

ID:450147 發(fā)表于 2018-12-19 19:31 | 顯示全部樓層
正好學習需要,謝謝分享
回復

使用道具 舉報

ID:451360 發(fā)表于 2018-12-21 11:08 | 顯示全部樓層
給力帝
回復

使用道具 舉報

ID:47652 發(fā)表于 2019-1-13 00:09 | 顯示全部樓層
很詳細的資料
回復

使用道具 舉報

ID:250700 發(fā)表于 2019-1-31 16:09 | 顯示全部樓層
9999.png
#include<reg52.h>   // 單片機0000~9999秒表
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar bai,shi;
uint a1,a2;
sbit D1=P3^0;
sbit D2=P3^1;
sbit D3=P3^2;
sbit D4=P3^3;
sbit key=P3^5;
sbit key1=P3^7;
bit   j        ;
uint  y        ;
void main()
  {
  TMOD=0x01;
  TH0=(65536-10000)/256;
  TL0=(65536-10000)%256;
  EA=1;
  ET0=1;
  TR0=1;
  bai=0;
  shi=0;
  while(1)
    {
    if(key==0)
          {
          j=0;
          }
        if(key1==0)
          {
         j=1; a2=0;
          }
    }
  }
void timer0()interrupt 1
  {
  TH0=(65536-10000)/256;
  TL0=(65536-10000)%256;
  a1++;
  y++;
  if(a1==100)            //  100
    {
        a1=0;
        if(j==1)  a2++;
        if(a2>=10000) a2=0;    // 10000
        }
  D1 = 1; D2 = 1; D3 = 1; D4 = 1;
  if(y==1)
    {
    P1=table[a2%10000/1000];   //   10000
    D4=0;
    }
  if(y==2)
    {
    P1=table[a2%1000/100];   //  1000
    D3=0;
    }
  if(y==3)
    {
    P1=table[a2%100/10];   //  100
    D2=0;
    }
  if(y==4)
    {
    P1=table[a2%10];      //  10
    D1=0;
        y=0;
    }
  }

回復

使用道具 舉報

ID:542693 發(fā)表于 2019-5-20 11:30 | 顯示全部樓層
正好需要哈哈哈哈
回復

使用道具 舉報

ID:551504 發(fā)表于 2019-5-30 22:27 | 顯示全部樓層
求資源
回復

使用道具 舉報

ID:562477 發(fā)表于 2019-6-17 14:53 | 顯示全部樓層
正好需要,謝謝大佬
回復

使用道具 舉報

ID:350104 發(fā)表于 2019-11-22 15:27 | 顯示全部樓層
很好的分享  東西比較齊全
回復

使用道具 舉報

ID:661458 發(fā)表于 2019-12-11 21:44 | 顯示全部樓層
燒進單片機中為啥只顯示00
回復

使用道具 舉報

ID:697867 發(fā)表于 2020-2-25 11:24 來自觸屏版 | 顯示全部樓層
怎么下載?
回復

使用道具 舉報

ID:697925 發(fā)表于 2020-2-25 14:55 | 顯示全部樓層
太棒了 感謝樓主
回復

使用道具 舉報

ID:716872 發(fā)表于 2020-3-27 13:50 | 顯示全部樓層
有0到99.9的嗎
回復

使用道具 舉報

ID:724951 發(fā)表于 2020-4-8 17:57 | 顯示全部樓層
我也想下載然后贊一個
回復

使用道具 舉報

ID:741914 發(fā)表于 2020-4-30 18:29 | 顯示全部樓層
可以的,佩服
回復

使用道具 舉報

ID:741914 發(fā)表于 2020-4-30 18:31 | 顯示全部樓層
加油,支持
回復

使用道具 舉報

ID:770762 發(fā)表于 2020-6-7 13:55 來自觸屏版 | 顯示全部樓層
原理圖的下載電源下載口是那個?
回復

使用道具 舉報

ID:772089 發(fā)表于 2020-6-7 18:46 | 顯示全部樓層
寫得很好,對我用處很大,感謝樓主。。!
回復

使用道具 舉報

ID:783761 發(fā)表于 2020-6-19 07:43 | 顯示全部樓層
用處很大
回復

使用道具 舉報

ID:774195 發(fā)表于 2020-7-21 11:23 來自觸屏版 | 顯示全部樓層
樓主,你這個有沒有pcb板圖啊
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表