版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 單片機原理與應(yīng)用課程設(shè)計</p><p> 題 目: </p><p> 系 部: </p><p> 專 業(yè): </p><p>
2、班 級: </p><p> 學生姓名: 學 號: </p><p> 2015年 6 月 * 日</p><p><b> 目 錄</b></p><p> 1 設(shè)計任務(wù)與要求1</p>&
3、lt;p> 1. 1 設(shè)計任務(wù)1</p><p> 1.2 設(shè)計要求1</p><p><b> 2 設(shè)計方案1</b></p><p> 2.1 設(shè)計思路1</p><p> 2.2 芯片選擇1</p><p> 2.2.1 單片機STC89C521&l
4、t;/p><p> 2.2.2 LED數(shù)碼管2</p><p> 3 硬件電路設(shè)計5</p><p> 3.1 電路設(shè)計框圖5</p><p> 3.2 主要單元電路的設(shè)計5</p><p> 3.2.1 單片機主控制模塊的設(shè)計5</p><p> 3.2.2 顯示模
5、塊電路................................... 6</p><p> 4 主要參數(shù)計算與分析7</p><p> 4.1 計算與分析7</p><p><b> 5 調(diào)試過程7</b></p><p> 5.1 硬件調(diào)試7</p><p>
6、5.1.1 硬件電路故障7</p><p> 5.1.2 硬件調(diào)試方法7</p><p> 5.2 軟件調(diào)試8</p><p> 5.2.1 軟件電路故障8</p><p> 5.2.2 軟件調(diào)試方法8</p><p><b> 6 結(jié)論9</b></p&g
7、t;<p><b> 7 附錄10</b></p><p> 7.1 數(shù)字時鐘實物圖10</p><p> 7.2 源程序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12</p><p> 1 設(shè)計任務(wù)與要求</p>&
8、lt;p> 1. 1 設(shè)計任務(wù)</p><p> 本課題實驗主要采用AT89C52芯片來完成一個簡易的電子時鐘。可通過控制按鍵來調(diào)整時間及時間清零</p><p><b> 1.2 設(shè)計要求</b></p><p> 設(shè)計一個以單片機為核心的數(shù)字時鐘,可實現(xiàn)功能:</p><p><b>
9、顯示時、分、秒功能</b></p><p> 具備時、分和秒校準功能及清零功能;</p><p><b> 2 設(shè)計方案</b></p><p><b> 2.1 設(shè)計思路</b></p><p> 系統(tǒng)分為主控模塊、時鐘電路模塊、按鍵掃描模塊、LED顯示模塊、電源電路、復位
10、電路、晶振電路等模塊。主控模塊采用AT89C51單片機,按鍵模塊用四個按鍵,用于調(diào)整時間,顯示模塊采用LED數(shù)碼管。</p><p><b> 2.2 芯片選擇</b></p><p> 2.2.1單片機(AT89C52)</p><p> ?。ㄒ唬〢T89C52的介紹</p><p> AT89C52單片機是在
11、一塊芯片中集成了CPU、RAM、ROM、定時器/計數(shù)器和多種功能的I/O接口電路等一臺計算機所需要的基本功能部件,AT89C52單片機內(nèi)包含下列幾個部件:</p><p> ?。?) 一個8位CPU;</p><p> ?。?)一個片內(nèi)振蕩器及時鐘電路;</p><p> ?。?)4K字節(jié)ROM程序存儲器;</p><p> ?。?)128字
12、節(jié)RAM數(shù)據(jù)存儲器;</p><p> (5)兩個16位定時器/計數(shù)器;</p><p> ?。?)可尋址64K外部數(shù)據(jù)存儲器和64K外部程序存儲器空間的控制電路;</p><p> ?。?)32條可編程的I/O線(四個8位并行I/O端口);</p><p> ?。ǘ?AT89C52單片機的部分管腳說明:</p><
13、p> AT89C52單片機采用40條引腳雙列直插式器件,引腳除5V( 40腳)和電源地( 20腳)外,其功能分為時鐘電路、控制信號、輸入/輸出三大部分:</p><p> STC89C52引腳圖 STC89C52實物圖</p><p> (三)另外介紹一下輸入輸出引腳(本系統(tǒng)只用到P0、P1、P2口):</p><p&g
14、t; (1) P0端口[P0.0-P0.7] 是一個8位漏極開路型雙向I/O端口,端口置1(對端口寫1)時作高阻抗輸入端。作為輸出口時能驅(qū)動8個TTL。</p><p> 對內(nèi)部Flash程序存儲器編程時,接收指令字節(jié);校驗程序時輸出指令字節(jié),要求外接上拉電阻。在訪問外部程序和外部數(shù)據(jù)存儲器時,P0口是分時轉(zhuǎn)換的地址(低8位)/數(shù)據(jù)總線,訪問期間內(nèi)部的上拉電阻起作用。</p><p>
15、 (2) P1端口[P1.0-P1.7]是一個帶有內(nèi)部上拉電阻的8位雙向I/0端口。輸出時可驅(qū)動4個TTL。端口置1時,內(nèi)部上拉電阻將端口拉到高電平,作輸入用。</p><p> 對內(nèi)部Flash程序存儲器編程時,接收低8位地址信息。</p><p> (3) P2端口[P2.0-P2.7]是一個帶有內(nèi)部上拉電阻的8位雙向I/0端口。輸出時可驅(qū)動4個TTL。端口置1時,內(nèi)部上拉電阻將
16、端口拉到高電平,作輸入用。對內(nèi)部Flash程序存儲器編程時,接收高8位地址和控制信息。</p><p> 在訪問外部程序和16位外部數(shù)據(jù)存儲器時,P2口送出高8位地址。而在訪問8位地址的外部數(shù)據(jù)存儲器時其引腳上的內(nèi)容在此期間不會改變</p><p> 2.2.2 LED數(shù)碼管</p><p> 本課程設(shè)計采用共陽極數(shù)碼管</p><p>
17、;<b> 3 硬件電路設(shè)計</b></p><p> 3.1 電路設(shè)計框圖</p><p> 圖3.1 電路設(shè)計框圖</p><p> 3.2 主要單元電路設(shè)計</p><p> 單元電路的設(shè)計包括主控制系統(tǒng)、時鐘電路模塊、顯示模塊、復位電路的設(shè)計。</p><p> 3.2.
18、1 單片機主控制模塊的設(shè)計</p><p> 單片機的最小系統(tǒng)如下圖所示,18引腳和19引腳接時鐘電路,XTAL1接外部晶振和30PF電容的一端,在片內(nèi)它是振蕩器倒相放大器的輸入,XTAL2接外部晶振和30PF電容的另一端,在片內(nèi)它是振蕩器倒相放大器的輸出.第9引腳為復位輸入端,接上電容,電阻及開關(guān)后夠上電復位電路,20引腳為接地端,40引腳為電源端。</p><p> 圖3.2.1
19、 主控制系統(tǒng)</p><p> 3.2.2 顯示模塊電路</p><p> 顯示電路采用8位共陽極LED數(shù)碼管。內(nèi)部的三個數(shù)碼管共用a~dp這8根數(shù)據(jù)線,共有12個引腳,引腳排列依然是從左下角的那個腳(1腳)開始,以逆時針方向依次為1~12腳。</p><p> 4 主要參數(shù)計算與分析</p><p> 4.1 計算與分析<
20、;/p><p> 本設(shè)計完成了設(shè)計任務(wù)的所有要求。單片機采用STC89C52,編譯環(huán)境為keil,程序使用C語音進行編寫。主要是程序的調(diào)試。程序調(diào)試的難點在于設(shè)計的功能模塊過多,程序結(jié)構(gòu)比較復雜,使得調(diào)試起來比較費時間。完成設(shè)計任務(wù)的要求1:顯示時、分、秒。2:具有可調(diào)整時間功能。</p><p><b> 5 調(diào)試過程</b></p><p&g
21、t;<b> 5.1 硬件調(diào)試</b></p><p> 單片機應(yīng)用系統(tǒng)的硬件和軟件調(diào)試是交叉相互進行的,但通常是先排除樣機中明顯的硬件故障,尤其是電源故障,才能安全地和仿真器相連,進行綜合調(diào)試。</p><p> 5.1.1 硬件電路故障</p><p> (1)錯線、開路、短路</p><p> 解決方
22、法:在畫原理圖時仔細檢查、校正即可解決。</p><p><b> ?。?)元器件損壞</b></p><p> 解決方法:在設(shè)計過程中要明確各元器件的工作條件,嚴格按照元器件正常工況下進行操作,損壞的元器件要及時更換,以免損壞其他元件或影響電路功能的實現(xiàn)。</p><p><b> ?。?)電源故障</b></p
23、><p> 解決方法:電源必須單獨調(diào)試好以后才能加到系統(tǒng)的各個部件中。當所有部分在該電源作用下都能正常工作,就選用該電源。</p><p><b> 5.2 軟件調(diào)試</b></p><p> 5.2.1 軟件電路故障</p><p> 設(shè)計軟件部分可能出現(xiàn)這種錯誤的現(xiàn)象:</p><p>
24、; ?。?)當以斷點或連續(xù)方式運行時,目標系統(tǒng)沒有按規(guī)定的功能進行操作或什么結(jié)果也沒有,這是由于程序轉(zhuǎn)移到意外之處或在某處死循環(huán)所造成的。</p><p> 解決方法:在采用實時多任務(wù)操作系統(tǒng)時,錯誤可能在操作系統(tǒng)中,沒有完成正確的任務(wù)調(diào)度操作,也可能在高優(yōu)先級任務(wù)程序中,該任務(wù)不釋放處理器,使CPU在該任務(wù)中死循環(huán)。通過對錯誤程序的修改使其實現(xiàn)預(yù)期的功能。</p><p><b&
25、gt; ?。?)結(jié)果不正確</b></p><p> 對于本設(shè)計而言,由于采用的是單片機C51語言,在檢查程序時,需要按模塊一步步查詢、修改,直到所有模塊都能正常工作,則顯示結(jié)果會達到預(yù)期值。</p><p> 5.2.2 軟件調(diào)試方法</p><p> 軟件調(diào)試所使用的方法有:計算程序的調(diào)試方法、I/O處理程序的調(diào)試法、綜合調(diào)試法等。</
26、p><p> ?。?)計算程序的調(diào)試方法</p><p> 根據(jù)計算程序的功能,事先準備好一組測試數(shù)據(jù)。調(diào)試時,用仿真器的寫命令,將數(shù)據(jù)寫入計算程序的參數(shù)緩沖單元,然后從計算程序開始運行到結(jié)束,運行的結(jié)果和正確數(shù)據(jù)比較,如果對有的測試數(shù)據(jù)進行測試,都沒有發(fā)生錯誤,則該計算程序調(diào)試成功;如果發(fā)現(xiàn)結(jié)果不正確,改用單步運行方式,即可檢查出錯誤所在。</p><p> ?。?
27、)I/O處理程序的調(diào)試</p><p> 對于A/D轉(zhuǎn)換一類的I/O處理程序是實時處理程序,因此一般用全速斷點運行方式或連續(xù)運行方式進行調(diào)試。</p><p><b> ?。?)綜合調(diào)試</b></p><p> 綜合調(diào)試一般采用全速斷點運行方式,這個階段的主要工作是排除系統(tǒng)中遺留的錯誤以便提高系統(tǒng)的動態(tài)性能和精度。在綜合調(diào)試的最后階段,應(yīng)
28、在目標系統(tǒng)的晶振頻率內(nèi)工作,使系統(tǒng)全速運行目標程序,實現(xiàn)了預(yù)定功能技術(shù)指標后,便可將軟件固化,然后在運行固化的目標程序,成功后目標系統(tǒng)便可脫機運行。一般情況下,這樣一個應(yīng)用系統(tǒng)就算研制成功。</p><p><b> 6 結(jié)論</b></p><p> 本次基于單片機STC89C52等器件制作一個數(shù)字時鐘。用單片機進行數(shù)據(jù)控制、處理,送到顯示器顯示,硬件結(jié)構(gòu)簡單
29、,所用元件較少,大大降低了制作成本。軟件采用C語言實現(xiàn),程序簡單可讀寫性強,效率高。與傳統(tǒng)的電路相比,具有方便操作、處理速度快、穩(wěn)定性高、性價比高的優(yōu)點,具有一定的使用價值。</p><p> 剛開始決定做這個課程設(shè)計任務(wù),認為挺簡單的,以前曾因為興趣用串口做過時鐘,然而當我們真正著手改用鍵盤控制時間調(diào)整以及復位的時候,我和同組的組員遇到了一些困難,在查閱了一些資料,相互討論之后問題得以解決;緊接著,我們的設(shè)計
30、有了細致的分工,分工的同時大家經(jīng)常一起探討設(shè)計過程中出現(xiàn)的種種問題,并將不懂的向身邊的高手請教,最終在大家不懈努力下,課程設(shè)計成功完成。</p><p> 設(shè)計中有好多問題都是因為理論知識不扎實,概念的模糊,使我們明白要把所學到的理論轉(zhuǎn)化為實踐需要一段努力學習的過程;在做一個設(shè)計的過程中,一定要注意理論和實踐同步進行,光有理論知識還是遠遠不夠的,要用實踐去檢驗理論,用理論指導實踐。</p><
31、;p> 這樣的實踐環(huán)節(jié)在我的學生生涯是很難得的,也為我們以后步入社會開始工作打下了一定的基礎(chǔ),最后我也要感謝組里的同學們,在大家的團結(jié)協(xié)作下,本次課程設(shè)計才可以順利進行并實現(xiàn)其功能,同時我也更加深刻體會到了團結(jié)協(xié)作的重要性。由于本人水平有限,在技術(shù)指標和論文寫作中可能存在一些缺陷,懇請老師批評指教。</p><p><b> 7 附錄</b></p><p&g
32、t; 7.1 數(shù)字時鐘實物圖</p><p><b> 7.2 源程序</b></p><p> #include<reg52.h> </p><p> unsigned char code Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; <
33、;/p><p> unsigned char int_time ; </p><p> unsigned char second; </p><p> unsigned char minute; </p><p> unsigned char hour; </p><p> sbit S1=P1^
34、4; </p><p> sbit S2=P1^5; </p><p> sbit S3=P1^6; </p><p> sbit S4=P1^7; </p><p> void delay(void) </p><p><b&g
35、t; {</b></p><p> unsigned char j;</p><p> for(j=0;j<200;j++)</p><p><b> ;</b></p><p><b> }</b></p><p> void delay60m
36、s(void)</p><p><b> {</b></p><p> unsigned char i,j;</p><p> for(i=0;i<200;i++)</p><p> for(j=0;j<100;j++)</p><p><b> ;</b&g
37、t;</p><p><b> }</b></p><p> void DisplaySecond(unsigned char s)</p><p><b> {</b></p><p> P2=0xbf; </p><p> P0=Tab[s/10
38、]; </p><p><b> delay();</b></p><p> P2=0x7f; </p><p> P0=Tab[s%10]; </p><p><b> delay();</b></p><p> P0=0
39、xff; </p><p><b> }</b></p><p> void DisplayMinute(unsigned char m)</p><p><b> {</b></p><p> P2=0xf7; </p><p> P0=Tab[m/1
40、0];</p><p><b> delay();</b></p><p> P2=0xef; </p><p> P0=Tab[m%10];</p><p><b> delay();</b></p><p> P2=0xdf; </p>&
41、lt;p> P0=0xbf; </p><p><b> delay();</b></p><p> P0=0xff; </p><p><b> }</b></p><p> void DisplayHour(unsigned char h)</p><
42、p><b> {</b></p><p> P2=0xfe; </p><p> P0=Tab[h/10]; </p><p><b> delay();</b></p><p> P2=0xfd; </p><p>
43、P0=Tab[h%10]; </p><p><b> delay();</b></p><p> P2=0xfb; </p><p> P0=0xbf; </p><p><b> delay();</b></p><p> P0=0xff;
44、 </p><p><b> }</b></p><p> void key_scan(void)</p><p><b> {</b></p><p> P1=0xf0; </p><p> if((P1&0xf0)!=0xf0) <
45、;/p><p><b> {</b></p><p> delay60ms(); </p><p> if((P1&0xf0)!=0xf0) </p><p><b> {</b></p><p> if(S1==0) &
46、lt;/p><p> second++; </p><p> if(S2==0) </p><p> minute++; </p><p> if(S3==0) </p><p> hour++; </p><p> if(S4==0) &l
47、t;/p><p><b> {</b></p><p> second=0; </p><p> minute=0; </p><p> hour=0; </p><p><b> }</b></p><p><b>
48、}</b></p><p><b> }</b></p><p><b> }</b></p><p> void main(void)</p><p><b> {</b></p><p> TMOD=0x01;
49、 </p><p> EA=1; </p><p> ET0=1; </p><p> TH0=(65536-46083)/256; </p><p> TL0=(65536-46083)%256; </p><p> TR0=1;
50、 </p><p> int_time=0; </p><p> second=0; </p><p> minute=0; </p><p> hour=0; </p><p><b> while(1)</b><
51、;/p><p><b> { </b></p><p> DisplaySecond(second); </p><p><b> delay();</b></p><p> DisplayMinute(minute); </p><p><b&
52、gt; delay();</b></p><p> DisplayHour(hour); </p><p><b> delay();</b></p><p><b> }</b></p><p><b> }</b></p>&
53、lt;p> void interserve(void ) interrupt 1 using 1</p><p><b> {</b></p><p> TR0=0; </p><p> int_time++; </p><p> if(int_time=
54、=20) </p><p><b> {</b></p><p> int_time=0; </p><p> second++; </p><p><b> }</b></p><p> if(second==60) </p&g
55、t;<p><b> {</b></p><p> second=0; </p><p> minute++; </p><p><b> }</b></p><p> if(minute==60) </p><p><b>
56、; {</b></p><p> minute=0; </p><p> hour++; </p><p><b> }</b></p><p> if(hour==24) </p><p><b> {</b></p&g
57、t;<p> hour=0; </p><p><b> }</b></p><p> key_scan(); </p><p> TH0=(65536-46083)/256; </p><p> TL0=(65536-46083)%256
溫馨提示
- 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è)計---電子時鐘.doc
評論
0/150
提交評論