版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 《單品機(jī)原理及應(yīng)用》課程設(shè)計(jì)</p><p> 基于單片機(jī)的電子鐘設(shè)計(jì)</p><p> 院 系 : 物理電氣信息工程學(xué)院 </p><p> 基于單片機(jī)的電子鐘設(shè)計(jì)</p><p><b> 一、設(shè)計(jì)任務(wù)</b></p><p> 1)、鞏固《單片機(jī)原理及應(yīng)
2、用》課程所學(xué)的有關(guān)知識。</p><p> 2)、通過硬件設(shè)計(jì)、軟件設(shè)計(jì),使學(xué)生掌握用單片機(jī)組成應(yīng)用系統(tǒng)的方法,提高軟件設(shè)計(jì)能力。</p><p> 3)、掌握單片機(jī)的定時(shí)/計(jì)數(shù)器的編程和使用方法。進(jìn)一步熟悉單片機(jī)功能部件的應(yīng)用。</p><p> 二、設(shè)計(jì)要求及工作原理說明</p><p> 要求自己做出原理圖設(shè)計(jì)。并且要擴(kuò)展一片8
3、255芯片作顯示接口,分別輸出段碼和位碼;用P1口中的兩根口線作功能鍵??衫盟膫€(gè)LED分時(shí)顯示當(dāng)前時(shí)間和日歷。兩個(gè)按鍵的功能:A鍵用于調(diào)時(shí),范圍0~23,0為 24點(diǎn),每按一次時(shí)加1;B鍵用于調(diào)分,范圍0~59,0為60分,每按一次分加1。 </p><p> 單片機(jī)程序設(shè)計(jì)、調(diào)試。</p><p> 本課題采用單片機(jī)內(nèi)部定時(shí)器,用軟件對其進(jìn)行秒、分、時(shí)的計(jì)數(shù),單片機(jī)無法產(chǎn)生1s的定
4、時(shí)時(shí)間,但是可以用硬件定時(shí)和軟件計(jì)數(shù)相結(jié)合的方法實(shí)現(xiàn),采用中斷方式,即通過中斷服務(wù)程序進(jìn)行計(jì)數(shù)器溢出次數(shù)的累計(jì),把定時(shí)器/計(jì)數(shù)器設(shè)定為62.5ms,計(jì)數(shù)溢出16次就可以得到1s,計(jì)60次為1分,60分計(jì)60次則為1小時(shí),然后通過數(shù)碼管動(dòng)態(tài)刷新顯示出來,再設(shè)四個(gè)按鍵進(jìn)行時(shí)間的調(diào)整,一個(gè)鍵用作啟動(dòng)/調(diào)整鍵,其余三個(gè)分別用于時(shí)、分、秒的調(diào)整。</p><p> 三、數(shù)字電子鐘硬件系統(tǒng)的設(shè)計(jì)</p>&l
5、t;p> 3.1 硬件總體設(shè)計(jì)</p><p> 硬件系統(tǒng)總體設(shè)計(jì)如圖1所示。</p><p> 圖1 硬件系統(tǒng)總體設(shè)計(jì)</p><p> 3.2 數(shù)字電子鐘硬件系統(tǒng)主要模塊功能簡要介紹</p><p> ?。?) 功能芯片:本次設(shè)計(jì)采用AT89C51芯片,低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flas
6、h 存儲(chǔ)器。256字節(jié)RAM, 32 位I/O 口線,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。價(jià)格較低,能滿足本次設(shè)計(jì)的要求。</p><p> ?。?) 電源和復(fù)位模塊:AT89C51需5V電壓,所以可以采用USB接口的5V電源對其供電,復(fù)位電路可采用上電復(fù)位、按鍵電平復(fù)位、按鍵脈沖復(fù)位3種,本次采用按鍵電平復(fù)位。如電路原理圖中的電源和復(fù)位模塊。</p><p> ?。?) 顯示模塊:
7、該模塊由8位8段共陽極數(shù)碼管組成,由8個(gè)PNP型三極管分別驅(qū)動(dòng)其發(fā)光,從左至右位控分別接于單片機(jī)的P2.7-P2.0中上,段控a-dP接于單片機(jī)的P0.0-P0.7口上,使用動(dòng)態(tài)顯示從右向左循環(huán)點(diǎn)亮每一位數(shù)碼管。如電路原理圖中的數(shù)碼管電路。</p><p> (4) 鍵盤模塊:鍵盤由4個(gè)獨(dú)立式按鍵組成,S0-S4鍵分別接在單片機(jī)的P1.0-P1.4口,并由上拉電阻上拉使其成為電位為高。如電路原理圖中的獨(dú)立鍵盤
8、模塊。</p><p> ?。?) 時(shí)鐘模塊:為了保證同步工作方式的思想,單片機(jī)必須有時(shí)鐘信號,以使其系統(tǒng)在時(shí)鐘信號的控制下按時(shí)序協(xié)調(diào)工作。如電路原理圖中的晶振電路。</p><p> 3.3 數(shù)字電子鐘電路原理圖</p><p> 2.31數(shù)字電子鐘電路原理圖</p><p> 3.4 數(shù)字電子鐘元器件清單</p>
9、<p> 數(shù)字電子鐘元器件清單</p><p> 四、 數(shù)字電子鐘軟件系統(tǒng)的設(shè)計(jì)</p><p> 4.1 數(shù)字電子鐘軟件系統(tǒng)主要模塊功能簡要介紹</p><p> ?。?) 主程序:主程序的主要功能是進(jìn)行定時(shí)器/計(jì)數(shù)器,顯示緩沖區(qū)的初始化,顯示,以及判斷是否有功能鍵按下,判斷按下的鍵并調(diào)相應(yīng)的鍵功能程序。</p><p>
10、 ?。?) 鍵功能程序:鍵功能程序的主要功能是執(zhí)行對應(yīng)的功能,Menu鍵為啟動(dòng)/調(diào)整鍵,第一次按下則由待機(jī)狀態(tài)進(jìn)入運(yùn)行狀態(tài)啟動(dòng)時(shí)鐘,從00-00-00開始顯示,然后按下為奇數(shù)則暫停,進(jìn)入調(diào)時(shí)狀態(tài),按下Sec鍵則秒加1,按下Min鍵則分加1,按下Hour鍵則時(shí)加1;若按下為偶數(shù)則進(jìn)入時(shí)鐘運(yùn)行狀態(tài)。</p><p> ?。?) 中斷服務(wù)程序:中斷服務(wù)程序的主要功能是進(jìn)行計(jì)時(shí)操作,程序開始先判斷計(jì)數(shù)溢出是否滿了16次,
11、若不滿16次則表明沒有達(dá)到最小計(jì)時(shí)單位秒,則中斷返回;若滿16次表明已達(dá)到最小計(jì)時(shí)單位秒,則程序斷續(xù)向下執(zhí)行,進(jìn)行分和時(shí)的計(jì)時(shí)。</p><p> ?。?) 顯示子程序:顯示程序的主要功能是將顯示緩沖區(qū)的段控碼正確的顯示在數(shù)碼管上,采用動(dòng)態(tài)顯示,從右向左循環(huán)點(diǎn)亮每一位數(shù)碼管。</p><p> ?。?) 鍵掃子程序:鍵掃子程序的主要功能是判斷是否有鍵按下,是哪個(gè)鍵按下,并將鍵值保存在20H
12、中。</p><p> 4.2 數(shù)字電子鐘軟件系統(tǒng)原理流程框圖</p><p><b> 主程序</b></p><p> 計(jì)時(shí)中斷 顯示 鍵盤掃描子程序 </p><p> 子程序 子程序</p><p> 定
13、時(shí) 延時(shí) 時(shí)分秒</p><p> 子程序 子程序 設(shè)定程序</p><p><b> 4.3軟件流程圖</b></p><p> 4.3.1控制地址列表</p><p> 4.3.2軟
14、件子程序流程圖</p><p> 計(jì)時(shí)子程序流程框圖 顯示子程序流程框圖</p><p> 4.4數(shù)字電子鐘軟件系統(tǒng)程序清單</p><p> #include<reg52.h></p><p> #include<intrins.h></p&g
15、t;<p> #define uint unsigned int</p><p> #define uchar unsigned char</p><p> uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99, // 數(shù)碼管為共陽</p><p> 0x92,0x82,0xf8,0x80,0x90,0x
16、bf};//P2口為低則選通</p><p> uchar data key_temp=0xff; //關(guān)中斷和定時(shí)器</p><p> uchar data key_save=0xff,c=0;</p><p> uchar hour=0,min=0,sec=0,t,num,temp; //使程序初始化,時(shí)
17、間清</p><p><b> 零 </b></p><p> uchar data dis[8];</p><p> void init();</p><p> void delay(uint);</p><p> void key_scan();</p><
18、;p> void main()</p><p> { init();</p><p> TR0=1; //啟動(dòng)定時(shí)器0,開始定時(shí)</p><p> TR1=1; //啟動(dòng)定時(shí)器1,</p><p> temp=0x7f; //
19、給temp賦值在送給P2口</p><p><b> P2=temp;</b></p><p><b> num=7;</b></p><p><b> while(1)</b></p><p><b> {</b></p><
20、p> key_temp=P3; //鍵值在P3口,讀入鍵值</p><p> if(key_temp==0xfe) </p><p><b> { c++;</b></p><p> TR0=0; //關(guān)閉T0 </p><p> if(c==2)
21、 </p><p><b> {</b></p><p><b> TR0=1;</b></p><p><b> c=0;</b></p><p><b> }</b></p><p><b&
22、gt; }</b></p><p><b> if(c==1)</b></p><p><b> {</b></p><p> if(key_temp!=key_save) //鍵值改變 //</p><p><b> {</b></p>
23、;<p> key_save=key_temp; //保存鍵值</p><p> key_scan();</p><p><b> }</b></p><p><b> }}</b></p><p><b> }</b></p>
24、<p> void time1() interrupt 3 //主函數(shù),利用定時(shí)器1,初值為1000 </p><p> { TH1=(65536-1000)/256;</p><p> TL1=(65536-1000)%256;</p><p> dis[0]=hour/10; //時(shí)計(jì)數(shù)器個(gè)位賦給dis[0]</p
25、><p> dis[1]=hour%10; //時(shí)計(jì)數(shù)器個(gè)位賦給dis[1]</p><p> dis[2]=10; // dis[2]為“-”段碼的偏移量 </p><p> dis[3]=min/10;</p><p> dis[4]=min%10;</p><p>
26、; dis[5]=10;</p><p> dis[6]=sec/10;</p><p> dis[7]=sec%10;</p><p> P0=0xff; //消隱</p><p> temp=_crol_(temp,1);</p><p><b> P2=temp;</b&g
27、t;</p><p> P0=table[dis[num]];</p><p> if(num==0)</p><p><b> num=8;</b></p><p><b> num--;</b></p><p><b> }</b><
28、/p><p> void time0() interrupt 1 //中斷服務(wù)程序</p><p> {TH0=(65536-50000)/256; //設(shè)置計(jì)數(shù)初值</p><p> TL0=(65536-50000)%256;</p><p><b> t++;</b>
29、;</p><p><b> if(t==20)</b></p><p> {sec++; //秒計(jì)數(shù)器加一</p><p><b> t=0;</b></p><p> if(sec==60) //秒計(jì)數(shù)器值到60</p><
30、;p> {sec=0; //秒計(jì)數(shù)器清零 </p><p> min++; //分計(jì)數(shù)器加一(進(jìn)為60S=1m)</p><p> if(min==60) //分計(jì)數(shù)值到60</p><p> {min=0; //分計(jì)數(shù)清零</p><p> hour++;
31、 //時(shí)計(jì)數(shù)加一 </p><p> if(hour==24) //時(shí)計(jì)數(shù)到24 </p><p><b> {</b></p><p> hour=0; //時(shí)計(jì)數(shù)器清零</p><p><b> }</b></p>&
32、lt;p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void key_scan()</p><p>&l
33、t;b> {</b></p><p> if(key_save==0xfd) // P1口鍵值</p><p> {if(hour==23)</p><p><b> hour=0;</b></p><p><b> else</b></
34、p><p><b> hour++;}</b></p><p> if(key_save==0xfb) </p><p> {if(min==59)</p><p><b> min=0;</b></p><p><b> else</b>&
35、lt;/p><p><b> min++;}</b></p><p> if(key_save==0xf7) // 秒的計(jì)時(shí)口, 判斷秒若不為59則加1,為59時(shí)轉(zhuǎn)為零 </p><p> {if(sec==59)</p><p><b> sec=0;<
36、;/b></p><p><b> else</b></p><p><b> sec++;}</b></p><p><b> }</b></p><p> void init() </p><p> { hour=0;
37、 //時(shí),分,秒為零</p><p><b> min=0;</b></p><p><b> sec=0;</b></p><p> EA=1; //開中斷,允許T0,T1中斷</p><p><b> ET0=1;</b></p>
38、;<p><b> ET1=1;</b></p><p> TMOD=0x11; //使定時(shí)器1,0都工作在方式1 </p><p> TH0=(65536-50000)/256; </p><p> TL0=(65536-50000)%256;</p><p> TH1=(6553
39、6-1000)/256;</p><p> TL1=(65536-1000)%256;</p><p><b> }</b></p><p> 五、誤差分析設(shè)計(jì)結(jié)論</p><p> 5.1 數(shù)字電子鐘的誤差分析</p><p> 雖說采用軟件方式來產(chǎn)生1s的基本時(shí)間,然而定時(shí)器/計(jì)數(shù)器
40、本身不能產(chǎn)生標(biāo)準(zhǔn)的1s定時(shí),產(chǎn)生一個(gè)標(biāo)準(zhǔn)時(shí)間之后進(jìn)行循環(huán)計(jì)數(shù)得到1s,但CPU執(zhí)行代碼需要1-2μs的時(shí)間,因此產(chǎn)生的1s,1分,1小時(shí),都會(huì)略大于標(biāo)準(zhǔn)的時(shí)間。此外,單片機(jī)也易受外界環(huán)境的影響,比如溫度、濕度等干擾。故應(yīng)該讓單片機(jī)工作在適宜的環(huán)境下,同時(shí)采用實(shí)時(shí)時(shí)鐘芯片,這樣能將誤差降低到最小。</p><p><b> 5.2設(shè)計(jì)心得</b></p><p>
41、現(xiàn)在來回想單片機(jī)的課程設(shè)計(jì),有許多感觸,從最開始接觸單片機(jī)和C語言,到現(xiàn)在能獨(dú)立完成一個(gè)課程設(shè)計(jì),我必須得感謝老師的諄諄教導(dǎo)和辛勤付出,是老師給了我動(dòng)力。在匯編編程時(shí),書本上的很多知識又學(xué)的很不扎實(shí),程序基本語句理解不夠透徹,導(dǎo)致編一個(gè)簡單程序都需要大量時(shí)間且過于復(fù)雜,真是耗時(shí)耗力耗單片機(jī)內(nèi)存。 也深刻理解了只有踏實(shí)講課本上的每一句程序讀懂,多讀程序,多看程序,才能更好的編程序。雖然本程序不是我自己編寫的,但還是給了我很多知識,應(yīng)用到的
42、計(jì)時(shí),中斷都是我們上課時(shí)講的重點(diǎn)。應(yīng)用protues將實(shí)際結(jié)果運(yùn)行出來,由于數(shù)字電子鐘的設(shè)計(jì)由于采用的是用硬件定時(shí)和軟件計(jì)數(shù)的方式產(chǎn)生的1s,而忽略了CPU執(zhí)行指令所需的時(shí)間,故時(shí)鐘顯示不是很精確。本次的課程設(shè)計(jì)讓我學(xué)到了很多知識,相信以后自己有能力編寫一個(gè)更加準(zhǔn)確的電子鐘。</p><p><b> 參考文獻(xiàn):</b></p><p> [1] 單品機(jī)原理及應(yīng)用
43、, 西安電子科技大學(xué)出版社</p><p> [2] 單片機(jī)的C語言應(yīng)用程序設(shè)計(jì),華中科技大學(xué)出版社</p><p> [3] 模擬電子技術(shù).高等教育出版社</p><p> [4] 電路分析基礎(chǔ).清華大學(xué)出版社</p><p><b> 致 謝</b></p><p> 本次單片機(jī)的
44、C語言應(yīng)用程序課程設(shè)計(jì)能夠順利的完成,是小組各組員團(tuán)結(jié)努力和**老師的指導(dǎo)下完成的。正是因?yàn)?老師那一絲不茍、剛正不阿的態(tài)度才使我們有了做課程設(shè)計(jì)的動(dòng)力。感謝老師的助我們開拓解決問題思路,精心點(diǎn)撥、熱忱鼓勵(lì)。老師一絲不茍的作風(fēng),嚴(yán)謹(jǐn)求實(shí)的態(tài)度,踏踏實(shí)實(shí)的精神,不僅授我以文,而且教我做人,是授以終生受益無窮之道。對*老師的感激之情是無法用言語表達(dá)的。</p><p> 還有感謝學(xué)校對我們此次課程設(shè)計(jì)的大力支持,在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)的電子鐘的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---基于51單片機(jī)的電子鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)的數(shù)字電子鐘
- 單片機(jī)課程設(shè)計(jì)報(bào)告---單片機(jī)的電子鐘設(shè)計(jì)
- 電子鐘單片機(jī)課程設(shè)計(jì)
- 電子鐘課程設(shè)計(jì)--基于單片機(jī)的電子鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--電子鐘
- 單片機(jī)課程設(shè)計(jì)(電子鐘)
- 單片機(jī)課程設(shè)計(jì)--- 基于51單片機(jī)的簡約電子鐘
- 基于單片機(jī)的電子鐘課程設(shè)計(jì)
- 基于單片機(jī)的電子鐘課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-基于單片機(jī)的多功能電子鐘的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)——數(shù)字電子鐘
- 單片機(jī)課程設(shè)計(jì)--數(shù)字電子鐘
- 單片機(jī)課程設(shè)計(jì)--數(shù)字電子鐘
- 單片機(jī)課程設(shè)計(jì)---智能電子鐘
- 單片機(jī)原理課程設(shè)計(jì)--電子鐘
- 單片機(jī)數(shù)字電子鐘課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---電子鐘的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字電子鐘
評論
0/150
提交評論