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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 29757|回復: 12
收起左側

基于51單片機的電子時鐘設計

  [復制鏈接]
ID:188271 發表于 2017-4-10 21:52 | 顯示全部樓層 |閱讀模式


《單片機原理及應用》
課程設計報告






    業:
    級:
    名:
指導教師:

0一* 年 ** 月 ** 日


        課程設計任務書
一、設計題目
LED數字顯示電子時鐘
二、設計要求
1、方案論證,確定總體電路原理圖。
2、元器件選擇,設計PCB圖(或用萬能電路實驗板搭線)。
3繪制程序流程圖,編寫C語言源程序。
4安裝調試,實現數字時鐘的基本功能,即能正確顯示時、分、秒;可調整時間;秒閃功能。
三、設計報告內容
1寫出設計方案(包括方案對比,方案確定),給出完整的電路原理圖和設計程序流程圖。
2、對所設計方案的實現進行全面分析。
3編程調試方法和程序清單。
4安裝調試過程,出現的各種現象,總結經驗和體會。
*5、進一步完善的設想。








        


.課程設計目的- 1 -
.課程設計題目描述和要求- 1 -
.課程設計報告內容- 1 -
3.1、設計思路        - 1 -
3.2、方案設計與論證        - 2 -
3.2.1數碼管顯示選擇方案        - 2 -
3.2.2數碼管驅動選擇方案        - 3 -
3.3、 設計原理、程序及流程圖        - 3 -
3.3.1流程圖        - 3 -
3.3.2電路原理圖        - 4 -
3.3.3 C語言程序及說明        - 4 -
3.4、protues仿真圖,及作品成型圖        - 12 -
3.4.1 protues 仿真圖        - 12 -
3.4.2實踐電路板照片        - 13 -
3.5安裝與調試結果        - 14 -
3.5.1電路安裝        - 14 -
3.5.2電路調試        - 15 -
3.5.3 軟件調試        - 15 -
3.5.4 性能測試        - 15 -
.總結- 15 -
參考書目- 16 -



LED數字顯示電子時鐘

.課程設計目的:
1、鞏固和加深對單片機原理知識的理解和運用;
2、進一步提高學生綜合運用所學知識的能力;
3、培養學生綜合分析問題、發現問題和解決問題的能力。

.課程設計題目描述和要求:
1、方案論證,確定總體電路原理圖。
2、元器件選擇,設計PCB圖(或用萬能電路實驗板搭線)。
3、繪制程序流程圖,編寫C語言源程序。
4、安裝調試,實現數字時鐘的基本功能,即能正確顯示時、分、秒;可調整時間;秒閃功能。

.課程設計報告內容:

3.1、設計思路:
3.1.1根據所需實現的功能畫出程序流程圖,如3.5所示。
3.1.2將電路按照3.6原理圖焊接起來,定義開關K1,K2,K3分別接單片機的P3.2,P3.2,P3.5引腳。
3.1.3用軟件延時對K1,K2,K3進行兩級防抖。啟動系統,中斷初始化,定時器0只用來做計時,定時器1根據需要可選擇進入定時模式或者計數模式。外部中斷1,2用來等待外部按鍵的按下。
3.1.4當先按下K1時,進入外部中斷0,主函數調用時間顯示函數,定時器1處于計數工作模式,num=num+1,num為1時按K2,K3對小時進行加減來調整小時位,num=2按K2,K3對分進行調整,當num=3按K2,K3對秒進行調整,當num=4時就對num進行清零,跳出時間調節。
3.1.5當先按下K2時,進入外部中斷1cmd=cmd+1,主函數調用秒表顯示函數,進入秒表狀態,此時將定時器1的工作模式改為計時,使其每10ms進行一次中斷,并設定當cmd位偶數時進行秒表計時,當cmd為奇數時停止秒表計時。K1用來對秒表進行清零,在秒表處于00-00-00狀態時,按K1退出秒表,進入時間顯示狀態。
3.2、方案設計與論證:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps9D48.tmp.png







1  系統整體框圖

