版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 智能搶答器的設計</b></p><p><b> 設計目的</b></p><p> 單片機把我們帶入了智能化的電子領域,許多繁瑣的系統(tǒng)若由單片機進行設計,便能收到電路更簡單、功能更齊全的良好效果。若把經典的電子系統(tǒng)當作一個僵死的電子系統(tǒng),那么智能化的現(xiàn)代電子系統(tǒng)則是一個具有“生命”的電子系統(tǒng)。 而隨著
2、技術的進步,單片機與串口通信的結合更多地應用到各個電子系統(tǒng)中已成一種趨勢。本設計就是基于單片機設計搶答系統(tǒng),通過串口通信動態(tài)傳輸數(shù)據(jù),使搶答系統(tǒng)有了更多更完善的功能。單片機系統(tǒng)的硬件結構給予了搶答系統(tǒng)“身軀”,而單片機的應用程序賦予了其新的“生命”,使其在傳統(tǒng)的搶答器面前具有電路簡單、成本低、運行可靠等特色。</p><p><b> 二、方案論證</b></p><p
3、> 1、智能搶答器的基本原理</p><p> 搶答器原理:該搶答器供不多于六個的搶答比賽使用。每個選手的座位前安裝一只搶答按鈕開關。主持人的座位前安裝一只復原按鈕開關、一只蜂鳴器。每當主持人口頭發(fā)出允許搶答的號令之后,哪個隊先按下座位上的按鈕開關,同時封鎖其他按鈕開關的活動。并且主持人座位上發(fā)出 3 聲類似于電話振鈴的提示聲,以“聲明”此次搶答動作已經完成。在主持人確認后,按下復原按鈕,并且同時發(fā)出“
4、笛——笛——”聲,為下一次的搶答作好準備。電路中的蜂鳴器 FM 是一只帶有助音腔的壓電陶瓷蜂鳴器,用于模擬發(fā)出報警聲的功率放大器和喇叭。FM 可以看作是一個電容性負載,本身不能流過直流電流。發(fā)聲的原理是,作用在兩個電極極板的電位在發(fā)生變化時,陶瓷材料就發(fā)生彎曲,從而振動空氣發(fā)出聲音。FM和 4 只按鈕開關 SWa~SWd 以及 4 只電阻 Ra~Rd 都是在演示板的基礎上額外添加的。由于RB端口內部具有上拉電阻,只要用軟件設置其有效,即
5、可省略在4 只端口引腳上外接上拉電阻。按鈕開關和指示燈與座位的對應關系如表3所示。</p><p> 表1-1按鈕開關與座位的對應關系</p><p><b> 2、設計方案</b></p><p> ?。?)搶答器同時供6名選手或6個代表隊比賽,分別用6個按鈕S0 ~ S5表示。</p><p> ?。?)設置一個
6、系統(tǒng)清除和搶答控制開關S,該開關由主持人控制。</p><p> ?。?)搶答器具有鎖存與顯示功能。即選手按動按鈕,鎖存相應的編號,并在LED數(shù)碼管上顯示,同時揚聲器發(fā)出報警聲響提示。選手搶答實行優(yōu)先鎖存,優(yōu)先搶答選手的編號一直保持到主持人將系統(tǒng)清除為止。</p><p> ?。?)搶答器具有定時搶答功能,且一次搶答的時間由主持人設定(如30秒)。當主持人啟動"開始"鍵
7、后,定時器進行減計時,同時揚聲器發(fā)出短暫的聲響,聲響持續(xù)的時間0.5秒左右。</p><p> ?。?)參賽選手在設定的時間內進行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,并保持到主持人將系統(tǒng)清除為止。如果定時時間已到,無人搶答,本次搶答無效,系統(tǒng)報警并禁止搶答,定時顯示器上顯示00</p><p> ?。?)6路搶答器可以利用硬件電子元器件實現(xiàn),但電路結構復雜,
8、調試困難,涉及到的外圍元件多,不便于安裝,實驗給實際操作帶來很大的麻煩。</p><p> ?。?)我們利用單片機可以用很少元件實現(xiàn)相同功能,而且單片機性能穩(wěn)定,可操作性強。可以只用P0口連接上拉電阻,完成驅動LED的功能,串接按鍵可以由選手自己控制搶答機會,利用P3口的RXD接74LS164的A,B端,TXD接移位脈沖做時鐘信號。利用單片機程序判斷選手按鍵是否有效,但選手違規(guī)搶答,利用簡單程序顯示選手序號,啟動
9、蜂鳴器并不間斷,告訴主持人有人違規(guī)操作,搶答無效。給出相應的延時,選手按正常的操作搶答,軟件倒記時,利用74LS164移位寄存8段數(shù)碼管,實現(xiàn)倒記時顯示時間,到5秒相應時間提醒選手時間快到了,要及時作答,并啟動蜂鳴器。</p><p> 如果有選手在規(guī)定的時間以前完成問題,主持人通過按鍵P2.4復位,開始新的問題作答,因為程序不是很大不需要擴展存儲空間,選手按鍵跳入相應的子程序,回答倒記時,通過單片機實現(xiàn)功能可
10、以更人性化,只需單電源供電更方便,容易實現(xiàn)。電路結構簡單,外圍擴展的電路不是很多,鍛煉我們所學的知識應用到現(xiàn)實生活當中。為我們提供實踐的機會。單片機是電子專業(yè)發(fā)展的方向,更好的使用單片機可以是我們的產品小型化,使用更方便,性能更穩(wěn)定,功能更齊全,所以我們選用單片機加一定的外圍設備實現(xiàn)本次課程設計的要求。</p><p><b> 三、硬件設計</b></p><p>
11、;<b> 1最小單片機系統(tǒng)</b></p><p> STC89C51單片機它是硬件電路的核心部分,時鐘電路晶振使用12MHz,復位電路采取按鍵復位方式。具體連接圖3-1-2和圖3-1-3。</p><p> ?、艈纹瑱C:本次設計使用單片機芯片STC89C51</p><p> AT89C51與MCS-51單片機產品兼容 、8K字節(jié)在系
12、統(tǒng)可編程Flash存儲器、 1000次擦寫周期、全靜態(tài)操作:0Hz~33Hz 、三級加密程序存儲器 、 32個可編程I/O口線、三個16位定時器/計數(shù)器八個中斷源、全雙工UART串行通道、 低功耗空閑和掉電模式 、掉電后中斷可喚醒 、看門狗定時器 、雙數(shù)據(jù)指針、掉電標識符 。其管腳如圖3-1-1所示。</p><p> .VCC:供電電壓。</p><p><b> .GND
13、:接地。</b></p><p> . P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。</p><p> . P1口:P1口是一個內
14、部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 </p><p> . P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入
15、。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。</p><p> . P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O
16、口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</p><p> P3口也可作為AT89C51的一些特殊功能口,如下表所示:</p><p><b> 口管腳 備選功能</b></p><p> P3.0 RXD(串行
17、輸入口)</p><p> P3.1 TXD(串行輸出口)</p><p> P3.2 /INT0(外部中斷0)</p><p> P3.3 /INT1(外部中斷1)</p><p> P3.4 T0(記時器0外部輸入)</p><p> P3.5 T1(記時器1外部輸入)</p><p&
18、gt; P3.6 /WR(外部數(shù)據(jù)存儲器寫選通)</p><p> P3.7 /RD(外部數(shù)據(jù)存儲器讀選通)</p><p> P3口同時為閃爍編程和編程校驗接收一些控制信號。</p><p> . RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。</p><p> . ALE/PROG:當訪問外部存儲
19、器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行
20、狀態(tài)ALE禁止,置位無效。</p><p> . /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。</p><p> . /EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為R
21、ESET;當/EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p> . XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。</p><p> . XTAL2:來自反向振蕩器的輸出。</p><p><b> 2系統(tǒng)原理圖</b></p><p
22、> 如圖,P1.0為開始搶答,P1.7為停止,P1.1-P1.6為六路搶答輸入,數(shù)碼管段選P0口,位選P2口低3位,蜂鳴器輸出為P3.6口。P3.2為時間加1調整,P3.3為時間減1調整。(數(shù)碼管采用共陽數(shù)碼管,所以位選端必須用pnp三極管驅動;蜂鳴器輸出口也必須接三極管驅動;否則數(shù)碼管將顯示不了,蜂鳴器不能發(fā)聲),仿真時沒考慮此問題也可以正常顯示。</p><p><b> 圖3-2系統(tǒng)原理
23、圖</b></p><p> 3、時鐘頻率電路的設計</p><p> 單片機必須在時鐘的驅動下才能工作.在單片機內部有一個時鐘振蕩電路,只需要外接一個振蕩源就能產生一定的時鐘信號送到單片機內部的各個單元,決定單片機的工作速度。</p><p> 圖3-3外部振蕩源電路 </p><p> 圖3-4系統(tǒng)復位電路</p
24、><p> 一般選用石英晶體振蕩器。此電路在加電大約延遲10ms后振蕩器起振,在XTAL2引腳產生幅度為3V左右的正弦波時鐘信號,其振蕩頻率主要由石英晶振的頻率確定。電路中兩個電容 C1,C2的作用有兩個:一是幫助振蕩器起振;二是對振蕩器的頻率進行微調。C1,C2的典型值為30PF。</p><p> 單片機在工作時,由內部振蕩器產生或由外直接輸入的送至內部控制邏輯單元的時鐘信號的周期稱為
25、時鐘周期。其大小是時鐘信號頻率的倒數(shù),常用fosc表示。如時鐘頻率為12MHz,即fosc=12MHz,則時鐘周期為1/12µs。</p><p><b> 4復位電路的設計</b></p><p> 單片機的第9腳RST為硬件復位端,只要將該端持續(xù)4個機器周期的高電平即可實現(xiàn)復位,復位后單片機的各狀態(tài)都恢復到初始化狀態(tài)。</p><
26、p> 在設計當中使用到了硬件復位和軟件復位兩種功能,由上面的硬件復位后的各狀態(tài)可知寄存器及存儲器的值都恢復到了初始值,而前面的功能介紹中提到了倒計時時間的記憶功能,該功能的實現(xiàn)的前提條件就是不能對單片機進行硬件復位,所以設定了軟復位功能。軟復位實際上就是當程序執(zhí)行完畢之后,將程序指針通過一條跳轉指令讓它跳轉到程序執(zhí)行的起始地址。</p><p><b> 5顯示電路的設計</b>&
27、lt;/p><p> 顯示功能與硬件關系極大,當硬件固定后,如何在不引起操作者誤解的前提下提供盡可能豐富的信息,全靠軟件來解決。</p><p> 6鍵盤掃描電路的設計</p><p> 鍵盤是人與微機系統(tǒng)打交道的主要設備。關于鍵盤硬件電路的設計方法也可以在文獻和書籍中找到,配合各種不同的硬件電路,這些書籍中一般也提供了相應的鍵盤掃描程序。站在系統(tǒng)監(jiān)控軟件設計的立
28、場上來看,僅僅完成鍵盤掃描,讀取當前時刻的鍵盤狀態(tài)是不夠的,還有不少問題需要妥善解決,否則,人們在操作鍵盤就容易引起誤操作和操作失控現(xiàn)象。在單片機應用中鍵盤用得最多的形式是獨立鍵盤及矩陣鍵盤。</p><p><b> 圖3-5獨立鍵盤圖</b></p><p> 它們各有自己的特點,其中獨立鍵盤硬件電路簡單,而且在程序設計上也不復雜,一般用在對硬件電路要求不高的
29、簡單電路中;矩陣鍵盤與獨立鍵盤有很大區(qū)別,首先在硬件電路上它要比獨立鍵盤復雜得多,而且在程序算法上比它要煩瑣,但它在節(jié)省端口資源上有優(yōu)勢得多,因此它更適合于多按鍵電路。其次就是消除在按鍵過程中產生的“毛刺”現(xiàn)象。這里采用最常用的方法,即延時重復掃描法,延時法的原理為:因為“毛刺”脈沖一般持續(xù)時間短,約為幾ms,而我們按鍵的時間一般遠遠大于這個時間,所以當單片機檢測到有按鍵動靜后再延時一段時間(這里我們取10ms)后再判斷此電平是否保持原
30、狀態(tài),如果是則為有效按鍵,否則無效。</p><p><b> 7發(fā)聲</b></p><p> 我們知道,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制單片機某個口線的“高”電平或低電平,則在該口線上就能產生一定頻率的矩形波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時程序控制“高”“低”電平的持續(xù)時間,就能改變輸出頻率,從而改變音調,使喇叭發(fā)出不同的聲音
31、。</p><p><b> 8系統(tǒng)復位</b></p><p> 使CPU進入初始狀態(tài),從0000H地址開始執(zhí)行程序的過程叫系統(tǒng)復位。從實現(xiàn)系統(tǒng)復位的方法來看,系統(tǒng)復位可分為硬件復位和軟件復位。硬件復位必須通過CPU外部的硬件電路給CPU的RESET端加上足夠時間的高電位才能實現(xiàn)。上電復位,人工按鈕復位和硬件看門狗復位均為硬件復位。硬件復位后,各專用寄存器的狀態(tài)
32、均被初始化,且對片內通用寄存器的內容沒有影響。但是,硬件復位還能自動清除中斷激活標志,使中斷系統(tǒng)能夠正常工作,這樣一個事實卻容易為不少編碼人員所忽視。軟件復位就是用一系列指令來模擬硬件復位功能,最后通過轉移指令使程序從0000H地址開始執(zhí)行。對各專用寄存器的復位操作是容易的,也沒有必要完全模擬,可根據(jù)實際需要去主程序初始化過程中完成。而對中斷激活標志的清除工作常被遺忘,因為它沒有明確的位地址可供編程。有的編程人員用020000(LJMP
33、 0000H)作為軟件陷阱,認為直接轉向0000H地址就完成了軟件復位,就是這類錯誤的典型代表。軟件復位是使用軟件陷阱和軟件看門狗后必須進行的工作,這時程序出錯完全有可能發(fā)生在中斷子程序中,中斷激活標志已置位,它將阻止同級中斷響應。由于軟件看門是高級中斷,它</p><p> 在所有的指令中,只有RETI指令能夠清除中斷激活標志。前文各處提案到的出錯處理程序ERR主要完成這一功能,其他的善后工作交由復位后的
34、系統(tǒng)去完成。這部分程序如下:</p><p> POWER DATA 67H ;上電標志存放單元 </p><p> ERR: CLR EA ;關中斷</p><p> MOV DPTR,#ERR1 ;準備返回地址</p><p> PUSH DPL</p&g
35、t;<p> PUSH DPH</p><p> RETI ;清除高級中斷激活標志</p><p> ERR1: MOV POWER,#0AAH;重建上電標志</p><p> CLR A ;準備復位地址</p><p> PUSH ACC ;壓入
36、復位地址0000H</p><p> PUSH ACC</p><p> RETI ;清除低級中斷激活標志,從程序0000H開始執(zhí)行。</p><p> 這段程序先關中斷,以便后續(xù)處理能順利進行,然后用兩個RETI指令代替兩個LJMP指令,從而清除了兩級中斷激活標志。有相應軟件陷阱捕捉來的程序可能沒有全部激活兩個標志,這也無妨。</
37、p><p><b> 四、軟件設計</b></p><p> 軟件任務分析和硬件電路設計結合進行,哪些功能由硬件完成,哪些任務由軟件完成,在硬件電路設計基本定型后,也就基本上決定下來了。</p><p><b> 1 程序流程圖</b></p><p> 在本設計中包括了以下八個主要的程序:主程
38、序;非法搶答序;搶答時間調整程序;回答時間調整程序;倒計時程序;正常搶答處理程序;犯規(guī)處理程序;顯示及發(fā)聲程序。主流程圖如所示:</p><p><b> 圖4-1主流程圖</b></p><p> 圖4-2INTO中斷流程圖</p><p> INT1的中斷程序與INT0的中斷程序類似。</p><p> 圖4
39、-7倒計時子程序 </p><p><b> 五、軟件調試 </b></p><p> 模擬的時候,源程序運行基本能使數(shù)碼管正常顯示,偶爾會有錯誤的顯示。當時以為是因為延時太短,互相干擾引起的。實物調試后發(fā)現(xiàn),本應該變的位不變,并且有兩個位顯示始終一樣,無論變不變化,檢查程序,程序中用R5保存的是數(shù)碼管左邊兩位中的十位,R4保存的是個位,R3保存的是第四位的段碼
40、偏移量,而后面查表的時候,選3號燈的偏移量是R5,選1號燈的時候用的是R4,選2號燈得時候用的是R3,因為初始顯示都是F,所以剛開始的顯示正確,但是開始運行的時候就會出現(xiàn)錯誤和亂碼顯示,然而對應燈和燈和對應偏移量修改一致,顯示就完全正確了。</p><p><b> 六、硬件調試</b></p><p> 最初由于沒有接20管腳的Vss,單片機不工作,這是檢測單片
41、機的電壓不正常發(fā)現(xiàn)的,當Vss接地后情況得到改善,并測出單片機的最小系統(tǒng)構建沒有問題,但是數(shù)碼管始終沒有顯示,但蜂鳴器會響,而且隨著不同的按鍵按下和不同的時間段,其響聲不同,以此判斷單片機是在工作的。接著測連接數(shù)碼管的反相器,發(fā)現(xiàn)反相器不同電,經檢查是漏焊了。修正后,數(shù)碼管終于亮了,但顯示的不對,經檢驗,軟件本身有錯誤由于接了反相器,數(shù)碼管該選用共陽的,但是在軟件中是按照共陰的數(shù)碼管來送數(shù)的,所以我們把反相器去掉了,從而數(shù)碼管顯示正常,
42、調試成功。</p><p><b> 七、小結</b></p><p> 本次課程設計我們參考了許多書籍和課件等,由于是第一次做這種非常全面的課程設計,我們剛開始的時候很緊張也很無助,在參考了歷年畢業(yè)設計有關這些方面的東西這后逐漸找到了方向.我們先對照老師給的素材,選擇題目,首先選擇了一些簡單的,但是立刻否定了,因為這些遠不能鍛煉我們的設計能力,動手能力,然后又重
43、新開始思考選材,意外間,我們想到在學習PLC時,我們曾經做過智能搶答器,然后聽老師說PLC的成本比較高,所以我們開始想如果我們用單片機也做一個,有何不可呢?</p><p> 找到我們想要的課題后,我們開始搜索資料,希望可以得到一些幫助,我們首先去了圖書館,參閱資料,借回來幾本書,對照那些課題,我們開始研究我們的搶答器,我們參考了很多資料,也學習了很多書本沒有的知識。我們先從整體上分析了搶答器的基本功能,然后我
44、們有增加了改變搶答時間和答題時間的功能,確定思路后,我們開始畫流程圖,接著根據(jù)流程圖編寫子程序,期間,我們不停的編寫程序,然后不停否定,不斷地修改之后,在軟件中調試沒有問題后,我們開始設計電路圖,并且開始仿真。由于第一次使用這個軟件,所以一開始我從下手,但是在同學的幫忙下,我們開始找元件,連接電路圖,我們灌程序的時候找不到HEX文件,經檢查發(fā)現(xiàn)是在選擇創(chuàng)建HEX文件后,沒有在進行編譯。改正后,發(fā)現(xiàn)亂碼,心情低落到谷底。但是在我們不斷摸索
45、中,問題終于得到解決,心情溢于言表。</p><p> 仿真結束后,就是開始排版接線了,這可是一個比較麻煩的事。首先要測試各個芯片是否有問題。這些工作都是細心的事,容不得半點馬虎。在接線的時候要細心和耐心和恒心,這樣才能做好。首先是線的布局上既要美觀又要實用,所以我們有去買了插針和排線。焊好之后,我們就開始檢查各部分是不是焊好,看有沒虛焊。可是結果還是有漏焊的,所以我們以后再做這部分工作的時候要更仔細。<
46、/p><p> 經過一切波折,實物是焊好,可是發(fā)現(xiàn)本應該用共陽數(shù)碼管可是買成共陰數(shù)碼管,我們就把反相器去掉后,可以正常顯示。</p><p> 希望以后會有更多的類似這樣的機會來參與一些有關專業(yè)方面的設計或比賽等來提高自己的專業(yè)素養(yǎng),為自己不久之后的畢業(yè)設計和隨之而來的工作或是學習打下基礎,積累經驗.</p><p><b> 八、參考資料</b&
47、gt;</p><p> 《單片機原理及應用技術》 范力旻 電子工業(yè)出版社</p><p> 《單片機應用技術實訓教程》 胡文金 鐘秉翔 楊健 重慶大學出版社 </p><p> 《8051單片機徹底研究實習篇》 林申茂編著 人民郵電出版社 <
48、;/p><p> 《單片機原理及接口技術實踐教程》 胡建編著 機械工業(yè)出版社 </p><p> www.baidu.com</p><p><b> 九、附錄</b></p><p><b> 元器件清單</b></p><p><b> X</
49、b></p><p><b> 系統(tǒng)原理圖</b></p><p><b> 實物圖</b></p><p><b> 系統(tǒng)程序</b></p><p> P1.0為開始搶答,P1.7為停止,p1.1-p1.6為六路搶答輸入 數(shù)碼管段選P0口,位選P2口,蜂鳴器
50、輸出為P3.6口。</p><p> POWERDATA 67H ;上電標志存放單元 </p><p> ERR: CLR EA ; 關中斷</p><p> MOV DPTR,#ERR1 ; 準備返回地址</p><p><b> PUS
51、H DPL</b></p><p> PUSH DPH</p><p> RETI ; 清除高級中斷激活標志</p><p> ERR1: MOV POWER,#0AAH; 重建上電標志</p><p> CLR A ;
52、 準備復位地址</p><p> PUSH ACC</p><p> PUSH ACC</p><p> RETI ; 清除低級中斷激活標志始執(zhí)行。</p><p> OK EQU 20H; 搶答開始標志位</
53、p><p> RING EQU 22H; 響鈴標志位</p><p><b> ORG 0003H</b></p><p> AJMP INT0SUB</p><p><b> ORG 000BH</b></p><p> AJMP T0
54、INT</p><p><b> ORG 0013H</b></p><p> AJMP INT1SUB</p><p><b> ORG 001BH</b></p><p> AJMP T1INT</p><p><b> ORG 0040H</b
55、></p><p><b> org 0000H</b></p><p><b> ljmp main</b></p><p> org 0040H </p><p> MAIN: MOV R1,#0FH; 初設搶答時間為15s</p>
56、<p> MOV R2,#0AH; 初設答題時間為10s</p><p> MOV TMOD,#11H; 設置未定時器/模式1</p><p> MOV TH0,#0F0H</p><p> MOV TL0,#0FFH; 越高發(fā)聲頻率越高,越尖</p>
57、<p> MOV TH1,#3CH</p><p> MOV TL1,#0B0H; 50ms 為一次溢出中斷</p><p><b> SETB EA</b></p><p><b> SETB ET0</b></p><p><b> SETB
58、ET1</b></p><p><b> SETB EX0</b></p><p> SETB EX1; 允許四個中斷,T0/T1/INT0/INT1</p><p><b> CLR OK</b></p><p><b> SE
59、TB RING</b></p><p><b> SETB TR1</b></p><p> SETB TR0; 一開始就運行定時器,以開始顯示 </p><p> FFF.如果想重新計數(shù),重置TH1/TL1就可以了</p><p> START: MOV R
60、5,#0bH</p><p> MOV R4,#0bH</p><p> MOV R3,#0bH</p><p> ACALL DISPLAY; 未開始搶答時候顯示FFF</p><p> JB P1.0,NEXT</p><p> ACALL DELAY</p>&l
61、t;p> JB P1.0,NEXT; 去抖動,如果"開始鍵"按下就向下執(zhí)</p><p> 行,否者跳到非法搶答查詢</p><p> ACALL BARK; 按鍵發(fā)聲</p><p><b> MOV A,R1</b></p>
62、<p> MOV R6,A; 送R1->R6,因為R1中保存了搶答時間</p><p> SETB OK; 搶答標志位,用于COUNT只程序中判斷是否查詢搶答</p><p> MOV R3,0AH; 搶答只顯示計時,滅號數(shù)</p><p> AJMP COUNT;進入倒計時程序,"查詢
63、有效搶答的程序"在COUNT里面</p><p> NEXT: JNB P1.1,FALSE1</p><p> JNB P1.2,FALSE2</p><p> JNB P1.3,FALSE3</p><p> JNB P1.4,FALSE4</p><p> JNB P1.5,FALSE5&
64、lt;/p><p> JNB P1.6,FALSE6</p><p> AJMP START</p><p> FALSE1: ACALL BARK; 按鍵發(fā)聲</p><p> MOV R3,#01H</p><p> AJMP ERROR</p><p
65、> FALSE2: ACALL BARK</p><p> MOV R3,#02H</p><p> AJMP ERROR</p><p> FALSE3: ACALL BARK</p><p> MOV R3,#03H</p><p> AJMP ERROR</p><p>
66、 FALSE4: ACALL BARK</p><p> MOV R3,#04H</p><p> AJMP ERROR</p><p> FALSE5: ACALL BARK</p><p> MOV R3,#05H</p><p> AJMP ERROR</p><p> FA
67、LSE6: ACALL BARK</p><p> MOV R3,#06H</p><p> AJMP ERROR</p><p> INT0SUB:MOV A,R1</p><p> MOV B,#0AH</p><p><b> DIV AB</b></p><p
68、><b> MOV R5,A</b></p><p><b> MOV R4,B</b></p><p> MOV R3,#0AH</p><p> ACALL DISPLAY;</p><p> JNB P3.2,INC0; P3.2為+1s鍵,如按下跳
69、到INCO</p><p> JNB P3.3,DEC0; P3.3為-1s鍵,如按下跳到DECO</p><p> JNB P1.7,BACK0; P1.7為確定鍵,如按下跳到BACKO</p><p> AJMP INT0SUB</p><p> INC0: MOV A,R1&
70、lt;/p><p> CJNE A,#63H,ADD0; 如果不是99,R2加1,如果加到99</p><p> 了,R1就置0,重新加起</p><p> MOV R1,#00H</p><p> ACALL DELAY1</p><p> AJMP INT0SUB</p>&l
71、t;p> ADD0: INC R1</p><p> ACALL DELAY1</p><p> AJMP INT0SUB</p><p> DEC0: MOV A,R1</p><p> JZ SETR1; 如果R1為0, R1就置99,</p><p>&l
72、t;b> DEC R1</b></p><p> ACALL DELAY1</p><p> AJMP INT0SUB</p><p> SETR1: MOV R1,#63H</p><p> ACALL DELAY1</p><p> AJMP INT0SUB</p>&
73、lt;p> BACK0: RETI</p><p> INT1SUB:MOV A,R2</p><p> MOV B,#0AH</p><p><b> DIV AB</b></p><p><b> MOV R5,A</b></p><p><b>
74、; MOV R4,B</b></p><p> MOV R3,#0AH</p><p> ACALL DISPLAY</p><p> JNB P3.2,INC1</p><p> JNB P3.3,DEC1</p><p> JNB P1.7,BACK1</p><p>
75、; AJMP INT1SUB</p><p> INC1: MOV A,R2</p><p> CJNE A,#63H,ADD1</p><p> MOV R2,#00H</p><p> ACALL DELAY1</p><p> AJMP INT1SUB</p><p>
76、ADD1: INC R2</p><p> ACALL DELAY1</p><p> AJMP INT1SUB</p><p> DEC1: MOV A,R2</p><p><b> JZ SETR2</b></p><p><b> DEC R2</b>
77、;</p><p> ACALL DELAY1</p><p> AJMP INT1SUB</p><p> SETR2: MOV R2,#63H</p><p> ACALL DELAY1</p><p> AJMP INT1SUB</p><p> BACK1: RETI&l
78、t;/p><p> COUNT: MOV R0,#00H; 重置定時器中斷次數(shù)</p><p> MOV TH1,#3CH</p><p> MOV TL1,#0B0H; 重置定時器</p><p> RECOUNT: MOV A,R6; R6 保存了倒計時的時間,之前先<
79、;/p><p> 將搶答時間或回答時間給R6</p><p> MOV B,#0AH</p><p> DIV AB; 除十分出個位/十位</p><p> MOV 30H,A; 十位存于(30H)</p><p> MOV 31H,B;
80、 個位存于(31H)</p><p> MOV R5,30H; 取十位</p><p> MOV R4,31H; 取個位</p><p><b> MOV A,R6</b></p><p> SUBB A,#07H</p><
81、p> JNC LARGER; 大于5s跳到LARGER,小于等于5s會提醒</p><p><b> MOV A,R0</b></p><p> CJNE A,#0AH,FULL; 1s中0.5s向下運行</p><p><b> SETB RING</b></p&
82、gt;<p> AJMP CHECK</p><p> FULL: CJNE A,#14H,CHECK; 下面系1s的情況,響并顯示號數(shù)并清R0,</p><p><b> 重新計時</b></p><p><b> CLR RING</b></p><p>&l
83、t;b> MOV A,R6</b></p><p> JZ QUIT; 計時完畢</p><p> MOV R0,#00H</p><p> DEC R6; 一秒標志減1</p><p> AJMP CHECK</p><p&
84、gt; LARGER: MOV A,R0</p><p> CJNE A,#14H,CHECK; 如果1s向下運行,否者跳到查"停/顯示"</p><p> DEC R6; 計時一秒R6自動減1</p><p> MOV R0,#00H</p><p> CHECK:
85、 JNB P1.7,QUIT; 如按下停止鍵退出</p><p> ACALL DISPLAY</p><p> JB OK,ACCOUT; 如果是搶答倒計時,如是則查詢搶答,否者</p><p> 跳過查詢繼續(xù)倒數(shù)(這里起到鎖搶答作用 </p><p> AJMP RECOUNT</
86、p><p> ACCOUT: JNB P1.1,TRUE1</p><p> JNB P1.2,TRUE2</p><p> JNB P1.3,TRUE3</p><p> JNB P1.4,TRUE4</p><p> JNB P1.5,TRUE5</p><p> JNB P1.6,
87、TRUE6</p><p> AJMP RECOUNT</p><p> QUIT: CLR OK; 如果按下了"停止鍵"執(zhí)行的程序</p><p><b> SETB RING</b></p><p> AJMP START</p><
88、p> TRUE1: ACALL BARK; 按鍵發(fā)聲</p><p><b> MOV A,R2</b></p><p> MOV R6,A; 搶答時間R2送R6</p><p> MOV R3,#01H</p><p> CLR OK;
89、 因為答題的計時不再查詢搶答,所以就鎖了搶答</p><p> AJMP COUNT</p><p> TRUE2: ACALL BARK;</p><p><b> MOV A,R2</b></p><p><b> MOV R6,A</b></p><p>
90、 MOV R3,#02H</p><p><b> CLR OK</b></p><p> AJMP COUNT</p><p> TRUE3: ACALL BARK;</p><p><b> MOV A,R2</b></p><p><b> MO
91、V R6,A</b></p><p> MOV R3,#03H</p><p><b> CLR OK</b></p><p> AJMP COUNT</p><p> TRUE4: ACALL BARK;</p><p><b> MOV A,R2</b&
92、gt;</p><p><b> MOV R6,A</b></p><p> MOV R3,#04H</p><p><b> CLR OK</b></p><p> AJMP COUNT</p><p> TRUE5: ACALL BARK;</p>
93、<p><b> MOV A,R2</b></p><p><b> MOV R6,A</b></p><p> MOV R3,#05H</p><p><b> CLR OK</b></p><p> AJMP COUNT</p><
94、;p> TRUE6: ACALL BARK;</p><p><b> MOV A,R2</b></p><p><b> MOV R6,A</b></p><p> MOV R3,#06H</p><p><b> CLR OK</b></p>
95、<p> AJMP COUNT</p><p> ERROR: MOV R0,#00H</p><p> MOV TH1,#3CH</p><p> MOV TL1,#0B0H</p><p> MOV 34H,R3; 犯規(guī)號數(shù)暫存與(34H)</p><p> HER
96、E: MOV A,R0</p><p> CJNE A,#0AH,FLASH; 0.5s向下運行->滅并停響</p><p><b> SETB RING</b></p><p> MOV R3,#0AH</p><p> MOV R4,#0AH</p><p> MOV R
97、5,#0AH; 三燈全滅</p><p> AJMP CHECK1</p><p> FLASH: CJNE A,#14H,CHECK1; 下面系1s的情況,響并顯示號數(shù)并清R0,重</p><p><b> 新計</b></p><p><b> CLR RING</b
98、></p><p> MOV R0,#00H</p><p> MOV R3,34H; 取回號數(shù)</p><p> MOV R5,#0BH</p><p> MOV R4,#0BH; 顯示FF和號數(shù)</p><p> AJMP CHECK1</p>
99、<p> CHECK1: JNB P1.7,QUIT1</p><p> ACALL DISPLAY</p><p><b> AJMP HERE</b></p><p> QUIT1: SETB RING</p><p><b> CLR OK</b></p>
100、<p> AJMP START ; 出口參數(shù):無</p><p> DISPLAY:MOV DPTR,#DAT1; 查表顯示程序,利用P0口做段選碼口輸出</p><p> /P2低三位做位選碼輸出</p><p><b> MOV A,R5</b></p><p>
101、MOVC A,@A+DPTR</p><p> MOV P2,#0fbH</p><p><b> MOV P0,A</b></p><p> ACALL DELAY</p><p> MOV DPTR,#DAT2</p><p><b> MOV A,R4</b>
102、</p><p> MOVC A,@A+DPTR</p><p> MOV P2,#0feH</p><p><b> MOV P0,A</b></p><p> ACALL DELAY</p><p><b> MOV A,R3</b></p>&l
103、t;p> MOVC A,@A+DPTR</p><p> MOV P2,#0fdH</p><p><b> MOV P0,A</b></p><p> ACALL DELAY</p><p><b> RET</b></p><p> DAT1:DB 0
104、0H,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H ;</p><p> "滅","1","2","3","4","5","6","7","8","9","滅&q
105、uot;,"F"</p><p> DAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H ;</p><p> 第一個為零,其他與上相同,因為十位如果為零顯示熄滅</p><p> DELAY1: MOV 35H,#08H</p><p> LOOP0
106、: ACALL DISPLAY</p><p> DJNZ 35H,LOOP0</p><p><b> RET</b></p><p> DELAY: MOV 32H,#12H</p><p> LOOP: MOV 33H,#0AFH</p><p> LOOP1: DJNZ
107、 33H,LOOP1</p><p> DJNZ 32H,LOOP</p><p><b> RET</b></p><p> BARK: CLR RING</p><p> ACALL DELAY1</p><p> ACALL DELAY1</p><p>
108、; SETB RING; 按鍵發(fā)聲</p><p><b> RET</b></p><p> T0INT:MOV TH0,#0ECH</p><p> MOV TL0,#0FFH</p><p> JB RING,OUT</p><p> CPL P3.6 ;
109、 RING標志位為0時候P3.6口不短取反使喇</p><p> 叭發(fā)出一定頻率的聲音</p><p><b> OUT:RETI</b></p><p> T1INT: MOV TH1,#3CH</p><p> MOV TL1,#0B0H</p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 六路搶答器課程設計
- plc六路搶答器課程設計報告
- plc六路搶答器課程設計
- plc六路搶答器課程設計
- 數(shù)字邏輯課程設計報告----六路搶答器的設計
- 六路搶答器的設計
- 電子技術課程設計-----六路搶答器
- 六路智能搶答器 畢業(yè)論文
- 四路智能搶答器課程設計報告
- 畢業(yè)設計----六路搶答器
- 畢業(yè)設計----六路搶答器設計
- 課程設計---四路智能搶答器設計
- 四路搶答器課程設計報告
- 課程設計--基于單片機的六路競賽搶答器設計 (2)
- 四路搶答器課程設計報告
- 課程設計報告—8路搶答器
- 8路搶答器課程設計報告
- 搶答器課程設計--八路搶答器
- 智能搶答器課程設計
- 課程設計報告----電子智能搶答器
評論
0/150
提交評論