完美搶答器仿真圖及程序_第1頁
完美搶答器仿真圖及程序_第2頁
完美搶答器仿真圖及程序_第3頁
完美搶答器仿真圖及程序_第4頁
完美搶答器仿真圖及程序_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、課程設(shè)計題目:基于單片機的智能八路搶答器設(shè)計一、設(shè)計項目簡介1. 設(shè)計意義及目的搶答器在現(xiàn)實生活中應(yīng)用廣泛,比如在各類娛樂節(jié)目中,像中央電視臺的幸運52,開心辭典,因此做一個搶答器是具有現(xiàn)實意義的。搶答器具有人數(shù)限制,我們選擇做八路搶答器。當某人搶答時,能夠顯示他的號碼,限定他的答題時間,別人不能搶答,主持人要有啟動和清空的權(quán)利。八路搶答器在搶答過程中,為了知道哪一組或哪一位選手先答題,必須要設(shè)計一個系統(tǒng)來完成這個任務(wù)。如果在搶答中,靠視覺是很難判斷出哪組先答題。利用單片機系統(tǒng)來設(shè)計搶答器,使以上問題得以解決,即使兩組的搶答時間相差幾微秒,也可分辨出哪組優(yōu)先答題。搶答組數(shù)可以在八組以內(nèi)任意使用