整個系統用單片機作為中央控制器,由單片機執行采集芯片內部時鐘信號,時鐘信號通過單片機I/O口傳給單片機,單片機模塊控制驅動模塊驅動顯示模塊,通過顯示模塊來實現信號的輸出、LED的顯示及相關的控制功能。系統設有按鍵模塊用于對時間進行調整及擴展多個小鍵盤。
3.2.1數碼管顯示選擇方案
方案一:靜態顯示。靜態顯示,即當顯示器顯示某一字符時,相應的發光二極管恒定導通或截止。該方式每一位都需要一個8 位輸出口控制。靜態顯示時較小電流能獲得較高的亮度,且字符不閃爍。但因當所需顯示的位數較多時,靜態顯示所需的I/O口數較大,造成資源的浪費。
方案二:動態顯示。動態顯示,即各位數碼管輪流點亮,對于顯示器各位數碼管,每隔一段延時時間循環點亮一次。利用人的視覺暫留功能可以看到整個顯示,但須保證掃描速度足夠快,人的視覺暫留功能才可察覺不到字符閃爍。顯示器的亮度與導通電流、點亮時間及間隔時間的比例有關。調整參數可以實現較高穩定度的顯示。動態顯示節省了I/O口,降低了能耗。
從節省單片機芯片I/O口和降低能耗角度出發,本數字電子鐘數碼管顯示選擇設計采用方案二。
3.2.2數碼管驅動選擇方案
方案一:上拉電阻驅動方式。數碼管段碼與接有上拉電阻的單片機芯片I/O口相連,通過編程,單片機芯片即控制段碼電平的高低。該方式經費低,但實物制作較復雜。
方案二:7407芯片驅動方式。數碼管段碼與7407芯片B口相連,7407芯片A口與單片機芯片I/O口,通過編程,單片機芯片即可控制段碼電平的高低。該方式實物制作簡單,增強驅動數碼管段碼能力。
    從實物制作簡易程度與驅動數碼管段碼能力角度出發,本數字電子鐘數碼管驅動選擇設計采用方案二。

3.3、 設計原理、程序及流程圖:

3.3.1流程圖
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps9D68.tmp.png

3.3.2電路原理圖
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps9D69.tmp.png
3.3.3 C語言程序及說明
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar count=0,num=0,temp=0,cmd=0;
sbit LED=P1^0;
sbit H=P3^2;
sbit M=P3^3;

uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar sec=11,min=11,hour=11,a=0,b=0,c=0;         //定義時鐘的時 分 秒 以及秒表的 分 秒 10ms;

void delay(uint i)                                 //延時 2i ms;
{
   uint j;
   for(;i>0;i--)
   for(j=124;j>0;j--);
}

void init()                                                 //中斷初始化
{
   ET0=1;
   TMOD=0x51;
   TH0=(65536-25000)/256;
   TL0=(65536-25000)%256;

   ET1=1;
   TH1=0xff;
   TL1=0xff;

   IT0=1;
   IT1=1;

   TR0=1;
   TR1=1;
   EA=1;
}

void Bss()                                                 //兩級防抖
{
   H=1;M=1;                                        //調時按鈕防抖
   if(H==0)
   {
      delay(20);
          H=1;
          if(H==0)
          {
             delay(20);
                 H=1;
                 if(H==0)
                 {
                   EX0=1;                  
                  }
           }
        }
   if(M==0)                                                   //調分按鈕防抖
   {
      delay(20);
          M=1;
          if(M==0)
          {
             delay(20);
                 M=1;
                 if(M==0)
                 {
                   EX1=1;
                  }
           }
        }
}

void display()                                   //時鐘顯示
{
        P0=tab[hour/10%10];
        if(num==1 && temp==1)        P2=0xff;
        else        P2=0xfe;
        delay(1);
        P0=tab[hour%10];
        if(num==1 && temp==1)        P2=0xff;
        else        P2=0xfd;
        delay(1);
        P0=tab[min/10%10];
        if(num==2 && temp==1)        P2=0xff;
        else        P2=0xfb;
        delay(1);
        P0=tab[min%10];
        if(num==2 && temp==1)        P2=0xff;
        else        P2=0xf7;
        delay(1);
        P0=tab[sec/10%10];
        if(num==3 && temp==1)        P2=0xff;
        else        P2=0xef;
        delay(1);
        P0=tab[sec%10];
        if(num==3 && temp==1)        P2=0xff;
        else        P2=0xdf;
        delay(1);
}

