欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機00~99秒表顯示全套資料 [打印本頁]

作者: snow_f    時間: 2017-12-14 13:43
標題: 單片機00~99秒表顯示全套資料
本帖最后由 snow_f 于 2017-12-14 16:14 編輯
一個課程設(shè)計,兩位秒表,用的AT89C51,附件有仿真,原理,源碼還有用Protel DXP畫的一部分。


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


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

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

1 設(shè)計背景
目前單片機滲透到我們生活的各個領(lǐng)域,幾乎很難找到哪個領(lǐng)域沒有單片機的蹤跡。導(dǎo)彈的導(dǎo)航裝置,飛機上各種儀表的控制,計算機的網(wǎng)絡(luò)通訊與數(shù)據(jù)傳輸,工業(yè)自動化過程的實時控制和數(shù)據(jù)處理,廣泛使用的各種智能 IC 卡,民用豪華轎車的安全保障系統(tǒng),錄像機、攝像機、全自動洗衣機的控制,以及程控玩具、電子寵物等等,這些都離不開單片機。更不用說自動控制領(lǐng)域的機器人、智能儀表、醫(yī)療器械了。因此,單片機的學(xué)習(xí)、開發(fā)與應(yīng)用將造就一批計算機應(yīng)用與智能化控制的科學(xué)家、工程師。
2 硬件系統(tǒng)設(shè)計方案
2.1 硬件電路方案
硬件原理框圖如下:

圖 2-1 硬件組成框圖
該電路的工作原理:單片機從穩(wěn)壓電路中獲得穩(wěn)定的+5V 電壓,接到+5V
端,提供穩(wěn)定的電壓; 單片機口通過電阻接到顯示電路的端口上; 單片機接復(fù)位
按鍵電路
復(fù)位電路
單片機 顯示電路
時鐘電路


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

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

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

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

圖 3-5 硬件設(shè)計圖
4 軟件設(shè)計
4.1 匯編程序
匯編語言的優(yōu)點是可以表達非常底層的東西
l.可以直接存取寄存器和 I/O
2.編寫的代碼可以非常精確的被執(zhí)行
3.可以編寫出比一般編譯系統(tǒng)高效的代碼
4.可以作為不同語言或不同標準的接口缺點在于匯編語言是一個比較低級的語言
1.非常冗長單調(diào),在 DOS 下編程時就可以體會到
2.易出 BUG,且調(diào)試困難
3.代碼不易維護
4.兼容性不好,與硬件關(guān)系非常緊密

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

圖 4-1 程序流程圖
程序如下:

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

圖 5-2 仿真結(jié)果圖

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

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

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

  11. /*
  12. 數(shù)碼管位選驅(qū)動端口位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;             //復(fù)位鍵

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

  23. /*數(shù)碼管字模,對應(yīng) 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)                                //復(fù)位
  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黑下載附件…………
復(fù)制代碼

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



作者: 林上小恒    時間: 2018-5-29 15:19
起大作用啊!
作者: 11112222fsdg    時間: 2018-6-6 16:08
林上小恒 發(fā)表于 2018-5-29 15:19
起大作用!

求分享pcb電路圖
作者: a961122    時間: 2018-6-25 10:26
剛好需要,不錯
作者: LTY零    時間: 2018-7-22 11:23

剛好需要,不錯
作者: tyyhlw69    時間: 2018-9-11 11:06
可以用共陰極數(shù)碼管嗎,
作者: tyyhlw69    時間: 2018-9-12 16:15
延時函數(shù),i =ms是不是少個數(shù)?
作者: a704625084    時間: 2018-9-13 10:17
謝謝分享!
作者: feiji666    時間: 2018-11-9 16:03
好東西真火
作者: tdAtdA    時間: 2018-12-8 19:42
初學(xué),非常需要!
作者: 123123123水煮魚    時間: 2018-12-9 18:12
tyyhlw69 發(fā)表于 2018-9-11 11:06
可以用共陰極數(shù)碼管嗎,

程序里用的就是共陰極。

作者: 18777899    時間: 2018-12-11 10:05
還可以
。可以用

作者: lishichao    時間: 2018-12-13 13:53
沒錢下載啊

作者: yukinox    時間: 2018-12-19 19:31
正好學(xué)習(xí)需要,謝謝分享
作者: jingfeilong    時間: 2018-12-21 11:08
給力帝
作者: 榆林上校    時間: 2019-1-13 00:09
很詳細的資料
作者: GUELL    時間: 2019-1-31 16:09

#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;
    }
  }


作者: wh12    時間: 2019-5-20 11:30
正好需要哈哈哈哈
作者: ZZZZGH    時間: 2019-5-30 22:27
求資源
作者: 血族blood    時間: 2019-6-17 14:53
正好需要,謝謝大佬
作者: zhouwei0815    時間: 2019-11-22 15:27
很好的分享  東西比較齊全
作者: k2389497282    時間: 2019-12-11 21:44
燒進單片機中為啥只顯示00
作者: jjj0011    時間: 2020-2-25 11:24
怎么下載?
作者: 拉拉肥    時間: 2020-2-25 14:55
太棒了 感謝樓主
作者: lizheng0228    時間: 2020-3-27 13:50
有0到99.9的嗎
作者: Vimoi    時間: 2020-4-8 17:57
我也想下載然后贊一個
作者: 半懂即可    時間: 2020-4-30 18:29
可以的,佩服
作者: 半懂即可    時間: 2020-4-30 18:31
加油,支持
作者: 2018清    時間: 2020-6-7 13:55
原理圖的下載電源下載口是那個?
作者: GIN2069    時間: 2020-6-7 18:46
寫得很好,對我用處很大,感謝樓主。。。
作者: 志安    時間: 2020-6-19 07:43
用處很大
作者: 614220201    時間: 2020-7-21 11:23
樓主,你這個有沒有pcb板圖啊




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1