




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
課程設計——單片機應用系統設計——簡易數字鐘設計姓名:鄧玉婷學號:U200713549班級:通信0703指導老師:楊明完成時間:2010-07-07課程設計目的單片計算機即單片微型計算機。(Single-ChipMicrocomputer),是集CPU,RAM,ROM,定時,計數和多種接口于一體的微控制器。它體積小,成本低,功能強,廣泛應用于智能產品和工業自動化上。而51單片機是各單片機中最為典型和最有代表性的一種。這次課程設計通過對它的學習,應用,從而達到學習、設計、開發軟、硬的能力。項目描述該課程設計是利用51系列單片機內部的定時/計數器、中斷系統、以及LED顯示器等部件,設計一個單片機電子時鐘。設計的電子時鐘通過數碼管顯示,并能通過按鍵實現設置時間和暫停、啟動控制等。實驗要求1)硬件電路自己設計——芯片選型自定;
2)8個數碼管顯示日、小時、分鐘、秒;
3)2-3個按鍵用于設定、修改時間;
4)精度要求:1個小時不超過1s。
實驗原理該課程設計是利用51系列單片機內部的定時/計數器、中斷系統、以及LED顯示器等部件,設計的一個單片機電子時鐘。設計的電子時鐘通過數碼管顯示,并能通過按鍵實現設置時間和暫停、啟動控制等。用定時/計數器T0,工作于定時,采用方式1,對12MHZ的系統時鐘進行定時計數,初值設為XXYY(自己計算)。形成定時時間為50ms。用片內RAM的7BH單元對50ms計數,計20次產生秒計數器78H單元加1,秒計數器加到60則分計數器79H單元加1,分計數器加到60則時計數器7AH單元加1,時計數器加到24則時計數器清0。然后把秒、分、時計數器分成十位和個位放到8個數碼管的顯示緩沖區,通過數碼管顯示出來。顯示格式為小時十位、小時個位---分十位、分個位---秒十位、秒個位。在處理過程中加上了按鍵判斷程序,能對按鍵處理。設計過程1、51系列單片機內部結構圖2、定時計數器51系列單片機片內有二個十六位定時/計數器:定時器0(T0)和定時器1(T1)。兩個定時器都有定時或事件計數的功能,可用于定時控制、延時、對外部事件計數和檢測等場合;定時/計數器實際上是16位加1計數器。T0由2個8位持殊功能寄存器TH0和TL0構成,T1由2個8位持殊功能寄存TH1和TL1構成。每個定時器都可由軟件設置為定時工作方式或計數工作方式。T0和T1受特殊功能寄存器TMOD和TCON控制。8051采用12MHz晶體時,每個機器周期為1μs。8051定時器的四種工作方式:方式0定時器(T0或T1)工作于13位定時、計數方式。用于計數方式時最大計數值為213=8192個脈沖用于定時工作時,定時時間為:t=(213一T0初值)×時鐘周期×12在這種模式下,16寄存器(THX和TLX)只用13位,其中THX占高8位。其中TLX占低5位,TLX的高3位末用。當TLX的低5位溢出時向THX進位,而THX溢出時硬件置位TF0,并申請中斷。定時、計數溢出否可查詢TF0是否置位,如果開中斷則產生溢出中斷。方式1當TMOD中M1M0=01時,定時計數器工作在方式1。該模式是一個16位定時/計數方式。寄存器TH0和TL0是以全16位參與操作,計數方式時最大計數216=65536(個外部脈沖),用于定時工作方式時,定時時間為:t=(216一T0初值)×時鐘周期×1216寄存器(THX和TLX)中THX提供高8位、TLX提供低8位計數初值方式2當TMOD中M1M0=10時,定時器工作在方式2。方式2是8位的可自動重裝載的定時計數方式。16位的計數器被拆成兩個8位,其中TL0用作8位計數器,TH0用以保持計數初值。當TL0計數溢出,置位TF0,TH0中的初值自動裝入TL0,繼續計數,循環重復計數。用于計數工作方式時,最大計數值為:28=256(個外部脈沖)。用于定時工作方式時,其定時時間為;t=(28—TH0初值)×振蕩周期×12這種工作方式可省去用戶重裝常數的程序,并可產生精確的定時時間,特別適用作串行口波待率發生器。方式3當TMOD中M1M0=11時,定時器工作在方式3。若將T0設置為模式3,TL0和TH0被分成為兩個互相獨立的8位計數器TH0和TL0。TL0可工作為定時方式或計數方式。占用原T0的各控制位、引腳和中斷源。即C/T、GATE、TR0、TF0和T0(P3.4)引腳、INT0(P3.2)引腳。TH0只可用作定時功能,占用定時器T1的控制位TR1和T1的中斷標志位TF1,其啟動和關閉僅受TRl的控制。定時器T1無模式3,可工作于方式0、1、2,但不能使用中斷方式。只有將T1用做串行口的波特率發生器時,T0才工作在方式3,以便增加一個定時器。3、中斷8051有5個中斷源,3個在片內,2個在片外,它們在程序存貯器中有固定的中斷入口地址,當CPU響應中斷時,硬件自動形成這些地址,由此進入中斷服務程序;5個中斷源有兩級中斷優先級,可形式中斷嵌套;8051有5個中斷源系統流程圖詳細設計數碼管顯示模塊由于本實驗的8051開發板上一共有六位數碼管,剛好分別用兩位來顯示時、分、秒。在程序中定義了一個6個字節長的數組dispnum[6](初始化為全0),分別用來記錄當前顯示的時、分、秒的十位和個位。再通過查表采用動態掃描(掃描間隔為10ms)的的方式顯示各位時間。數碼管段碼如下:unsignedcharcodetab0[18]=={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};動態掃描顯示代碼段:P1=0x01;for(;i<=n;i++){ P2=tab0[(time[i])]; for(j=0;j<m;j++);P1=P1<<1; P2=0x00;}定時器模塊本實驗所用實驗板的單片機晶振為12Hz,因此及其周期為1us,要定時1s,需要1000000個機器周期,對于本實驗來說,這是一個比較長的定時時間,所以我們采用定時器1,工作在方式1(即16位定時方式),但即使如此,此方式的單次定時時間還是不能達到1s,因此我采用每次定時10ms,然后設置一全局變量k來計數定時的次數,該數值達到100,則說明1s的定時時間已到,然后秒鐘+1;設計定時器的初值:10000H–2710H=D8F0H其中10000H是16位定時器溢出時的值,2710H為10000us對應的16進制值因此,定時器的模式為:TMOD=0x10;//定時器1工作于方式1定時器初值:TH1=0xD8;TL1=0xF0;以下是定時器初始化代碼:voidTimerInit(void)//時鐘中斷{ TMOD=0x11; TH1=0x3C; TL1=0xB0; ET1=1;//開定時器T1中斷 TR1=1;//啟動定時器中斷}定時器中斷函數如下:voidtimer1(void)interrupt3using2//計數器{ TF1=0; msecond++; if(msecond>=20) { msecond=0; flag=1; } TH1=0x3C; TL1=0xB0;}外部中斷校時模塊因為要時、分能夠分別單獨調整,如果全部采用外部中斷實現,那至少得2個外部中斷,雖然8051單片機提供了兩個外部中斷,但我們的實驗板上卻只有一個外部中斷的按鈕,因此我們只能利用一個外部中斷按鈕,然后采用額外的標記來分別進行時、分的調整,而剛好在我們的實驗板上有8個撥碼開關,因此我們可以利用這8個撥碼開關的前四個分別控制小時分鐘的十、個位的時間校準,哪個撥碼開關置ON,則調整相應位的時間,采用外部中斷0的沿觸發方式,沒觸發一次,則相應位+1,至于時間的合法性判斷則由程序控制。其具體實現代碼如下:開外部中斷0:EX0=1;//中斷0允許中斷IT0=1;//下降沿觸發內部中斷響應函數:voidint0(void)interrupt0using1//內部中斷{ int0_mount++; if(int0_mount>3) { int0_mount=0; }}外部中斷響應函數:八.軟件調試過程ErrorC132:notinformalparameterlist即一個函數中的參數聲明并不存在于參數名的列表內,再次檢查程序發現在定義變量的時候,有一個變量名拼寫錯誤,導致出現了這個error。九.測試過程使用keiluVision3編譯數字鐘程序,生成.hex文件,通過RS-232接口及數據線同計算機相連,將生成的.hex文件燒制到SST89E58RD開發板上,KEY0鍵為高電平時(年月日顯示),當按下開發板上的INT0外部中斷按鍵時,可進行時間(KEY0=0)和日期(KEY0=1)的設置時間精度的測量:名稱數字鐘電腦時鐘起始時間00:00:0022:01:50結束時間01:01:0823:02:57時間差3668s3667s可見時間誤差在1s內。實驗心得這次課程設計是對我們學習微機原理及單片機課程的檢驗及實際應用能力的一次提高。顯示部分是整個系統的核心部分,因此重點集中在這一部分的模塊調試上。由于采用的是P0口作為并行輸出,但卻沒有考慮到其內部無上拉電阻,P0口輸出電壓較低,因此數碼管無法顯示。程序的編寫過程也給了我很大的收獲。在編寫程序之前,查閱了大量的相關資料,力求做到規范清晰。在把握了整體的思路后,我們先從程序流程圖著手,將整個程序分成若干模塊,分開編寫,一邊發現問題一邊解決問題,并在實驗板上檢驗程序測試情況,根據現象不斷修改。在這個過程中體會到編程的技巧,設置子程序的合理性,同時對單片機最小系統的設計有了整體的理解和深刻的體會,使我們的思維的鍛煉與能力培養有了很大的提高和長足的進步。本次課程設計雖然時間很短,但收獲卻很大。首先我們對單片機最小系統的設計有了整體的把握,對程序編寫的合理與規范性有了深刻的理解,建立起程序設計的一般思路。經過兩個星期的課程設計,我得到了充分的鍛煉,不僅對單片機的學習有了深刻的理解,同時也增強了毅力和處理突發問題的能力。學習是要付出一定的艱辛與努力的,做事情一定要有不怕困難的吃苦精神,唯有堅持不懈,才能取得最后的勝利。相信本次課程設計對以后的學習將會有很大的影響,我一定會積極地總結經驗與教訓,改進不足,爭取在日后做得更好。當然要感謝老師和同學們的幫助,在我束手無策,陷入困境的時候給予熱情的幫助,使我順利渡過難關。課程設計是一次很好的實踐動會,通過實踐,我的知識得到了應用,真正實現了知識的學以致用,理論聯系實際,我會更加注重實踐能力的鍛煉,注重動手能力的培養。十一.參考文獻[1]徐維祥、劉旭敏.單片微型機原理及應用.大連理工大學出版社,1996[2]李光飛、樓然苗、李良兒單片機C程序設計實例指導北京航空航天大學出版社,2005[3]余永權.89系列FLASH單片機原理及應用.電子工業出版社,2002[4]李群芳,黃建.單片機微型計算機與接口技術.電子工業出版社,2001[5]樓然苗、李光飛.51系列單片機設計實例.北京航空航天大學出版社,2003[6]田立、田清、代方震.51單片機C語言程序設計快速入門.人民郵電出版社,2007[7]張世軍,李群芳,黃建.單片微型計算機與接口技術.電子工業出版社.2007程序代碼#include<reg51.h>unsignedchartime[6];unsignedchardath[6];unsignedcharint0_mount;unsignedchardatamsecond,second,minute,hour; //時分秒unsignedchardataday,month,year; //日期unsignedintj;bitflag;bitset_flag;voidtimer1(void);voidTime1Init(void);voidseg(void);voidVaribleInit(void);voidseg_show(void);sbitKEY0=P0^0;sbitKEY7=P0^7;sbitKEY1=P0^1;voidset_sec(void) //second設置{ second++; if(second>=60) { second=0; //60秒為一循環 } time[5]=second%10; //秒鐘的個位數字,第6個鍵顯示 time[4]=second/10; //秒鐘的十位數字,第5個鍵顯示}voidset_min(void) //minute設置{ minute++; if(minute>=60) //60分為一循環 { minute=0; } time[3]=minute%10; //分鐘的個位數字,第4個鍵顯示 time[2]=minute/10; //分鐘的十位數字,第3個鍵顯示}voidset_hou(void) //hour設置{ hour++; if(hour>=24) //24小時為一循環 { hour=0; } time[1]=hour%10; //時鐘的個位數字,第2個鍵顯示 time[0]=hour/10; //時鐘的十位數字,第1個鍵顯示}voidset_day(void) //day設置{ day++; if(day>31) { day=1; } dath[5]=day%10; //日期的個位數字,第6個鍵顯示 dath[4]=day/10; //日期的十位數字,第5個鍵顯示}voidseg_show(void){ unsignedcharcodetab0[18]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x76,0x73};//段碼 unsignedinti,n,m; m=300;//動態掃描 if(int0_mount==3) { P1=0x10; i=4; n=5; } elseif(int0_mount==2) { P1=0x04; i=2; n=3; } elseif(int0_mount==1) { P1=0x01; i=0; n=1; } else { P1=0x01; i=0; n=5; } if(KEY0==0) { for(;i<=n;i++) { P2=tab0[(time[i])]; for(j=0;j<m;j++); P1=P1<<1; P2=0x00; } } else { for(;i<=n;i++) { P2=tab0[(dath[i])]; for(j=0;j<m;j++); P1=P1<<1; P2=0x00; } }}voidint0(void)interrupt0using1//內部中斷{ int0_mount++; if(int0_mount>3) { int0_mount=0; }}voidVariableInit(void) //初始化設置{ flag=0; int0_mount=0; msecond=0; second=0; minute=0; hour=0; year=0; month=0; day=1;}voidtimer1(void)interrupt3using2//計數器{ TF1=0; msecond++; if(msecond>=20) { msecond=0; flag=1; } TH1=0x3C; TL1=0xB0;}voidTimerInit(void)//時鐘中斷{ TMOD=0x11; TH1=0x3C; TL1=0xB0; ET1=1;//開定時器T1中斷 TR1=1;//啟動定時器中斷}voidmain(void){ EA=1;//開總中斷 EX0=1;//允許INT0中斷 IT0=1;//下降沿產生中斷 VariableInit(); TimerInit(); while(1) { if(flag==1&&int0_mount==0&&KEY7==0) { second++; if(second==60) { second=0; minute++; } if(minute==60) { minute=0; hour++; } if(hour
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國高壓噴霧車市場分析及競爭策略研究報告
- 2025至2030年中國透氣帽市場分析及競爭策略研究報告
- 2025至2030年中國聚氨酯發泡保溫巖棉制品市場分析及競爭策略研究報告
- 2025至2030年中國立式單層儲液罐市場分析及競爭策略研究報告
- 2025至2030年中國焊接銷套市場分析及競爭策略研究報告
- 2025至2030年中國橋梁組合鋼模板市場分析及競爭策略研究報告
- 2025至2030年中國方便車市場分析及競爭策略研究報告
- 2025至2030年中國微機遠動力學終端單元市場分析及競爭策略研究報告
- 2025至2030年中國參鹿強身膠囊市場分析及競爭策略研究報告
- 2025至2030年中國人棉粒粒布市場分析及競爭策略研究報告
- 工業生產設備投資資金使用計劃
- 政府應急管理與協調機制
- 數字文化空間創意設計-深度研究
- 老年人慢性病管理方案
- 除甲醛施工方案
- 三、油氣回收設備組成
- AI智能在小學音樂課堂中的應用研究
- 智能制造全過程造價咨詢服務方案
- UL489標準中文版-2019斷路器UL標準中文版
- 新能源汽車技術 SL03維修手冊(第4章)-電氣-4.2.2~4.2.12電器集成
- 《安全生產培訓機構基本條件AQ 8011-2023》知識培訓
評論
0/150
提交評論