基于51單片機(jī)的八路搶答器設(shè)計(jì)(1)
基于51單片機(jī)的八路搶答器設(shè)計(jì)(1),基于,51,單片機(jī),八路,搶答,設(shè)計(jì)
課程設(shè)計(jì)設(shè)計(jì)任務(wù)書
設(shè)計(jì)任務(wù)和要求
設(shè)計(jì)一個(gè)八路搶答器
要求:設(shè)計(jì)要求:
以單片機(jī)為核心,設(shè)計(jì)一個(gè)8位競賽搶答器。
1)搶答器同時(shí)供8名選手或8個(gè)代表隊(duì)比賽,分別用8個(gè)按鈕S0-S7表示。
2)設(shè)置一個(gè)系統(tǒng)清除和搶答控制開關(guān)S,該開關(guān)由主持人控制。
3)搶答器具有鎖存與顯示功能。即選手按動按鈕,鎖存相應(yīng)的編號,并在優(yōu)先搶答選手的編號一直保持到主持人將系統(tǒng)清除為止。
4)搶答器具有定時(shí)搶答功能,且一次搶答的時(shí)間由主持人設(shè)定(如30s等)。當(dāng)主持人啟動“開始”按鍵后,定時(shí)器進(jìn)行減計(jì)時(shí),同時(shí)揚(yáng)聲器發(fā)出短暫的聲響,聲響持續(xù)時(shí)間為0.5s左右。
5)參賽選手在設(shè)定時(shí)間內(nèi)進(jìn)行搶答,搶答有效,定時(shí)器停止工作,顯示器上顯示選手編號和搶答時(shí)間,并保持到主持人將系統(tǒng)清除為止。
6)如果定時(shí)時(shí)間到,無人搶答,本次搶答無效,系統(tǒng)報(bào)警并禁止搶答,定時(shí)顯示器上顯示00
(1) 硬件設(shè)計(jì):
1)單片機(jī)建議選用AT89C51。
2)LED顯示系統(tǒng):
采用2個(gè)數(shù)碼管顯示定時(shí)時(shí)間及搶答選手編號。
3)電源供電系統(tǒng):本系統(tǒng)采用220V電源供電,應(yīng)設(shè)計(jì)相應(yīng)的穩(wěn)壓電源
電路。但課程設(shè)計(jì)受時(shí)間限制,也可采用現(xiàn)成的5V直流穩(wěn)壓電源供電,這樣可以節(jié)約設(shè)計(jì)時(shí)間、簡化設(shè)計(jì)過程。
(2)、軟件設(shè)計(jì)
根據(jù)設(shè)計(jì)要點(diǎn),軟件設(shè)計(jì)首先應(yīng)對系統(tǒng)資源進(jìn)行進(jìn)行分配和說明。為了增加程序的可讀性,理清程序的編寫思路,建議程序采用模塊化結(jié)構(gòu)。
設(shè)計(jì)目的:通過設(shè)計(jì)學(xué)習(xí)單片機(jī)最小系統(tǒng)的基本設(shè)計(jì)方法,掌握單片機(jī)應(yīng)用系統(tǒng)的開發(fā)調(diào)試過程。
(1)學(xué)習(xí)單片機(jī)開發(fā)工具功能、特點(diǎn)和使用方法。
(2)學(xué)會單片機(jī)控制系統(tǒng)程序的編制和編制和調(diào)試方法。
(3)設(shè)計(jì)單片機(jī)搶答器硬件電路,繪制出電路原理圖。
(4)編制并調(diào)試出鍵盤掃描程序和顯示驅(qū)動程序。
(5)掌握單片機(jī)定時(shí)器的基本用法,編制出定時(shí)器的中斷程序。
摘 要
很多人都搶答器作為一種工具,已廣泛應(yīng)用于各種智力和知識競賽場合。但搶答器的使用頻率較低,且有的要么制作復(fù)雜,要么可靠性低。作為一個(gè)單位,如果專門購一臺搶答器雖然在經(jīng)濟(jì)上可以承受,但每年使用的次數(shù)極少,往往因長期存放使(電子器件的)搶答器損壞,再購置的麻煩和及時(shí)性就會影響活動的開展,因此設(shè)計(jì)了本搶答器。
本設(shè)計(jì)是以八路搶答為基本理念??紤]到依需設(shè)定限時(shí)回答的功能,利用AT89C51單片機(jī)及外圍接口實(shí)現(xiàn)的搶答系統(tǒng),利用單片機(jī)的定時(shí)器/計(jì)數(shù)器定時(shí)和記數(shù)的原理,將軟、硬件有機(jī)地結(jié)合起來,使得系統(tǒng)能夠正確地進(jìn)行計(jì)時(shí),同時(shí)使數(shù)碼管能夠正確地顯示時(shí)間。
認(rèn)為學(xué)習(xí)是枯燥無味的,有時(shí)覺得與現(xiàn)實(shí)太遙遠(yuǎn)。在學(xué)習(xí)之余,我們?nèi)匀豢梢哉业揭稽c(diǎn)有趣的事情,比如說做一個(gè)聲控?zé)襞?、?shù)字鐘等等。生活中我們要找到自己感興趣的東西。這次綜合課程設(shè)計(jì)中,我們制作了八路搶答器。
Abstract
Many people are scare-answering device as a tool, has been widely applied in all kinds of intelligence and knowledge competition situation. But vies to implement use frequency is quite low, and some either make complicated or low reliability. As a unit, if specialized purchased a vies to implement whereas economically may inherit, but every year the number of little use for long-term storage, often make (electronics) vies is damaged, again the purchase of trouble and timeliness will affect activities, so this contest was designed device.
This design is 8 vies for basic ideas. Considering according to need to set limit to answer function, using AT89C51 and periphery interface implementation of scare-answering system, of the microcontroller timer/counter timing and numeration principle, software and hardware organically, and makes the system can correctly to the time, at the same time making digital tube can properly shows the time.
Think learning are dull, sometimes I feel too far with reality. In besides study, we can still find a bit funny things, like a sonic bulb, a digital clock, etc. The life we want to find what they are interested in. The integrated curriculum design, we made a zhuhai vies to implement
目 錄
課程設(shè)計(jì)任務(wù)書---------------------------------------------------------------------------------------------2
摘要-------------------------------------------------------------------------------------------------------------- 3
第1章 系統(tǒng)設(shè)計(jì)內(nèi)容-------------------------------------------------------------------------------------6
緒論----------------------------------------------------------------------6
1.1 系統(tǒng)設(shè)計(jì)根據(jù)--------------------------------------------------------------------------------------------6
第2章 硬件設(shè)計(jì)-------------------------------------------------------------------------------------- 7
2.1 單片機(jī)控制原理---------------------------------------------------------------------------------------- 7
2.2 搶答器的原理------------------------------------------------------------------------------------------- 7
2.2.1 原理框圖------------------------------------------------------------------------------------------------8
2.3 功能模塊電路------------------------------------------------------------------------------------------- 8
2.3.1 晶振復(fù)位及開始搶答電路------------------------------------------------------------------------ 8
2.3.2 選手搶答鍵(矩陣式鍵盤)--------------------------------------------------------------------- 9
2.3.3.顯示與顯示驅(qū)動電路------------------------------------------------------------------------------ 10
2.3.4 蜂鳴器音頻輸出電路--------------------------------------------------------------------------------11
第3章 軟件設(shè)計(jì)---------------------------------------------------------------------------------------- 12
3.1程序設(shè)計(jì)----------------------------------------------------------------------------------------------------12
3.1.1 系統(tǒng)流程圖---------------------------------------------------------------------------------------------12
3.1.2 顯示搶答違規(guī)流程圖------------------------------------------------- 13
3.1.3 搶答成功流程圖----------------------------------------------------- 13
3.2 程序代碼------------------------------------------------------------- 13
第4章 系統(tǒng)調(diào)試--------------------------------------------------------13
第5章 致謝------------------------------------------------------------ 14
參考文獻(xiàn)------------------------------------------------------------------14
附錄一 程序代碼---------------------------------------------------------- 14
附錄二 原理圖-------------------------------------------------------------24
·緒 論
單片機(jī)作為計(jì)算機(jī)的一個(gè)重要分支,其應(yīng)用范圍很廣,發(fā)展也很快,它已成為在現(xiàn)代電子技術(shù)、計(jì)算機(jī)應(yīng)用、網(wǎng)絡(luò)、通信、自動控制與計(jì)量測試、數(shù)據(jù)采集與信號處理等技術(shù)中日益普及的一項(xiàng)新興技術(shù),應(yīng)用范圍十分廣泛。對于計(jì)算機(jī)專業(yè)的學(xué)生來說,即使暫時(shí)沒有從事單片機(jī)的應(yīng)用與開發(fā),學(xué)習(xí)單片機(jī)也有很重要的意義。學(xué)習(xí)它,不僅為將來可能從事該方面的開發(fā)打下基礎(chǔ),另一方面,由于單片機(jī)作為微型計(jì)算機(jī)的一個(gè)種類,麻雀雖小,五臟俱全,可以把它當(dāng)作微型計(jì)算機(jī)的一個(gè)簡化模型來看待,學(xué)習(xí)單片機(jī)可以加深對微型計(jì)算機(jī)工作原理的理解,更加清楚計(jì)算機(jī)的脈絡(luò)。同時(shí),提供了一個(gè)實(shí)際應(yīng)用手段。21世紀(jì),是一個(gè)信息技術(shù)飛速發(fā)展的時(shí)代,智力競賽是一種形式比較活潑的教育方式,是人們休閑娛樂生活的一部分。這些競賽一方面充實(shí)了人們的娛樂生活,另一方面也提高了人們努力汲取相關(guān)領(lǐng)域的知識的興趣。智力競賽,也就是幾個(gè)參賽選手之間在規(guī)定的時(shí)間,規(guī)定的地點(diǎn)相互競爭的比賽。
搶答是各種競賽常用的一種形式。在搶答賽中,往往要有主持人宣布搶答的開始,還要確定是哪個(gè)選手搶到了答題權(quán),具體答題的時(shí)間有時(shí)也要設(shè)定。這些如果僅憑主持人的主觀判斷,很容易出現(xiàn)誤判的情況。因此,在競賽中,搶答器就扮演了一個(gè)非常重要的角色。
第1章 系統(tǒng)設(shè)計(jì)內(nèi)容
1.1系統(tǒng)設(shè)計(jì)依據(jù)
搶答器由計(jì)數(shù)器、寄存器、集成定時(shí)器和譯碼顯示等組合、時(shí)序電路組成??煞譃閾尨痣娐?,定時(shí)電路,報(bào)警電路等幾個(gè)單元部分。每個(gè)單元電路分別可以處理一些搶答競賽中的基本問題。
本次課程設(shè)計(jì)設(shè)計(jì)的是一個(gè)多路定時(shí)搶答器,是一個(gè)多于兩位選手參賽的一個(gè)搶答器,具有鎖存和顯示功能。同時(shí)有主持人控制系統(tǒng)的清零和搶答的開始。搶答開始后,若有任何一名選手按動搶答按鈕,搶答器就會顯示該選手編號直至系統(tǒng)被主持人清零,并有揚(yáng)聲器發(fā)出提示,同時(shí)其他人再搶答就無效了。這次設(shè)計(jì)的搶答器還有自動定時(shí)功能,主持人可以設(shè)定選手答題的時(shí)間。當(dāng)主持人啟動“開始”鍵后,定時(shí)器會自動減計(jì)時(shí),這個(gè)會顯示在顯示器上。選手只有在搶答時(shí)間內(nèi)搶答才有效,若在答題時(shí)間內(nèi)沒有選手答題,時(shí)間到時(shí),報(bào)警電路就會發(fā)出警報(bào)亮燈并且禁止搶答。
第2章 硬件設(shè)計(jì)
2.1 單片機(jī)控制原理
單片機(jī)(SCM)是單片微型計(jì)算機(jī)(Single Chip Microcomputer)的簡稱。它是把中央處理器CPU、隨機(jī)存儲器RAM、只讀存儲器ROM、I/O接口電路、定時(shí)/計(jì)數(shù)器以及輸入輸出適配器都集成在一塊芯片上,構(gòu)成一個(gè)完整的微型計(jì)算機(jī)。它的最大優(yōu)點(diǎn)是體積小,可放在儀表內(nèi)部。但存儲量小,輸入輸出適配器簡單,功能較低。目前,單片機(jī)在民用和工業(yè)測控領(lǐng)域得到最廣泛的應(yīng)用,早已深深地融入人們的生活中。
簡單的說,用單片機(jī)系統(tǒng)來設(shè)計(jì)搶答器,實(shí)現(xiàn)兩組的搶答時(shí)間即使是相差幾微秒,也可分辨出哪組優(yōu)先答題。
P0端口(P0.0-P0.7):P0口為一個(gè)8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。
P1端口(P1.0-P1.7):P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高電平,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。
P2端口(P2.0-P2.7):P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號和控制信號。P3端口(P3.0-P3.7):
P3口管腳是一個(gè)帶有內(nèi)部上拉電阻的8位的雙向I/O端口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入端時(shí),由于外部下拉為低電平,P3口將輸出電流(ILL)。
2.2 搶答器的原理
智力競賽搶答器用單片機(jī)來設(shè)計(jì)制作完成,由于其功能的實(shí)現(xiàn)主要通過軟件編程來完成, 采用單片機(jī)AT89C51,它是低功耗、高性能的CMOS型8位單片機(jī)。片內(nèi)帶有4KB的Flash存儲器,且允許在系統(tǒng)內(nèi)改寫或用編程器編程。該智力競賽搶答器的準(zhǔn)確度很高,其誤差主要由晶振自身的誤差所造成。
AT89C51單片機(jī)由微處理器,存儲器,I/O口以及特殊功能寄存器SFR等部分構(gòu)成。其存儲器在物理上設(shè)計(jì)成程序存儲器和數(shù)據(jù)存儲器兩個(gè)獨(dú)立的空間,片內(nèi)程序存儲器的容量為4KB,片內(nèi)數(shù)據(jù)存儲器為128個(gè)字節(jié)。89C51單片機(jī)有4個(gè)8位的并行I/O口:P0口,P1口,P2口和P3口。各個(gè)接口均由接口鎖存器,輸出驅(qū)動器,和輸入緩沖器組成。P1口是唯一的單功能口,僅能用作通用的數(shù)據(jù)輸入/輸出口。P3口是雙功能口除了具有數(shù)據(jù)輸入/輸出功能外,每條接口還具有不同的第二功能,如P3.0是串行輸入口線,P3.1口是串行輸出口線。在需要外部程序存儲器和數(shù)據(jù)存儲器擴(kuò)展時(shí),P0可作為分時(shí)復(fù)用的低8位地址/數(shù)據(jù)總線,P2口可作為高8位的地址總線。P3口也可作為AT89C51的一些特殊功能口,同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號。
2.2.1 原理及電路總框圖
圖2.2.1搶答器總原理圖
2.3 功能模塊電路
2.3.1晶振復(fù)位及開始搶答電路
晶振的頻率為12MHZ,提供89C51的時(shí)鐘脈沖使89C51工作,復(fù)位電路是單片機(jī)初始化,使單片機(jī)重新開始執(zhí)行程序。當(dāng)復(fù)位開關(guān)按下RST由低電平變?yōu)楦唠娖?,則程序從頭開始執(zhí)行,在此次課程設(shè)計(jì)電路中當(dāng)一個(gè)問題結(jié)束主持人后按下復(fù)位開關(guān)后進(jìn)行下一題的準(zhǔn)備。
圖2.3.1 晶振復(fù)位電路
圖2.3.1開始搶答電路
2.3.2 選手搶答鍵(矩陣式鍵盤)
89C51的P1口做一個(gè)為選手搶答的輸入按鍵引腳,P1.0至P1.7輪流輸出低電位,給每一個(gè)選手編號1至8,當(dāng)選手按下按鈕時(shí),P1口個(gè)端口的電平變化從P1口輸入,經(jīng)單片機(jī)處理后從P0輸出由數(shù)碼管顯示搶答者編號。
圖2.3.2 選手搶答電路
2.3.3 顯示與顯示驅(qū)動電路
此電路包括顯示和驅(qū)動,顯示采用數(shù)碼管,驅(qū)動用P2口, 違規(guī)者編號、搶答30秒倒計(jì)時(shí)、正常搶答者編號和回答問題時(shí)間60秒倒計(jì)時(shí),數(shù)碼管采用動態(tài)顯示。驅(qū)動電路P2口,查詢顯示程序利用P0口做段選碼口輸出P2低3位做位選碼輸出,當(dāng)為低電平則能驅(qū)動數(shù)碼管使其顯示數(shù)字。在+5V電壓下接10k的電阻,保證正常壓降。
圖2.3.3 示與顯示驅(qū)動電路
2.3.4蜂鳴器音頻輸出電路
通過控制不同頻率的矩形脈沖來控制蜂鳴器發(fā)聲。此次課程設(shè)計(jì)中只需要一些簡單的提示聲音和稍微顯眼的燈控,有搶答違規(guī),開始搶答,搶答時(shí)間結(jié)束和回答時(shí)間到得提示聲和亮燈提醒。
圖2.3.4蜂鳴器音頻輸出電路
第3章 軟件設(shè)計(jì)
3.1程序設(shè)計(jì)
3.1.1 系統(tǒng)流程圖
開 始
初始化
讀鍵盤是否有鍵按下
中斷條件是否滿足
調(diào)用顯示搶答違
規(guī)并報(bào)警子程序
進(jìn)入中斷程序
開中斷并響聲提示
設(shè)定定時(shí)器值
并啟動定時(shí)器
30秒搶答時(shí)間并顯示
并顯示
調(diào)用讀鍵子程序?yàn)檠訒r(shí)程序
是否有鍵按下
60秒到中斷返回
調(diào)用搶答者獲得的回答問題子程序
3.1.2顯示搶答違規(guī)流程圖
開 始
報(bào)警一直提示
顯示違規(guī)者編號
3.1.3搶答成功流程圖
開 始
響聲提示
設(shè)置定時(shí)器初值并啟動
顯示搶答者后30秒倒計(jì)時(shí)
60秒答問題時(shí)間到并響聲提示
RET
3.2 程序代碼
(見附錄一)
第4章 系統(tǒng)調(diào)試
軟件的設(shè)計(jì)與調(diào)試實(shí)行分模塊實(shí)現(xiàn)的方法。本設(shè)計(jì)軟件調(diào)試中的分模塊包括顯示功能模塊,調(diào)整時(shí)間功能模塊,搶答功能模塊以及報(bào)警功能模塊。各個(gè)獨(dú)立模塊功能調(diào)試成功后,將這些模塊程序通過主程序合并在一起,最后再對合并后的總程序進(jìn)行調(diào)試。各軟件模塊首先要通過PC和仿真器進(jìn)行軟件調(diào)試,當(dāng)仿真效果符合要求后在燒寫進(jìn)單片機(jī)看是否在實(shí)際電路板上正常工作。本設(shè)計(jì)通過利用Proteus仿真,將所編寫的程序用wave軟件編譯,所仿真原理圖見附錄。
第5章 致謝
在設(shè)計(jì)之前,參考了許多相關(guān)的資料。在設(shè)計(jì)中又參考了書中的八搶答器的原理圖,有了基本的思路。
但著手設(shè)計(jì)時(shí),又出現(xiàn)了許多未預(yù)料到的問題經(jīng)同學(xué)以及老師的幫助,發(fā)現(xiàn)錯誤的原因,并及時(shí)的改正。通過這次八路搶答器的設(shè)計(jì),我發(fā)現(xiàn)了以往學(xué)習(xí)中的許多不足,也讓我掌握了以往許多掌握的不太牢的知識,感覺學(xué)到了很多東西。兩周的課程設(shè)計(jì),留給我印象最深的是要設(shè)計(jì)一個(gè)成功的課程設(shè)計(jì),必須要有耐性和堅(jiān)持下去的毅力。
總之,這次實(shí)驗(yàn)過程中我受益匪淺,在摸索我和我的搭檔實(shí)現(xiàn)了課題所要求的結(jié)果。培養(yǎng)了我的設(shè)計(jì)思維,增加了動手操作的能力。更讓我體會到實(shí)現(xiàn)課程設(shè)計(jì)的功能喜悅
參考文獻(xiàn)資料
[1] 張友德. 《單片機(jī)原理及應(yīng)用》. 機(jī)械工業(yè)出版社 2000年.
[2] 張光飛. 《單片機(jī)課程設(shè)計(jì)實(shí)例指導(dǎo))》. 北京航天航空大學(xué)出版社 2003年.
[3] 雷伏蓉. 《51單片機(jī)常用模塊設(shè)計(jì)查詢手冊》清華大學(xué)出版社 2005年.
[4] 張俊謨. 《單片機(jī)初級教程》. 北京航天航空大學(xué)出版社 2000年.
[5] 何宗彬 《8位單片機(jī)開發(fā)技術(shù)與規(guī)范》 機(jī)械工業(yè)出版社 1999年
[6] 楊居民 《單片機(jī)課程設(shè)計(jì)指導(dǎo)》 清華大學(xué)出版社 2000年
[7] 何立民 《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》 北京航天航空大學(xué)出版社 2000年
附錄一
搶答器程序
OK EQU 20H;搶答開始標(biāo)志位
RING EQU 22H;響鈴標(biāo)志位
ORG 0000H
AJMP MAIN
ORG 0003HAJMP INT0SUB
ORG 000BH
AJMP T0INT
ORG 0013H
AJMP INT1SUB
ORG 001BH
AJMP T1INT
ORG 0040H
MAIN: MOV R1,#30;初設(shè)搶答時(shí)間為30s
MOV R2,#60;初設(shè)答題時(shí)間為60s
MOV TMOD,#11H;設(shè)置未定時(shí)器/模式1
MOV TH0,#0F0H
MOV TL0,#0FFH;越高發(fā)聲頻率越高,越尖
MOV TH1,#3CH
MOV TL1,#0B0H;50ms為一次溢出中斷
SETB EA
SETB ET0
SETB ET1
SETB EX0
SETB EX1;允許四個(gè)中斷,T0/T1/INT0/INT1
CLR OK
CLR RING
SETB TR1
SETB TR0;一開始就運(yùn)行定時(shí)器,以開始顯示FFF.如果想重新計(jì)數(shù),重置TH1/TL1就可以了
;=====查詢程序=====
START: MOV R5,#0BH
MOV R4,#0BH
MOV R3,#0BH
ACALL DISPLAY;未開始搶答時(shí)候顯示FFF
JB P3.0,NEXT;ddddddd
ACALL DELAY
JB P3.0,NEXT;去抖動,如果"開始鍵"按下就向下執(zhí)行,否者跳到非法搶答查詢
ACALL BARK;按鍵發(fā)聲
MOV A,R1
MOV R6,A;送R1->R6,因?yàn)镽1中保存了搶答時(shí)間
SETB OK;搶答標(biāo)志位,用于COUNT只程序中判斷是否查詢搶答
MOV R7,#01H ;讀搶答鍵數(shù)據(jù)信號標(biāo)志,這里表示只讀一次有用信號
MOV R3,#0AH;搶答只顯示計(jì)時(shí),滅號數(shù)
AJMP COUNT;進(jìn)入倒計(jì)時(shí)程序,"查詢有效搶答的程序"在COUNT里面
NEXT: JNB P1.0,FALSE1
JNB P1.1,FALSE2
JNB P1.2,FALSE3
JNB P1.3,FALSE4
JNB P1.4,FALSE5
JNB P1.5,FALSE6
JNB P1.6,FALSE7
JNB P1.7,FALSE8
AJMP START
;=====非法搶答處理程序=====
FALSE1: MOV R3,#01H
AJMP ERROR
FALSE2: MOV R3,#02H
AJMP ERROR
FALSE3: MOV R3,#03H
AJMP ERROR
FALSE4: MOV R3,#04H
AJMP ERROR
FALSE5: MOV R3,#05H
AJMP ERROR
FALSE6: MOV R3,#06H
AJMP ERROR
FALSE7: MOV R3,#07H
AJMP ERROR
FALSE8: MOV R3,#08H
AJMP ERROR
;=====INT0(搶答時(shí)間R1調(diào)整程序)=====
INT0SUB:MOV A,R1
MOV B,#0AH
DIV AB
MOV R5,A
MOV R4,B
MOV R3,#0AH
ACALL DISPLAY;先在兩個(gè)時(shí)間LED上顯示R1
JNB P3.4,INC0;P3.4為+1s鍵,如按下跳到INCO
JNB P3.5,DEC0;P3.5為-1s鍵,如按下跳到DECO
JNB P3.1,BACK0;P3.1為確定鍵,如按下跳到BACKO
AJMP INT0SUB
INC0: MOV A,R1
CJNE A,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。
MOV R1,#00H
ACALL DELAY1
AJMP INT0SUB
ADD0: INC R1
ACALL DELAY1
AJMP INT0SUB
DEC0: MOV A,R1
JZ SETR1;如果R1為0, R1就置99,
DEC R1
ACALL DELAY1
AJMP INT0SUB
SETR1: MOV R1,#63H
ACALL DELAY1
AJMP INT0SUB
BACK0: RETI
;=====INT1(回答時(shí)間R2調(diào)整程序)=====
INT1SUB:MOV A,R2
MOV B,#0AH
DIV AB
MOV R5,A
MOV R4,B
MOV R3,#0AH
ACALL DISPLAY
JNB P3.4,INC1
JNB P3.5,DEC1
JNB P3.1,BACK1
AJMP INT1SUB
INC1: MOV A,R2
CJNE A,#63H,ADD1
MOV R2,#00H
ACALL DELAY1
AJMP INT1SUB
ADD1: INC R2
ACALL DELAY1
AJMP INT1SUB
DEC1: MOV A,R2
JZ SETR2
DEC R2
ACALL DELAY1
AJMP INT1SUB
SETR2: MOV R2,#63H
ACALL DELAY1
AJMP INT1SUB
BACK1: RETI
;=====倒計(jì)時(shí)程序(搶答倒計(jì)時(shí)和回答倒計(jì)時(shí)都跳到改程序)=====
REPEAT:MOV A,R2 ;使用錦囊時(shí)重新計(jì)時(shí)
MOV R6,A
CLR RING
COUNT: MOV R0,#00H;重置定時(shí)器中斷次數(shù)
MOV TH1,#3CH
MOV TL1,#0B0H;重置定時(shí)器
RECOUNT:MOV A,R6;R6保存了倒計(jì)時(shí)的時(shí)間,之前先將搶答時(shí)間或回答時(shí)間給R6
MOV B,#0AH
DIV AB;除十分出個(gè)位/十位
MOV 30H,A;十位存于(30H)
MOV 31H,B;個(gè)位存于(31H)
MOV R5,30H;取十位
MOV R4,31H;取個(gè)位
MOV A,R6
SUBB A,#07H
JNC LARGER;大于5s跳到LARGER,小于等于5s會提醒
MOV A,R0
CJNE A,#0AH,FULL;1s中0.5s向下運(yùn)行
CLR RING
AJMP CHECK
FULL: CJNE A,#14H,CHECK;下面是1s的情況,響并顯示號數(shù)并清R0,重新計(jì)
SETB RING
MOV A,R6
JZ QUIT;計(jì)時(shí)完畢
MOV R0,#00H
DEC R6;一秒標(biāo)志減1
AJMP CHECK
LARGER: MOV A,R0
CJNE A,#14H,CHECK;如果1s向下運(yùn)行,否者跳到查"停/顯示"
DEC R6;計(jì)時(shí)一秒R6自動減1
MOV R0,#00H
CHECK: JNB P3.1,QUIT;如按下停止鍵退出
JNB OK,CHECKK ;只在回答倒計(jì)時(shí)才有效
AJMP NEXTT
CHECKK:JNB P3.0,REPEAT ;判斷是否使用錦囊
NEXTT: ACALL DISPLAY
JB OK,ACCOUT;如果是搶答倒計(jì)時(shí),如是則查詢搶答,否者跳過查詢繼續(xù)倒數(shù)(這里起到鎖搶答作用)
AJMP RECOUNT
ACCOUT:
MOV A,36H
JNB ACC.0,TRUE1
JNB ACC.1,TRUE2
JNB ACC.2,TRUE3
JNB ACC.3,TRUE4
JNB ACC.4,TRUE5
JNB ACC.5,TRUE6
JNB ACC.6,TZ1
JNB ACC.7,TZ2
AJMP RECOUNT
TZ1:JMP TRUE7
TZ2:JMP TRUE8
QUIT: CLR OK;如果按下了"停止鍵"執(zhí)行的程序
CLR RING
AJMP START
;=====正常搶答處理程序=====
TRUE1: ACALL BARK
MOV A,R2
MOV R6,A;搶答時(shí)間R2送R6
MOV R3,#01H
CLR OK;因?yàn)榇痤}的計(jì)時(shí)不再查詢搶答,所以就鎖了搶答
AJMP COUNT
TRUE2:ACALL BARK
MOV A,R2
MOV R6,A
MOV R3,#02H
CLR OK
AJMP COUNT
TRUE3:ACALL BARK
MOV A,R2
MOV R6,A
MOV R3,#03H
CLR OK
AJMP COUNT
TRUE4:ACALL BARK
MOV A,R2
MOV R6,A
MOV R3,#04H
CLR OK
AJMP COUNT
TRUE5:ACALL BARK
MOV A,R2
MOV R6,A
MOV R3,#05H
CLR OK
AJMP COUNT
TRUE6: ACALL BARK
MOV A,R2
MOV R6,A
MOV R3,#06H
CLR OK
AJMP COUNT
TRUE7:ACALL BARK
MOV A,R2
MOV R6,A
MOV R3,#07H
CLR OK
AJMP COUNT
TRUE8:ACALL BARK
MOV A,R2
MOV R6,A
MOV R3,#08H
CLR OK
AJMP COUNT
;=====犯規(guī)搶答程序=====
ERROR: MOV R0,#00H
MOV TH1,#3CH
MOV TL1,#0B0H
MOV 34H,R3;犯規(guī)號數(shù)暫存與(34H)
HERE: MOV A,R0
CJNE A,#06H,FLASH;0.3s向下運(yùn)行->滅并停響
CLR RING
MOV R3,#0AH
MOV R4,#0AH
MOV R5,#0AH;三燈全滅
AJMP CHECK1
FLASH: CJNE A,#0CH,CHECK1;下面是0.8s的情況,響并顯示號數(shù)并清R0,重新計(jì)
SETB RING
MOV R0,#00H
MOV R3,34H;取回號數(shù)
MOV R5,#0BH
MOV R4,#0BH;顯示FF和號數(shù)
AJMP CHECK1
CHECK1: JNB P3.1,QUIT1
ACALL DISPLAY
AJMP HERE
QUIT1: CLR RING
CLR OK
AJMP START
;=====顯示程序=====
DISPLAY:MOV DPTR,#DAT1;查表顯示程序,利用P0口做段選碼口輸出/P2低三位做位選碼輸出,
MOV A,R3
MOVC A,@A+DPTR
MOV P2,#0feH
MOV P0,A
ACALL DELAY2
MOV DPTR,#DAT2
MOV A,R5
MOVC A,@A+DPTR
MOV P2,#0fdH
MOV P0,A
ACALL DELAY2
MOV A,R4
MOVC A,@A+DPTR
MOV P2,#0fbH
MOV P0,A
ACALL DELAY2
RET
DAT1:DB 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H
;"滅","1","2","3","4","5","6","7","8","9","滅","F"
DAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H
;第一個(gè)為零,其他與上相同,因?yàn)槭蝗绻麨榱泔@示熄滅
;====加減時(shí)間延時(shí)(起到不會按下就加N個(gè)數(shù))======
DELAY1: MOV 35H,#08H
LOOP0: ACALL DISPLAY
DJNZ 35H,LOOP0
RET
;=====延時(shí)4236個(gè)機(jī)器周期(去抖動用到)=====
DELAY: MOV 32H,#12H
LOOP: MOV 33H,#0AFH
LOOP1: DJNZ 33H,LOOP1
DJNZ 32H,LOOP
RET
;=====延時(shí)4236個(gè)機(jī)器周期(顯示用到)=====
DELAY2: MOV 32H,#43H
LOOP3: MOV 33H,#1EH
MOV A,R7 ;每隔60~70個(gè)機(jī)器周期讀一次P1口,全為1時(shí)為無效數(shù)據(jù),繼續(xù)讀,有一個(gè)不為1時(shí),轉(zhuǎn)到正常搶答處理
JNZ AAAA1 ;沒讀到有效數(shù)據(jù)時(shí)繼續(xù)轉(zhuǎn)到AAAA1
LOOP2: DJNZ 33H,LOOP2
DJNZ 32H,LOOP3
RET
;=====讀搶答按鍵數(shù)據(jù)口程序=====
;由于在讀搶答數(shù)據(jù)口的時(shí)候,單片機(jī)首先進(jìn)入倒計(jì)時(shí)程序,再調(diào)用顯示程序,最后才檢測按鍵口
;然而在檢測按鍵口時(shí)動態(tài)掃描要調(diào)用三次(4ms)延時(shí)程序.這樣就會導(dǎo)致讀數(shù)據(jù)口出現(xiàn)滯后,造成1號優(yōu)先最高.8號最低.
;故采用在延時(shí)子程序中加了讀數(shù)據(jù)口程序.保證了靈敏度和可靠性
AAAA1: MOV A,P1
CJNE A,#0FFH,AA1 ;當(dāng)不全為1時(shí)的數(shù)據(jù)為有效數(shù)據(jù)
AA0: MOV 36H,A ;將有效數(shù)據(jù)送到36H暫存
AJMP LOOP2
AA1: DEC R7
AJMP AA0
;=====發(fā)聲程序=====
BARK: SETB RING
ACALL DELAY1
ACALL DELAY1
CLR RING;按鍵發(fā)聲
RET
;=====TO溢出中斷(響鈴程序)=====
T0INT: MOV TH0,#0ECH
MOV TL0,#0FFH
JNB RING,OUT;
CPL P3.6;RING標(biāo)志位為1時(shí)候P3.6口不短取反使喇叭發(fā)出一定頻率的聲音
OUT: RETI
;=====T1溢出中斷(計(jì)時(shí)程序)=====
T1INT: MOV TH1,#3CH
MOV TL1,#0B0H
INC R0
RETI
END
附錄二
原理及電路總框圖
24
收藏