課程設計報告
課程名稱:單片機課程設計
報告題目:8位競賽搶答器的設計 學生姓名: 所在學院:信息科學與工程學院 專業班級: 學生學號: 指導教師:
2013 年12月25日 課程設計任務書 報告題目 | | | | |
| |
| |
| | | | 設計一個數字式電容測量儀電路,要求如下: 以單片機為核心,設計一個8位競賽搶答器:同時供8名選手或8個代表隊比賽,分別用8個按鈕S0~S7表示。 設置一個系統清除和搶答控制開關S,開關由主持人控制。 搶答器具有鎖存與顯示功能。即選手按按鈕,鎖存相應的編號,并在優先搶答選手的編號一直保持到主持人將系統清除為止。當主持人啟動“開始”鍵后,定時器進行減計時,同時揚聲器發出短暫的聲響,聲響持續的時間為0.5s左右。 參賽選手在設定的時間內進行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,并保持到主持人將系統清除為止。 如果定時時間已到,無人搶答,本次搶答無效,系統報警并禁止搶答,定時顯示器上顯示00 | | 第17周: 周一、周二:選題,明確任務,指導教師對課題進行講解,資料檢索 周三:硬件設計,硬件仿真 周四、周五:軟件設計 第18周: 周一:綜合調試 周二、周三、周四:書寫課程設計報告 周五:答辯評分 | | 1.與設計內容對應的軟件程序 2.課程設計總結報告 |
|
|
|
|
|
|
|
|
摘要搶答器作為一種工具,已廣泛應用于各種智力和知識競賽場合。但搶答器的使用頻率較低,且有的要么制作復雜,要么可靠性低。作為一個單位,如果專門購一臺搶答器雖然在經濟上可以承受,但每年使用的次數極少,往往因長期存放使(電子器件的)搶答器損壞,再購置的麻煩和及時性就會影響活動的開展,因此設計了本搶答器。 本設計是以八路搶答為基本理念。考慮到依需設定限時回答的功能,利用AT89C52單片機及外圍接口實現的搶答系統,利用單片機的定時器/計數器定時和記數的原理,將軟、硬件有機地結合起來,使得系統能夠正確地進行計時,同時使數碼管能夠正確地顯示時間。用開關做鍵盤輸出,揚聲器發生提示。同時系統能夠實現:在搶答中,只有開始后搶答才有效,如果在開始搶答前搶答為無效;搶答限定時間和回答問題的時間可在1-30s設定;可以顯示是哪位選手有效搶答,正確按鍵后有5s的音樂提示(即揚聲器發出響聲);搶答時間和回答問題時間倒記時顯示,滿時后系統計時自動復位及主控強制復位;按鍵鎖定,在有效狀態下,按鍵無效非法。
關鍵詞:89c52;電路;顯示;按鍵
目錄一、概述…………………………………………………………………………1 二、方案設計………………………………………………………………1 三、硬件電路設計…………………………………………………………2 1、搶答器的電路框圖…………………………………………………………2 2、單元電路 ………………………………………………………………………………3 2.1、搶答器電路………………………………………………………………………3 2.2、時序控制電路……………………………………………………………………3 2.3、復位電路…………………………………………………………………………3 3、時鐘震蕩電路………………………………………………………………3 4、報警電路…………………………………………………………………3 四、軟件設計………………………………………………………………4 1、系統主程序…………………………………………………………4 2、系統程序…………………………………………………………5 五、結論與心得………………………………………………………………………10 六、參考文獻……………………………………………………………………10
一、概述本實驗電路由搶答電路、譯碼顯示電路、主持人控制電路、定時電路、報警電路組成。通過復位按鍵FW,電路進入準備就緒狀態。將搶答時間設定在30S,然后按下開始鍵開始搶答。,在電路中“S0-S7”為8路搶答器的8個按鍵,當有鍵按下,程序鎖定信號,從P2口輸出搶答者號碼的七段碼值,送到數碼管顯示,并封鎖按鍵,保持剛才按鍵按下時刻的時間,禁止其他人按鍵的輸入,從而實現了搶答的功能。當設定的搶答時間結束,仍然沒有搶答鍵被按下,則產生已經超時的報警信號,結束搶答。當要進行下一次的搶答時,首先按一下復位按鍵,電路復位。 該設計是以MCS51為基礎,結合單片機匯編語言知識,設計而成的8位競賽搶答器。在偉福試驗箱上實現仿真。 主持人按下“開始搶答鍵”既單脈沖鍵后,喇叭響0.5秒給出提示信號,并立刻進入搶答倒計時(預設30秒搶答時間)此時,數碼顯示管上顯示倒計時時間:有選手搶答,停止計時,八段數碼顯示搶答時間和選手號;無選手搶答,倒計時30秒后,顯示00。然后選手等待主持人按下按鈕開始新一輪搶答。 注意: (1)由于設計的局限性,如果在無人搶答期間,30秒還未到,主持人不能按下重新下一輪搶答按鈕。 (2)由于試驗箱上按鈕數量有限,故選用開關代替按鈕,供8位選手搶答使用。鑒于開關與按鈕動作過程的差異,所以每次當選手搶答,撥下開關時必須將開關復位。 (3)當系統出現錯誤的時候,停止操作,重新編譯開始。
二、方案設計方案:該系統采用51系列單片機AT89C51作為控制核心,該系統可以完成運算控制、信號識別以及顯示功能的實現。由于用了單片機,使其技術比較成熟,應用起來方便、簡單并且單片機周圍的輔助電路也比較少,便于控制和實現。整個系統具有極其靈活的可編程性,能方便地對系統進行功能的擴張和更改。MCS-51單片機特點如下:
<1>可靠性好:單片機按照工業控制要求設計,抵抗工業噪聲干擾優于一般的CPU,程序指令和數據都可以寫在ROM里,許多信號通道都在同一芯片,因此可靠性高,易擴充。 <2>單片機有一般電腦所必須的器件。 <3> 控制功能強:單片機指令除了輸入輸出指令,邏輯判斷指令外還有更豐富的條件分支跳躍指令。
三、硬件電路設計1、搶答器的電路框圖 如圖3.1.1所示為電路框圖。其工作原理為:接通電源后,主持人按下開關即為“開始”狀態,宣布“開始”搶答器工作。編號顯示器滅燈,定時器顯示設定時間。定時器倒計時,揚聲器給出5s聲響提示。選手在定時時間內搶答時,搶答器完成:優先判斷、編號鎖存、編號顯示。當一輪搶答之后,定時器停止、禁止二次搶答、定時器顯示剩余時間。如果再次搶答必須由主持人再次操作"開始、停止"狀態按鍵。
圖3.1.1電路框圖 2、單元電路3.2.1、搶答器電路 該電路完成兩個功能:一是判斷出選手按鍵的先后,并鎖存優先搶答者的編號,同時譯碼顯示電路顯示編號;二是禁止其他選手按鍵操作無效。如有再次搶答需由主持人將S開關重新置,“清除”然后再進行下一次搶答。 3.2.2、時序控制電路 時序控制電路是搶答器設計的關鍵,它要完成以下功能:
a.主持人將控制開關撥到"開始"位置時,揚聲器發聲,搶答電路和定時電路進人正常搶答工作狀態。
b.當參賽選手按動搶答鍵時,揚聲器發聲,搶答電路和定時電路停止工作。 3.2.3、復位電路設計 外部中斷和內部中斷并存,單片機硬件復位端,只要持續4個機器周期的高電平即可實現復位,硬件復位后的各狀態可知寄存器以及存儲器的值都恢復到了初始值,因為本設計中功能中有倒計時時間的記憶功能,所以不能對單片機進行硬件復位,只能用軟件復位,軟件復位實際上就是當程序執行完之后,將程序通過一條跳轉指令讓它完成復位。 3、時鐘震蕩電路時鐘震蕩電路單片機必須在89C52驅動下才能工作,在單片機內部有一個時鐘震蕩電路,只需要外接一個振蕩器就能產生一定的時鐘信號送到單片機內部的各個單元。 4、報警電路報警電路用于報警,當遇到報警信號時,發出警報。8952動喇叭的信號為各種頻率的脈沖。因此,最簡單的喇叭驅動方式就是利用達林頓晶體管,或者以兩個常用的小晶體管連接成達林頓架勢。在右圖中電阻R為限流電阻,在此利用晶體管的高電流增益,以達到電路快速飽和的目的。不過,如果要由P0輸出到此電路,還需要連接一個10K的上拉電阻。 file:///C:/Users/83570/AppData/Local/Temp/OICE_78C48033-D549-423C-91D1-C72951558F6E.0/msohtmlclip1/01/clip_image003.jpg 圖3硬件電路圖
四、軟件設計1、系統主程序為了能夠達到搶答的公平、公正、合理,應該在主持人發布搶答命令之前必須先設定搶答的時間,因而在編開始搶答前的程序得先編寫設定時間的程序,當時間設好了之后,主持人發布搶答命令按下s1按鍵,程序開始打開定時中斷開始倒計時,然后調用鍵盤掃描子程序,編寫鍵盤掃描程序。當在掃描到有人按下了答題鍵,馬上關閉T0、調用顯示程序、封鎖鍵盤。 以單片機為核心,設計一個8位競賽搶答器:同時供8名選手或8個代表隊比賽,分別用8個按鈕S0~S7表示。 設置一個系統清除和搶答控制開關S,開關由主持人控制。 搶答器具有鎖存與顯示功能。即選手按按鈕,鎖存相應的編號,并在優先搶答選手的編號一直保持到主持人將系統清除為止。當主持人啟動“開始”鍵后,定時器進行減計時,同時揚聲器發出短暫的聲響,聲響持續的時間為0.5s左右。 參賽選手在設定的時間內進行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,并保持到主持人將系統清除為止。 如果定時時間已到,無人搶答,本次搶答無效,系統報警并禁止搶答,定時顯示器上顯示00。
file:///C:/Users/83570/AppData/Local/Temp/OICE_78C48033-D549-423C-91D1-C72951558F6E.0/msohtmlclip1/01/clip_image004.gif 圖4.1主程序方框圖 2、系統程序#include<reg52.h> #defineuint unsigned int #defineuchar unsigned char sbits1=P3^0; sbitwe=P3^6; ucharh[]={0xe0,0xd0,0xb0,0x70}; uchar code table[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; uchar num,count; uchara=0,c=0,t,bb=0,t1; voiddelay(uint z) { uint x,y; for(x=110;x>0;x--) for(y=z;y>0;y--); } voidwrite_sx() { P2=0xdf; P0=0x08; P2=0x00; P0=0xff; P2=0xff; P0=table[t1]; P2=0x00; P0=0x00; delay(5); P2=0xdf; P0=0x40; P2=0x00; P0=0xff; P2=0xff; P0=table[(t/10)%10]; P2=0x00; P0=0x00; delay(5); P2=0xdf; P0=0x80; P2=0x00; P0=0xff; P2=0xff; P0=table[t%10]; P2=0x00; P0=0x00; delay(5); }
voidinit() { P2=0xbf;P0=0xbf; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=0; ET0=1; TR0=1; }
voidkeyscan() { we=0; if(s1==0) { delay(5); if(s1==0) { while(!s1); EA=1; P2=0xbf;P0=0xff; t=30; a=1; t1=10; c=0; } } if(c==0) { P3=0xfd; num=P3; num=num&0xf0; if(num!=0xf0) { delay(5); if(num!=0xf0) { while(P3!=0xfd); c=1; EA=0; if(num==h[3]) t1=1; if(num==h[2]) t1=2; if(num==h[1]) t1=3; if(num==h[0]) t1=4; } }
P3=0xfb; num=P3; num=num&0xf0; if(num!=0xf0) { delay(5); if(num!=0xf0) { while(P3!=0xfb); c=1; EA=0; if(num==h[3]) t1=5; if(num==h[2]) t1=6; if(num==h[1]) t1=7; if(num==h[0]) t1=8; } } } } voidmain() { init(); while(1) { keyscan(); if((a==1)&&((t>0)&&(t<=30))) { write_sx(); } if(t==0) { EA=0; t=0; t1=10; } } } voidtimer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; count++; if(count==10) { P2=0xbf;P0=0xbf; } if(count==20) { count=0; t--; } } 五、結論與心得通過這次課程設計,我深刻的認識到自己在許多方面的不足。通過編程,我學會了如何獨立的寫出程序,提高了自己的分析解決問題的能力,并且使自己所學的知識與實踐相結合,應用到實踐當中。 在剛開始的時候無從下手,感覺有些茫然,但同學和老師給予我很大的幫助,每當設計過程中遇到困難時,老師都會細心的教導我,耐心的為我講解,同學也熱心幫助我,為我排憂解難,讓我深深的體會到了團隊的力量和重要性。 通過設計,我也學到了很多書本上沒有的知識。在設計當中遇到了很多問題,但通過查找資料,克服了這些問題,提高了自己在實際當中解決問題的能力。 在此我感謝學校給了我們的這次實踐機會。在這里為奔波勞累在這次設計中老師便是感謝,老師們不辭勞苦,不在乎身體的不適認真為我們講解并為我們知道實際操作過程中的問題。讓我們一步一步有序完成此次課程設計。在這里對我們的廖老師、曹老師說聲謝謝,謝謝你們,你們辛苦了!也祝你們身體健康工作順利 六、參考文獻[1] 張毅剛.《單片機原理及應用》.高等教育出版社,2009 [2] 譚浩強.《C程序設計教程》.清華大學出版社 [3] 周興華.《單片機C程序設計》.北京航空航天大學出版社
|