版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p> 課程設(shè)計任務書................................2</p><p> 設(shè)計目的......................................2</p><p> 設(shè)計原理與分析............................
2、....2</p><p> 所選元件清單..................................6</p><p> 課程設(shè)計心得..................................7</p><p> 參考文獻......................................7</p><p>
3、 附錄.................................................8 第一章、課程設(shè)計任務書</p><p> 本設(shè)計以MCS-51系列單片機為核心,采用常用電子器件設(shè)計。要求能顯示出秒、分、時、天,可調(diào)整各個時間,采用LED八段數(shù)碼管顯示。</p><p> 第二章、課程設(shè)計目的</p><
4、p> 1、掌握51系列單片機編程原理</p><p> ?。?)掌握單片機C51語言程序編程的思想及方法,加深對單片機的更深層次的理解,熟悉單片機的內(nèi)部硬件資源。</p><p> ?。?)定時器中斷服務子程序和外中斷服務子程序各個程序段所實現(xiàn)的功能和編寫。</p><p> ?。?)通過此次課程設(shè)計,學會怎么利用所學單片機知識獨立設(shè)計系統(tǒng),達到學于致用的目
5、的,加深了解C51設(shè)計編程思想及開發(fā)系統(tǒng)的一般過程,并不斷創(chuàng)新。</p><p> 2、掌握矩陣式鍵盤電路的接法及工作原理</p><p> ?。?)掌握矩陣式鍵盤的接法及工作原理。</p><p> ?。?)掌握鍵盤消抖的工作原理。</p><p> 3、掌握矩陣式鍵盤電路的接法及工作原理</p><p> ?。?/p>
6、1)掌握矩陣式鍵盤鍵盤掃描程序的編寫。</p><p> (2)掌握鍵盤消抖程序的編寫。</p><p> 4、掌握共陽八段碼顯示器連接,做成可調(diào)節(jié)的電子表,簡單的了解單片機對顯示器的控制過程;能在此基礎(chǔ)上做成可調(diào)節(jié)的萬年歷。</p><p> 第三章、設(shè)計原理與分析</p><p> 1、實驗硬件電路的原理與設(shè)計</p>
7、<p><b> A.</b></p><p><b> 鍵盤掃描識別</b></p><p> 1、識別鍵的閉合,通常采用行掃描法和行反轉(zhuǎn)法。</p><p> 行掃描法是使鍵盤上某一行線為低電平,而其余行接高電平,然后讀取列值,如所讀列值中某位為低電平,表明有鍵按下,否則掃描下一行,直到掃完所有行
8、。</p><p> 行反轉(zhuǎn)法識別鍵閉合時,要將行線接一并行口,先讓它工作于輸出方式,將列線也接到一個并行口,先讓它工作于輸入方式,程序使CPU通過輸出端口往各行線上全部送低電平,然后讀入列線值,如此時有某鍵被按下,則必定會使某一列線值為0。然后,程序?qū)蓚€并行端口進行方式設(shè)置,使行線工作于輸入方式,列線工作于輸出方式,并將剛才讀得的列線值從列線所接的并行端口輸出,再讀取行線上的輸入值,那么,在閉合鍵所在的行線
9、上的值必定為0。這樣,當一個鍵被按下時,必定可以讀得一對唯一的行線值和列線值。</p><p> 2、程序設(shè)計時,要學會靈活地對STC89C52的各端口進行方式設(shè)置??蓪⒏麈I對應的鍵值(行線值、列線值)放在一個表中,將要顯示的0~F字符放在另一個表中,通過查表來確定按下的是哪一個鍵并正確顯示出來。</p><p> 3、利用實驗箱上的STC89C52可編程并行接口芯片和矩陣鍵盤,編寫程
10、序,做到在鍵盤上每按一個數(shù)字鍵(0~F),用發(fā)光二極管將該代碼顯示出來。</p><p><b> B.</b></p><p><b> 顯示器的顯示原理:</b></p><p> 數(shù)碼管需要驅(qū)動電路來驅(qū)動數(shù)碼管的各個段碼才能顯示我們需要的數(shù)字。根據(jù)數(shù)碼管的驅(qū)動方式不同,可以分為靜態(tài)驅(qū)動和動態(tài)驅(qū)動兩種方式。<
11、;/p><p> ?、凫o態(tài)顯示驅(qū)動:靜態(tài)驅(qū)動也稱直流驅(qū)動。是指每個數(shù)碼管的第一個段碼都是由同一個單片機的I/O端口進行驅(qū)動,或者使用如BCD碼二─十進制譯碼器譯碼進行驅(qū)動。</p><p> ?、趧討B(tài)顯示驅(qū)動:動態(tài)驅(qū)動是數(shù)碼管是單片機中應用最為廣泛的一種驅(qū)動方式。動態(tài)驅(qū)動是將所有數(shù)碼管的八個顯示筆劃“a,b,c,d,e,f,g,dp”的同名端連在一起,另外為每個數(shù)碼管的公共極COM增加位選通控
12、制電路,各選通由各自獨立的I/O線控制,當單片機輸出這形碼時,所有數(shù)碼管都接收到相同的字形碼,哪個數(shù)碼管會顯示字形,取決于單片機對位選通COM端電路的控制,所以只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮。通過分時輪流控制各個數(shù)碼管的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。在輪流顯示的過程中,每位數(shù)碼管的點亮時間為1~2ms。動態(tài)顯示的效果和靜態(tài)顯示是一樣的,但能節(jié)省大量的I/O端口,而
13、且功耗更低。</p><p> 由于靜態(tài)顯示需要數(shù)據(jù)鎖存器等硬件,接口復雜一些,考慮時鐘顯示只有八位, 且系統(tǒng)沒有其它復雜的處理任務,所以決定采用動態(tài)掃描實現(xiàn)LED的顯示。 </p><p> 單片機采用易購的STC89C52系列,這種單片機具有足夠的空余硬件資源,可以實現(xiàn)其他的擴展功能。時鐘計時器電路系統(tǒng)的總體設(shè)計框圖如圖1。</p><p><b>
14、; 2、實驗步驟:</b></p><p> 時鐘計時器的硬件電路如圖2所示。該電路采用51單片機最小系統(tǒng),采用共陽八段數(shù)碼管LED顯示器,P0口輸出段碼數(shù)據(jù),P2.0~P2.5口作列掃描輸出;P1口接矩陣鍵盤,實現(xiàn)時間的調(diào)整。系統(tǒng)的功能由鍵盤上1、2、3鍵完成。</p><p><b> 如圖2</b></p><p>&l
15、t;b> 3、系統(tǒng)程序的設(shè)計</b></p><p><b> ?。?)主程序</b></p><p> 本設(shè)計中計時采用定時器T0中斷完成。主程序循環(huán)調(diào)用顯示子程序和查鍵子程序,當端口有開關(guān)按下時,轉(zhuǎn)入相應功能程序。其主程序流程如圖3。</p><p><b> 顯示子程序</b></p&g
16、t;<p> 時間顯示子程序每次顯示8個連續(xù)內(nèi)存單元的十進制BCD碼數(shù)據(jù),首地址在調(diào)用顯示程序時先指定。</p><p> 顯示時,先取出內(nèi)存地址中的數(shù)據(jù),然后查得對應的顯示用段碼從P0口輸出,P2口將對應數(shù)碼管選中供電,就能顯示該地址單元的數(shù)據(jù)值。</p><p> 定時器T0中斷服務程序</p><p> 定時器T0用于時間計時。定時溢出中
17、斷周期設(shè)為50ms,中斷進入后先進行定時中斷初值校正,當中斷累計20次(即50ms×20=1s)時,對秒計數(shù)單元進行加1操作。在計數(shù)單元中,采用十進制BCD碼計數(shù),滿10進位。</p><p> T0中斷計時程序流程圖如圖4所示。</p><p><b> 調(diào)時功能程序</b></p><p> 調(diào)時功能程序的設(shè)計方法是:按下1
18、鍵,可以選擇要修改的位,按下按2鍵和3鍵鍵,對選中的位進行加減操作,修改完成之后,再按下XW鍵對其它位進行修改。具體如下:</p><p> 第一次按下1鍵時,可以修改秒。</p><p> 第二次按下1鍵時,可以修改分。</p><p> 第三次按下1鍵時,可以修改時。</p><p> 第四次按下1鍵時,退出子程序。</p&
19、gt;<p> 第四章、所選元件清單</p><p><b> 元件清單</b></p><p><b> 2、程序?qū)嶋H接線</b></p><p> 數(shù)碼管的不同筆段的組合構(gòu)成了不同字符的字形。為了獲得不同的字形,各筆段所加的電平也不同,因此各個字形所形成的編碼是不一樣的。例如,對于共陽極數(shù)碼管,如
20、果要顯示字符2,則筆段a、b、g、e、d發(fā)光,對應的引腳為低電平;其余各筆段不發(fā)光,對應的引腳為該電平。所以字符2的字形編碼gfedcba=10100100B=A4H。</p><p> 陰極數(shù)碼管的字形編碼與用陽極數(shù)碼管的字形編碼是邏輯“非”的關(guān)系。根據(jù)上述編碼方法可以得出數(shù)碼管顯示的字符與對應的字形編碼的關(guān)系,如下表所示</p><p> 此次實驗用的共陽數(shù)碼管,所以按照陽極數(shù)碼管
21、的字形編碼進行設(shè)計。</p><p> 第五章、課程設(shè)計心得</p><p> 這次課程設(shè)計根據(jù)課題要求,復習了這學期所學的單片機內(nèi)容,通過查詢相關(guān)的資料,簡要的了解一下。雖然老師上課講過,但并非聽懂了所有有關(guān)知識。根據(jù)課程設(shè)計的要求和自己通過參考有關(guān)資料擬的方案,寫好程序流程圖,在程序流程圖的基礎(chǔ)上,根據(jù)芯片的功能寫出相應的程序,達到能夠?qū)崿F(xiàn)所要求的功能的目的。</p>
22、<p> 這次的單片機課程設(shè)計重點是理論與實際的相結(jié)合,不單單只是書上的一條條分離的指令。通過這次設(shè)計讓我更系統(tǒng)的了解了各個指令以及單片機的擴展內(nèi)容,。</p><p> 學習任何知識,僅從理論上去求知,而不去實踐、探索是不夠的,所以在學期末單片機課程設(shè)計是很及時、很必要的。這樣不僅能加深我們對單片機的更深理解,而且還及時、真正的做到了學以致用。</p><p> 剛開始
23、進行課程設(shè)計的時候,我表現(xiàn)出了極大的熱情。上網(wǎng)查資料、詢問高年級同學的經(jīng)驗,我時刻猜測著我會從中獲得什么,這是一個難得的鍛煉機會。</p><p> 通過實踐,我領(lǐng)悟到了很多以前不知道的東西,可以說是受益匪淺。雖然時間不是很長,但是還是有不少長進,這不僅是局限在程序設(shè)計的功能實現(xiàn)上,更多的是對程序設(shè)計的技巧的追求上</p><p><b> 第六章 參考文獻</b>
24、;</p><p> [1]樓然苗,李光飛編著.單片機課程設(shè)計指導.北京航空航天大學出版社</p><p> [2]田立,田清,代方震編著.51單片機C語言程序設(shè)計快速入門.人民郵電出版社</p><p> [3]翻紅崗,魏學海,任思璟.51單片機自學筆記.北京航空航天大學出版社</p><p><b> 附錄:程序<
25、/b></p><p> #include<reg52.h> </p><p> #define uint unsigned int</p><p> #define uchar unsigned char </p><p> uchar miao,fen,shi,m,f,s,num,num1,num2; </
26、p><p> uchar code table1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};</p><p> void delay(uint z) </p><p><b> {</b></p><p><b> uint x,y;<
27、/b></p><p> for(x=z;x>0;x--) </p><p> for(y=110;y>0;y--); </p><p><b> } </b></p><p> void xiansi( uchar aa,uchar bb,uchar cc) </p><p
28、><b> { </b></p><p><b> P2=0xdb; </b></p><p><b> P0=0xbf; </b></p><p> delay(1); </p><p> P0=0xff; // num2++; </p><
29、;p> if(num1==1&num2==0|num1==1&num2==1) </p><p><b> { </b></p><p><b> P2=0xff;</b></p><p> P0=table1[aa%10]; </p><p> delay(1);
30、</p><p><b> P0=0xff;</b></p><p><b> P2=0xff; </b></p><p> P0=table1[aa/10]; </p><p> delay(1); </p><p><b> P0=0xff; <
31、/b></p><p><b> } </b></p><p><b> else </b></p><p><b> { </b></p><p><b> P2=0x7f; </b></p><p> P0=ta
32、ble1[aa%10]; </p><p><b> delay(1);</b></p><p><b> P0=0xff; </b></p><p><b> P2=0xbf;</b></p><p> P0=table1[aa/10]; </p>&l
33、t;p> delay(1); </p><p><b> P0=0xff; </b></p><p><b> } </b></p><p> if(num1==2&num2==0|num1==2&num2==1) </p><p><b> { </
34、b></p><p><b> P2=0xff; </b></p><p> P0=table1[bb/10]; </p><p> delay(1); </p><p><b> P0=0xff;</b></p><p><b> P2=0xff;
35、 </b></p><p> P0=table1[bb%10];</p><p> delay(1); </p><p><b> P0=0xff; </b></p><p><b> } </b></p><p><b> else <
36、/b></p><p><b> {</b></p><p><b> P2=0xf7; </b></p><p> P0=table1[bb/10]; </p><p> delay(1); </p><p><b> P0=0xff; </
37、b></p><p><b> P2=0xef; </b></p><p> P0=table1[bb%10]; </p><p> delay(1); </p><p><b> P0=0xff; </b></p><p><b> } </
38、b></p><p> if(num1==3&num2==0|num1==3&num2==1) </p><p><b> { </b></p><p><b> P2=0xff; </b></p><p> P0=table1[cc/10]; </p>
39、<p> delay(1); </p><p><b> P0=0xff;</b></p><p><b> P2=0xff; </b></p><p> P0=table1[cc%10]; </p><p> delay(1); </p><p><
40、;b> P0=0xff; </b></p><p><b> } </b></p><p><b> else </b></p><p> { P2=0xfe;</p><p> P0=table1[cc/10]; </p><p> delay
41、(1); </p><p><b> P0=0xff;</b></p><p><b> P2=0xfd; </b></p><p> P0=table1[cc%10]; </p><p> delay(1); </p><p><b> P0=0xff;
42、 </b></p><p><b> }</b></p><p> //if(num2==256)num2=1; </p><p><b> }</b></p><p> void jishi( ) </p><p><b> { </b
43、></p><p> if(num==20) </p><p><b> { </b></p><p><b> num=0; </b></p><p><b> miao++; </b></p><p> if(miao==60) &l
44、t;/p><p><b> { </b></p><p><b> miao=0; </b></p><p><b> fen++; </b></p><p> if(fen==60) </p><p><b> { </b>
45、</p><p><b> fen=0; </b></p><p><b> shi++; </b></p><p> if(shi==24) </p><p><b> shi=0; </b></p><p><b> } <
46、/b></p><p><b> } </b></p><p> if(miao==0&fen==0);</p><p><b> } </b></p><p> xiansi(miao,fen,shi); </p><p><b> } &
47、lt;/b></p><p> void init(void) </p><p><b> { </b></p><p> TMOD=0x01; </p><p> TH0=0x3c; </p><p> TL0=0xb0; </p><p><b&g
48、t; TH1=0x3c;</b></p><p> TL1=0xb0; </p><p><b> EA=1; </b></p><p><b> ET0=1; </b></p><p><b> TR0=1; </b></p><p&
49、gt;<b> ET1=1; </b></p><p><b> TR1=1; </b></p><p><b> } </b></p><p> void key()</p><p><b> {</b></p><p>
50、;<b> P1=0xfe; </b></p><p> if(P1==0xee) </p><p> { delay(10); </p><p> if(P1==0xee) </p><p><b> { </b></p><p> while(P1==0xee
51、)xiansi(miao,fen,shi); </p><p><b> num1++; </b></p><p><b> TR0=0; </b></p><p> if(num1==4)</p><p><b> {</b></p><p>
52、<b> num1=0;</b></p><p><b> TR0=1;</b></p><p><b> } </b></p><p> xiansi(miao,fen,shi); </p><p><b> } </b></p>
53、<p><b> } </b></p><p> if(num1!=0) </p><p><b> { </b></p><p> if(P1==0xde) //時間加 </p><p><b> { </b></p><p>
54、 delay(10); </p><p> if(P1==0xde) </p><p><b> { </b></p><p> while(P1==0xde)xiansi(miao,fen,shi); </p><p> switch(num1) </p><p><b>
55、{ </b></p><p> case 1 : miao++; </p><p> if(miao==60)miao=0; </p><p><b> break; </b></p><p> case 2 : fen++; </p><p> if(fen==60)fen
56、=0; </p><p><b> break; </b></p><p> case 3 : shi++; </p><p> if(shi==24)shi=0; </p><p><b> break; </b></p><p><b> } <
57、/b></p><p><b> } </b></p><p><b> }</b></p><p> if(P1==0xbe);//時間減</p><p><b> { </b></p><p> delay(10); </p&g
58、t;<p> if(P1==0xbe) </p><p><b> { </b></p><p> while(P1==0xbe)</p><p> xiansi(miao,fen,shi); </p><p> switch(num1) </p><p><b>
59、; {</b></p><p> case 1 : miao--; </p><p> if(miao==-1)</p><p><b> miao=59; </b></p><p><b> break; </b></p><p> case 2 :
60、 fen--; </p><p> if(fen==-1)</p><p><b> fen=59; </b></p><p><b> break; </b></p><p> case 3 : shi--; </p><p> if(shi==-1)</p
61、><p><b> shi=23;</b></p><p><b> break; </b></p><p><b> } </b></p><p><b> }</b></p><p><b> }</b&g
62、t;</p><p><b> } </b></p><p><b> } </b></p><p> void main() </p><p><b> {</b></p><p><b> init(); </b>&l
63、t;/p><p><b> while(1) </b></p><p><b> { </b></p><p><b> jishi(); </b></p><p><b> key(); </b></p><p><b&
64、gt; } </b></p><p><b> } </b></p><p> void zhongduan() interrupt 1 </p><p><b> { </b></p><p><b> TH0=0x3c;</b></p>
65、<p> TL0=0xb0; </p><p><b> num++; </b></p><p><b> } </b></p><p> void zhongduan1() interrupt 3 </p><p><b> { </b></p>
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設(shè)計--鍵盤輸入在led數(shù)碼管上的顯示
- 微機原理課程設(shè)計-鍵盤輸入
- 單片機課程設(shè)計---鍵盤接口課程設(shè)計
- 單片機課程設(shè)計--單片機44矩陣式鍵盤
- 單片機課程設(shè)計--矩陣鍵盤 led顯示
- 單片機課程設(shè)計報告-仿手機鍵盤
- 單片機手機鍵盤-單片機原理及應用課程設(shè)計
- 1602lcd仿手機鍵盤單片機課程設(shè)計
- 單片機課程設(shè)計--基于單片機的擴展8個輸入端口的設(shè)計
- 單片機課程設(shè)計-單片機課程設(shè)計---電子時鐘
- 日語鍵盤輸入描述
- 單片機課程設(shè)計---鍵盤按鍵識別及l(fā)ed數(shù)碼顯示
- 鍵盤輸入法
- 單片機課程設(shè)計
- 單片機課程設(shè)計
- 單片機課程設(shè)計
- 單片機課程設(shè)計
- 單片機課程設(shè)計--單片機串行通訊
- 單片機秒表單片機課程設(shè)計
- 《單片機原理》課程設(shè)計4x4矩陣鍵盤設(shè)計
評論
0/150
提交評論