|
緒論------------------------------------------------------------------------------------------------------------- 3 第1章系統設計內容--------------------------------------------------------------------------------- 4 1.1 系統設計依據---------------------------------------------------------------------------------------- 4 1.2 設計任務和要求-----------------------------------------------------4 1.3 設計目的---------------------------------------------------------------------------------------------- 4 第2章 硬件設計-------------------------------------------------------------------------------------- 5 2.1 單片機控制原理------------------------------------------------------------------------------------- 5 2.2 搶答器的原理---------------------------------------------------------------------------------------- 6 2.3 功能模塊電路--------------------------------------------------------------------------------------7 2.3.1 晶振復位及開始搶答電路-----------------------------------------------------------------7 2.3.2 選手搶答鍵(矩陣式鍵盤)----------------------------------------------------------------- 8 2.3.3.顯示與顯示驅動電路------------------------------------------------------------------------ 8 2.3.4 蜂鳴器音頻輸出電路------------------------------------------------------------------------ 9 2.3.5 發聲系統設計------------------------------------------------------------------------------- 10 第3章 軟件設計---------------------------------------------------------------------------------------- 10 3.1程序設計----------------------------------------------------------------------------------------------- 10 3.1.1 系統流程圖-------------------------------------------------------------------------------------10 3.1.2 顯示搶答違規流程圖--------------------------------------------11 3.1.3 搶答成功流程圖-------------------------------------------------11 3.2 程序代碼-----------------------------------------------------------12 3.2.1主程序代碼-----------------------------------------------------12 3.2.2 定時器子程序---------------------------------------------------16 3.2.3 延時子程序-----------------------------------------------------17 3.2.4 顯示子程序-----------------------------------------------------17 第4章 系統調試--------------------------------------------------------18 第5章 總結------------------------------------------------------------18 參考文獻-----------------------------------------------------------------19 附錄一 程序代碼----------------------------------------------------------20 附錄二 原理圖------------------------------------------------------------27 ·緒論 隨著電子技術的飛速發展,基于單片機的控制系統已經廣泛應用于工業、農業、電力、電子、智能樓宇等行業。微型計算機作為嵌入式控制系統的主體與核心,代替了傳統的控制系統的常規電子線路。同時樓宇智能化的發展與成熟,也為基于單片機的照明控制系統的普及與應用奠定了堅實的基礎。 電子智能搶答器在搶答過程中,為了知道哪一組或哪一位選手先回答問題,必須要設計一個系統來完成這個任務。如果在搶答中,靠視覺是很難判斷出哪組先答題。利用單片機系統來設計搶答器,使以上問題得以解決,即使兩組的搶答時間相差幾微秒也可以分辨出使哪組優先回答問題。搶答組數可以在八組以內任意使用,本系統設計為模塊形式采用九針插頭進行連接,系統工作原理本系統采用AT89C51單片機作為核心。控制系統的五個模塊分別為:單片機最小系統、顯示模塊、顯示驅動模塊、搶答開關模塊、音樂音頻輸出模塊。 多路數字搶答器在各種智力競賽中經常用到。在各校舉行的各種競賽中我們也經常看到有搶答的環節,舉辦方多數采用讓選手通過舉答題板的方法判斷選手的答題權,這在某種程度上會因為主持人的主觀誤斷造成比賽的不公平性。為解決這個問題,我準備借本次課程設計的機會制作一個八路數顯搶答器。一方面加深我們對所學習的知識的了解,鞏固模擬、數字電路知識,也提升我們解決日常生活中常見問題的能力,掌握一般設計方法與設計步驟。積累實際設計制作經驗,為走向更復雜更實用的應用領域奠定基礎。控制系統主要由單片機控制電路、存儲器接口電路及顯示電路組成。具體以AT89C51單片機為系統工作核心,負責控制各個部分協調工作。在其外圍接上了復位電路、上拉電阻、數碼管、按鈕及揚聲器,其中用到了WAVE軟件,集成調試環境,集成編輯器、編譯器、調試器,支持軟件模擬等。同時也用到了PROTEUS軟件,通過仿真可完全實現對所設計系統的功能的模擬。 第1章 系統設計內容 1.1系統設計依據
搶答器由計數器、寄存器、集成定時器和譯碼顯示等組合、時序電路組成。可分為搶答電路,定時電路,報警電路等幾個單元部分。每個單元電路分別可以處理一些搶答競賽中的基本問題。
本次課程設計設計的是一個多路定時搶答器,是一個多于兩位選手參賽的一個搶答器,具有鎖存和顯示功能。同時有主持人控制系統的清零和搶答的開始。搶答開始后,若有任何一名選手按動搶答按鈕,搶答器就會顯示該選手編號直至系統被主持人清零,并有揚聲器發出提示,同時其他人再搶答就無效了。這次設計的搶答器還有自動定時功能,主持人可以設定選手答題的時間。當主持人啟動“開始”鍵后,定時器會自動減計時,這個會顯示在顯示器上。選手只有在搶答時間內搶答才有效,若在答題時間內沒有選手答題,時間到時,報警電路就會發出警報亮燈并且禁止搶答。 1.2設計任務和要求 設計一個八路搶答器 要求:(1)設計出硬件電路; (2)設計出軟件編程方法,并寫出源代碼; (3)用PROTEUS進行仿真; (4)論文格式要符合學院的統一規定,結構要合符邏輯,表達要得體。 1.3 設計目的 通過設計學習單片機最小系統的基本設計方法,掌握單片機應用系統的開發調試過程。 (1)學習單片機開發工具功能、特點和使用方法。 (2)學會單片機控制系統程序的編制和編制和調試方法。 (3)設計單片機搶答器硬件電路,繪制出電路原理圖。 (4)編制并調試出鍵盤掃描程序和顯示驅動程序。 (5)掌握單片機定時器的基本用法,編制出定時器的中斷程序。 第2章 硬件設計 2.1 單片機控制原理 單片機(SCM)是單片微型計算機(SingleChip Microcomputer)的簡稱。它是把中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、I/O接口電路、定時/計數器以及輸入輸出適配器都集成在一塊芯片上,構成一個完整的微型計算機。它的最大優點是體積小,可放在儀表內部。但存儲量小,輸入輸出適配器簡單,功能較低。目前,單片機在民用和工業測控領域得到最廣泛的應用,早已深深地融入人們的生活中。 簡單的說,用單片機系統來設計搶答器,實現兩組的搶答時間即使是相差幾微秒,也可分辨出哪組優先答題。 P0端口(P0.0-P0.7):P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。 P1端口(P1.0-P1.7):P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高電平,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 P2端口(P2.0-P2.7):P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。P3端口(P3.0-P3.7): P3口管腳是一個帶有內部上拉電阻的8位的雙向I/O端口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入端時,由于外部下拉為低電平,P3口將輸出電流(ILL)。 2.2 搶答器的原理 搶答器的工作原理是采用單片機最小系統,用程序查詢方式采用動態顯示組號。主持人按下開始搶答鍵才可以搶答。主持人沒有按下開始搶答按紐(P3.0),有人搶答則搶答違規,報警并顯示組號,主持人按下開始搶答開關重新搶答。主持人按下開始搶答按紐(P3.0),蜂鳴響聲提示,數碼管30秒倒計時搶答,蜂鳴器響聲提示并顯示他的組號,30秒內有人搶答則開始60秒倒計時(60秒內必須回答完問題),最后五秒倒計時警報。單片機最小系統、搶答按鍵模塊(四位并行數碼顯示)、顯示模塊、顯示驅動模塊、搶答開關模塊、蜂鳴器音頻輸出模塊。 2.2.1 原理及電路總框圖 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg 圖2.2.1搶答器總原理圖 2.3 功能模塊電路 2.3.1晶振復位及開始搶答電路 晶振的頻率為12MHZ,提供89C51的時鐘脈沖使89C51工作,復位電路是單片機初始化,使單片機重新開始執行程序。當復位開關按下RST由低電平變為高電平,則程序從頭開始執行,在此次課程設計電路中當一個問題結束主持人后按下復位開關后進行下一題的準備。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg 圖2.3.1 晶振復位電路 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg 圖2.3.1開始搶答電路 2.3.2 選手搶答鍵(矩陣式鍵盤) 89C51的P1口做一個為選手搶答的輸入按鍵引腳,P1.0至P1.7輪流輸出低電位,給每一個選手編號1至8,當選手按下按鈕時,P1口個端口的電平變化從P1口輸入,經單片機處理后從P0輸出由數碼管顯示搶答者編號。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg 圖2.3.2 選手搶答電路 2.3.3 顯示與顯示驅動電路 此電路包括顯示和驅動,顯示采用數碼管,驅動用P2口, 違規者編號、搶答30秒倒計時、正常搶答者編號和回答問題時間60秒倒計時,數碼管采用動態顯示。驅動電路P2口,查詢顯示程序利用P0口做段選碼口輸出P2低3位做位選碼輸出,當為低電平則能驅動數碼管使其顯示數字。在+5V電壓下接10k的電阻,保證正常壓降。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg 圖2.3.3 顯示驅動電路 2.3.4蜂鳴器音頻輸出電路 通過控制不同頻率的矩形脈沖來控制蜂鳴器發聲。此次課程設計中只需要一些簡單的提示聲音和稍微顯眼的燈控,有搶答違規,開始搶答,搶答時間結束和回答時間到得提示聲和亮燈提醒。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image012.jpg 圖2.3.4蜂鳴器音頻輸出電路 2.3.5 發聲系統設計 聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制單片機某個口線的“高”電平或低電平,則在該口線上就能產生一定頻率的矩形波,接上喇叭就能發出一定頻率的聲音,若再利用延時程序控制“高”“低”電平的持續時間,就能改變輸出頻率,從而改變音調,使喇叭發出不同的聲音。 圖2.3.5發聲系統電路圖 第3章 軟件設計 3.1程序設計 本程序采用子程序設計,在主程序中調用子程序來實現定時、倒計時、計分、顯示等功能,這樣程序會通俗易懂,同時也有利于程序的調試和修改。 3.1.1 系統流程圖 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image013.gif 3.1.2顯示搶答違規流程圖 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image014.gif 3.1.3搶答成功流程圖 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image015.gif 3.2 程序代碼 3.2.1 主程序 voidmain() { init(); if(k==0) //主持人按下開始鍵 { Timer(); delay(10); while(!k); while(1) { dis(); m=0; n=0; if(second==10){beep=1;delay(500);beep=0;} if(second==0) { TR0=0;n=1; if(k==0) {beep=1;delay(500);beep=0;second=29;TR0=1;m=1;} } if(n==0) { if(k1==0) {delay(5);if(k1==0);while(!k1);t=1;} elseif(k2==0) {delay(5);if(k2==0);while(!k2);t=2;} elseif(k3==0) {delay(5);if(k3==0);while(!k2);t=3;} elseif(k4==0) {delay(5);if(k4==0);while(!k2);t=4;} elseif(k5==0) {delay(5);if(k5==0);while(!k2);t=5;} elseif(k6==0) {delay(5);if(k6==0);while(!k2);t=6;} elseif(k7==0) {delay(5);if(k7==0);while(!k2);t=7;} elseif(k8==0) {delay(5);if(k8==0);while(!k2);t=8;} elseif(k==0) {delay(5);if(k==0);while(!k);t=0;i=0;second=29;beep=1;delay(500);beep=0;TR0=1;} } while(t) { if(m==0)//開關,保證程序只執行一次 { switch(t) { case1: { TR0=0;i=1;second=0;beep=1;delay(500);beep=0; a1=0;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break; } case2: { TR0=0;i=2;second=0;beep=1;delay(500);beep=0; a2=0;a1=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break; } case3: { TR0=0;i=3;second=0;beep=1;delay(500);beep=0; a3=0;a1=1;a2=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break; } case4: { TR0=0;i=4;second=0;beep=1;delay(500);beep=0; a4=0;a1=1;a2=1;a3=1;a5=1;a6=1;a7=1;a8=1;m=1;break; } case5: { TR0=0;i=5;second=0;beep=1;delay(500);beep=0; a5=0;a1=1;a2=1;a3=1;a4=1;a6=1;a7=1;a8=1;m=1;break; } case6: { TR0=0;i=6;second=0;beep=1;delay(500);beep=0; a6=0;a1=1;a2=1;a3=1;a4=1;a5=1;a7=1;a8=1;m=1;break; } case7: { TR0=0;i=7;second=0;beep=1;delay(500);beep=0; a7=0;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a8=1;m=1;break; } case8: { TR0=0;i=8;second=0;beep=1;delay(500);beep=0; a8=0;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;m=1;break; } } } if(a1==0)//選手1的分數 { second=score1; dis(); if(m1==0){delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score1+=1;if(score1==99)score1=60;} else if(m2==0){delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score1-=1;if(score1==0)score1=60;} dis(); } else if(a2==0) { second=score2; dis(); if(m1==0){delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score2+=1;if(score2==99)score2=60;} else if(m2==0){delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score2-=1;if(score2==0)score2=60;} dis(); } else if(a3==0) { second=score3; dis(); if(m1==0){delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score3+=1;if(score3==99)score3=60;} else if(m2==0){delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score3-=1;if(score3==0)score3=60;} second=score3; dis(); } else if(a4==0) { second=score4; dis(); if(m1==0){delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score4+=1;if(score4==99)score4=60;} else if(m2==0){delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score4-=1;if(score4==0)score4=60;} second=score4; dis(); } else if(a5==0) { second=score5; dis(); if(m1==0){delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score5+=1;if(score5==99)score5=60;} else if(m2==0){delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score5-=1;if(score5==0)score5=60;} second=score5; dis(); } else if(a6==0) { second=score6; dis(); if(m1==0){delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score6+=1;if(score6==99)score6=60;} else if(m2==0){delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score6-=1;if(score6==0)score6=60;} second=score6; dis(); } else if(a7==0) { second=score7; dis(); if(m1==0){delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score7+=1;if(score7==99)score7=60;} else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score7-=1;if(score7==0)score7=60;} second=score7; dis(); } else if(a8==0) { second=score8; dis(); if(m1==0){delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score8+=1;if(score8==99)score8=60;} else if(m2==0){delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score8-=1;if(score8==0)score8=60;} second=score8; dis(); } if(k==0){i=0;t=0;second=29;beep=1;delay(500);beep=0;TR0=1;} while(!k); } } } } 3.2.2 定時器子程序 voidTimer() { TMOD|=0x01; TH0=0xd8; //初值55536,計數10000次,每次1US,總計10ms TL0=0xf0; IE=0x82; //這里是中斷優先級控制EA=1(開總中斷),ET0=1(定時器0允許中斷),這里用定時器0來定時 TR0=1; } voidtim(void) interrupt 1 using 1 //為定時中斷TR0 { TH0=0xd8; //重新賦值 TL0=0xf0; count++; if(count==100) //100*10ms=1秒 { count=0; second--; //秒減1 } } 3.2.3 延時子程序 voiddelay(uint z) //延時函數 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } 3.2.4 顯示子程序 voiddisplay (uchar shiwei,gewei,xuanshou) //顯示函數 { P2=0xfe; //打開顯示時間十位的位選 P0=shiwei;//顯示十位 delay(5); P2=0xfd; //個位位選 P0=gewei; delay(5); P2=0xf7; //選手位選 P0=xuanshou; delay(5); } 第4章 系統調試 軟件的設計與調試實行分模塊實現的方法。本設計軟件調試中的分模塊包括顯示功能模塊,調整時間功能模塊,搶答功能模塊以及報警功能模塊。各個獨立模塊功能調試成功后,將這些模塊程序通過主程序合并在一起,最后再對合并后的總程序進行調試。各軟件模塊首先要通過PC和仿真器進行軟件調試,當仿真效果符合要求后在燒寫進單片機看是否在實際電路板上正常工作。本設計通過利用Proteus仿真,將所編寫的程序用wave軟件編譯,所仿真原理圖見附錄。 1、 倒計時 當按下開始按鈕時開始倒計時。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image016.gif 2、計分 選手按下搶答按鈕,顯示選手號及基礎分60。
|