void displaym()                                         //秒表顯示
{
    P0=tab[a/10%10];
        P2=0xfe;
        delay(1);
        P0=tab[a%10];
        P2=0xfd;
        delay(1);
        P0=tab[b/10%10];
        P2=0xfb;
        delay(1);
        P0=tab[b%10];
        P2=0xf7;
        delay(1);
        P0=tab[c/10%10];
        P2=0xef;
        delay(1);
        P0=tab[c%10];
        P2=0xdf;
        delay(1);
}

void T0_int() interrupt 1 using 1                        //中斷T0 用于計時
{
   TH0=(65536-25000)/256;
   TL0=(65536-25000)%256;
   count++;
   if((num != 0) && (count % 10 == 0))                //用于調時 數字閃爍
   temp=~temp;
   if(count%10==0)
   LED=~LED;
   if(count==20)
   {
      count=0;         
      sec=sec+1;
          if(sec==60)
          {
             sec=0;
                 min=min+1;
                 if(min==60)
                 {
                    min=0;
                        hour=hour+1;
                        if(hour==24)
                        hour=0;
                  }
           }
        }
}

void T1_int() interrupt 3 using 2        //中斷T1 用于 可在時間校準的減 與計時 之間 進行切換
{
   if(cmd != 0)                                //滿足條件  T1進入計時功能
   {
      TH1=(65536-5000)/256;
          TL1=(65536-5000)%256;
          if(cmd%2 == 0)
          {
            c=c+1;
            if(c==100)
            {
               c=0;
                   b=b+1;
                   if(b==60)
                   {
                      b=0;
                          a=a+1;
                    }
             }
           }         
        }
   else                                                //不滿足秒表條件,進入計數功能
   {
      TH1=0xff;
      TL1=0xff;
      switch(num)
      {
         case 1:hour=hour-1;if(hour<=0) hour=23;break;
             case 2:min=min-1;if(min<=0) min=59;break;
             case 3:sec=sec-1;if(sec<=0) sec=59;break;
             default:break;
           }
        }
}

void I1_int() interrupt 2 using 3                        //外部中斷1 用于調時的加  跟秒表的控制
{
   EX1=0;
   switch(num)
   {
      case 0:TMOD=0x11;cmd=cmd+1;break;         //當外部中斷未被啟用時 進入秒表
      case 1:hour=hour+1;if(hour>=24) hour=0;break;
          case 2:min=min+1;if(min>=60) min=0;break;
          case 3:sec=sec+1;if(sec>=60) sec=0;break;
          default:break;
        }
}

void I0_int() interrupt 0 using 3         //外部中斷0 用于校準時間在時、分、秒之間進行切換
{  
   EX0=0;
   if(cmd != 0 &&(a!=0 || b!=0 || c!=0))                //對秒表進行清零
   {
      a=0;b=0;c=0;
        }
   else        if(cmd != 0 &&(a*b*c==0))                                //清零后 退出秒表
   {
      cmd=0;
          TMOD=0x51;
          TH1=0xff;
          TL1=0xff;
        }
   else if(cmd==0)                                                                //調時切換
   {
     temp=1;                                        //啟動數字閃爍
     num=num+1;
     if(num==4)
     {
        temp=0;                                        //關閉字符閃爍
        num=0;                                        //推出調時功能
          }
        }
}

void main()                                                                 //主函數
{
        init();
        LED=0;
        while(1)
        {
           if(cmd==0)                                         //如不滿足秒表條件 就進入時間顯示
           display();
           else
           displaym();
           Bss();
        }                  
}                    

3.4、protues仿真圖,及作品成型圖

3.4.1 protues 仿真圖

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps9D89.tmp.jpg