2、,本系統(tǒng)采用at89s52單片機作為核心,控制系統(tǒng)的四個模塊分別為:單片機最小系統(tǒng)、顯示模塊、顯示驅(qū)動模塊、搶答開關(guān)模塊。2. 系統(tǒng)功能描述設(shè)計一個具有特定功能的搶答器。該搶答器上電或按鍵復(fù)位后能自動顯示系統(tǒng)提示符“p.”, 進入準備工作狀態(tài)。主持人按下開始按鈕后,搶答開始并限定時間30s;10s內(nèi)無人搶答,蜂鳴器發(fā)出音響;主持人按下開始按鈕之前有人按下?lián)尨鹌鳎瑩尨疬`規(guī),顯示器顯示違規(guī)臺號,違規(guī)指示燈亮,其它按鈕不起作用;正常搶答,顯示器顯示臺號,蜂鳴器發(fā)出音響,其它搶答按鈕無效;正常搶答下,從按下?lián)尨鸢粹o開始30s內(nèi),答完按鈕沒按下,則作超時處理,超時處理時,違規(guī)指示燈亮,數(shù)碼管顯示違規(guī)臺號

3、。蜂鳴器發(fā)出音響;各臺數(shù)字顯示的消除,蜂鳴器音響及違規(guī)指示燈的關(guān)斷,都要通過主持人按復(fù)位按鈕。3. 設(shè)計達到目標我們在要求的基礎(chǔ)上拓展了一些功能,比如增加倒數(shù)剩下5s的時候每秒響一聲,最后一聲比較悠長,以提示選手搶答或者回答時間將盡,還將搶答按鍵和答完按鍵做在了同一個按鍵上,搶答之后選手答完題目再次按下該搶答按鍵即是答完,使剩余時間與臺號定格??傮w上我們達到了:按該搶答器上電或按鍵復(fù)位后能自動顯示系統(tǒng)提示符“p.”, 進入準備工作狀態(tài)。主持人按下開始按鈕后,搶答開始并限定時間30s;10s內(nèi)無人搶答,蜂鳴器發(fā)出音響;最后5s倒計時蜂鳴器每秒響一聲提示,最后一聲比較悠長,提示搶答時間到;主持人按

4、下開始按鈕之前有人按下?lián)尨鹌?,搶答違規(guī),顯示器顯示違規(guī)臺號,違規(guī)指示燈亮,其它按鈕不起作用;正常搶答,顯示器顯示臺號,蜂鳴器發(fā)出音響,其它搶答按鈕無效;正常搶答下,從按下?lián)尨鸢粹o開始30s內(nèi),答完按鈕沒按下,則作超時處理,超時處理時,違規(guī)指示燈亮,數(shù)碼管顯示違規(guī)臺號,和搶答期間一樣,回答期間最后5s倒計時蜂鳴器每秒響一聲提示,最后一聲比較悠長,提示回答時間到;答完按鈕設(shè)置在搶答按鍵上,再次按下?lián)尨鸢存I即是答完,此時蜂鳴器響一聲,時間定格在答完題目之后剩下的時間;各臺數(shù)字顯示的消除,蜂鳴器音響及違規(guī)指示燈的關(guān)斷,都要通過主持人按復(fù)位按鈕。二、系統(tǒng)硬件設(shè)計1. 系統(tǒng)設(shè)計方案(1) 利用譯碼芯片先根

5、據(jù)74ls148的優(yōu)先功能,確定了先搶答到的選手的編碼號,再根據(jù)74ls279的鎖存功能,將其信號保持下來,并實現(xiàn)了鎖定功能,將選手的編碼鎖定。再者,根據(jù)74ls48的譯碼功能,將74ls279鎖定的數(shù)字編譯成二進制,將信號送到顯示器中。這樣就實現(xiàn)了搶答功能。原理框圖如圖1所示。 圖 1 原理框圖(2)利用單片機可以利用單片機的定時/計數(shù)器進行計時,設(shè)定搶答時間和答題時間;可以利用單片機的i/o口線接按鍵,通過按鍵按下后,所接口線電平的變化來判斷那位選手按下鍵。我選擇利用單片機做搶答器。1、仿真圖2、 程序/*操作非常簡單*主持人先按鍵,然后有30s的時間,等待選手按鍵*選手在30s內(nèi)按鍵,就

6、顯示選手的號數(shù),及30s的回答倒計時*此時,其他選手按鍵無效,*只有搶答選手按鍵,才停止,并顯示鎖定*最后,按復(fù)位,進行新一輪搶答*/#includereg52.h#includeintrins.h#includeabsacc.h#define uchar unsigned char#define uint unsigned int #define ulong unsigned long/* 定義定時器t0和t1時間常數(shù)和方式控制字 */#define v_th0 0x3c#define v_tl0 0xb0#define v_tmod 0x11sbit p30=p30;sbit p36=p3

7、6;sbit p32=p32;sbit p31=p31;uchar led_buf8;/顯示緩沖數(shù)組uchar code dispcode11=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0c;/段碼數(shù)組uchar keyzhi;uint m,time,time2; void delay(uint a) /延時程序while(a-);void led()/違規(guī)指示燈亮程序p32=0;delay(2000);delay(2000); void ring() /蜂鳴器程序p36=0;delay(10000);p36=1; void led

8、k() /p.顯示程序 uchar dmask=0x01; /位控碼初始化uchar pos;for(pos=0;pos3;pos+)p2=dmask; /位控碼輸出到位控口p0=dispcode10; /取顯示段碼并輸出到段控口delay(200); dmask=_crol_(dmask,1); /位控碼左移一位 void led_buf_auto_flush(void) reentrant /顯示緩沖區(qū)更新函數(shù) led_buf0=m; /獲得選手的號碼led_buf1=time/10; /獲得秒十位led_buf2=time%10; /獲得秒的個位 void timer0(void) in

9、terrupt 1 /定時器t0中斷服務(wù)函數(shù),選用定時器0工作方式為1 uchar j;static uchar click=0; th0=v_th0;tl1=v_tl0;/設(shè)置初始值50ms為循環(huán)20次為1ms,12mhz+click;if(click=20) /定時器0定時中斷次數(shù)-time;click=0; if(time=20)&(j=0xff)ring();if(time=5)&(time!=0)&(j=0xff) ring();if(time=0)&(j=0xff)ring(); delay(1000); ring();led_buf_auto_flush(); /led顯示緩沖區(qū)

10、時間值更新 void timer1(void) interrupt 3 /選用定時器1工作方式為1 uchar j; static uchar click=0; /定時器0定時中斷次數(shù)th1=v_th0;tl1=v_tl0; /設(shè)置初始值50ms為循環(huán)20次為1ms,12mhz+click;if(click=20) -time2;click=0;if(time2=5)&(time2!=0)&(j!=0xff) ring();if(time2=0)&(j!=0xff)ring();delay(1000);ring();tr1=0;p32=0;time=time2;led_buf_auto_flu

11、sh(); /led顯示緩沖區(qū)時間值更新void put_on_leds(void) /顯示輸出函數(shù)uchar dmask=0x01; /位控碼初始化uchar pos;for(pos=0;pos4;pos+)p2=dmask; /位控碼輸出到位控口p0=dispcodeled_bufpos; /取顯示段碼并輸出到段控口delay(100); /延時delay(100);dmask=_crol_(dmask,1); /修改未控碼 void init_sys(void) /進行初始化并接受用戶的初始化時間設(shè)置tmod=v_tmod; th0=v_th0;tl0=v_tl0;th1=v_th0;t

12、l1=v_tl0; /設(shè)置時間初值tr0=0; ea=1; et0=1;tr1=0;et1=1; /開啟中斷,關(guān)閉定時器 uchar keychuli() /處理與鍵盤相連的p1口的內(nèi)容,作為鍵值uchar k; k=p1; /p1口內(nèi)容送kreturn(k); /返回鍵值uchar key()/鍵盤掃描函數(shù),函數(shù)返回值即鍵值uchar keyzhi,keyzhii; /電子鐘鍵盤按鍵鍵值臨時存放keyzhi=keychuli(); /調(diào)p1口處理函數(shù)if(keyzhi!=0xff) /有鍵動作延時去抖動,否則函數(shù)返回delay(100); /再次調(diào)p1口處理函數(shù)if(keyzhi!=0xff

13、) /真正有鍵按下,取鍵值并暫存keyzhii=keyzhi;while(keyzhi!=0xff) /判按鍵是否釋放,沒有釋放延時去抖動等待釋放put_on_leds();put_on_leds();keyzhi=keychuli();keyzhi=keyzhii; /按鍵釋放后恢復(fù)按鍵鍵值 return(keyzhi); /返回按鍵鍵值void main() /主函數(shù)調(diào)用init_sys()函數(shù)對系統(tǒng)初始化,調(diào)用put_on_leds()函數(shù) uchar j;uchar c=1;/c 1,2,31:無人違規(guī)合法搶答,2:有人違規(guī),3: 允許答完uchar keyzhiii;while(1)

14、keyzhiii=key(); /調(diào)鍵盤掃描函數(shù)得到按鍵鍵碼ledk(); /調(diào)p.程序if(p30=0) /主持人是否按下啟動鍵delay(100);if(p30=0) c=1; break;if(keyzhiii!=0xff)c=2;led();break;init_sys(); /調(diào)用init_sys()函數(shù)對系統(tǒng)初始化time=30;time2=30;tr0=1; /開定時器0while(1) put_on_leds(); /調(diào)顯示函數(shù)delay(100); /調(diào)延時函數(shù)if(c=1) /判斷有沒有違規(guī)keyzhiii=key(); /調(diào)鍵盤掃描函數(shù)得到按鍵鍵碼j=keyzhiii;i

15、f(c=3)keyzhiii=key(); /調(diào)鍵盤掃描函數(shù)得到按鍵鍵碼if(time=0)while(1)tr0=0;put_on_leds();delay(100);if(c=1|c=2)switch(keyzhiii) /按鍵功能控制 case 0xfe: /1號選手搶答,搶答時間設(shè)定為三十秒 m=1;if(c=1)ring(); /有人正常按下,蜂鳴器發(fā)出聲音tr1=1; /開定時器1,關(guān)定時器0tr0=0;c=3;keyzhiii=0xff; if(c=2) /有人違規(guī)tr1=0;time=0; led_buf_auto_flush();put_on_leds();break;cas

16、e 0xfd: /2號選手搶答 m=2;if(c=1)ring(); /有人正常按下,蜂鳴器發(fā)出聲音tr1=1; /開定時器1,關(guān)定時器0tr0=0;c=3;keyzhiii=0xff; if(c=2) /有人違規(guī)tr1=0;time=0; led_buf_auto_flush();put_on_leds();break;case 0xfb: /3號選手搶答 m=3;if(c=1)ring(); /有人正常按下,蜂鳴器發(fā)出聲音tr1=1; /開定時器1,關(guān)定時器0tr0=0;c=3;keyzhiii=0xff; if(c=2) /有人違規(guī)tr1=0;time=0; led_buf_auto_f

17、lush();put_on_leds();break;case 0xf7: /4號選手搶答m=4;if(c=1)ring(); /有人正常按下,蜂鳴器發(fā)出聲音tr1=1; /開定時器1,關(guān)定時器0tr0=0;c=3;keyzhiii=0xff; if(c=2) /有人違規(guī)tr1=0;time=0; led_buf_auto_flush();put_on_leds();break;case 0xef: /5號選手搶答 m=5;if(c=1)ring(); /有人正常按下,蜂鳴器發(fā)出聲音tr1=1; /開定時器1,關(guān)定時器0tr0=0;c=3;keyzhiii=0xff; if(c=2) /有人違

18、規(guī)tr1=0;time=0; led_buf_auto_flush();put_on_leds();break;case 0xdf: /6號選手搶答 m=6;if(c=1)ring(); /有人正常按下,蜂鳴器發(fā)出聲音tr1=1; /開定時器1,關(guān)定時器0tr0=0;c=3;keyzhiii=0xff; if(c=2) /有人違規(guī)tr1=0;time=0; led_buf_auto_flush();put_on_leds();break;case 0xbf: /7號選手搶答 m=7;if(c=1)ring(); /有人正常按下,蜂鳴器發(fā)出聲音tr1=1; /開定時器1,關(guān)定時器0tr0=0;c=3;keyzhiii=0xff; if(c=2) /有人違規(guī)tr1=0;time=0; led_buf_auto_flush();put_on_leds();break;case 0x7f: /8號選手搶答 m=8;if(c=1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論