久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8994|回復: 4
打印 上一主題 下一主題
收起左側

51單片機電子跑表課程設計報告 含源代碼,原理圖,word文檔

[復制鏈接]
跳轉到指定樓層
樓主
ID:337138 發表于 2018-5-24 11:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
課程設計任務書

課題名稱

電子跑表的設計

姓    名

陳*

專業

測控技術

班級

1401

學號

04

指導老師

肖*

課程設計時間

(1-2周)

一、任務及要求

設計任務:

    利用單片機為核心設計一個多功能電子表,具有電時鐘和跑表功能。用做時鐘時,在顯示器上顯示時、分、秒,用做跑表時,顯示范圍00時00分00秒-23時59分59秒并具有跑表啟動和跑表復位功能鍵。當按下啟動按鈕跑表開始計時,按下停止按停止計時,當按下復位按鈕跑表回零。
設計要求:
  1)確定系統設計方案;
  2)進行系統的硬件設計;
  3)完成必要的參數計算與元器件選擇;
  4)完成應用程序設計;
  5)應用系統的硬件和軟件的調試。
二、進度安排
第一周:
周一:集中布置課程設計任務和相關事宜,查資料確定系統總體方案。
周二~周三:完成硬件設計和電路連接
周四~周日:完成軟件設計
第二周:
周一~周三:程序調試
周四~周五:設計報告撰寫。周五進行答辯和設計結果檢查。
三、參考資料
1、王迎旭等.單片機原理及及應用[M]. 2版.機械工業出版社,2012
2、胡漢才.單片機原理及其接口技術[M].3版.清華大學出版社,2010.
3、戴燦金.51單片機及其C語言程序設計開發實例[M].清華大學出版社,2010



目錄

第1章 總體方案設計            
1.1設計任務與要求            
1.2設計原理或者設計思路            
第2章 硬件電路設計
2.2顯示電路            
2.3控制電路            
第3章 軟件設計            
3.1系統主程序            
3.2系統子程序            
3.3中斷服務程序            
第4章 調試            
4.1系統調試方法            
4.2調試結果            
4.3調試中遇到的問題及其解決方法            
總結
附錄一
附錄二

第1章 總體方案設計

1.1設計任務與要求

1.1.1設計任務:

利用單片機為核心設計一個多功能電子表,具有電時鐘和跑表功能。用做時鐘時,在顯示器上顯示時、分、秒,用做跑表時,顯示范圍00時00分00秒-23時59分59秒并具有跑表啟動和跑表復位功能鍵。當按下啟動按鈕跑表開始計時,按下停止按停止計時,當按下復位按鈕跑表回零。
1.1.2設計要求:
  1)確定系統設計方案;
  2)進行系統的硬件設計;
  3)完成必要的參數計算與元器件選擇;
  4)完成應用程序設計;
  5)應用系統的硬件和軟件的調試。
1.2設計原理或者設計思路
電子跑表的電路由多個部分組成,如控制按鍵的輸入電路,單片機的時鐘電路,復位電路 ,顯示電路,秒表電路,LED顯示器段碼驅動電路,LED顯示器位碼驅動電路及秒表記錄電路組成。
本電子跑表采用AT89C52單片機為核心器件,AT89C52是一個低電壓,高性能CMOS8位單片機,片內含8k bytes的可反復擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數據存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準MCS-51指令系統,片內置通用8位中央處理器和Flash存儲單元,AT89C52單片機在電子行業中有著廣泛的應用。
AT89C52有40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內含2個外中斷口,3個16位可編程定時計數器,2個全雙工串行通信口,2 個讀寫口線,AT89C52可以按照常規方法進行編程,也可以在線編程。其將通用的微處理器和Flash存儲器結合在一起,特別是可反復擦寫的 Flash存儲器可有效地降低開發成本。
  將LED數碼管與單片機和開關連接,用于顯示時鐘與跑表。P3.2-P3.4分別接開關K1-K3,P3.5和P3.6接開關K4,P1.0-P1.5接LED數碼管輸出位碼,P0.0-P0.7輸出顯示段碼。電子跑表是利用單片機內部的定時器來實現的,首先設置單片機內部的一個定時器1對秒表數據處理,定時器0對時間數據處理。
在本設計中LED數碼顯示器采用的是共陰極接法,把發光二極管的陰極連在一起構成 公共陰極,使用時公共陰極接地,每個發光二極管的陽極通過電阻與輸入端相連。當陽極端輸入高電平時,段發光二極管就導通點亮,而輸入低電平時則不亮。
第2章 硬件電路設計            

2.1時鐘電路

單片機工作的時間基準是由時鐘電路提供的。在單片機的XTAL1和XTAL2兩個管腳,接一只晶振及兩只電容就構成了單片機的時鐘電路。