3.4.2實踐電路板照片

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps9DB9.tmp.png
LED數字顯示電子時鐘正面(關閉)

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps9DBA.tmp.png
LED數字顯示電子時鐘正面(開啟)

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps9DCB.tmp.png
LED數字顯示秒表狀態

3.5安裝與調試結果:
3.5.1電路安裝
    安照電路原理圖把元器件安裝到已打好的銅板對應的位置,把個元器件固定在銅板后,用導線把對應的元器件的引腳相連接,再用焊錫焊接好即可。注意事項:
   1)元器件的布局應盡量集中,且各個元器件間引腳的連線應盡量短、不彎 曲,跳線盡量少。
   2)各個元器件引腳的焊接不要虛焊。
3.5.2電路調試
    把相應編譯好的目標程序代碼加載到單片機芯片AT89S51,可接上5V電壓源即開始進行硬件電路的調試工作。如果顯示結果不符合設計要求,即檢查電路各連接點是否正確連接,再次進行硬件電路的調試工作,或是檢查代碼程序是否符合硬件電路的設計,若有錯即進行相應的修改,編譯后,再進行硬件電路的調試工作。如此反復操作,直到調試出正確結果。
3.5.3 軟件調試
1) 在計算機上運行程序調試軟件Keil,進行程序調試。
2)利用Proteus 軟件進行仿真模擬。
3)加載程序代碼到單片機芯片AT89S51中,進行模擬仿真。若出現錯誤,查看錯誤后進行相應修改再進行調試與模擬仿真,直到調試出正確結果。
3.5.4 性能測試
系統上電后進行功能的測試,通過測試觀察到,系統上電后數碼管上顯示時間:11-11-11。通過測試,本作品設計實現了數字電子鐘的基本功能,且系統工作穩定。經過全組組員一起調試及驗證,計時誤差為1.0秒。

.總結:
本次課程設計的題目是LED數字顯示電子時鐘。經過本組同學的共同努力,終于調試成功,并經過測試數據顯示, 系統的可靠性已經基本能夠達到實際電子鐘的設計要求,同時本單片機數字電子鐘系統具有擴展性。
本設計從經濟實用的角度出發,采用美國Atmel公司的單片機AT89S51與顯示驅動芯片7407作為主控芯片與數據存儲器單元,結合外圍的鍵盤輸入、顯示、電源輸入等電路并用C語言編寫主控芯片的控制程序,研制了一款可以調時并帶有秒表功能的電子時鐘。使用單片機制作的電子時鐘具有軟硬件設計簡單,易于開發,成本較低,安全可靠,操作方便等特點,可應用于體育賽事和車站、辦公室及家庭等場所,有一定的實用性。此電子時鐘嚴格按照要求設計,基本達到了預期效果,能夠正確的顯示時分秒的計時,算上是一次比較成功的設計了。
實驗中遇到了不少問題,但我們一起改進和綜合了如下。
    1.按鍵問題。此設計中,很多功能選擇是通過按鍵開關實現的。在仿真中發現,調整數值時,有時按鍵反應太快,按一次,跳了幾下,使設置時間很不方便。于是用軟件延時將按鍵進行兩級防抖,從而大大提高了按鈕的可操作性。
    2.添加功能問題。此設計中,除了基本的功能外,我們發現沒有突出的亮點,于是想到添加一個秒表計時的功能,我們將定時器1進行時分復用,通過按鍵按下的先后順序對定時器1的計時或計數進行功能選擇,此程序是在調時進行后由開關1控制,進行復位和控制,可以實現疊加計時和清零。
    課程設計是培養學生綜合運用所學知識,發現實際問題、提出實際問題、分析和解決實際問題,鍛煉實踐能力的重要環節,是對學生實際學習能力、動手能力的具體訓練和考察過程。
