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