圖2.1.1  時鐘電路

圖2.1.2 單片機
2.2顯示電路
本設計顯示用的是四位七段顯示共陰數碼管,用來顯示時間及跑表參數,LED數碼管顯示器成本低,配置靈活,與單片機接口簡單,在單片機應用系統中廣泛應用。
為了將時間顯示在LED數碼管上,可采用靜態顯示法和動態顯示法,由于靜態顯示法需要譯碼器,數據鎖存器等較多硬件,可采用動態顯示法實現LED顯示,通過對每位數碼管的依次掃描,使對應數碼管亮,同時向該數碼管送對應的字碼,使其顯示數字。由于數碼管掃描周期很短和人眼的視覺暫留效應,使數碼管看起來總是亮的,從而實現了各種顯示。
LED顯示流程圖如下:


圖2.2.1  顯示程序流程圖
圖2.2.2  LED數碼顯示管
2.3控制電路
K1鍵:模式選擇,可以讓時鐘、秒表、時間設置及秒表的記錄進行切換;
K2鍵:加一、開始及暫停,設置時間設置時可以調節時和分加一,秒表記錄時可以開始和暫停;
K3鍵:切換和清零,當需要設置時間時,按下K3可以切換‘時’和‘分’;當顯示秒表時,K3具有清零功能;
K4鍵:記錄秒表,電路為秒表功能時,按下K4可以記錄一組秒表數據,最多可以記錄20組數據。
                           圖2.3  開關控制電路

第3章 軟件設計

3.1系統主程序
主要進行定時器的初始化編程,然后反復調用顯示子程序的方法,等待中斷的到來。K1是模式選擇開關,當K1沒有按下時,數碼管表示時間;當K1第一次按下時,數碼管表示秒表;當K1第二次按下時,數碼管表示時間設置,并可以閃爍定位;當K1第三次按下時,數碼管顯示秒表記錄。
主程流程圖如下:單片機源程序如下:

圖3.1 主程序流程圖

3.2系統子程序
子程序包括時鐘設置顯示程序,時鐘運行顯示程序,時鐘溢出入口程序,跑表暫停,跑表記錄數據程序。
3.2.1顯示時鐘模式
如果K1=0時,程序設定為12.00.00起始計時,通過計數方式進行滿60秒分鐘位進一,滿60分小時位進一,滿24小時小時位清零。
3.2.2時間設置模式
如果K1=2時,先判斷是否為時間設置模式,再判斷K2是否按下,需要判斷是否為誤按,所以需要延時消抖,然后檢測用戶需要設置時還是分。
設置分,則跳到59之后重新賦值為0;
設置時,則跳到23之后重新賦值為0 。
K3每按一次Set0取反,時分切換,Set0為0時設置‘分’,Set0為1時設置‘時’。設置時間時用if語句實現分和鐘以0.5秒的頻率閃爍。
3.2.3秒表模式
如果K1=1時,先判斷是否為秒表模式,再判斷K2是否按下,需要判斷是否為誤按,所以需要延時消抖,K2每按一次TR1取反,暫停或開始定時器1,達到暫停或開始秒表的目的。當K4按下時秒表記錄一組數據。當K3按下時清除所有秒記錄數據,并停止定時器1。
3.2.4秒表記錄顯示模式
如果K1=3時,先判斷是否為秒表記錄顯示模式,再判斷K2是否按下,需要判斷是否為誤按,所以需要延時消抖,將秒表的記錄分為4組,可存20組數據。當K3按下時秒表所有數據清零,并停止定時器1。
定時器1函數對于秒表數據處理,每兩次循環進行一次操作,這樣秒表1(1/10秒位)每加1次為0.1s。當秒表1(1/10秒位)加到10時,重新賦值為0,此時秒表2(秒位)開始增加;當秒表2(秒位)加到60時,重新賦值為0,此時秒表3(分位)開始增加;當秒表3(分位)加到60時,重新賦值為0,此時秒表4(時位)開始增加;當秒表4(時位)加到10時,重新賦值為0。
定時器0函數每溢出10次Time0_bit取反一次,時間間隔為0.5秒閃爍一次,以達到時間設置模式時,分和時的閃爍。
3.3中斷服務程序
中斷服務程序的作用是進行計時操作,定時器0和定時器1都選擇第1種工作方式。定時器0和定時器1裝初值,定時50ms。

中斷服務程序流程圖如下:

