課程設(shè)計(論文)任務(wù)及評語 院(系):電子與信息工程學(xué)院 教研室:計算機(jī) 學(xué) 號 | | | | | | | | | 設(shè)計內(nèi)容 用AT89C51設(shè)計一個2位LED數(shù)碼顯示“秒表”,顯示時間為00~99秒,每秒自動加一。 性能指標(biāo)及技術(shù)要求 了解8051芯片的的工作原理和工作方式 ,使用該芯片對LED數(shù)碼管進(jìn)行顯示控制,實(shí)現(xiàn)用單片機(jī)的端口控制數(shù)碼管,顯示分、秒,并能用按鈕實(shí)現(xiàn)秒表起動、停止、清零功能,精確到0.1秒。 | | 平時成績: 答辯成績: 論文成績: 總成績: 指導(dǎo)教師簽字: 年 月 日 |
注:平時成績占20%,答辯成績占40%,論文成績占40%。
摘 要 本設(shè)計是設(shè)計一個單片機(jī)控制的多功能秒表系統(tǒng)。 近年來隨著科技的飛速發(fā)展,單片機(jī)的應(yīng)用正在不斷地走向深入,同時帶動著傳統(tǒng)控制檢測日新月異的更新。在實(shí)時檢測和自動控制的單片機(jī)應(yīng)用系統(tǒng)中,單片機(jī)往往是作為一個核心部件來使用,僅單片機(jī)方面的知識是不夠的,還要根據(jù)具體的硬件結(jié)構(gòu),以及針對具體的應(yīng)用對象的軟件結(jié)合,加以完善。秒表的出現(xiàn),解決了傳統(tǒng)的由于人為因素造成的誤差和不公平性。 本設(shè)計的多功能秒表系統(tǒng)采用AT89C51單片機(jī)為中心器件,利用其定時器/計數(shù)器定時和記數(shù)的原理,結(jié)合顯示電路、電源電路、LED數(shù)碼管以及按鍵電路來設(shè)計計時器。將軟、硬件有機(jī)地結(jié)合起來,使得系統(tǒng)能夠正確地進(jìn)行計數(shù),并且結(jié)合相應(yīng)的顯示驅(qū)動程序,使數(shù)碼管能夠正確地顯示時間,暫停和中斷。我們設(shè)計的秒表可以同時記錄八個相對獨(dú)立的時間,通過上翻下翻來查看這八個不同的計時值,可謂功能強(qiáng)大。其中軟件系統(tǒng)采用匯編語言編寫程序,包括顯示程序,計數(shù)程序,中斷,延時程序,按鍵消抖程序等,硬件系統(tǒng)利用PROTEUS強(qiáng)大的功能來實(shí)現(xiàn),簡單且易于觀察,在仿真中就可以觀察到實(shí)際的工作狀態(tài)。
目 錄目 錄.. II 第一章 概述.. 1 1.1設(shè)計目的.. 1 1.2設(shè)計要求.. 1 1.3 設(shè)計意義.. 1 第二章 詳細(xì)分析.. 1 2.1系統(tǒng)總體方案.. 1 2.2硬件設(shè)計.. 1 2.3晶體振蕩電路.. 3 2.4復(fù)位電路.. 3 2.5按鍵電路.. 3 2.6顯示電路.. 4 第三章 軟件設(shè)計.. 5 第四章PROTEUS仿真.. 12 第五章 課程設(shè)計體會.. 14 第六章 參考文獻(xiàn).. 15
第一章 概述1.1設(shè)計目的設(shè)計一個單片機(jī)控制的秒表系統(tǒng)。利用單片機(jī)的定時器/計數(shù)器定時和記數(shù)的原理,結(jié)合顯示電路、LED數(shù)碼管以及按鍵來設(shè)計秒表。將軟、硬件有機(jī)地結(jié)合起來,使得系統(tǒng)能夠正確地進(jìn)行計時,同時具有開始/暫停,記錄,上翻下翻,清零等功能。 1.2設(shè)計要求(1)共四位LED顯示,顯示時間為00:00~59.99 (2)共五個按鍵,分別是開始/暫停,記錄,上翻,下翻,清零鍵; (3)能同時記錄多個相對獨(dú)立的時間并分別顯示; (4)翻頁按鈕查看多個不同的計時值;
1.3 設(shè)計意義(1)通過本次課程設(shè)計可以使我們進(jìn)一步熟悉和掌握單片機(jī)內(nèi)部結(jié)構(gòu)和工作原理,了解單片機(jī)應(yīng)用系統(tǒng)設(shè)計的基本步驟和方法。 (2)通過利用AT89C51單片機(jī),理解單片機(jī)在自動化儀表中的作用以及掌握單片機(jī)的編程方法。 (3)通過設(shè)計一個簡單的實(shí)際應(yīng)用輸入及顯示模擬系統(tǒng),掌握單片機(jī)仿真軟件PROTEUS的使用方法。 (4)該實(shí)驗通過單片機(jī)的定時器/計數(shù)器定時和計數(shù)原理,設(shè)計簡單的計時器系統(tǒng),擁有正確的計時、暫停、清零、功能,并能同時記錄多個相對獨(dú)立的時間利用翻頁按鈕查看多個不同的計時值,該種秒表在現(xiàn)實(shí)生活中應(yīng)用廣泛,具有現(xiàn)實(shí)意義。
第二章 詳細(xì)分析2.1系統(tǒng)總體方案本系統(tǒng)采用AT89C51單片機(jī)為中心器件,利用其定時器/計數(shù)器定時和記數(shù)的原理,結(jié)合硬件電路如電源電路,晶振電路,復(fù)位電路,顯示電路,以及一些按鍵電路等來設(shè)計計時器,將軟、硬件有機(jī)地結(jié)合起來。其中軟件系統(tǒng)采用匯編語言編寫程序,包括顯示,計數(shù),中斷,延時,按鍵消抖程序等,并在編程軟件中調(diào)試運(yùn)行,硬件系統(tǒng)利用PROTEUS強(qiáng)大的功能來實(shí)現(xiàn),簡單且易于觀察,在仿真中就可以觀察到實(shí)際的工作狀態(tài)。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif 圖 系統(tǒng)電路原理
2.2硬件設(shè)計2.2.189C51單片機(jī) MCS-51系列單片機(jī)是8位單片機(jī)產(chǎn)品,89C51是其中的典型代表,基本模塊包括以下幾個部分: (1)CPU:89C51的CPU是8位的,另外89C51內(nèi)部有1個位處理器 (2)R0M:4KB的片內(nèi)程序存儲器,存放開發(fā)調(diào)試完成的應(yīng)用程序 (3)RAM:256B的片內(nèi)數(shù)據(jù)存儲器,容量小,但作用大 (4)I/O口:P0-P3,共4個口32條雙向且可位尋址的I/O口線 (5)中斷系統(tǒng):共5個中斷源,3個內(nèi)部中斷,2個外部中斷 (6)定時器/計數(shù)器:2個16位的可編程定時器/計數(shù)器 (7)通用串行口:全雙工通用異步接收器/發(fā)送器 (8)振蕩器:89C51的外接晶振與內(nèi)部時鐘振蕩器為CPU提供時鐘信號 (9)總線控制:89C51對外提供若干控制總線,便于系統(tǒng)擴(kuò)展
89C51的引腳圖如下: file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg
2.3晶體振蕩電路89C51芯片內(nèi)部有一個高增益反相放大器,用于構(gòu)成振蕩器。引線 XTAL1和XTAL2分別為反向放大器的輸入和輸出,兩端跨接石英晶體及兩個電容就可構(gòu)成穩(wěn)定的自激振蕩器。 這里,我們選用51單片機(jī)12MHZ的內(nèi)部振蕩方式,電容器C1,C2起穩(wěn)定振蕩頻率,并對振蕩頻率有微調(diào)作用,C1和C2可在20-100PF之間取值,這里取33P。 2.4復(fù)位電路采用上電加按鍵復(fù)位電路,上電后,由于電容充電,使RST持續(xù)一段高電平時間。當(dāng)單片機(jī)已在運(yùn)行之中時,按下復(fù)位鍵也能使RST持續(xù)一段時間的高電平,從而實(shí)現(xiàn)上電加按鍵復(fù)位的操作。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image005.jpg 2.5按鍵電路在按鍵電路中,我們可以在I/O口上直接接按鍵,或者通過I/O口設(shè)計一個鍵盤,然后通過鍵盤掃描程序判斷是否有鍵按下等。鍵盤掃描電路節(jié)省I/O口,但編程有些復(fù)雜,在這里,由于我們所用的按鍵較少,且系統(tǒng)是一個小系統(tǒng),有足夠的I/O口可以使用,為了使程序簡化,我們采用按鍵電路,用部分P1口做開關(guān),P1.0開始/暫停,P1.1記錄,P1.2上翻,P1.3下翻,P1.4清零。對于按鍵的設(shè)計,采用了防抖動的程序設(shè)計,使系統(tǒng)的性能得到進(jìn)一步的提升。當(dāng)按鍵被按下時,相應(yīng)的引腳被拉低,經(jīng)掃描后,獲得鍵值,并執(zhí)行鍵功能程序,因此按下不同的按鍵,將執(zhí)行不同的功能程序。 2.6顯示電路顯示電路既可以選用液晶顯示器,也可以選用數(shù)碼管顯示。我們采用的是數(shù)碼管顯示電路。用四個共陰極LED顯示,LED是七段式顯示器,內(nèi)部有7個條形發(fā)光二極管和1個小圓點(diǎn)發(fā)光二極管組成,根據(jù)各管的亮暗組合成字符。 在用數(shù)碼管顯示時,我們有靜態(tài)和動態(tài)兩種選擇,靜態(tài)顯示程序簡單,顯示穩(wěn)定,但是占用端口比較多;動態(tài)顯示所使用的端口比較少,可以節(jié)省單片機(jī)的I/O口。 在設(shè)計中,我們采用LED動態(tài)顯示,用P0口驅(qū)動顯示。由于P0口的輸出級是開漏電路,用它驅(qū)動時需要外接上拉電阻才能輸出高電平。
第三章 軟件設(shè)計3.1設(shè)計特點(diǎn)
在軟件設(shè)計中,一般采用模塊化的程序設(shè)計方法,它具有明顯的優(yōu)點(diǎn)。把一個多功能的復(fù)雜的程序劃分為若干個簡單的、功能單一的程序模塊,有利于程序的設(shè)計和調(diào)試,優(yōu)化和分工,提高了程序的閱讀性和可靠性,使程序的結(jié)構(gòu)層次一目了然。 應(yīng)用系統(tǒng)的程序由包含多個模塊的主程序和各種子程序組成。各程序模塊都要完成一個明確的任務(wù),實(shí)現(xiàn)某個具體的功能,如:計數(shù)、延時、和顯示等,在具體需要時調(diào)用相應(yīng)的模塊即可。 功能描述:用四位LED數(shù)碼管顯示時間。一個"開始/暫停"鍵,一個"復(fù)位"鍵,一個“記錄”鍵,可同時記錄八個相對獨(dú)立的時間;一個“上翻”鍵,一個“下翻”鍵,查看八個不同的計時值。五個按鍵分別通過五個端口控制秒表的五個功能。 3.2程序流程圖 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.gif
3.3程序源代碼 /* 1、程序目的:使用定時器學(xué)習(xí)秒表計時,記錄8組數(shù)據(jù),通過上翻、下翻鍵查看記錄的數(shù)據(jù) 2、硬件要求:數(shù)碼管、晶振12M */ #include <reg52.h> Code unsigned chartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰數(shù)碼管 0-9 code unsigned chartab1[]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF} ;//共陰數(shù)碼管0-9帶小數(shù)點(diǎn) sbit key1 = P1^0; //開始、暫停 sbit key2 = P1^1; //記數(shù) sbit key3 = P1^2; //上翻 sbit key4 = P1^3; //下翻 sbit key5 = P1^4; //清零 static unsigned char ms,sec; static unsigned char Sec[8],Ms[8]; static int i ,j; void delay(unsigned int cnt) //延時程序 { while(--cnt); } void main() { unsignedchar key3_flag=0,key4_flag=0; TMOD |=0x01;//定時器0 10ms in 12M crystal 用于計時 TH0=0xd8; TL0=0xf0; ET0=1; TR0=0; TMOD |=0x10; //定時器1用于動態(tài)掃描 TH1=0xF8; TL1=0xf0; ET1=1; TR1=1; EA=1; sec=0;//初始化 ms=0; P1=0xff; i=0; j=0; start: while(1) { //開始、暫停 if(!key1) //判斷是否按下 { delay(50); //去抖 if(!key1) while(!key1) //等待按鍵釋放 {;} TR0=!TR0; } //記錄 if(!key2) //判斷是否按下 { delay(50); //去抖 if(!key2) { while(!key2) //等待按鍵釋放 {;} if(i==8) //8組數(shù)據(jù)記錄完畢 {TR0=0;goto start;} Sec= sec; //將數(shù)據(jù)存入數(shù)組 Ms=ms; i++; } } //上翻 if(!key3) { delay(50); if(!key3) { while(!key3) {;} TR0=0; key3_flag=1; //按鍵3標(biāo)志 if(j==i) goto start; else if(key4_flag) j+=2; key4_flag=0; sec=Sec[j];ms=Ms[j]; //顯示數(shù)組里的內(nèi)容 j++; } } //下翻 if(!key4) { delay(50); if(!key4) { while(!key4) {;} TR0=0; key4_flag=1; //按鍵4標(biāo)志 if(j<0) goto start; else if(key3_flag) j-=2; key3_flag=0; sec=Sec[j];ms=Ms[j]; //顯示數(shù)組里的內(nèi)容 j--; } } //清零 if(!key5) { delay(50); if(!key5) while(!key5) {;} TR0=0; ms=0; sec=0; for(i=0;i<8;i++) { Sec=0;Ms=0; } i=0; } } } /********************************/ /* 定時中斷1 */ /********************************/ void time1_isr(void) interrupt 3 using 0//定時器1用來動態(tài)掃描 { static unsigned char num; TH1=0xF8;//重入初值 TL1=0xf0; switch(num) { case 0: P2=0xfe;P0=tab[sec/10];break;//顯示秒十位 case 1: P2=0xfd;P0=tab1[sec%10];break;//顯示秒個位 case 2: P2=0xfb;P0=tab[ms/10];break;//顯示十位 case 3: P2=0xf7;P0=tab[ms%10];break; //顯示個位 default:break; } num++; if(num==4) num=0; } /********************************/ /* 定時中斷0 */ /********************************/ void tim(void) interrupt 1 using 1 { TH0=0xd8;//重新賦值 TL0=0xf0; ms++;//毫秒單元加1 if(ms==100) { ms=0;//等于100時歸零 sec++;//秒加1 if(sec==60) { sec=0;//秒等于60時歸零 } }}
第四章 PROTEUS仿真file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg將以上程序清單導(dǎo)入先前做好的Proteus仿真電路,匯編之后,按 鍵開始進(jìn)行仿真。仿真結(jié)果如下: 下面顯示清零功能: 按下開始鍵后顯示 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image010.gif 按下清零鍵后顯示 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image012.gif 仿真結(jié)果描述: 按“開始”鍵,秒表開始計時;按“暫!辨I,秒表暫停計時;按記錄鍵,秒表記錄時間,共可記錄八個數(shù)值;按上翻下翻鍵,可查看這八個不同的計時值。
結(jié)論及進(jìn)一步設(shè)想: 根據(jù)實(shí)驗要求,本次課設(shè)基本完成了設(shè)計要求,由于秒表系統(tǒng)并不一定僅僅局限于計時,定時等功能,還可以進(jìn)行多項的擴(kuò)展,可以利用AT89C51強(qiáng)大的擴(kuò)展功能,進(jìn)一步豐富秒表的功能,例如可設(shè)定計時時間,倒計時等等眾多功能。單片機(jī)以其強(qiáng)大的功能和良好的兼容性可以更好地為我們服務(wù),通過查閱各種資料,多了解一些單片機(jī)有關(guān)知識,可以為以后的工作和學(xué)習(xí)生活創(chuàng)造更多的便利條件。
第五章 課程設(shè)計體會通過本次課程設(shè)計,我深刻地認(rèn)識到自己有很多不足之處,比如在自主學(xué)習(xí)能力方面的不足,實(shí)際動手操作能力的不足等。這次的單片機(jī)課程設(shè)計是理論與實(shí)踐相結(jié)合的范例。該設(shè)計從頭到尾都要自己參與進(jìn)來,熟悉了整個設(shè)計流程才能更快地設(shè)計出方案并完成設(shè)計。 本次課程設(shè)計我主要負(fù)責(zé)硬件電路的設(shè)計和查閱相關(guān)資料。單片機(jī)課程早已結(jié)束,相關(guān)的知識已經(jīng)很模糊,導(dǎo)致我在設(shè)計硬件電路中遇到了不少麻煩。首先是不知從何入手。雖然小組討論后確定了秒表要實(shí)現(xiàn)的功能,可是沒有相關(guān)理論知識的熟知和實(shí)踐操作,畫出硬件設(shè)計圖對我而言毫無頭緒。查閱了與89C51單片機(jī)相關(guān)的資料也閱讀了其他人單片機(jī)數(shù)字秒表的設(shè)計,慢慢地我開始了解其中原理,一步步設(shè)計出了硬件電路的各個部分,如晶體振蕩電路,復(fù)位電路,按鍵電路,顯示電路。完成設(shè)計后需要運(yùn)用PROTEUS軟件進(jìn)行設(shè)計仿真,由于這是第一次接觸這個軟件,還不知怎樣運(yùn)用它,查閱該軟件的相關(guān)資料及看過網(wǎng)上的視頻后便開始著手畫圖,接觸后覺得還是挺簡單的。 這次的課程設(shè)計我與小組同學(xué)進(jìn)行了交流和討論,我們分工進(jìn)行設(shè)計,從搜索資料到硬件、軟件的調(diào)試,每一步、每一個細(xì)節(jié)都經(jīng)過我們自己的思考,我們共同討論各方案的比較選擇、硬件、軟件的設(shè)計和調(diào)試,最終拿出了我們的成果。在做的過程中不但加深了我們對單片機(jī)理論知識的認(rèn)識和理解還認(rèn)識到了這門學(xué)科在應(yīng)用方面的廣闊前景。 實(shí)踐是最有高度也是最能體現(xiàn)整體水平的整個設(shè)計過程中,我們不斷地探索,設(shè)計出了很多不一樣的硬件電路圖,寫過了很多不一樣的程序,正如設(shè)計中如何能使硬件電路圖簡單明了,程序簡單而準(zhǔn)確,如何能準(zhǔn)確的運(yùn)行,都是通過與同學(xué)老師的交流,慢慢摸索出來的。以上的不斷探索,使我們進(jìn)一步熟悉和掌握單片機(jī)內(nèi)部結(jié)構(gòu)和工作原理,了解單片機(jī)應(yīng)用系統(tǒng)設(shè)計的基本步驟和方法。通過利用AT89C51單片機(jī),理解單片機(jī)在自動化儀表中的作用以及掌握單片機(jī)的編程方法。通過設(shè)計一個簡單的實(shí)際應(yīng)用輸入及顯示模擬系統(tǒng),掌握單片機(jī)仿真軟件PROTEUS的使用方法。
第六章 參考文獻(xiàn)3、《單片機(jī)C語言應(yīng)用程序設(shè)計》,第四版,馬忠梅主編,北京航空航天大學(xué)出版社 4、《單片機(jī)開發(fā)與典型工程項目實(shí)例詳解》,邊海龍、孫永奎編著,電子工業(yè)出版社 5、吳金戎,沈慶陽,郭庭吉. 8051單片機(jī)實(shí)踐與應(yīng)用[M]. 北京:清華大學(xué)出版社,2002 6、夏繼強(qiáng). 單片機(jī)實(shí)驗與實(shí)踐教程[M]. 北京:北京航空航天大學(xué)出版社, 2001 7、肖洪兵. 跟我學(xué)用單片機(jī)[M].北京:北京航空航天大學(xué)出版社,2002.8
|