




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
課程設(shè)計(jì)——單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)——簡易數(shù)字鐘設(shè)計(jì)姓名:鄧玉婷學(xué)號:U200713549班級:通信0703指導(dǎo)老師:楊明完成時間:2010-07-07課程設(shè)計(jì)目的單片計(jì)算機(jī)即單片微型計(jì)算機(jī)。(Single-ChipMicrocomputer),是集CPU,RAM,ROM,定時,計(jì)數(shù)和多種接口于一體的微控制器。它體積小,成本低,功能強(qiáng),廣泛應(yīng)用于智能產(chǎn)品和工業(yè)自動化上。而51單片機(jī)是各單片機(jī)中最為典型和最有代表性的一種。這次課程設(shè)計(jì)通過對它的學(xué)習(xí),應(yīng)用,從而達(dá)到學(xué)習(xí)、設(shè)計(jì)、開發(fā)軟、硬的能力。項(xiàng)目描述該課程設(shè)計(jì)是利用51系列單片機(jī)內(nèi)部的定時/計(jì)數(shù)器、中斷系統(tǒng)、以及LED顯示器等部件,設(shè)計(jì)一個單片機(jī)電子時鐘。設(shè)計(jì)的電子時鐘通過數(shù)碼管顯示,并能通過按鍵實(shí)現(xiàn)設(shè)置時間和暫停、啟動控制等。實(shí)驗(yàn)要求1)硬件電路自己設(shè)計(jì)——芯片選型自定;
2)8個數(shù)碼管顯示日、小時、分鐘、秒;
3)2-3個按鍵用于設(shè)定、修改時間;
4)精度要求:1個小時不超過1s。
實(shí)驗(yàn)原理該課程設(shè)計(jì)是利用51系列單片機(jī)內(nèi)部的定時/計(jì)數(shù)器、中斷系統(tǒng)、以及LED顯示器等部件,設(shè)計(jì)的一個單片機(jī)電子時鐘。設(shè)計(jì)的電子時鐘通過數(shù)碼管顯示,并能通過按鍵實(shí)現(xiàn)設(shè)置時間和暫停、啟動控制等。用定時/計(jì)數(shù)器T0,工作于定時,采用方式1,對12MHZ的系統(tǒng)時鐘進(jìn)行定時計(jì)數(shù),初值設(shè)為XXYY(自己計(jì)算)。形成定時時間為50ms。用片內(nèi)RAM的7BH單元對50ms計(jì)數(shù),計(jì)20次產(chǎn)生秒計(jì)數(shù)器78H單元加1,秒計(jì)數(shù)器加到60則分計(jì)數(shù)器79H單元加1,分計(jì)數(shù)器加到60則時計(jì)數(shù)器7AH單元加1,時計(jì)數(shù)器加到24則時計(jì)數(shù)器清0。然后把秒、分、時計(jì)數(shù)器分成十位和個位放到8個數(shù)碼管的顯示緩沖區(qū),通過數(shù)碼管顯示出來。顯示格式為小時十位、小時個位---分十位、分個位---秒十位、秒個位。在處理過程中加上了按鍵判斷程序,能對按鍵處理。設(shè)計(jì)過程1、51系列單片機(jī)內(nèi)部結(jié)構(gòu)圖2、定時計(jì)數(shù)器51系列單片機(jī)片內(nèi)有二個十六位定時/計(jì)數(shù)器:定時器0(T0)和定時器1(T1)。兩個定時器都有定時或事件計(jì)數(shù)的功能,可用于定時控制、延時、對外部事件計(jì)數(shù)和檢測等場合;定時/計(jì)數(shù)器實(shí)際上是16位加1計(jì)數(shù)器。T0由2個8位持殊功能寄存器TH0和TL0構(gòu)成,T1由2個8位持殊功能寄存TH1和TL1構(gòu)成。每個定時器都可由軟件設(shè)置為定時工作方式或計(jì)數(shù)工作方式。T0和T1受特殊功能寄存器TMOD和TCON控制。8051采用12MHz晶體時,每個機(jī)器周期為1μs。8051定時器的四種工作方式:方式0定時器(T0或T1)工作于13位定時、計(jì)數(shù)方式。用于計(jì)數(shù)方式時最大計(jì)數(shù)值為213=8192個脈沖用于定時工作時,定時時間為:t=(213一T0初值)×?xí)r鐘周期×12在這種模式下,16寄存器(THX和TLX)只用13位,其中THX占高8位。其中TLX占低5位,TLX的高3位末用。當(dāng)TLX的低5位溢出時向THX進(jìn)位,而THX溢出時硬件置位TF0,并申請中斷。定時、計(jì)數(shù)溢出否可查詢TF0是否置位,如果開中斷則產(chǎn)生溢出中斷。方式1當(dāng)TMOD中M1M0=01時,定時計(jì)數(shù)器工作在方式1。該模式是一個16位定時/計(jì)數(shù)方式。寄存器TH0和TL0是以全16位參與操作,計(jì)數(shù)方式時最大計(jì)數(shù)216=65536(個外部脈沖),用于定時工作方式時,定時時間為:t=(216一T0初值)×?xí)r鐘周期×1216寄存器(THX和TLX)中THX提供高8位、TLX提供低8位計(jì)數(shù)初值方式2當(dāng)TMOD中M1M0=10時,定時器工作在方式2。方式2是8位的可自動重裝載的定時計(jì)數(shù)方式。16位的計(jì)數(shù)器被拆成兩個8位,其中TL0用作8位計(jì)數(shù)器,TH0用以保持計(jì)數(shù)初值。當(dāng)TL0計(jì)數(shù)溢出,置位TF0,TH0中的初值自動裝入TL0,繼續(xù)計(jì)數(shù),循環(huán)重復(fù)計(jì)數(shù)。用于計(jì)數(shù)工作方式時,最大計(jì)數(shù)值為:28=256(個外部脈沖)。用于定時工作方式時,其定時時間為;t=(28—TH0初值)×振蕩周期×12這種工作方式可省去用戶重裝常數(shù)的程序,并可產(chǎn)生精確的定時時間,特別適用作串行口波待率發(fā)生器。方式3當(dāng)TMOD中M1M0=11時,定時器工作在方式3。若將T0設(shè)置為模式3,TL0和TH0被分成為兩個互相獨(dú)立的8位計(jì)數(shù)器TH0和TL0。TL0可工作為定時方式或計(jì)數(shù)方式。占用原T0的各控制位、引腳和中斷源。即C/T、GATE、TR0、TF0和T0(P3.4)引腳、INT0(P3.2)引腳。TH0只可用作定時功能,占用定時器T1的控制位TR1和T1的中斷標(biāo)志位TF1,其啟動和關(guān)閉僅受TRl的控制。定時器T1無模式3,可工作于方式0、1、2,但不能使用中斷方式。只有將T1用做串行口的波特率發(fā)生器時,T0才工作在方式3,以便增加一個定時器。3、中斷8051有5個中斷源,3個在片內(nèi),2個在片外,它們在程序存貯器中有固定的中斷入口地址,當(dāng)CPU響應(yīng)中斷時,硬件自動形成這些地址,由此進(jìn)入中斷服務(wù)程序;5個中斷源有兩級中斷優(yōu)先級,可形式中斷嵌套;8051有5個中斷源系統(tǒng)流程圖詳細(xì)設(shè)計(jì)數(shù)碼管顯示模塊由于本實(shí)驗(yàn)的8051開發(fā)板上一共有六位數(shù)碼管,剛好分別用兩位來顯示時、分、秒。在程序中定義了一個6個字節(jié)長的數(shù)組dispnum[6](初始化為全0),分別用來記錄當(dāng)前顯示的時、分、秒的十位和個位。再通過查表采用動態(tài)掃描(掃描間隔為10ms)的的方式顯示各位時間。數(shù)碼管段碼如下:unsignedcharcodetab0[18]=={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};動態(tài)掃描顯示代碼段:P1=0x01;for(;i<=n;i++){ P2=tab0[(time[i])]; for(j=0;j<m;j++);P1=P1<<1; P2=0x00;}定時器模塊本實(shí)驗(yàn)所用實(shí)驗(yàn)板的單片機(jī)晶振為12Hz,因此及其周期為1us,要定時1s,需要1000000個機(jī)器周期,對于本實(shí)驗(yàn)來說,這是一個比較長的定時時間,所以我們采用定時器1,工作在方式1(即16位定時方式),但即使如此,此方式的單次定時時間還是不能達(dá)到1s,因此我采用每次定時10ms,然后設(shè)置一全局變量k來計(jì)數(shù)定時的次數(shù),該數(shù)值達(dá)到100,則說明1s的定時時間已到,然后秒鐘+1;設(shè)計(jì)定時器的初值:10000H–2710H=D8F0H其中10000H是16位定時器溢出時的值,2710H為10000us對應(yīng)的16進(jìn)制值因此,定時器的模式為:TMOD=0x10;//定時器1工作于方式1定時器初值:TH1=0xD8;TL1=0xF0;以下是定時器初始化代碼:voidTimerInit(void)//時鐘中斷{ TMOD=0x11; TH1=0x3C; TL1=0xB0; ET1=1;//開定時器T1中斷 TR1=1;//啟動定時器中斷}定時器中斷函數(shù)如下:voidtimer1(void)interrupt3using2//計(jì)數(shù)器{ TF1=0; msecond++; if(msecond>=20) { msecond=0; flag=1; } TH1=0x3C; TL1=0xB0;}外部中斷校時模塊因?yàn)橐獣r、分能夠分別單獨(dú)調(diào)整,如果全部采用外部中斷實(shí)現(xiàn),那至少得2個外部中斷,雖然8051單片機(jī)提供了兩個外部中斷,但我們的實(shí)驗(yàn)板上卻只有一個外部中斷的按鈕,因此我們只能利用一個外部中斷按鈕,然后采用額外的標(biāo)記來分別進(jìn)行時、分的調(diào)整,而剛好在我們的實(shí)驗(yàn)板上有8個撥碼開關(guān),因此我們可以利用這8個撥碼開關(guān)的前四個分別控制小時分鐘的十、個位的時間校準(zhǔn),哪個撥碼開關(guān)置ON,則調(diào)整相應(yīng)位的時間,采用外部中斷0的沿觸發(fā)方式,沒觸發(fā)一次,則相應(yīng)位+1,至于時間的合法性判斷則由程序控制。其具體實(shí)現(xiàn)代碼如下:開外部中斷0:EX0=1;//中斷0允許中斷IT0=1;//下降沿觸發(fā)內(nèi)部中斷響應(yīng)函數(shù):voidint0(void)interrupt0using1//內(nèi)部中斷{ int0_mount++; if(int0_mount>3) { int0_mount=0; }}外部中斷響應(yīng)函數(shù):八.軟件調(diào)試過程ErrorC132:notinformalparameterlist即一個函數(shù)中的參數(shù)聲明并不存在于參數(shù)名的列表內(nèi),再次檢查程序發(fā)現(xiàn)在定義變量的時候,有一個變量名拼寫錯誤,導(dǎo)致出現(xiàn)了這個error。九.測試過程使用keiluVision3編譯數(shù)字鐘程序,生成.hex文件,通過RS-232接口及數(shù)據(jù)線同計(jì)算機(jī)相連,將生成的.hex文件燒制到SST89E58RD開發(fā)板上,KEY0鍵為高電平時(年月日顯示),當(dāng)按下開發(fā)板上的INT0外部中斷按鍵時,可進(jìn)行時間(KEY0=0)和日期(KEY0=1)的設(shè)置時間精度的測量:名稱數(shù)字鐘電腦時鐘起始時間00:00:0022:01:50結(jié)束時間01:01:0823:02:57時間差3668s3667s可見時間誤差在1s內(nèi)。實(shí)驗(yàn)心得這次課程設(shè)計(jì)是對我們學(xué)習(xí)微機(jī)原理及單片機(jī)課程的檢驗(yàn)及實(shí)際應(yīng)用能力的一次提高。顯示部分是整個系統(tǒng)的核心部分,因此重點(diǎn)集中在這一部分的模塊調(diào)試上。由于采用的是P0口作為并行輸出,但卻沒有考慮到其內(nèi)部無上拉電阻,P0口輸出電壓較低,因此數(shù)碼管無法顯示。程序的編寫過程也給了我很大的收獲。在編寫程序之前,查閱了大量的相關(guān)資料,力求做到規(guī)范清晰。在把握了整體的思路后,我們先從程序流程圖著手,將整個程序分成若干模塊,分開編寫,一邊發(fā)現(xiàn)問題一邊解決問題,并在實(shí)驗(yàn)板上檢驗(yàn)程序測試情況,根據(jù)現(xiàn)象不斷修改。在這個過程中體會到編程的技巧,設(shè)置子程序的合理性,同時對單片機(jī)最小系統(tǒng)的設(shè)計(jì)有了整體的理解和深刻的體會,使我們的思維的鍛煉與能力培養(yǎng)有了很大的提高和長足的進(jìn)步。本次課程設(shè)計(jì)雖然時間很短,但收獲卻很大。首先我們對單片機(jī)最小系統(tǒng)的設(shè)計(jì)有了整體的把握,對程序編寫的合理與規(guī)范性有了深刻的理解,建立起程序設(shè)計(jì)的一般思路。經(jīng)過兩個星期的課程設(shè)計(jì),我得到了充分的鍛煉,不僅對單片機(jī)的學(xué)習(xí)有了深刻的理解,同時也增強(qiáng)了毅力和處理突發(fā)問題的能力。學(xué)習(xí)是要付出一定的艱辛與努力的,做事情一定要有不怕困難的吃苦精神,唯有堅(jiān)持不懈,才能取得最后的勝利。相信本次課程設(shè)計(jì)對以后的學(xué)習(xí)將會有很大的影響,我一定會積極地總結(jié)經(jīng)驗(yàn)與教訓(xùn),改進(jìn)不足,爭取在日后做得更好。當(dāng)然要感謝老師和同學(xué)們的幫助,在我束手無策,陷入困境的時候給予熱情的幫助,使我順利渡過難關(guān)。課程設(shè)計(jì)是一次很好的實(shí)踐動會,通過實(shí)踐,我的知識得到了應(yīng)用,真正實(shí)現(xiàn)了知識的學(xué)以致用,理論聯(lián)系實(shí)際,我會更加注重實(shí)踐能力的鍛煉,注重動手能力的培養(yǎng)。十一.參考文獻(xiàn)[1]徐維祥、劉旭敏.單片微型機(jī)原理及應(yīng)用.大連理工大學(xué)出版社,1996[2]李光飛、樓然苗、李良兒單片機(jī)C程序設(shè)計(jì)實(shí)例指導(dǎo)北京航空航天大學(xué)出版社,2005[3]余永權(quán).89系列FLASH單片機(jī)原理及應(yīng)用.電子工業(yè)出版社,2002[4]李群芳,黃建.單片機(jī)微型計(jì)算機(jī)與接口技術(shù).電子工業(yè)出版社,2001[5]樓然苗、李光飛.51系列單片機(jī)設(shè)計(jì)實(shí)例.北京航空航天大學(xué)出版社,2003[6]田立、田清、代方震.51單片機(jī)C語言程序設(shè)計(jì)快速入門.人民郵電出版社,2007[7]張世軍,李群芳,黃建.單片微型計(jì)算機(jī)與接口技術(shù).電子工業(yè)出版社.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設(shè)置{ second++; if(second>=60) { second=0; //60秒為一循環(huán) } time[5]=second%10; //秒鐘的個位數(shù)字,第6個鍵顯示 time[4]=second/10; //秒鐘的十位數(shù)字,第5個鍵顯示}voidset_min(void) //minute設(shè)置{ minute++; if(minute>=60) //60分為一循環(huán) { minute=0; } time[3]=minute%10; //分鐘的個位數(shù)字,第4個鍵顯示 time[2]=minute/10; //分鐘的十位數(shù)字,第3個鍵顯示}voidset_hou(void) //hour設(shè)置{ hour++; if(hour>=24) //24小時為一循環(huán) { hour=0; } time[1]=hour%10; //時鐘的個位數(shù)字,第2個鍵顯示 time[0]=hour/10; //時鐘的十位數(shù)字,第1個鍵顯示}voidset_day(void) //day設(shè)置{ day++; if(day>31) { day=1; } dath[5]=day%10; //日期的個位數(shù)字,第6個鍵顯示 dath[4]=day/10; //日期的十位數(shù)字,第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;//動態(tài)掃描 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//內(nèi)部中斷{ int0_mount++; if(int0_mount>3) { int0_mount=0; }}voidVariableInit(void) //初始化設(shè)置{ flag=0; int0_mount=0; msecond=0; second=0; minute=0; hour=0; year=0; month=0; day=1;}voidtimer1(void)interrupt3using2//計(jì)數(shù)器{ 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;//下降沿產(chǎn)生中斷 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生產(chǎn)服裝購銷合同協(xié)議
- 電力護(hù)線用工合同協(xié)議
- 電子保理付款服務(wù)合同協(xié)議
- 瑕疵客戶購車合同協(xié)議
- 電腦購置電腦合同協(xié)議
- 電動汽車消費(fèi)合同協(xié)議
- 現(xiàn)金合作協(xié)議合同協(xié)議
- 生產(chǎn)委托運(yùn)營合同協(xié)議
- 生態(tài)豬銷售合同協(xié)議
- 甜品店租賃合同協(xié)議
- 數(shù)字經(jīng)濟(jì)學(xué)試題答案
- 創(chuàng)傷急救知識課件
- 專題13 統(tǒng)計(jì)與概率-【好題匯編】五年(2020-2024)高考數(shù)學(xué)真題分類匯編(含答案解析)
- 國家開放大學(xué)本科(非英語專業(yè))學(xué)士學(xué)位英語統(tǒng)一考試樣題
- GB/T 44273-2024水力發(fā)電工程運(yùn)行管理規(guī)范
- DB65-T 4765-2024 農(nóng)牧區(qū)標(biāo)準(zhǔn)化羊場建設(shè)規(guī)范
- 城軌行車課程設(shè)計(jì)
- 2024年南京市中考?xì)v史試題及答案
- 2024羽毛球教案36課時
- A類供應(yīng)商績效評價表
- 攝影攝像知識競賽考試題庫500題(含答案)
評論
0/150
提交評論