版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 1 緒論</b></p><p> 電子鐘已成為人們?nèi)粘I钪斜夭豢缮俚奈锲罚瑥V泛用于個人、家庭以及車站、影院、辦公室等公共場所,給人們的生活、學(xué)習、工作帶來了極大的方便。隨著電子技術(shù)的發(fā)展,人們已不再滿足于鐘表原先最簡單的報時,希望出現(xiàn)一些新的功能,諸如日歷的顯示、鬧鐘的非接觸式止鬧、秒表功能、重要日期倒計時顯示等,以帶來更大的方便,而所有這些,又都是以數(shù)
2、字化的電子時鐘為基礎(chǔ)的。因此,研究數(shù)字電子鐘及其擴展應(yīng)用,有著非常現(xiàn)實的意義和實用價值。</p><p> 單片機是指將微處理器、一定容量的RAM和ROM以及I/O口、定時器等電路集成在一塊芯片上的完整計算機系統(tǒng)。89C51單片機是一種低功耗、高性能的,它采用CMOS工藝和高密度非易失性存儲器(NURAM)技術(shù),其輸出引腳和指令系統(tǒng)都與MCS-51兼容;片內(nèi)的Flash ROM允許在系統(tǒng)內(nèi)改編程序或用常規(guī)的NU
3、RAM編程器來編程。因此,89C51是一種功能強、靈活性高,而且價格合理的單片機,可以方便的利用AT89C51定時器和6位7段數(shù)碼管,設(shè)計一個電子時鐘。顯示格式位 “XX XX XX”,從左向右分別是:時、分、秒。</p><p><b> 1.1 設(shè)計目的</b></p><p> 利用MCS-51芯片及相關(guān)芯片設(shè)計數(shù)字鐘。</p><p
4、><b> 1.2 設(shè)計內(nèi)容</b></p><p><b> 1)硬件設(shè)計</b></p><p> 設(shè)計數(shù)字鐘的電路原理圖,用PROTEUS繪制硬件電路。制作實物。</p><p><b> 2)軟件設(shè)計</b></p><p> (1)時、分、秒的設(shè)置及顯
5、示;</p><p> (2)畫出程序框圖;</p><p> (3)調(diào)試與分析。用PROTEUS仿真。</p><p><b> 2 硬件設(shè)計</b></p><p> 2.1 設(shè)計的總體思路</p><p> 硬件系統(tǒng)主要由單片機最小應(yīng)用系統(tǒng)、LED數(shù)碼管顯示模塊、晶振模塊、按鍵模
6、塊等組成。在使用單片機的過程中必定會使用單片機的最小系統(tǒng),由于我購買的單片機內(nèi)部沒有晶振,所以設(shè)計了外接的晶振模塊。鑒于本次課程設(shè)計要求制作數(shù)字鐘,所以使用了六位7段數(shù)碼管來顯示“XX XX XX”,從左向右分別是:時、分、秒。除了能上電復(fù)位,還設(shè)計了用三個按鍵實現(xiàn)時、分、秒的調(diào)制,使用方便靈活。</p><p> 2.2 單片機最小系統(tǒng)</p><p> 對51系列單片機來說,單
7、片機+晶振電路+復(fù)位電路,便組成了一個最小系統(tǒng)。見圖2.1。</p><p><b> 圖2.1</b></p><p><b> 2.3 晶振模塊</b></p><p> 在AT89C51芯片內(nèi)部有一個高增益反相放大器,其輸入端為芯片引腳XTAL1(19腳),輸出端為引腳XTAL2(18腳)。而在芯片內(nèi)部,XTA
8、L1和XTAL2之間跨接晶體振蕩器和微調(diào)電容,從而構(gòu)成一個穩(wěn)定的自激振蕩器。時鐘電路產(chǎn)生的振蕩脈沖經(jīng)過觸發(fā)器進行二分頻之后,才成為單片機的時鐘脈沖信號。見圖2.2。</p><p><b> 圖2.2</b></p><p><b> 2.4 按鍵模塊</b></p><p> 用三個按鍵實現(xiàn)對時分秒的設(shè)置,其中一個
9、按鍵實現(xiàn)對時分秒的控制,接P1.4口,另外兩個按鍵接單片機的P1.5和P1.6口實現(xiàn)加一和減一的功能。</p><p> 2.5 LED數(shù)碼管顯示模塊</p><p> 本次課程設(shè)計由于要顯示時、分、秒,所以采用廣泛使用的數(shù)碼管動態(tài)顯示接口。動態(tài)驅(qū)動是將所有數(shù)碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個數(shù)碼管的公共極COM增加位
10、選通控制電各自獨立的I/O線控制,當單片機輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,但究竟是哪個數(shù)碼管會顯示出字形,取決于單片機對位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮。通過分時輪流控制各個數(shù)碼管的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。在輪流顯示過程中,每位數(shù)碼管的點亮時間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實際上各
11、位數(shù)碼管并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感,動態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。</p><p> 將數(shù)碼管的位選信號接P2口的六個位,段選信號接P0口的八個位。再通過Keil軟件以及51C語言編程實現(xiàn)數(shù)字鐘的功能。本系統(tǒng)利用6位LED數(shù)碼管顯示時間,共陰極結(jié)構(gòu),當要顯示某個數(shù)字時只要將數(shù)字所對應(yīng)的引腳送入低電平。</
12、p><p><b> 2.6 硬件連接圖</b></p><p> 通過對設(shè)計電路的各個模塊的分析,可以用PROTEUS繪制硬件電路。如圖2.3所示。</p><p><b> 圖2.3</b></p><p><b> 2.7制作實物</b></p><
13、;p><b> ?。ㄒ姼戒汚)</b></p><p><b> 3 軟件設(shè)計</b></p><p> 單片機最主要的功能是通過程序來實現(xiàn)各種功能,有了硬件的描述,再加上軟件的編程,通過不斷的調(diào)試與修改程序就能實現(xiàn)本次課程設(shè)計的目的。</p><p> 3.1 程序流程圖</p><p
14、> 系統(tǒng)總的流程圖,見圖3.1。</p><p><b> 圖3.1</b></p><p> 3.2 調(diào)試與分析</p><p> 由于在焊接實物之前,我大量查閱了資料,弄明白了此次課程設(shè)計任務(wù)的基本原理,對原理有了基本的認識后,就開始了焊接工作。雖然焊接花費了我大量的時間,但是在焊好以后上電時,所有的數(shù)碼管都亮,說明焊接連線
15、沒有短路情況。</p><p> 硬件連接好以后就是軟件編程,但是編寫程序中遇到了挺多問題,比如:編寫程序是沒有消除抖動。在同學(xué)的幫助下,使得數(shù)碼管能正常實現(xiàn)數(shù)字鐘的功能。</p><p><b> 3.3 源程序</b></p><p><b> (見附錄B)</b></p><p>&l
16、t;b> 4 心得與結(jié)論</b></p><p> 本次課程設(shè)計以AT89C51為核心部件,實現(xiàn)時間的設(shè)置功能。通過六位7段數(shù)碼管顯示可方便地校對時間,利用Keil軟件編程完成時鐘的功能。</p><p> 通過實物的焊接以及軟件的仿真和編寫程序基本完成了數(shù)字電子鐘的功能,盡量做到了硬件電路簡單穩(wěn)定,減小電磁干擾和其它環(huán)境干擾,充分發(fā)揮了軟件編程的優(yōu)點,減小了因器
17、件精度不夠引起的誤差。由于時間有限和本身知識水平的局限,我認為此次設(shè)計還有需要改進和提高的地方,例如選用更高精度的元器件,硬件電路更加精確穩(wěn)定等。</p><p><b> 參考文獻</b></p><p> [1] 楊文龍.單片機原理及應(yīng)用[M].西安電子科技大學(xué)出版社,1993.</p><p> [2] 李朝青.單片機原理及接口
18、技術(shù)[M].北京航空航天大學(xué)出版社,2003.</p><p> [3] 胡漢才.單片機原理及系統(tǒng)設(shè)計[M].清華大學(xué)出版社,2003.</p><p> [4] 楊忠煌,黃博俊,李文昌.單芯片8051實務(wù)與應(yīng)用[M].中國水利水電出版社,2001.</p><p> [5] 王守中,51單片機開發(fā)入門與典型實例[M].人民郵電出版社.</p>
19、;<p> [6] 黃文梅.系統(tǒng)分析與仿真:MATLAB語言及應(yīng)用[M].國防科技大學(xué)出版社,1999.</p><p> [7] 閻石.數(shù)字電子技術(shù)(第五版)[M].北京高等教育出版社,2006.</p><p> [8] 蔡明文,馮先成.單片機課程設(shè)計[M].華中科技大學(xué)出版社,2007.</p><p> [9] 陳明螢.8051
20、單片機課程設(shè)計實訓(xùn)材料[M].清華大學(xué)出版社,2004.</p><p> [10] 李可為.數(shù)字鐘電路及應(yīng)用[M].電子工業(yè)出版社,1996.</p><p> [11] 夏繼強,沈德金.單片機實驗與實踐教程(二)[M]北航出版社,2001.</p><p> [12] 張紅潤,藍清華.單片機應(yīng)用技術(shù)教程[M]清華大學(xué)出版社,1997.</p&g
21、t;<p> [13] 周立功.單片機實驗與實踐[M]北京航空航天大學(xué)出版社,2004.</p><p> [14] 何立民.單片機應(yīng)用文集(一)[M].北京航空航天大學(xué)出版社,1991.</p><p> [15] 方大千,鮑俏偉.使用電子控制電路[M].國防科技出版社,2003. </p><p> [16] 曾繁泰.EDA工程概論
22、[M].清華大學(xué)出版社,2002.</p><p> [17] 譚會生,張昌凡.EDA技術(shù)及應(yīng)用[M].西安電子科技大學(xué)出版社,2004.</p><p> [18] 李強.鍵盤接口程序計數(shù)[J].電子設(shè)計出版社,2003.</p><p> [19] 肖來勝.單片機技術(shù)實用教程[M].華中科技大學(xué)出版社,2004.</p><p&g
23、t; [20] 楊曉川.Portel設(shè)計指導(dǎo)教程[M].清華大學(xué)出版社,2003.</p><p><b> 致謝</b></p><p> 首先,很感謝學(xué)院給我們電氣工程及其自動化專業(yè)的學(xué)生一次把理論加深的機會,使得我們更好的理解《單片機原理及接口技術(shù)》這門課程,通過實物的焊接以及軟件仿真使得自己的動手能力有了一定的提高;其次,雖然這次課程設(shè)計是每個人制作一
24、個實物,但是大家一起討論,分析,最終調(diào)試成功,使大家的思維更加開闊;最后,感謝余老師的研究生給予我們焊接工具的支持。</p><p><b> 附錄A</b></p><p><b> 制作的實物照片</b></p><p><b> 附錄B</b></p><p>&l
25、t;b> 源程序清單</b></p><p> #include<reg52.h></p><p> #define uint unsigned int</p><p> #define uchar unsigned char</p><p> uint hhh,mmm,sss;</p>
26、<p> uint status;</p><p><b> //函數(shù)聲明 </b></p><p> void delayMS(uint t) ; </p><p> void keyprocess(unsigned char key);</p><p> void display();<
27、;/p><p> void timer0();</p><p> main() //主函數(shù)</p><p><b> { </b></p><p> ucharsegcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0,1,2,3
28、,4,5,6,7,8,9</p><p> uchar dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//數(shù)碼管位選碼</p><p> buffer[]={0,0,0,0,0,0,0,0};</p><p> bit keyrel;</p><p> uchar buf;</p>
29、<p> uchar keyin;</p><p><b> keyrel=1;</b></p><p><b> buf=0xff;</b></p><p> TMOD=0x01; //T0工作在方式1,16位計數(shù)器</p><p> TH0=(65536-100
30、0)/256;// 定時器0設(shè)置延時1ms中斷初始值</p><p> TL0=(65536-1000)%256; </p><p> TR0=1; </p><p> IE=0x82; //開定時器0中斷</p><p><b> status=0;</b></p>&l
31、t;p><b> //延時函數(shù)</b></p><p> void delayMS(uint t) // 晶振頻率12MHZ</p><p><b> {</b></p><p><b> uint i;</b></p><p> while(t--)
32、</p><p> for(i=0;i<125;i++);</p><p><b> }</b></p><p> while(1) //鍵掃描程序 </p><p> { </p><p> keyin=P1&0xf0;</
33、p><p> if(keyin!=0xf0) </p><p><b> { </b></p><p> delayMS(10);</p><p> if(keyin!=0xf0)</p><p><b> {</b></p><p>
34、 if(keyrel==1)</p><p><b> {</b></p><p><b> keyrel=0;</b></p><p> buf = keyin; //buf用來暫時存放鍵值</p><p><b> }</b></p><p
35、><b> else</b></p><p><b> {</b></p><p><b> keyrel=1;</b></p><p> keyprocess(buf); //調(diào)用按鍵處理函數(shù)</p><p> buf = 0xff;</p>
36、<p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> keyrel=1;</b></
37、p><p> keyprocess(buf);</p><p><b> buf=0xff;</b></p><p><b> } </b></p><p> display();</p><p><b> }</b></p>&l
38、t;p><b> }</b></p><p><b> //按鍵處理函數(shù)</b></p><p> void keyprocess(unsigned char key) //鍵值處理,正常計時,設(shè)置時分秒</p><p> { switch (key)</p><p><b&
39、gt; {</b></p><p> case 0xe0:status++; //按下設(shè)置鍵</p><p> if (status>=4) status = 0; </p><p><b> break;</b></p><p> case 0xd0:switch(status
40、) //按下加1鍵,3種模式下加1</p><p><b> {</b></p><p> case 0x01:if(hhh<24) hhh++;</p><p> else hhh=0; break; </p><p> case 0x02:if(mmm<60) mmm++;</p
41、><p> else mmm=0; break;</p><p> case 0x03:if(sss<60) sec++;</p><p> else sss=0; break; </p><p><b> }</b></p><p><b> break;&l
42、t;/b></p><p> case 0xb0:switch(status) //按下減1鍵</p><p><b> {</b></p><p> case 0x01:if(hhh>0) hhh--;</p><p> else hour=23; break;</p><
43、;p> case 0x02:if(mmm>0) mmm--;</p><p> else min=59; break;</p><p> case 0x03:if(sss>0) sss--;</p><p> else sss=59; break; </p><p><b> }<
44、/b></p><p><b> break; </b></p><p> default:break;</p><p><b> }</b></p><p><b> }</b></p><p><b> //數(shù)碼管顯示函數(shù)&
45、lt;/b></p><p> void display()</p><p><b> {</b></p><p><b> uchar i;</b></p><p><b> //正常計時顯示</b></p><p><b>
46、 {</b></p><p> buffer[0]=hhh/10; // 顯示時的十位</p><p> buffer[1]=hhh%10 // 顯示時的個位</p><p> buffer[2]=mmm/10; // 顯示分的十位</p><p> buffer[3]=mmm
47、%10; // 顯示分的個位</p><p> buffer[4]=sss/10; // 顯示秒的十位</p><p> buffer[5]=sss%10; // 顯示秒的個位</p><p> for(i=0;i<6;i++)</p><p><b> { </b
48、></p><p> P0=segcode[buffer[i]];</p><p> P2=dispbit[i];</p><p> delayMS(1); //防止數(shù)碼管顯示的時候閃動</p><p> P2=0xff; //</p><p><b> P0=0xff;
49、</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //定時器0中斷函數(shù)</p><p> void timer0() interrupt 1
50、 using 2 </p><p><b> { </b></p><p> static uint count;</p><p> TH0=(65536-1000)/256; // 定時器0設(shè)置初始值1ms中斷初始值</p><p> TL0=(65536-1000)%256; </p&g
51、t;<p><b> TR0=1;</b></p><p> count++; //正常計時</p><p> if(count>=1000) // 定時 1S 到,以下為時鐘的正常走鐘邏輯</p><p> { </p><p><
52、b> count=0;</b></p><p><b> sss++;</b></p><p> if(sss>60)</p><p> { </p><p> sss=0; mmm++;</p><p> if(mmm>60
53、) </p><p> { </p><p> mmm=0; hhh++;</p><p> if(hhh>24) </p><p><b> { </b></p><p><b> hhh=0; </b></p><
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設(shè)計--電子鐘
- 單片機課程設(shè)計(電子鐘)
- 《單片機技術(shù)》電子鐘課程設(shè)計---數(shù)字電子鐘
- 電子鐘課程設(shè)計--基于單片機的電子鐘設(shè)計
- 單片機課程設(shè)計——數(shù)字電子鐘
- 單片機課程設(shè)計--數(shù)字電子鐘
- 單片機課程設(shè)計--數(shù)字電子鐘
- 單片機課程設(shè)計---智能電子鐘
- 單片機原理課程設(shè)計--電子鐘
- 單片機數(shù)字電子鐘課程設(shè)計
- 單片機課程設(shè)計--數(shù)字電子鐘
- 單片機課程設(shè)計-智能電子鐘
- 單片機課程設(shè)計--數(shù)字鐘電子鐘
- 單片機課程設(shè)計--簡單電子鐘設(shè)計
- 單片機課程設(shè)計--數(shù)字電子鐘設(shè)計
- 單片機課程設(shè)計---電子鐘的設(shè)計
- 單片機課程設(shè)計報告-電子鐘設(shè)計
- 單片機電子鐘課程設(shè)計---數(shù)字電子鐘
- 單片機課程設(shè)計報告---單片機的電子鐘設(shè)計
- 基于單片機的電子鐘課程設(shè)計
評論
0/150
提交評論