圖3.3  中斷程序流程圖
第4章 調試4.1系統調試方法
本次課程設計采用的是Proteus仿真軟件進行電路的仿真,編程使用Keil生成可執行文件加載到單片機中,通過對各個模塊程序的單步或跟蹤調試,使程序正確,最后統調程序,并生成相應的*.hex文件。進行程序的運行和調試,觀察顯示結果,根據顯示的結果和課題的要求再修改程序,再運行查找錯誤,直到滿足要求。
4.2調試結果
K1鍵表示模式選擇,可以讓時鐘、秒表、時間設置及秒表的記錄進行切換;
K2表示加一、開始及暫停,設置時間設置時可以調節時間,秒表記錄時可以開始和暫停;
K3表示切換和清零,當需要設置時間時,按下K3可以切換‘時’和‘分’;當顯示秒表時,K3具有清零功能;
K4表示記錄秒表,電路為秒表功能時,按下K4可以記錄一組秒表數據。

          圖4.2.1  秒表時的調試結果
       圖4.2.2  時鐘調試結果


4.3調試中遇到的問題及其解決方法
按下K4記錄秒表數據時,當記錄次數大于20時,還是會繼續保存數據,但由于AT89C52單片機內存不夠,保存次數多了就會出現亂碼。發現這個問題后小組成員檢查程序是否有錯,然后在同學的幫助下修改了程序。
總結
在課程設計第一天,老師帶領我們焊電路板,為之后的實物連接做準備,有了上學期電子實習的經驗,這次焊接很迅速,半天就焊好了兩塊電路板,在老師的幫助下順利仿真。
課程設計開始幾天,基本上沒有收獲,不知從何下手,不知所措。為了看得更遠,,不妨站在前人的肩膀上,我在整體思路模糊的情況下,在網上找資料。也自己研究了一下Proteus仿真軟件的使用,仔細研究AT89C52芯片的主要功能及管腳接法,這也就為后面比較成功的仿真出結果打下了基礎。隨著涉獵的點滴積累,我對電子跑表的設計方案已經慢慢醞釀而成,有了方向和不少知識儲備后,在接下來的幾天,幾乎每天都有突破,雖然有時只是一句程序的修改或誕生,但那種收獲一直激勵著我。當然在設計過程中也遇到了一些問題,比如秒表記錄次數超過20次后會出現亂碼情況,在老師的指導下,經過一次又一次的思考,一遍又一遍的檢查,我終于發現了問題所在,也暴露了前期我在這方面的知識欠缺和經驗不足。實踐才是檢驗真理的唯一標準,唯有通過親自動手才能令我們掌握的知識不再是紙上談兵的東西。
    經過一周的課程設計,我收獲頗多,有深刻的心得體會,實踐讓我們受益匪淺。首先是單片機方面,為了順利完成程序的編寫,我又撿起了大一所學習的C語言知識。其次鍛煉了小組合作的能力,合理的分工讓我們組的課程設計按時完成,并對本專業的課程充滿了濃厚的興趣,相信有了興趣,我在以后對本專業的學習會更加得心應手。在這次過程中我們也曾灰心也曾茫然,也曾不知所措,從一開始的自信滿滿,到最后的緊張繁雜,所有這些都令我回味無窮,這已經成為我人生道路上的寶藏。我想今后的學習和工作也是這樣的,汗水見證成功。
