




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、電氣工程學院單片機課程設計實驗報告班 級: 姓 名:學 號: 設計題目:四位競賽搶答器設計時間:評定成績:評定教師:目錄摘要 11、 調試過程31.1 調試詳細步驟和過程31.2 軟件調試遇到的問題及解決過程說明51.3 軟件仿真運行和硬件實際驗證的區(qū)別62、 運行效果61、 Proteus 電路圖 62、 滑動變阻器在0%時,倒計時最大時間。 63、 滑動變阻器在50%時,倒計時最大時間 74、 滑動變阻器在100%時,倒計時最大時間 75、 選手進行搶答 86、 無人搶答,系統(tǒng)警告 97、 硬件仿真 10搶答、計分、計時結束 113、 系統(tǒng)優(yōu)化113.1 軟件設計 113.2 硬件設計 1
2、129摘要單片機自20 世紀 70 年代問世以來,在電子信息、電氣工程、工程自動化控制、機電一體化、智能儀器儀表、家用電器等諸多領域得到廣泛應用,已對人類社會產生重大影響。由于 Intel 公司的 8051 內核單片機獲得的巨大成功,以8051 內核技術為主導的單片機也是目前我國多數(shù)高校都在講授的機型。盡管各種新型的8 位、 16 位以及 32 位單片機不斷推出,但在目前的應用中,8 位單片機尤其是各種8051 內核的單片機仍站主導地位。本次設計利用了8051 芯片、 4*4 矩陣鍵盤(僅用2*3)、串行AD、 DA 轉換芯片 PCF8591、 8 位共陰極數(shù)碼管(僅用 4位) 、 音頻放大芯
3、片LM386 以及喇叭,實現(xiàn)四位競賽搶答單片機系統(tǒng),可同時供4 名選手或4個代表隊參加比賽,每隊均有一個搶答按鈕,同時給節(jié)目主持人“搶答開始”及“系統(tǒng)清除”按鍵。本搶答器具有編號鎖存、搶答計分、時間顯示和音響提示等功能。本次課程設計讓我初步掌握了競賽搶答單片機系統(tǒng)的工作原理和基本思想,同時也讓我對書本所學到的知識了解更加深入。關鍵字: AT89C51 單片機; 矩陣鍵盤;數(shù)碼管;PCF8591; LM386; Keil5 軟件;Proteus仿真軟件調試過程.1調試詳細步驟和過程(1)在Keil中編好程序后,點擊編譯運行r .BMM-r,FEita2砒U2s r 力吧卜承軸 cl!BtFlT1
4、S,h>3 +立£五11>? uchai uiuiigDTd 7bav idC苫 ginrtint<- Sblt XL-NWJt Bbir rw-pl t.5 gbit Tm;中 ibit ri-Pt* nIO sbit V2=PI*1JTii ahit 9亡上1J gbit Bg-R%T,13 Bbdt的1251IC15 char =oi:- >lx3c 3|W1E ucJiar dlpUh/4- j Gr CF L1:IT udun tmmU1W。G iFIS ucitar 12 -( Oz 1Cd Ifr uchar. rCauEitdE'Tra
5、,2。GtHf WM 再盯21 lit elrf 44-Lp -taitr:ig-u, 健21 raid dl Ay54iB i 1;2C VOld11 i)25 - void Uu'E3工 m26 void i2e_atop I n打 vuldr29 wid匚2? void. 12c_zeaiHyte ' jcbir da.M void jQBdfir11 uciiar getciiiHIi/)2 udhdJL 12.c_tecByt«i 1 k f好 一 143jjJi i< ehz9k: "Kacpaic. 11Fl: 141 ML man JJ
6、HI-. Il MiSCL=XM&iflQ hia, fXL* 工;= '.'' Ctauu'iJlQpG*,-.toil«inWMF - / EtncIM:1 4 4«4冏BJJ.I口 Tl*t BItM+3 THkiE圖1編譯運行結果(2)編譯運行無錯誤后,還需要對項目進一步設置,以滿足要求圖2晶振頻率設置圖 3 勾選 Create HEX file圖4生成HEX文件 生成好HEX文件后,將其導入到Proteus里的AT89C51芯片中圖5導入HEX 文件至 AT89C51(4)點擊運行按鈕進行軟件仿真。仿真時,顯示數(shù)值與旋鈕抽頭
7、電壓相關,調動旋鈕,按下復位鍵,數(shù)值 改變,說明PCF8591工作正常。按下選手搶答按鍵,系統(tǒng)正常提示2s警告;主持人按下開始后,選手搶答正確計分與顯示編號,程序正常;主持人按下 系統(tǒng)清除按鈕,選手編號與分數(shù)消失,顯示倒計時最大時間,程序正常。 記錄軟件仿真結果,同時去機房進行硬件調試。1.2軟件調試遇到的問題及解決過程說明(1) PCF8591芯片與單片機通信發(fā)生錯誤,無論程序使用應答還是非應答, 在 I2C調試器里,都顯示進行的是應答,同時發(fā)送的數(shù)據最后一位均不正確。圖6 I2C調試器發(fā)現(xiàn)錯誤后經過仔細排查,發(fā)現(xiàn)代碼中的一處 for循環(huán)i=1 ,程序出錯,修改后,發(fā)送數(shù)據正確,但應答位仍然
8、不正確。再次進行排查錯誤,發(fā)現(xiàn)是Noack程序里,sda沒有設成1,修改為0后,I2C調試器顯示符合預期。(2)仿真后,發(fā)現(xiàn)音響完全沒聲音,無論給它什么頻率,都不發(fā)出聲音。LS2SOUNDER圖7使用該器件無聲音后檢查電路,發(fā)現(xiàn)電路沒有問題,想到可能是元器件的問題,后將其改為 SPEAKER,發(fā)現(xiàn)聲音正常發(fā)出,問題解決。(3)七段數(shù)碼管顯示錯誤,發(fā)現(xiàn)使用了不是實驗箱上的共陰極數(shù)碼管,修改位7SEG-MPX4-CC-BLUE 后,問題角單決。1.3軟件仿真運行和硬件實際驗證的區(qū)別Proteus仿真軟件使用起來十分順手,但是在程序比較復雜,定時器溢出頻率 高時,仿真容易卡、慢。Proteus仿真軟
9、件進行仿真時,不需要畫晶振電路和復 位電路,是有效減少工作量,還可以使用虛擬示波器、I2C調試器等器件進行問題查找、結果確認,十分方便與快捷。但其僅僅運行在理想的條件下,缺少了現(xiàn) 實里的許多因素影響,容易導致我們思考問題簡單化。硬件實際驗證時,發(fā)現(xiàn)了很多軟件仿真時沒發(fā)現(xiàn)的問題,執(zhí)行程序時,速度 比仿真軟件快很多,反應十分迅速,無論定時器溢出頻率多高,都不會卡、慢, 相比之下,結果更舒適。硬件實際驗證時,需要考慮到硬件的局限性,進行程序 與實際晶振頻率的匹配,I/O 口與相應模塊的連線,總體需要考慮更多因素,不 再是理想情況。二、運行效果1、Proteus電路圖圖8 Proteus接線圖2、滑動
10、變阻器在0%時,倒計時最大時間。Time=20+255*30/255=50Mslle-i*也也 -=-:一Pjl 40Pl 1 嶼;圖9倒計時最大時間3、滑動變阻器在50%時,倒計時最大時間Time=20+128*30/255=34i q ”-2ZM-*T 2加b”占MM- -m 2b制 lw.llrd PrPZ"4、滑動變阻器在100%時,倒計時最大時間Time=20+0*30/255=20rtjujWBT 加3他伊 f NJ =<i $ JM即2,中413 維&H 器必中 理訓11 IPT4AK3! E*“, 即匕修司環(huán)£褶 p I.TK& Fza
11、Tlffg nvnnPl rH15iHHbT<SL2ilCi # 1D1F5、選手進行搶答P3&WC- NTvhprifiMCC Pl IlHDI MMff n 2aJ4CC- Pl-kMM-也函曜K M FZaAID fljjnii 小皿 越段噂 EkM4圖10 一號選手搶到門”IsU4 A 14UJ總專_2_4L !np S':嗡王圖11三號選手搶到n iiwiNTu«nE UU>蛻附HP2 4A17 F卬, PJWU FZTUHSiPI WD “ 1TW PTiifin- eMWTTMODF3 rflE'E 二C33-0aU4總TrF&
12、;rteg圖12三號選手第二次搶到6、無人搶答,系統(tǒng)警告也知E:*Pl ClIUX1 niTifiEE-plEE*陋iplhumPZ4UU7 BHU,2即“ PinM,p JmNl £2 4-圖13倒計時結束無人搶答,系統(tǒng)警告7、硬件仿真圖14旋鈕調到最小,顯示 20圖15調節(jié)旋鈕,時間改變計時結束搶答、計分、硬件仿真時,實際晶振頻率與程序中所使用的不同,導致倒計時的速度很快。 后修改程序,時間正常。三、系統(tǒng)優(yōu)化3.1 軟件設計剛開始設計時,在主函數(shù)里發(fā)送方波以驅動揚聲器發(fā)聲,后發(fā)現(xiàn)聲音頻率變化,可能是每次主函數(shù)執(zhí)行時間不同。后修改為使用定時器 T1產生方波信號來 驅動揚聲器發(fā)聲,修
13、改后,聲音頻率正常,仿真卻很卡。詢問老師后,了解到是 仿真軟件發(fā)出脈沖的時間變慢了,這沒法去除。本來準備使用獨立式鍵盤,后翻閱實驗指導書了解到,實驗箱上只有4個獨立按鍵可供使用,后調整為2*3矩陣鍵盤,修改相應程序以便完成硬件驗證。3.2 硬件設計一開始,使用Proteus里的電路圖進行硬件連接,連接好后硬件驗證發(fā)現(xiàn)數(shù) 碼管的a段一直亮,仔細檢查后發(fā)現(xiàn)是實驗箱I/O 口出現(xiàn)故障,之后連續(xù)換了三四個實驗箱,終于找到了一個實驗箱數(shù)碼管顯示正確,但卻有一個數(shù)碼管不亮,確認是I/O 故障后,將程序里的循環(huán)變量 0x7f改為0x77,將第一位線接到另 一個 I/O 口后,數(shù)碼管顯示正確。之后程序正常運行
14、起來,但是倒計時卻不符合要求,仔細檢查后,發(fā)現(xiàn)實驗箱晶振頻率為11.0592Mhz,我的程序里面用的是12Mhz,修改了各個定時器的初值,重新硬件驗證,現(xiàn)象變?yōu)檎?。由于實際的 運行有很多不確定的因素,因此軟件仿真不能完全符合實際要求,具體的優(yōu)化還需要進行實際電路驗證來完成。四、設計總結這次課程設計,成功的實現(xiàn)了四位競賽搶答器的功能,并對I2C 通信協(xié)議有了更深刻的理解,也更清晰的了解到了Proteus軟件仿真的局限性,以及硬件驗證的復雜性。本次課程設計,使用的AT89C51 芯片雖然已經較為老舊,但是也能實現(xiàn)像這種簡單而又實用的功能,也讓我明白了程序的書寫更為重要。其次也了解了 74LS24
15、4 和 74LS240 芯片的作用和用法,雖然在編寫程序過程中有很多不會的點,但通過查找資料和反復修改,最終成功的編寫出了源程序并實現(xiàn)了設計所要求的功能。對一些典型的算法及應用也有了更加深刻的理解,對之后的編程有著很大的幫助,大大促進了對單片機及C51 編程的學習。本次設計,我分了4 個模塊進行分析,第一部分是矩陣鍵盤的掃描、第二部分是倒計時功能的實現(xiàn)、第三部分是音響提示功能、第四部分是模數(shù)轉換功能。這四部分中,只有第四部分模數(shù)轉換比較困難,花費了我大量的時間,才得以完成, 其他三個部分單獨實現(xiàn)都比較簡單,但是組合起來實現(xiàn)時,各個程序之間的關系就變得復雜起來,這讓我花費了許多時間使其成功組合在
16、一起。過程中雖然出現(xiàn)很多問題但經過不斷調試分析,最終都解決了這些問題,系統(tǒng)的調試是一個很繁瑣的過程,需要有耐心,細心的進行調試。在代碼設計階段,我們最大的問題就是前期沒有總體把握,代碼冗余前后紊亂, 參考了大量的代碼后,我們改進了我們代碼的書寫方式如做成模塊方便調用,添加注釋,顯得干凈而整潔。代碼內部關于寄存器內部數(shù)據比較輸出等還有些問題, 尤其是對程序設計語句的理解和運用,不能夠充分理解每個語句的具體含義,這里有待更深一步的學習。經過這次課程設計后,我總結出繪制電路不僅要能實現(xiàn)功能,還要符合實驗箱上的硬件原理圖,以便于自己后面的硬件驗證,事實證明,我這樣做確實使我的硬件驗證比其他沒有按照原理
17、圖來連接的同學來說簡單了許多,沒有大面積修改程序。 如何根據想要實現(xiàn)的功能選擇合適的芯片模塊,實現(xiàn)正確的功能才是最重要的,這次的設計在設計之初也走了不少彎路,好在思路清晰:鍵號采集、模數(shù)轉換、I2C 通信、 CPU 處理、控制輸、音響提示,現(xiàn)在回想起來倒也不難。這次課程設計是自己安排時間使用Proteus 軟件獨立設計,老師給的參考圖完全依靠自己查閱資料,所以在設計開始的時候走了不少彎路,遇到了很多困難。開始時思路很不清晰,無從下手,經過一天的思考才具體的制定出一套理論上可行的方案,僅僅能實現(xiàn)矩陣鍵盤讀取數(shù)值,不能減計數(shù)和顯示等很多實際上的考慮。 設計電路中間我們也遇到很多原理性的問題,比如單
18、片機如何寫定時器工作代碼, 矩陣鍵盤如何讀取鍵值方便調用等。為了能解決這些問題,我重新溫習了一下課堂上學過的單片機知識,參考了很多芯片文件,并且在百度上查閱了許多文檔,使自己在這方面的知識逐漸的豐富了起來,水平有了明顯的提高。然而遇到問題還是很多沒有解決,在理論情況下能實現(xiàn)的功能,在硬件驗證情況下很難實現(xiàn)。存在的問題很多:源碼錯誤不斷、接線錯誤、不能實現(xiàn)功能等等情況, 都導致了實驗不能完全成功。而且, 經過這次實驗,我明白了以下兩點:一、前期的布局盡可能合理,這個可以為接下來的調試節(jié)省很大的精力;其次,在實驗時一定要細心操作,集中注意力,避免犯小錯誤;最后,并不是所有的實驗都是理論上可行實際上
19、就能運行的,學會調試找出其中的問題遠遠要比接線操作更重要。經過本次課程設計,我都單片機系統(tǒng)的設計與調試的過程有了更深刻的認識,明白了調試的先后順序,懂得了功能的模塊化實現(xiàn),明白了問題的查找與解決方法,更重要的是,我明白了前期準備的重要性,前期準備的越充分,后面完成起來就更快捷、流暢。 本次課設,我從中學到了課堂上沒法傳授的知識,收貨頗豐。附件:#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit X1=P1A0;sbit X2=PW1;
20、sbit Y0=P1A2;sbit Y1=P1A3;/2*3 矩陣鍵盤使用的端口/定義scl 端口/定義sda端口/定義音頻輸出的端口sbit Y2=P1A4;sbit scl=P3A0;sbit sda=P3A1;sbit sound=P3A5;char code dx5163 _at_ 0x003b;/硬件調試時必須加入的代碼uchar display4=10,10,10,10;/四位數(shù)碼管顯示的數(shù)組uchar score4=0,0,0,0;/記錄四位選手的分數(shù)uchar seg12=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xf
21、f,0xbf;/共陽極數(shù)碼管段碼 uchar keyval=10,countdown,t=20,ct=3;char buzzy;bit clrflag=0,startflag=0,keyflag=0,one=1,two=1;/ 定義各種標志位void delay5us();/函數(shù)聲明void i2c_init();void i2c_start();void i2c_stop();void i2c_ack();void i2c_noack();void i2c_sendByte(uchar data1);void send();uchar gettime();uchar i2c_recByte(
22、);void keyscan();void delay(uint x)/延時函數(shù)uchar z;while(x -) for(z=0;z<100;z+);void delay5us()/延時5us函數(shù),用于模擬I2C通信_nop_();_nop_();_nop_();_nop_();_nop_();/主函數(shù)/使用T0、 T1 方式一void main()uchar i,j=0x77;TMOD=0x11;TH0=19456/256;TL0=19456%256;TH1=64876/256;TL1=64876%256;ET1=1ET0=1PT0=1EA=1;send();docountdown
23、=gettime();while(ct -);while(1)keyscan();display2=countdown/10;display3=countdown%10;/開中斷/獲取PCF8591 的數(shù)據/鍵盤掃描/顯示到數(shù)碼管上for(i=0;i<4;i+) void keyscan() /動態(tài)顯示程序j=_crol_(j,1);P2=0xff;P0=segdisplayi;P2=j;delay(5);/數(shù)組的嵌套使用/鍵盤掃描程序delay(10);X1=0;X2=1;if(Y0=0) keyval=1;keyflag=1;if(Y1=0) keyval=2;keyflag=1;i
24、f(Y2=0) keyval=3;keyflag=1;delay(10);X1=1;X2=0;if(Y0=0) keyval=4;keyflag=1;if(Y1=0) startflag=1;if(Y2=0) clrflag=1;if(startflag)if(!keyflag) TR0=1;if(two) buzzy=2;TR1=1;two=!two;/按下開始,定時器T0 啟動/2s單音提示if(keyflag && one)display0=keyval;display1=11;scorekeyval-1+;/編號鎖存/分數(shù)記錄countdown=scorekeyval-
25、1;one=!one;TR1=1;buzzy=2;if(clrflag)/分數(shù)顯示/2s提示音/系統(tǒng)清除按鍵startflag=0;keyflag=0;TR0=0;one=1;two=1;countdown=gettime();display0=10;display1=10;TH0=19456/256;TL0=19456%256;t=20;clrflag=0; elseif(clrflag)/系統(tǒng)清除按鍵countdown=gettime();clrflag=0;if(keyflag)TR0=1;TR1=1;buzzy=2;keyflag=0;/選手違規(guī)搶答/2s 警告單音提示void tim
26、er0() interrupt 1/定時器T0 中斷服務子程序TH0=19456/256;TL0=19456%256;t-;if(t=0)t=20;if(buzzy>0) buzzy-;else TR1=0;if(startflag=0&&TR0=1) TR0=0;if(countdown>0&&startflag&&!keyflag) countdown -;if(countdown=0 && startflag )buzzy=2;TR1=1;/2sstartflag=0;void timer1() interrupt 3TH1=64876/256;TL1=64876%256;if(buzzy>0) sound=!sound; else sound=0;void i2c_init()/計時結束,未搶答,2s警告/定時器T1,確定聲音頻率/I2C 初始化程序scl=1;_nop_();sda=1;delay5us();void i2c_start()scl=1;sda=1;delay5us();sda=0;delay5us();scl=0;void i2c_s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025企業(yè)外包合同
- 2025企業(yè)間借貸合同應包含的要素
- 管理學中的知識管理試題及答案
- 2025年行政管理考試重點概念試題及答案
- 2025年個體土地贈與合同樣本
- 行政管理與社會輿論試題及答案
- 2025電子書贈與的合同范本
- 嘗試2025年公文寫作與處理試題及答案
- 現(xiàn)代管理技能應用試題及答案
- 管理心理學對情商培養(yǎng)的作用試題及答案
- 2024年四川省巴中市中考文科綜合試卷(含答案解析)
- 2024年全國職業(yè)院校技能大賽中職組(法律實務賽項)考試題庫-上(單選題)
- 欠款抵車的協(xié)議書范本
- 設備購買合同模板示例
- 基于JAVA的寵物管理系統(tǒng)實現(xiàn)畢業(yè)論文
- 抖音火花合同電子版獲取教程
- 2023-2024學年人教版八年級下冊數(shù)學 期末復習試題
- 諾如病毒校園防控知識
- 湖北省武漢市東湖高新區(qū)2023-2024學年五年級下學期期中英語試題
- 常見神經系統(tǒng)疾病康復15節(jié)
- 關于梳理、修訂、完善公司規(guī)章制度的通知
評論
0/150
提交評論