在此次數字鐘設計過程中, 在學習新知識的同時,把在課程中學到的理論知識運用到實際作品設計、操作中,更進一步地熟悉了單片機芯片的結構及掌握了其工作原理和具體的使用方法與相關元器件的參數計算方法、使用方法,了解了電路的開發和制作及課程設計報告的編寫。加深了對相關理論知識及專業知識的掌握度,增強自身的動手能力,鍛煉及提高了理解問題、分析問題、解決問題的能力,更深刻的體會到了理論聯系實際的重要性。
最后,我們組通過此次單片機課程設計不僅僅將我們一學期在單片機課程上的所學很好的應用到了實際設計中,更是將理論知識應用到了實踐中,這才是真正的學習,不僅僅是讀萬卷書,更要行萬里路,講知識與實踐有機的結合。也十分感謝老師為我們提供了這次單片機課程設計的機會,我們也通過此次課程設計,更清晰更實際的接觸到了單片機。

參考書目
[1] 蔣輝平,《單片機原理與應用設計》,北京,北京航空航天大學出版社,2007年
[2] 李鴻等,《單片機原理及應用》,長沙,湖南大學出版社,2004年
[3] 樓然苗,李光飛,《單片機課程設計指導》,北京,北京航空航天出版社,2007年
4]  Kenneth A.Reek,《C和指針》,北京,人民郵電出版社,2008年

評分

參與人數 2黑幣 +9 收起 理由
小健2333 + 4 很給力!
咩咩楊Ada + 5 很給力!

查看全部評分

回復

使用道具 舉報

ID:308885 發表于 2018-4-15 22:06 | 顯示全部樓層
大佬,那個ISIS 軟件的電路圖有木有呀。菜鳥看不懂程序,猜不到圖。
回復

使用道具 舉報

ID:339938 發表于 2018-5-29 07:49 來自觸屏版 | 顯示全部樓層
老哥666666
回復

使用道具 舉報

ID:351956 發表于 2018-6-14 20:08 | 顯示全部樓層
大佬還是牛批
回復

使用道具 舉報

ID:353236 發表于 2018-6-17 14:25 | 顯示全部樓層
感謝大佬分享
回復

使用道具 舉報

ID:363253 發表于 2018-7-2 15:48 | 顯示全部樓層
電路圖怎么看?
回復

使用道具 舉報

ID:436447 發表于 2018-11-30 12:37 | 顯示全部樓層
大佬,有圖嗎
回復

使用道具 舉報

ID:452824 發表于 2018-12-23 19:47 | 顯示全部樓層
有沒有仿真圖,Proteus文件
回復

使用道具 舉報

ID:454710 發表于 2018-12-25 18:22 | 顯示全部樓層
Proteus仿真圖有沒有啊大佬,江湖救急
回復

使用道具 舉報

ID:446422 發表于 2018-12-26 16:25 來自觸屏版 | 顯示全部樓層
對啊,為什么圖片加載不出來????
回復

使用道具 舉報

ID:461371 發表于 2019-1-3 22:05 | 顯示全部樓層
學習了,抱拳
回復

使用道具 舉報

ID:485191 發表于 2019-3-5 22:08 | 顯示全部樓層
厲害了666
回復

使用道具 舉報

ID:617792 發表于 2019-9-29 13:36 | 顯示全部樓層
很給力
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91在线免费视频 | 中文字幕亚洲欧美 | 国产精品一区二 | 久久久精品一区 | 国产精品久久久久久中文字 | 久久综合久久综合久久综合 | 久久久精彩视频 | 国产精品免费一区二区 | 亚洲成人黄色 | 成人在线精品视频 | 国产夜恋视频在线观看 | 成人日b视频 | 久久91av | 色视频在线播放 | 日韩在线精品强乱中文字幕 | 综合久久综合久久 | 91麻豆精品国产91久久久久久 | 国产原创视频 | 成人精品在线视频 | 日韩av一区二区在线观看 | 久久男人天堂 | 欧美视频第二页 | 爱爱视频在线观看 | 久草高清视频 | 免费在线a视频 | 国产中文| 一区二区国产在线 | 三级视频在线观看电影 | 天堂亚洲 | 男人av的天堂 | 成人三级电影 | 婷婷免费视频 | 亚洲丝袜天堂 | 国产高清一区二区三区 | 精品一区久久 | 精品国产欧美一区二区 | 99亚洲精品视频 | 亚洲 欧美 在线 一区 | 网络毛片 | 国产视频二区 | 国产亚韩|