附錄一
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code Tab0[]=                            //定義數碼管數組,沒有小數點
  5. {
  6.               0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
  7. };
  8. uchar code Tab1[]=                            //定義數碼管數組,有小數點
  9. {            
  10.               0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef
  11. };
  12. uchar miaobiao[80];                            //定義存儲秒表數組
  13. sbit K1=P3^2;                                          //模式選擇鍵,本程序三種模式,分別是時間顯示、秒表、時間設置
  14. sbit K2=P3^3;                                          //設置時間時加一/開始(暫停)秒表按鍵
  15. sbit K3=P3^4;                                          //切換設置位/清零秒表按鍵
  16. sbit K4=P3^5;                                          //秒記錄
  17. void Delay(uchar x);                            //延時函數
  18. void Display0();                             //時間顯示函數
  19. void Display1();                             //秒表顯示函數
  20. void Display2();                            //時間設置顯示函數
  21. void Display3();                            //保存的秒表顯示函數
  22. void Init();                                           //中斷初始化函數
  23. void Mode_K1();                                          //模式切換函數
  24. void KEY_MiaoBiao();              //檢測秒表操作按鍵
  25. void KEY_Time_Set();              //檢測時間設置按鍵
  26. void KEY_MiaoBiao_keep();              //檢測秒表記錄顯示按鍵操作            
  27. uchar Hours=12,Minutes=00,seconds=00;                            //分別定義三個變量表示時、分、秒
  28. uchar Time0_bit=0;                                          //用于定時器0的溢出標志
  29. bit Set_Time=0;                                                        //設置時 閃爍時長的標志位
  30. bit Set0=0;                                                                      //設置時間標志,確定是設置‘分’還設置‘時’
  31. uchar K1_bit=0,m=0;                                                          //用于模式切換的標志
  32. uchar Miao_Biao0,Miao_Biao1,Miao_Biao2,Miao_Biao3,Miao_Biao4;                            //用于秒表的變量
  33. uchar Miao_Biao11,Miao_Biao22,Miao_Biao33,Miao_Biao44;    //用于保存秒表顯示時的變量
  34. void main()
  35. {
  36.               Init();                                                                                                                                            //中斷初始化
  37.               while(1)                                                                                                                              //死循環
  38.                             {
  39.                                           Mode_K1();                                                                                                  //模式掃描
  40.                                           switch(K1_bit)                                                                                    //模式選擇
  41.                                                         {
  42.                                                                       case 0:
  43.                                                                                     {
  44.                                                                                                   Display0();                                          //顯示時間                                                                                                               
  45.                                                                                                   break;
  46.                                                                                     }
  47.                                                                       case 1:
  48.                                                                                     {
  49.                                                                                                   Display1();                                          //顯示秒表
  50.                                                                                                   KEY_MiaoBiao();                            //掃描秒表操作
  51.                                                                                                   break;
  52.                                                                                     }
  53.                                                                       case 2:
  54.                                                                                                   {
  55.                                                                                                                 Display2();              //設置時間時的顯示程序,可閃爍定位
  56.                                                                                                                 KEY_Time_Set();              //掃描按鍵
  57.                                                                                                                 break;
  58.                                                                                                   }
  59.                                                            case 3:
  60.                                                                                     {
  61.                                                                                                   Display3();                                          //顯示秒表
  62.                                                                                                   KEY_MiaoBiao_keep();                            //掃描秒表操作
  63.                                                                                                   break;
  64.                                                                                     }
  65.                                                         }
  66.                             }
  67. }
  68. void KEY_Time_Set()                                                                                                                   //設置時間時的按鍵掃描函數
  69. {
  70.               if(K1_bit==2)                                                                                                                  //判斷是否為時間設置模式
  71.                             {
  72.                                           if(K2==0)                                                                                                  //K2有按下(下同)
  73.                                                         {
  74.                                                                       Delay(10);                                                                         //延時消抖(下同)
  75.                                                                       if(K2==0)                                                                      //再次檢測是否為誤按
  76.                                                                                     {
  77.                                                                                                   if(Set0==0)                                          //檢測是設置‘時’還是分,Set0為0時設置‘分’,Set0為1時設置‘時’
  78.                                                                                                                 {
  79.                                                                                                                               Minutes++;               //‘分’加1
  80.                                                                                                                               if(Minutes==60)              //當'分'加到60時,重新賦值0
  81.                                                                                                                                             Minutes=0;
  82.                                                                                                                 }
  83.                                                                                                   else
  84.                                                                                                                 {
  85.                                                                                                                               Hours++;                  //‘時’加1
  86.                                                                                                                               if(Hours==24)                //當'時'加到24時,重新賦值0
  87.                                                                                                                                             Hours=0;
  88.                                                                                                                 }
  89.                                                                                                   while(!K2);//按鍵松開檢測,消除松開按鍵時的抖動干擾
  90.                                                                                     }
  91.                                                         }
  92.                                           if(K3==0)
  93.                                                         {
  94.                                                                       Delay(10);
  95.                                                                       if(K3==0)
  96.                                                                                     {
  97.                                                                                                   Set0=~Set0;              //K3每按一次Set0取反,時分切換,Set0為0時設置‘分’,Set0為1時設置‘時’
  98.                                                                                                   while(!K3);
  99.                                                                                     }            
  100.                                                         }
  101.                             }
  102. }
  103. void KEY_MiaoBiao()                                                                                                                //檢測秒表按鍵操作
  104. {
  105.               if(K1_bit==1)                                                                                                                //判斷是否為秒表模式
  106.                             {
  107.                                           if(K2==0)
  108.                                                         {
  109.                                                                       Delay(10);
  110.                                                                       if(K2==0)
  111.                                                                                     {
  112.                                                                                                   TR1=~TR1;                  //K2每按一次TR1取反,0暫停或1開始定時器1,達到暫停或開始秒表的目的
  113.                                                                                                   while(!K2);
  114.                                                                                     }
  115.                                                         }
  116.                                                         if(K4==0)                                                                                       //當K4按下時秒表記錄一組數據
  117.                                                         {
  118.                                                                       Delay(10);
  119.                                                                       if(K4==0)
  120.                                                                       {
  121.                                                                                     miaobiao[4*m]=Miao_Biao1;
  122.                                                                                     miaobiao[4*m+1]=Miao_Biao2;
  123.                                                                                     miaobiao[4*m+2]=Miao_Biao3;
  124.                                                                                     miaobiao[4*m+3]=Miao_Biao4;
  125.                                                                                     m++;
  126.                                                                                     while(!K4);
  127.                                                                       }            
  128.                                                         }
  129.                                           if(K3==0)
  130.                                                         {
  131.                                                                       Delay(10);
  132.                                                                       if(K3==0)                            //當K3按下時秒表所有數據清零,并停止定時器1
  133.                                                                                     {
  134.                                                                                                   uchar i;
  135.                                                                                                   for(i=0;i<81;i++)
  136.                                                                                                   {
  137.                                                                                                                 miaobiao[i]=0;              //清除所有秒記錄數據
  138.                                                                                                   }
  139.                                                                                                   TR1=0;                                                        //停止定時器1
  140.                                                                                                   Miao_Biao0=0;                             //清零數據
  141.                                                                                                   Miao_Biao1=0;
  142.                                                                                                   Miao_Biao2=0;
  143.                                                                                                   Miao_Biao3=0;
  144.                                                                                                   Miao_Biao4=0;
  145.                                                                                                   m=0;                                                        //秒表記錄清零
  146.                                                                                                   while(!K3);
  147.                                                                                     }
  148.                                                         }
  149.                             }
  150. }
  151. void KEY_MiaoBiao_keep()                                                                                                                //檢測秒表記錄顯示按鍵操作
  152. {
  153.               if(K1_bit==3)                                                                                                                //判斷是否為秒表記錄顯示模式
  154.                             {
  155.                                                                                    
  156.                                           if(K2==0)
  157.                                                         {
  158.                                                                       Delay(10);
  159.                                                                       if(K2==0)
  160.                                                                                     {
  161.                                                                                                   m++;
  162.                                                                                                   while(!K2);
  163.                                                                                     }
  164.                                                         }
  165.                                           Miao_Biao11=miaobiao[4*m];
  166.                                           Miao_Biao22=miaobiao[4*m+1];
  167.                                           Miao_Biao33=miaobiao[4*m+2];
  168.                                           Miao_Biao44=miaobiao[4*m+3];
  169. if(K3==0)
  170.                                                         {
  171.                                                                       Delay(10);
  172.                                                                       if(K3==0)                            //當K3按下時秒表所有數據清零,并停止定時器1
  173.                                                                                     {
  174.                                                                                                     uchar i;
  175.                                                                                                   for(i=0;i<81;i++)
  176.                                                                                                   {
  177.                                                                                                                 miaobiao[i]=0;              //清除所有秒記錄數據
  178.                                                                                                   }
  179.                                                                   while(!K3);
  180.                                                                                     }
  181.                                                         }
  182.                             }
  183. }
  184. void Mode_K1()              //模式選擇鍵,本程序三種模式,分別是時間顯示、秒表、時間設置
  185. {
  186.               if(K1==0)
  187.                             {
  188.                                           Delay(10);
  189.                                           if(K1==0)
  190.                                                         {
  191.                                                                       K1_bit++;
  192.                                                         //              if(K1_bit==1) m=0;
  193.                                                                       if(K1_bit==3) m=0;
  194.                                                                       if(K1_bit==4)
  195.                                                                                     {
  196.                                                                                                   K1_bit=0;
  197.                                                                                     }
  198.                                                                       while(!K1);


  199. /***********************************************************************
  200. *************當K1_bit為0時顯示時鐘,為1時進入秒表,*********************
  201. *******************為2時進入時間設置模式,3時進入秒表記錄顯示***********
  202. ***********************************************************************/
  203.                                                         }
  204.                             }
  205. }
  206.               void Time1() interrupt 3                                            //定時器1函數
  207. {
  208.               TH1=(65536-50000)/256;                                          //重裝初值
  209.               TL1=(65536-50000)%256;
  210. Miao_Biao0++;
  211.               if(Miao_Biao0==2)                                                        //以下為秒表數據處理,每兩次循環進行一次操作
  212.                             {
  213.                                           Miao_Biao0=0;
  214.                                           Miao_Biao1++;                                          //Miao_Biao1每加1次為100ms
  215.                                           if(Miao_Biao1==10)
  216.                                                         {
  217.                                                                       Miao_Biao1=0;
  218.                                                                       Miao_Biao2++;
  219.                                                                       if(Miao_Biao2==60)
  220.                                                                                     {
  221.                                                                                                   Miao_Biao2=0;
  222.                                                                                                   Miao_Biao3++;
  223.                                                                                                   if(Miao_Biao3==60)
  224.                                                                                                                 {
  225.                                                                                                                               Miao_Biao3=0;
  226.                                                                                                                               Miao_Biao4++;
  227.                                                                                                                               if(Miao_Biao4==10)
  228.                                                                                                                                             Miao_Biao4=0;
  229.                                                                                                                 }
  230.                                                                                     }
  231.                                                         }
  232.                             }
  233. }
  234. void Time0() interrupt 1                                                                       //定時器0函數
  235. {
  236.               TH0=(65536-50000)/256;                                                                         //重裝初值
  237.               TL0=(65536-50000)%256;
  238.               Time0_bit++;
  239.               if((Time0_bit%10)==0)                                                                      //每溢出10次Time0_bit取反一次
  240.                             Set_Time=~Set_Time;                                                                        //0.5秒閃爍一次
  241. if(Time0_bit==20)                                                                                    //以下為時間數據處理
  242.                             {
  243.                                           Time0_bit=0;
  244.                                           seconds++;
  245.                                           if(seconds==60)
  246.                                                         {
  247.                                                                       seconds=0;
  248.                                                                       Minutes++;
  249.                                                                       if(Minutes==60)
  250.                                                                                     {
  251.                                                                                                   Minutes=0;
  252.                                                                                                   Hours++;
  253.                                                                                                   if(Hours==24)
  254.                                                                                                                 {
  255.                                                                                                                               Hours=0;
  256.                                                                                                                 }
  257.                                                                                     }
  258.                                                         }
  259.                             }
  260. }
  261. void Init()                                                                                                  //中斷初始化函數
  262. {
  263.               EA=1;                                                                                                  //開總中斷
  264.               TMOD=0X11;                                                                                      //定時器工作方式選擇,定時器0和定時器1都選擇第1種工作方式
  265.               TH0=(65536-50000)/256;                                          //定時器0裝初值,定時50ms
  266.               TL0=(65536-50000)%256;
  267.               ET0=1;                                                                                                  //開定時器0開關
  268.               TR0=1;                                                                                                     //開定時器0小開關
  269.               TH1=(65536-50000)/256;                                          //定時器1裝初值,定時50ms
  270.               TL1=(65536-50000)%256;
  271.               ET1=1;                                                                                                    //開定時器1開關
  272.               TR1=0;                                                                                                  //關定時器1小開關
  273. }
  274. void Display3()                                          //顯示保存的秒表
  275. {
  276.               P0=Tab0[Miao_Biao11%10];                            //顯示1/10秒的個位
  277.               P1=0xdf;                                                                      //段選
  278.               Delay(10);                                                                      //延時
  279.               P0=0X00;                                                                      //消隱
  280.               P0=Tab1[Miao_Biao22%10];                            //顯示秒的個位,需要加上小數點做分隔符
  281.               P1=0xef;                                                                      //段選
  282.               Delay(10);                                                                      //延時
  283.               P0=0X00;                                                                      //消隱
  284.               P0=Tab0[Miao_Biao22/10];                            //顯示秒的十位
  285.               P1=0xf7;                                                                      //段選
  286.               Delay(10);                                                                      //延時
  287.               P0=0X00;                                                                      //消隱
  288.               P0=Tab1[Miao_Biao33%10];                            //顯示分的個位,需要加上小數點做分隔符
  289.               P1=0xfb;                                                                      //段選
  290.               Delay(10);                                                                      //延時
  291.               P0=0X00;                                                                      //消隱
  292.               P0=Tab0[Miao_Biao33/10];                            //顯示分的十位
  293.               P1=0xfd;                                                                      //段選
  294.               Delay(10);                                                                      //延時
  295.               P0=0X00;                                                                      //消隱
  296.               P0=Tab1[Miao_Biao44%10];                            //顯示時的個位,需要加上小數點做分隔符
  297.               P1=0xfe;                                                                      //段選
  298.               Delay(10);                                                                      //延時
  299.               P0=0X00;                                                                      //消隱
  300. }
  301. void Display2()                                                                                                  //時間設置時的顯示函數            
  302. {
  303.               if(Set0==0)                                                                                                  //判斷是否為設置‘時’還是‘分’
  304.                             {
  305.                                           P0=Tab0[seconds%10];                            //顯示秒的個位
  306.                                           P1=0xdf;                                                                      //段選
  307.                                           Delay(10);                                                                      //延時
  308.                                           P0=0X00;                                                                      //消隱
  309.                                           P0=Tab0[seconds/10];                            //顯示秒的十位
  310.                                           P1=0xef;                                                                      //段選
  311.                                           Delay(10);                                                                      //延時
  312.                                           P0=0X00;                                                                      //消隱
  313.                                           if(Set_Time)                                                        //這個if語句實現分鐘以0.5秒的頻率閃爍
  314.                                                         {
  315.                                                                       P0=Tab1[Minutes%10];              //顯示分的個位,需要加上小數點做分隔符
  316.                                                                       P1=0xf7;                                                                      //段選
  317.                                                                       Delay(10);                                                                      //延時
  318.                                                                       P0=0X00;                                                                      //消隱
  319.                                                                       P0=Tab0[Minutes/10];                            //顯示分的十位
  320.                                                                       P1=0xfb;                                                                      //段選
  321.                                                                       Delay(10);                                                                      //延時
  322.                                                                       P0=0X00;                                                                      //消隱
  323.                                                         }
  324.                                           else
  325.                                                         {
  326.                                                                       P0=0x00;                            //顯示分的個位,需要加上小數點做分隔符
  327.                                                                       P1=0xf7;                                                                      //段選
  328.                                                                       Delay(10);                                                                      //延時
  329.                                                                       P0=0X00;                                                                      //消隱
  330.                                                                       P0=0x00;                                      //顯示分的十位
  331.                                                                       P1=0xfb;                                                                      //段選
  332.                                                                       Delay(10);                                                                      //延時
  333.                                                                       P0=0X00;                                                                      //消隱
  334.                                                         }
  335.                                           P0=Tab1[Hours%10];              //顯示時的個位,需要加上小數點做分隔符
  336.                                           P1=0xfd;                                                                      //段選
  337.                                           Delay(10);                                                                      //延時
  338.                                           P0=0X00;                                                                      //消隱
  339.                                           P0=Tab0[Hours/10];                            //顯示時的十位
  340.                                           P1=0xfe;                                                                      //段選
  341.                                           Delay(10);                                                                      //延時
  342.                                           P0=0X00;                                                                      //消隱
  343.                             }
  344. else                                          //‘時’鐘閃爍
  345.                             {
  346.                                           P0=Tab0[seconds%10];                            //顯示秒的個位
  347.                                           P1=0xdf;                                                                      //段選
  348.                                           Delay(10);                                                                      //延時
  349.                                           P0=0X00;                                                                      //消隱
  350.                                           P0=Tab0[seconds/10];                            //顯示秒的十位
  351.                                           P1=0xef;                                                                      //段選
  352.                                           Delay(10);                                                                      //延時
  353.                                           P0=0X00;                                                                      //消隱
  354.                                           P0=Tab1[Minutes%10];                            //顯示分的個位,需要加上小數點做分隔符
  355.                                           P1=0xf7;                                                                      //段選
  356.                                           Delay(10);                                                                      //延時
  357.                                           P0=0X00;                                                                      //消隱
  358.                                           P0=Tab0[Minutes/10];                            //顯示分的十位
  359.                                           P1=0xfb;                                                                      //段選
  360.                                           Delay(10);                                                                      //延時
  361.                                           P0=0X00;                                                                      //消隱
  362.                                           if(Set_Time)                                                        //這個if語句實現‘時’鐘以0.5秒的頻率閃爍
  363.                                                         {
  364.                                                                       P0=Tab1[Hours%10];              //顯示時的個位,需要加上小數點做分隔符
  365.                                                                       P1=0xfd;                                                                      //段選
  366.                                                                       Delay(10);                                                                      //延時
  367.                                                                       P0=0X00;                                                                      //消隱
  368.                                                                       P0=Tab0[Hours/10];                            //顯示時的十位
  369.                                                                       P1=0xfe;                                                                      //段選
  370.                                                                       Delay(10);                                                                      //延時
  371.                                                                       P0=0X00;                                                                      //消隱
  372.                                                         }
  373.                                           else
  374.                                                         {
  375.                                                                       P0=0x00;                                          //顯示時的個位,需要加上小數點做分隔符
  376.                                                                       P1=0xFF;                                                                      //段選
  377.                                                                       Delay(10);                                                                      //延時
  378.                                                                       P0=0X00;                                                                      //消隱
  379.                                                                       P0=0X00;                                          //顯示時的十位
  380.                                                                       P1=0xFF;                                                                      //段選
  381.                                                                       Delay(10);                                                                      //延時
  382.                                                                       P0=0X00;                                                                      //消隱                                                      
  383.                                                         }                           
  384.                             }
  385. }
  386. void Display1()                                          //顯示秒表
  387. {
  388.               P0=Tab0[Miao_Biao1%10];                            //顯示1/10秒的個位
  389.               P1=0xdf;                                                                      //段選
  390.               Delay(10);                                                                      //延時
  391.               P0=0X00;                                                                      //消隱
  392.               P0=Tab1[Miao_Biao2%10];                            //顯示秒的個位,需要加上小數點做分隔符
  393.               P1=0xef;                                                                      //段選
  394.               Delay(10);                                                                      //延時
  395.               P0=0X00;                                                                      //消隱
  396.               P0=Tab0[Miao_Biao2/10];                            //顯示秒的十位
  397.               P1=0xf7;                                                                      //段選
  398.               Delay(10);                                                                      //延時
  399.               P0=0X00;                                                                      //消隱
  400.               P0=Tab1[Miao_Biao3%10];                            //顯示分的個位,需要加上小數點做分隔符
  401.               P1=0xfb;                                                                      //段選
  402.               Delay(10);                                                                      //延時
  403.               P0=0X00;                                                                      //消隱
  404.               P0=Tab0[Miao_Biao3/10];                            //顯示分的十位
  405.               P1=0xfd;                                                                      //段選
  406.               Delay(10);                                                                      //延時
  407.               P0=0X00;                                                                      //消隱
  408.               P0=Tab1[Miao_Biao4%10];                            //顯示時的個位,需要加上小數點做分隔符
  409.               P1=0xfe;                                                                      //段選
  410.               Delay(10);                                                                      //延時
  411.               P0=0X00;                                                                      //消隱
  412. }
  413. void Display0()                                          //顯示時鐘
  414. {
  415.               P0=Tab0[seconds%10];                            //顯示秒的個位
  416.               P1=0xdf;                                                                      //段選
  417.               Delay(10);                                                                      //延時
  418.               P0=0X00;                                                                      //消隱
  419.               P0=Tab0[seconds/10];                            //顯示秒的十位
  420.               P1=0xef;                                                                      //段選
  421.               Delay(10);                                                                      //延時
  422.               P0=0X00;                                                                      //消隱
  423.               P0=Tab1[Minutes%10];                            //顯示分的個位,需要加上小數點做分隔符
  424.               P1=0xf7;                                                                      //段選
  425.               Delay(10);                                                                      //延時
  426.               P0=0X00;                                                                      //消隱
  427.               P0=Tab0[Minutes/10];                            //顯示分的十位
  428.               P1=0xfb;                                                                      //段選
  429.               Delay(10);                                                                      //延時
  430.               P0=0X00;                                                                      //消隱
  431.               P0=Tab1[Hours%10];                                          //顯示時的個位,需要加上小數點做分隔符
  432.               P1=0xfd;                                                                      //段選
  433.               Delay(10);                                                                      //延時
  434.               P0=0X00;                                                                      //消隱
  435.               P0=Tab0[Hours/10];                                          //顯示時的十位
  436.               P1=0xfe;                                                                      //段選
  437.               Delay(10);                                                                      //延時
  438.               P0=0X00;                                                                      //消隱
  439. }
  440. void Delay(uchar x)                                                          //延時
  441. {
  442.               uchar i,j;
  443.               for(i=x;i>0;i--)
  444.                             for(j=110;j>0;j--);
  445. }
