版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
PAGEPAGE12目錄1設計內(nèi)容及要求 11.1設計內(nèi)容與要求: 11.2設計要求: 12系統(tǒng)總體方案設計 22.1總體方案設計 22.2設計說明 23各部分方案選定及接口設計 33.1主控制器單片機的選擇 33.2時鐘電路 33.3顯示接口電路 33.4鍵盤接口電路 44系統(tǒng)軟件的設計 54.1設計說明 54.2主程序設計 54.3時間處理模塊 64.5鍵盤掃描模塊 95系統(tǒng)的調(diào)試與使用說明 116總結(jié) 127參考文獻 13附錄: 14
1設計內(nèi)容及要求1.1設計內(nèi)容與要求:具有時鐘和電子跑表的功能。開機為時鐘功能,用4位LED數(shù)碼管顯示時、分,以24小時計時方式;用按鍵控制切換到電子跑表功能:可用3位數(shù)碼管從00.0開始計時的功能。1.2設計要求:1)確定系統(tǒng)設計方案;2)進行系統(tǒng)的硬件設計;3)完成必要元器件選擇;4)完成應用程序設計;5)進行應用程序的調(diào)試;2系統(tǒng)總體方案設計2.1總體方案設計電子跑表的設計有多種方法,例如,可用中小規(guī)模集成電路組成電子跑表;也可用專用的電子鐘芯片配以顯示電路及其所需要的外圍電路組成電子跑表;還可以利用單片機來實現(xiàn)等等。為求結(jié)構(gòu)簡單,本次設計利用單片機組成數(shù)字電子跑表。2.2設計說明本系統(tǒng)采用AT89C51單片機、4位LDE數(shù)碼管顯示、一個排阻、4個調(diào)節(jié)按鈕、2個電容與1個晶體振蕩器共同構(gòu)成本的單片機電子跑表的硬件。時鐘模塊與計時模塊則分別由單片機內(nèi)部的定時器/記數(shù)器T0與T1來實現(xiàn)。時間顯示功能通過LED數(shù)碼管動態(tài)掃描來實現(xiàn)。電子跑表的啟動/暫停/清零功能由軟件來實現(xiàn)。P1.0實現(xiàn)時鐘與秒表的切換功能,P1.1接開始計時鍵,P1.2接計時暫停鍵,P1.3接計時重新計時鍵。本系統(tǒng)軟件部分則采用C51編寫,功能模塊結(jié)構(gòu)化強,共利用了6個功能函數(shù),2個中斷服務函數(shù)和1個主函數(shù)構(gòu)成了本次電子跑表的軟件部分。圖2.1為本系統(tǒng)方框圖。AT89C51AT89C51單片機模塊4位共陰數(shù)碼管顯示模塊時鐘4位共陰數(shù)碼管顯示模塊時鐘位驅(qū)動按鍵位驅(qū)動按鍵圖2.1系統(tǒng)框圖圖2.1系統(tǒng)框圖3各部分方案選定及接口設計3.1主控制器單片機的選擇本次設計采用AT89C51單片機,以下為其標準功能:4k字節(jié)Flash閃速存儲器,128字節(jié)內(nèi)部RAM,32個I/O口線,兩個16位定時/計數(shù)器,一個5向量兩級中斷結(jié)構(gòu),一個全雙工串行通信口,片內(nèi)振蕩器及時鐘電路。同時,AT89C51可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式??臻e方式停止CPU的工作,但允許RAM,定時/計數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到下一個硬件復位。3.2時鐘電路單片機工作的時間基準是由時鐘電路提供的。在單片機的XTAL1和XTAL2兩個管腳,接一只晶振及兩只電容就構(gòu)成了單片機的時鐘電路,如圖3.2所示。電路中,電容器C1和C2對振蕩頻率有微調(diào)作用,本次設計中電容器取值為20pF,石英晶體選擇12MHz,故單片機的機器周期為1us。圖3.1內(nèi)部時鐘電路3.3顯示接口電路本次設計中使用了4位共陰數(shù)碼顯示管,顯示控制采用動態(tài)顯示,即數(shù)據(jù)的顯示是由段和位選信號共同配合完成的。為了實現(xiàn)顯示器的動態(tài)掃描,我們需要對顯示器進行段控和位控,因此在顯示器接口電路中需要有兩個輸出口,其中一個用于輸出8條段控線;另一個用于輸出位控線,位控線的數(shù)目等于顯示器的位數(shù)。本次設計中用P1口與顯示器的8條段控線相接,用P2.4~P2.7與顯示器的4條位控線相接。如圖3.2所示。圖3.2顯示接口電路3.4鍵盤接口電路本設計的鍵盤接口電路中使用了4個按鍵分別與單片機的P1.1~P1.3口相連如圖3.3所示,分別實現(xiàn)時鐘/秒表切換、開始計時、暫停計時、重新計時的功能。按鍵的開關狀態(tài)通過一定的電路轉(zhuǎn)換為高、低電平狀態(tài)。按鍵閉合過程在相應的I/O端口形成一個負脈沖。閉合和釋放過程都要經(jīng)過一定的過程才能達到穩(wěn)定,這一過程是處于高、低電平之間的一種不穩(wěn)定狀態(tài),稱為抖動。抖動持續(xù)時間的常長短與開關的機械特性有關,一般在5-10ms之間。為了避免鍵的一次處理閉合,應采CPU多次按用措施消除抖動。圖3.3鍵盤接口電路圖3.3鍵盤接口電路4系統(tǒng)軟件的設計4.1設計說明在進行應用軟件設計時應采用模塊化結(jié)構(gòu)設計,其優(yōu)點是:每個模塊的程序結(jié)構(gòu)簡單,任務明確,易于編寫,調(diào)試和修改,程序可讀性好,對程序的修改可局部進行,其他部分可以保持不變,便于功能擴充和版本升級,是便于多個模塊的調(diào)用和分工合作。因此為了達到功能結(jié)構(gòu)模塊化,易讀,簡單,易移植的特點,故本次設計采用C51編寫。系統(tǒng)編寫時可分為鍵盤掃描程序模塊,時間處理模塊,顯示模塊。如圖4.1所示。將這些事先劃分好的模塊用C51編成不同的子函數(shù),再將它們有機的結(jié)合起來從而達到系統(tǒng)的整體功能。主函數(shù)主函數(shù)鍵盤掃描模塊數(shù)碼管顯示模塊時間處理模塊鍵盤掃描模塊數(shù)碼管顯示模塊時間處理模塊圖4.1軟件設計模塊4.2主程序設計本程序可分為4個模塊,共定義了7個子函數(shù),其中鍵盤掃描模塊包括鍵盤掃描函數(shù),數(shù)碼管顯示模塊包括時鐘顯示函數(shù)、秒表顯示函數(shù),時間處理模塊包括時鐘系時間處理函數(shù)、秒表系時間處理函數(shù)、延遲函數(shù),,另本程序還利用了兩個定時/計數(shù)器分別為T0、T1,故還需定義兩個中斷函數(shù)T0中斷服務函數(shù)和T1中斷服務程序。本程序中由于涉及時鐘與秒表互切問題,故定義了一控制變量Numb并賦其初值0,若在仿真過中切到秒表則Numb取反為1,切到時鐘則Numb重新為0。因此在程序運行過程中便可控制各按鍵功能及屏蔽在時鐘模式或秒表模式下不相干功能鍵的影響。圖4.2為主程序流程圖。開始開始賦初值 賦初值1?1?否是否是鍵盤掃描函數(shù)鍵盤掃描函數(shù)否否是否切換秒表是否切換秒表是是數(shù)碼管顯示秒表數(shù)碼管顯示時鐘數(shù)碼管顯示秒表數(shù)碼管顯示時鐘結(jié)束結(jié)束圖4.2主程序圖4.2主程序4.3時間處理模塊時鐘處理函數(shù)用定時器T0定時10ms,其計數(shù)初值為,由于T0選用工作方式1,故M為即65536,fosc為晶振頻率為12MHZ,t為定時時間10ms,所以X的值為64536,將該值的高八位值賦給TH0,低八位并賦給TL0,這樣便完成了T0的初始化工作,因為定時器T0工作在方式1下,故每次定時器T0溢出都需再給T0賦初值。由于T0定時10ms,所以要得到1s的時間需T0溢出100次,由此引入計數(shù)變量Count。每當T0溢出,Count便自動加1,直至計滿100,便使秒變量Seconds自動加1并初始化Count重新開始計數(shù),直到Seconds為60,初始化Seconds并使分變量Minutes自動加1,同理到時變量Hour為24時,初始化Hours,由此無限循環(huán)下去直到關閉電源。圖4.3為程序流程圖時鐘時間處理函數(shù)T0中斷服務函數(shù)否否否否否是是是是Minutes=0時Hours++Minutes==60Seconds=0分Minutes++Seconds=60Count=0秒Seconds++Count==100Hours=0賦初值T0溢出啟動T0時鐘時間處理函數(shù)T0中斷服務函數(shù)否否否否否是是是是Minutes=0時Hours++Minutes==60Seconds=0分Minutes++Seconds=60Count=0秒Seconds++Count==100Hours=0賦初值T0溢出啟動T0計數(shù)變量Count++計數(shù)變量Count++Hours==24圖4.3T0中斷函數(shù)及時鐘處理函數(shù)
Hours==24圖4.3T0中斷函數(shù)及時鐘處理函數(shù)秒表時間處理函數(shù)用的是定時器T1與T0相同,同樣定時10ms,高八位TH1賦值為,低八位TL1賦值為。T1的啟動由按鍵掃描函數(shù)控制,當開啟T1后,每次T1溢出,Decisec自動加1,直至Decisec到100,秒Sec自動加1,直至分Mint為10,初始化Mint計時復位。圖4.4為其程序流程圖。 啟動T1啟動T1T1溢出T1溢出秒表時間處理函數(shù)T1定時器中斷服務函數(shù)否否否否是是是Mint=0Mint==10分Mint++Sec=0Sec==60秒Sec++Decisec=0Decisec==100分秒Decisec++賦初值秒表時間處理函數(shù)T1定時器中斷服務函數(shù)否否否否是是是Mint=0Mint==10分Mint++Sec=0Sec==60秒Sec++Decisec=0Decisec==100分秒Decisec++賦初值圖4.4秒表處理函數(shù)及T1中斷服務函數(shù)圖4.4秒表處理函數(shù)及T1中斷服務函數(shù)4.5鍵盤掃描模塊時鐘與秒表切換鍵程序:CHANGE鍵為時鐘秒表切換鍵,當按下CHANGE鍵時,會產(chǎn)生按鍵抖動,本程序中利用delay(5)產(chǎn)生5ms延遲使得按鍵狀態(tài)穩(wěn)定后重新確認是否按下了CHANGE鍵即CHANGE為低電平,此時還需判斷控制變量Numb是否為0(Numb為0即奇數(shù)次按下CHANGE鍵顯示秒表,Numb為1則為偶數(shù)次按下CHANGE鍵顯示時鐘),在CHANGE為0且Numb為0的情況下,執(zhí)行數(shù)碼管顯示秒表函數(shù)并對Numb取反為再次按下CHANGE鍵做準備,此后程序進入確認結(jié)束按鍵循環(huán),若松開CHANGE,則非CHANGE為0,循環(huán)結(jié)束回到開始處等待按鍵電平;若一直按著CHANGE,則一直執(zhí)行數(shù)碼管顯示秒表函數(shù)。當Numb為1時,則同理顯示時鐘函數(shù),非CHANGE為0時退出循環(huán)回到等待。圖4.5為該程序流程圖。CHANGE==0否CHANGE==0否是Delay(5)是Delay(5)CHANGE==0且Numb==0否CHANGE==0且Numb==0否否是否是CHANGE==0且Numb==1Display1()CHANGE==0且Numb==1Display1()是Display2()Numb=!Numb是Display2()Numb=!Numb否否!CHANGENumb=!Numb!CHANGENumb=!Numb否是否是!CHANGEDisplay1()!CHANGEDisplay1()是Display2()是Display2()圖4.5時鐘與秒表切換程序圖4.5時鐘與秒表切換程序開始計時鍵程序:在控制變量Numb等于1的情況按下START鍵則開啟T1定時器開始計時,這里加入Numb的目的是為了在時鐘狀態(tài)下屏蔽非時鐘功能鍵,故當切換為秒表狀態(tài)時,Numb為1,此時秒表系功能鍵生效,此時按下START鍵,開始計時。圖4.6為開始計時鍵程序流程圖。否否STRAT==0且Numb==1STRAT==0且Numb==1是Delay(5)是Delay(5)START==0否START==0否是是TR1=1TR1=1否否!START!START是Display1()是Display1()圖4.6開始計時鍵程序暫停計時鍵程序、計時復位鍵程序同開始計時鍵程序類似都需在Numb為1的情況下方可啟用,且其程序流程相似。鍵盤掃描函數(shù)keyscan()是由時鐘與秒表切換鍵程序、開始計時鍵程序、暫停計時鍵程序、計時復位鍵程序構(gòu)成的。5系統(tǒng)的調(diào)試與使用說明用KEIL運行程序正確后生成HEX格式的文件,用Proteus畫好電路圖,導入HEX格式的文件進行仿真。如下圖所示,P1.0是秒表與時鐘切換鍵,P1.1為開始計時鍵,P1.2為暫停計時鍵。P1.3為重新計時鍵。下圖5.1、5.2分別是時鐘狀態(tài)和計時狀態(tài)調(diào)試圖。圖5.1開機時鐘狀態(tài)圖5.2計時狀態(tài)6總結(jié)開始做課程設計時,我們首先需要將硬件設計做出來,在硬件設計好的基礎上進行軟件設計這樣就方便多了。著手軟件設計時要有一個整體的思路,即主程序,有了整體思路就開始著手于分模塊的設計,如時鐘顯示程序、中斷服務程序、時間處理程序等。每個模塊出來后都需要配合主程序進行仿真驗證程序是否能正常運行。這次的設計盡管還不是很完善,但我已經(jīng)非常開心了,至少有了自己的思路再去實踐,再在實踐的過程中收獲,這是課堂上所沒有的欣喜。在課程設計的過程中遇到的各種知識不總是在書上能找到的,所以我們必須自己查找相關資料,利用圖書館或網(wǎng)絡搜索,這是一個比較辛苦的過程,你必須從無數(shù)的信息中分離出對你有用的,然后加以整理,最后吸收并用到設計中來。通過這點,我收益很大。課程設計是從整體到部分的過程,然而一切并不都是如此的。因為有時候你整體設計好了,然而在設計部分的時候卻可能影響到整體,然后又要作出調(diào)整,在不斷的調(diào)整中才慢慢把設計做出來。有時候你還必須把自己前面做的東西全部推翻,然后重新再來。經(jīng)過兩個星期的課程設計,確實讓我收獲很多,學到了很多,特別要謝謝李老師的指導及嚴格要求,雖然在設計過程中很累,但是一看到自己做出來的成果,就什么疲勞都沒有了。
7參考文獻[1]王迎旭《單片機原理與應用》(第2版)機械工業(yè)出版社[2]胡漢才《單片機原理及系統(tǒng)設計》清華大學出版社.[3]潘永雄《新編單片機原理與應用》西安電子科技大學出版社.[4]張迎新《單片微型計算機原理、應用及接口技術》國防工業(yè)出版社[5]張欣《單片機原理與C51程序設計基礎教程》清華大學出版社[6]李葉紫《MCS—51單片機應用教程》清華大學出版社
附錄:程序清單:#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint//七段共陰數(shù)碼顯示管段碼表//ucharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定義初始化變量////秒表部分//ucharDecisec=0;//分秒//ucharSec=0;//秒//ucharMint=0;//分////時鐘部分//ucharSeconds=0;ucharMinutes=23;ucharHours=15;ucharCount=0;ucharNumb=0;//按鍵部分//sbitCHANGE=P1^0; //切換:可實現(xiàn)跑表與時鐘互切//sbitSTART=P1^1; //開始//sbitSTOP=P1^2; //暫停//sbitRST=P1^3; //復位////函數(shù)聲明//voiddelay(ucharms);//延遲函數(shù)//voidtime_pro1();//秒表處理函數(shù)//voidtime_pro2();//時鐘處理函數(shù)//voidkeyscan(); //鍵盤掃描函數(shù)//voiddisplay1();//數(shù)碼管顯示秒表函數(shù)//voiddisplay2();//數(shù)碼管顯示時鐘函數(shù)///*******************/// 主函數(shù)///*******************/voidmain(){ P1=0xff; TMOD=0x11; TH0=(65536-10000)/256; TL0=(65536-10000)%256; TH1=(65536-10000)/256; TL1=(65536-10000)%256; EA=1; ET0=1; ET1=1; TR0=1; while(1) { keyscan(); if(Numb==1) {display1(); } if(Numb==0) {display2();} }}/*******************///延遲函數(shù)///*******************/voiddelay(ucharms){ uchari,j; for(i=ms;i>0;i--) for(j=500;j>0;j--);}/*******************///秒表處理函數(shù)///******************/voidtime_pro1(){ if(Decisec==100) {Decisec=0;Sec++;if(Sec==60) {Sec=0;Mint++;if(Mint==10) {Mint=0;}}}}/*******************///時鐘處理函數(shù)///******************/voidtime_pro2(){ if(Seconds==60) { Seconds=0; Minutes++; if(Minutes==60) { Minutes=0; Hours++; if(Hours==24) { Hours=0;}}}}/*******************///鍵盤掃描函數(shù)///******************/voidkeyscan(){ //秒表/時鐘切換// if(CHANGE==0) { delay(5); if((CHANGE==0)&&(Numb==0)) { display1(); Numb=!Numb; while(!CHANGE) { display1(); } } if((CHANGE==0)&&(Numb==1)) { Numb=!Numb; while(!CHANGE) {display2();}}} //開始計時// if((START==0)&&(Numb==1)) { delay(5); if(START==0) { TR1=1; while(!START) {display1();}}} //暫停計時// if((STOP==0)&&(Numb==1)) { delay(5); if(STOP==0) { TR1=0; while(!STOP) {display1();}}} //重新計時// if((RST==0)&&(Numb==1)) { delay(5); if(RST==0) { while(!RST) { Decisec=0; Sec=0; Mint=0; display1(); }}}}/************************///數(shù)碼管顯示秒表函數(shù)///************************/voiddisplay1(){ P2=0x7f; P0=dispcode[Decisec/10];//顯示分秒
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東碧桂園職業(yè)學院《視頻編輯技巧》2023-2024學年第一學期期末試卷
- 共青科技職業(yè)學院《內(nèi)科護理學實訓一》2023-2024學年第一學期期末試卷
- 贛南醫(yī)學院《制造工程訓練D》2023-2024學年第一學期期末試卷
- 贛南衛(wèi)生健康職業(yè)學院《醫(yī)學綜合2(臨床綜合技能)》2023-2024學年第一學期期末試卷
- 《夾層玻璃中間膜》課件
- 七年級語文上冊單元清六新人教版
- 三年級科學上冊第三單元天氣與我們的生活第十六課樹葉落了教案青島版
- 汛期和夏季安全培訓課件
- 防止兒童丟失安全課件
- 安全班隊會課件
- 污水處理站運行維護管理方案
- 農(nóng)村公路養(yǎng)護工程施工組織設計
- 個人如何開辦婚介公司,婚介公司經(jīng)營和管理
- 公司物流倉儲規(guī)劃方案及建議書
- 天津市歷年社會保險繳費基數(shù)、比例
- 智能掃地機器人畢業(yè)設計
- 2024國家開放大學電大??啤秾W前兒童發(fā)展心理學》期末試題及答案
- 汽車座椅面套縫紉工時定額的研究
- 立體幾何??级ɡ砜偨Y(jié)(八大定理)
- 噴嘴壓力計算表及選型
- 深化校企合作協(xié)同育人的實踐案例
評論
0/150
提交評論