復制代碼

所有資料51hei提供下載:
單片機課設.doc (310.88 KB, 下載次數: 76)


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

使用道具 舉報

沙發
ID:359904 發表于 2018-6-27 08:59 | 只看該作者
有仿真嗎
回復

使用道具 舉報

板凳
ID:310313 發表于 2018-6-27 11:24 | 只看該作者
為什么我的顯示不一樣
回復

使用道具 舉報

地板
ID:677724 發表于 2019-12-31 13:13 | 只看該作者
電路圖有嗎?朋友
回復

使用道具 舉報

5#
ID:793352 發表于 2020-7-8 16:31 | 只看該作者

同問,是用CAD還是protues
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 五月激情婷婷六月 | 日韩欧美在线观看视频 | 草草草网站 | 国产精品久久精品 | 久久久久久久久精 | 亚洲国产一区二区三区在线观看 | 亚洲天堂久久 | 国产精品国产三级国产aⅴ中文 | av香港经典三级级 在线 | 午夜视频在线播放 | 四虎影院免费在线播放 | 免费精品一区 | 九九免费视频 | 国产福利视频导航 | www.久久艹| 欧美在线播放一区 | 国产精品91视频 | 午夜天堂精品久久久久 | 99re视频在线观看 | 97色在线视频 | 成人久草 | 成人欧美一区二区 | 青青草原精品99久久精品66 | 日韩高清一区 | 91精品国产91久久久久久密臀 | 欧美性久久| 久久久影院 | 99精品在线| 在线播放中文字幕 | caoporn国产精品免费公开 | 久久久久久免费毛片精品 | 成人在线精品视频 | 少妇精品亚洲一区二区成人 | 日韩一区二区在线播放 | 九色一区| 日韩在线观看中文字幕 | 久久久久久999| 狠狠躁天天躁夜夜躁婷婷老牛影视 | 午夜精品久久 | 国产91久久久久蜜臀青青天草二 | 九九热在线免费视频 |