導航:首頁 > 操作系統 > 單片機的搶答器緒論

單片機的搶答器緒論

發布時間:2022-08-26 13:01:50

㈠ 51單片機四路搶答器畢業論文 只要四路

第一章 緒論設計的四路數字搶答器,每路設計一搶答按鈕供選手使 用,並設置一個系統清除和搶答控制總開關 S,該開關由主持 人控制。 搶答器具有限時搶答功能,每一輪的限時搶答時間設定為 30 秒。主持人啟動"開始"鍵後,在設定的時間內,參賽選手 進行搶答有效,否則無效。 搶答器具有鎖存與顯示功能。選手搶答成功則顯示相應 的編號,此時其他選手無法搶答。優先搶答選手的編號一直 保持到主持人將系統清除為止。用計時器數碼管顯示當前剩 余的答題時間, 當答題剩餘時間為 5 秒時,小燈閃爍提示;當答題時間結束 時,蜂鳴器發出響聲,提示答題者答題時間到。 本課題我們主要採用單片機電路來實現的,主要設計思 路是:在主持人下達命令之後,若選手在 30s 內沒有閉合開 關,就進入下一環節;若有選手閉合開關,主機就能夠准確 判斷出第一搶答信號並將其鎖存,同時將其餘輸入信號封鎖, 使其它搶答無效,此時主持人根據屏幕上顯示的號碼判斷是 哪位選手可以做答,此時最先閉合開關的選手開始進入答題 倒計時,若在 60s 內答題則視為有效;否則無效。 程序流程圖如圖 1-1.1-2 所示: 選手發送圖: 開始 初始化:P0.P2 口清零 定時器 T1 方式選擇;串列口發送方式選 擇;啟動定時器 1 並裝入初值 判斷搶答是否成功 向主機發送選手號 顯示答題倒計時 圖 1-1 主持人接受圖:開始 初始化: P0.P1.P2.口清零, 串列口接受方式選擇,T1 接收方 式選擇,啟動計數器 T1,並裝入初值,開總中斷和串列口 中斷 總開關是否按下 允許接收,並顯示搶答時間倒計時 是否接受到搶答信號 顯示優先按下鍵的選手號碼, 並屏蔽其他選手 號碼 圖 1-2 系統方案論證 第二章 系統方案論證方案一:如圖 2-1,採用一個單片機,一個計時器,一個 數碼管,選手通過按下開關作為輸入信號,完成搶答輸入信 號的觸發。主持人根據選手的輸入信號准確判斷出最先按下 開關的選手,並屏蔽其他搶答信號,讓優先按鍵的選手開始 作答,同時計時器開始計時倒計時。電路主要運用了定時器 和計數器,該電路的優點是電路圖比較簡單,缺點是抗干擾 能力差,缺乏實際利用價值。 圖 2-1 方案二:採用五個單片機,五個計時器,一個數碼管, 電路主要運用串列口中斷和定時器計數器的工作原理。接通 電源後, 主持人將開關撥到"清零"狀態, 搶答器處於禁止狀態, 編號顯示器滅燈,主持人將開關置開始"狀態,宣布"開始"搶 答器工作,開始搶答時間倒計時,如果在搶答時間倒計時內 無人搶答,則直接進入下一環節,若有人在這時間內優先搶 答,則其開始作答,與此同時搶答倒計時,改換成作答倒計 時,當倒計時到 5s 時,信號燈閃爍提醒作答選手,當計時結 束時,蜂鳴器發出報警聲響提示選手。選手搶答實行優先鎖 存,優先搶答,選手的編號一直保持到裁判將系統清零為止。 該電路的缺點是電路復雜,優點是便於每位選手觀看倒計時, 實用性較好,在實際生活中應用較多。 通過以上兩個方案的比較,我們不難發現第二個電路增 加了一些控制電路,控制起來比較容易一些,效果和實用性 比第一個好,故本實驗採用第二個原理圖。 系統圖各位選手通過按鍵發送請求信號告知主持人,主持人通 過數碼管上號碼告訴哪位選手可以答題,如圖 2-2 1號 4號 主 持 人 2號 3號 圖 2-2 第三章 理論分析本課題的電路採用單片機 AT89C51 作為控制晶元, 分別是 主持人和每位參賽選手都有自己的控制器。每位選手的控制 晶元 P0 和 P2 口上都接一個共陰極的數碼管作為答題倒計時 的顯示。P1^4 口接一按鍵,按鍵的另一端接地,供選手搶答 使用。 P1^6 接音頻放大電路, 並在其輸出端接一個喇叭,作 為答題剩餘時間提醒。當選手按下按鍵搶答成功時,它就會 通過控制晶元上的串列口發送自己的選手號,同時也啟動了 答題倒計時,當答題時間只剩下 5 秒時,喇叭就會發出「叮 咚」提醒選手抓緊時間答題。 主持人的控制晶元的 P0 . P1 和 P2 口都接一共陰極的數碼 管,其中 P1 口的數碼管用來顯示搶答成功選手的號碼。P1 和 P2 口的數碼管開始時用來顯示允許搶答的時間限制,當有 選手搶答成功時,就轉為顯示搶答時間倒計時。P3^7 接開關 和指示燈,當開關按下指示燈亮時才允許選手們進行搶答。當 有一號選手搶答成功,則通過軟體關閉串列口中斷屏蔽其他 的選手。 選手向主持人發送自己的選手號碼是採用串列口單工通 訊的原理。 每個控制晶元內部都有一個功能強大的全雙工的 非同步通信串列口, 其內部有兩個物理上獨立的接收. 發送緩沖 期 SBUF,可同時發送. 接收數據。每次串列口的使用,串列 口需初始化後, 才能完成數據的輸入、輸出。其初始化過程如 下: (1) 按選定串列口的操作模式設定 SCON 的 SM0、SM1 兩 位二進制編碼。(2) 對於操作模式 2 或 3, 應根據需要在 TB8 中寫入待發送的第 9 位數據。(3) 若選定的操作模式不 是模式 0, 還需設定接收/發送的波特率。設定 SMOD 的狀態, 以控制波特率是否加倍。 若選定操作模式 1 或 3, 則應對定 時器 T1 進行初始化以設定其溢出率。 這些初始化須通過軟體 編程來實現。 本設計採用的是模式 2--9 位數據非同步通訊方式。 其工作原理為: (1).一幀為 11 位:9 位數據位,1 個起始位(0),1 個停 止位(1)。第 9 位數據位在 TB8/RB8 中,常用作校驗位和多機 通訊標識位(2).RXD:接收數據端,TXD:發送數據端。(3). 波特率: 方式 2:B=(2SMOD/64)×fosc ,本設計用定時器 1 來產生。(4).發送:先裝入 TB8,寫入 SBUF 並啟動發送, 發送結束,TI=1。接收:REN=1,允許接收。接收完一幀,若 RI=0 且第 9 位為 1 (或 SM2=0),將接收數據裝入接收 SBUF, 第 9 位裝入 RB8,使 RI=1;否則丟棄接收數據,不置位 RI。 原理圖如下: 圖3 試驗及數據分析 第四章 試驗及數據分析 1. 實驗環境在實驗室里用 proteus 模擬,用 keil 編程,最後得到模擬 結果。 2. 數據(1)主機工作 ) 主持人閉和開關後,數碼管顯示零,計時器顯示搶答倒 計時,從 30s 開始倒計時。如圖 4-2-1: 圖 4-2-1 (2)選手一搶答 ) 在搶答倒計時時間內,選手一閉合開關,主機數碼管上 顯示」1」,選手一旁邊的發光二極體亮,與此同時,主持人和選 手一的計時器開始顯示答題倒計時,時間在 60s 內,如圖 4-2-2: 圖 4-2-2 (3)選手二搶答 ) 在搶答倒計時時間內,選手二閉合開關,主機數碼管上 顯示」2」,選手二旁邊的發光二極體亮,與此同時,主持人和選 手二的計時器開始顯示答題倒計時,時間在 60s 內,如圖 4-2-3: 圖 4-2-3 (4)選手三搶答 ) 在搶答倒計時時間內,選手三閉合開關,主機數碼管上 顯示」3」,選手三旁邊的發光二極體亮,與此同時,主持人和選 手三的計時器開始顯示答題倒計時,時間在 60s 內,如圖 4-2-4: 圖 4-2-4 (5)選手四搶答 ) 在搶答倒計時時間內,選手四閉合開關,主機數碼管上 顯示」4」,選手四旁邊的發光二極體亮,與此同時,主持人和選 手四的計時器開始顯示答題倒計時,時間在 60s 內,如圖 4-2-5: 圖 4-2-5 3. 分析搶答器由單片機以及外圍電路組成,由於採用單片機, 使得外圍電路非常簡單,有如下功能搶答限時、選手答題計 時搶答自鎖,燈光指示、暫停復位、電子音樂報聲;搶答規 定時限 0-30 秒可調; 面板上設有組號與計時窗口, 顯示清晰, 同步顯示,互不幹擾集搶答器、數顯倒計時器於一機; 可設 定搶答、答題兩種倒計時時間;搶答器具有鎖存與顯示功能。 即選手按動按鈕, 鎖存相應的編號, 並在 LED 數碼管上顯示; 搶答器具有定時搶答功能,且一次搶答的時間由主持人設定, 本次時間設定為 30 秒,當主持人啟動"開始"鍵後,定時器進 行減計時等等,總之搶答器很有實用價值。 第五章 心得體會今年參加了全國大學生電子設計大賽培訓,培訓過程中 的艱辛只有親身經歷過才知道裡面的酸甜苦辣,我相信這段 時間會給我們留下美好的回憶。在經歷了艱苦的培訓之後, 我們組只有一個信念,就是無論如何也要盡我們最大的努力, 讓老師選上我們,只有選上了,我們的夢想才真的開始了, 否則前面的付出就付諸東流了。 我們做的是搶答器。我們本來很快就有思路了,但給老 師一看的時候,他說太沒難度了,會影響我們的選拔分,沒 辦法,我們只好把難度往上提了,這一提難度我們可就連續 整了 3 天,在這 3 天我們除下吃飯和睡覺的時間不在外,其 余時間通通泡在實驗室內,最終通過我們的集體努力,我們 的實驗也算有所成果吧。 通過參加這次培訓,發現有了很多的體會和收獲:首先 是學習能力的加強。這種學習能力包括獲取資料的能力、理 解前人思路的能力、系統設計能力、動手能力、分析排除故 障能力、表達能力等多方面,電子設計競賽的賽制就決定了 上述能力缺一不可。其次是團隊精神的培養。電子設計競賽 要求三人組隊參賽,集體計算成績,這就使得三個人必須互 相信任、互相配合、分工合作。在順境時要相互提醒保持冷 靜,逆境時要相互鼓勵共度難關,不能相互埋怨。 我們組永遠忘不了這次經歷,永遠忘不了和我們一起奮 斗的老師和學哥,我們永遠堅信我們組是最棒的! 參 考 文 獻 [1] 余發山, 單片機原理及應用技術 ,中國礦業大學出版社, 2003; [2]王衛東,基於單片機的最簡連線搶答器的設計與製作,1999; [3]李朝青.2001.單片機原理與介面技術.北京:北京航空航天 大學出版社.94-103,339-348; [4] 沈慶陽、郭庭吉 版社; [5]李朝青主編,《單片機原理與介面技術》,北京航天航空大學 出版社,1994; [6]何立民主編,《單片機應用與設計》,北京航天航空大學出版 社,1990; 8051 單片機實踐與應用 清華大學出

電子科協競賽項目報告書 參賽作品: 單片機的 參賽作品:基於 51 單片機的四路電子搶答器 作品 小 組 成 員: TH XZ 專 業 班 級: 電信 1005 班 報告提交日期: 2011 報告提交日期: 2011 年 3 月 16 日 日期 目錄 1 設計要求與功能 ........................................................................................................... 4 1.1 設計基本要求…………………………………………………………………...4 2 硬體設計 ...................................................................................................................... 4 2.1 控制系統及所需元件…………………………………………………………. 4 2.2 搶答器顯示模塊………………………………………………………………...5 2.3 電源方案的選擇 ............................................................................................... 6 2.4 搶答器鍵盤的選擇 ........................................................................................... 6 2.5 蜂鳴器模塊 ........................................................................................................ 7 2.6 外部振盪電路 .................................................................................................... 7 3 程序設計 ...................................................................................................................... 7 3.1 程序流程圖 ........................................................................................................ 7 3.2 系統的調試…… ………………………………….. …………………………9 3.3 焊接的問題及解決……………………………………………………… …10 4 總結 ............................................................................................................................. 10 附錄 C 程序 ................................................................................................................... 11 II 一設計要求與功能 1.1 設計基本要求(1)搶答器同時供 4 名選手或 4 個代表隊比賽使用,分別用 4 個按鈕 K1~ K4 表示。 (2)設置裁判開關 k5 和清零開關 k6,該開關由主持人控制,當主持人按 下 k6,系統復位,預備搶答,當主持人按下總控制控制開關 k5,開始搶答; (3) 搶答器具有定時搶答功能, 搶答時間為倒計時 15 秒。 當主持人啟動 「開 始」鍵後,定時器進行減計時,同時揚聲器發出短暫的提示聲響,聲響持續的時 間 0.5 秒左右,當計時小於 5 秒後,每減少一秒,便報警一次以提示選手。 (4)搶答器具有鎖存功能,參賽選手在設定的時間內進行搶答,搶答有效, 蜂鳴器發聲,計時停止,數碼管上顯示選手的編號和時間,選手相應的信號燈被 點亮,其他選手再搶答時無效。 (5)如果定時時間已到,無人搶答,本次搶答無效,系統報警並禁止搶答。 等待下一輪搶答。 。 二 硬體設計 2.1 控制系統及所需元件控制系統主要由單片機應用電路、存儲器介面電路、顯示介面電路組成。其 中單片機 STC89C52 是系統工作的核心,它主要負責控制各個部分協調工作。 所需元件:該系統的核心器件是 STC89C52。各口功能: P0.0-P0.3 是數碼管的位選口; P2.0-P2.7 是數碼管的段選口,為其傳送段選信號; P1.0-P1.3 是 4 組搶答信號的輸入口; P1.4、P1.5 由裁判控制,分別是搶答開始\復位功能鍵; P1.6 為蜂鳴器的控制口; P3.4-P3.7 為選手信號燈輸出口; 在其外圍接上電復位電路、數碼管電路、LED 發光二極體、按鍵電路及揚聲 器電路。 電子搶答器用單片機來設計製作完成的, 由於其功能的實現主要是通過軟體 3 編程來完成的,所以採用單片機 STC89C52,它是一個低電壓,高性能 CMOS 8 位 單片機,片內含 8k bytes 的可反復擦寫的 Flash 只讀程序存儲器和 512 bytes 的隨機存取數據存儲器(RAM) ,器件採用 ATMEL 公司的高密度、非易失性存儲技 術生產,兼容標准 MCS-51 指令系統,片內置通用 8 位中央處理器和 Flash 存儲 單元,功能強大的 STC89C52 單片機可為您提供許多較復雜系統控制應用場合。 下圖為其 I/O 口引腳圖: STC89C52 管腳圖 2.2. 搶答器顯示模塊顯示模塊分為數碼管模塊和 LED 信號燈模塊 分別採用四位一體共陰極數碼管和四個發光二極體,體積小,功耗低,故障 率低,程序編譯容易,資源佔用較少。 (見圖 1,圖 2) 圖1 4 圖2 2.3 電源方案的選擇系統需要 5V 電源來驅動單片機 STC89C52。 利用電腦的 USB 介面可以提供 5V 電壓來驅動單片機。 2.4 搶答器鍵盤的選擇鍵盤是單片機不可缺少的輸入設備,是實現人機對話的紐帶。鍵盤按結構形 式可以分為非編碼鍵盤和編碼鍵盤,前者用軟體方法產生鍵碼,而後者則用硬體 方法來產生鍵碼。 在單片機中使用的都是非編碼鍵盤, 因為非編碼鍵盤結構簡單, 成本低廉,非編碼鍵盤的類型很多,常用的有獨立式鍵盤,行列式鍵盤等。 本設計採用獨立式鍵盤。 鍵盤介面中使用多少根 I/O 線,鍵盤中就有幾個按鍵,鍵盤介面使用了 6 根 I/O 口線,該鍵盤就有 6 個按鍵,這種類型的鍵盤,其按鍵比較少,且鍵盤中 各按鍵的工作互不幹擾。因此可以根據實際需要對鍵盤中的按鍵靈活的編碼。如 圖所示。 最簡單的編碼方式就是根據 I/O 輸入口所直接反映的相應按鍵, 按下的狀態 進行編碼,稱按鍵直接狀態碼,對於這樣編碼的獨立式鍵盤,CPU 可以通過直接 讀取 I/O 口的狀態來獲取按鍵的直接狀態編碼值,根據這個值直接進行按鍵識 別,這樣形式的鍵盤結構簡單,按鍵識別容易。 5 獨立式鍵盤的缺點是需要佔用比較多的 I/O 口線, 當單片機應用系統鍵盤中 需要的按鍵比較少或 I/O 口線比較富餘時,可以採用這樣類型的鍵盤。 其模塊電路圖如圖 4 所示。採用六個 BUTTON 按鈕作為搶答的選擇按鈕,與 STC89C52 的 P1.0-P1.5 相連。 圖 4 鍵盤模塊 2.5 蜂鳴器模塊蜂鳴器是一種一體化結構的電子訊響器,採用直流電壓供電,廣泛應用於計 算機、列印機、復印機、報警器、電子玩具、汽車電子設備、電話機、定時器等 電子產品中作發聲器件,其圖形如圖所示. 6 2.6 外部振盪電路外部振盪電路單片機必須在 AT89C52 的驅動下才能工作.在單片機內部有一個 時鍾振盪電路,只需要外接一個振盪源就能產生一定的時鍾信號送到單片機內部 的各個單元,外部振盪電路見圖所示。 三 程序設計 3.1 程序流程圖: 程序流程圖:開始 初始化部分 N K5= =0 Y 啟動中斷,數碼管開始倒計時 N 若有選手搶答 Y 中斷停止,數碼管顯示選手的標號並點亮信號燈 結束搶答器主程序流程圖 7 定時器 0 中斷 N 1 秒時間到? Y 秒加 1 數碼管顯示秒值 中斷返回 搶答器定時器中斷流程圖 掃 描 鍵 盤 Y K0 鍵按下 N Y K1 鍵按下 N Y K2 鍵按下 N K3 鍵按下 N 與 K2 鍵對應的發光二極體亮及數碼管顯示 與 K1 鍵對應的發光二極體亮及數碼管顯示 與 K0 鍵對應的發光二極體亮及數碼管顯示 Y 與 K3 鍵對應的發光二極體亮及數碼管顯示 掃描停止 鍵盤掃描流程圖 主程序我們組所設計的搶答器的程序採用的是 C 程序設計,C 語言的顯著特點是用 二進制來編寫程序,程序的各個部分除了必要的信息交流外彼此之間相互獨立。 8 這種結構化方式可使程序層次清晰, 便於使用、維護以及調試。C 語言是以函數 形式提供給用戶的,這些函數可方便的調用,並具有多種循環、 條件語句控製程序 流向,從而使程序完全結構化。雖然 C 語言也是強類型語言,但它的語法比較靈 活,允許程序編寫者有較大的自由度。本次設計的主程序中包括時鍾設計程序, 定時器中斷子程序,LED 顯示程序以及按鍵控制子程序,具體程序見附件。 3.2 系統的調試系統調試包括硬體調試和軟體調試,而且兩者是密不可分的。我們設計好的 硬體電路和軟體程序,只有經過聯合調試,才能驗證其正確性;軟硬體的配人情 況以及是否達到設計任務的要求,也只有經過調試,才能發現問題並加以解決、 完善,最終開發成實用產品。 硬體調試分單元電路調試和聯機調試, 單元電路試驗在硬體電路設計時已經 進行,這里的調試只是將其製成印刷電路板後試驗電路是否正確,並排除一些加 工工藝性錯誤(如錯線、開路、短路等) 。這種調試可單獨模擬進行,也可通過 開發裝置由軟體配合進行。硬體聯機調試則必須在系統軟體的配合下進行。 軟體調試一般包括分塊調試和聯機調試兩個階段。 程序的分塊調試一般在單 片機開發裝置上進行, 可根據所調程序功能塊的入口參量初值編制一個特殊的程 序段,並連同被調程序功能塊一起在開發裝置上運行;也可配合對應硬體電路單 獨運行某程序功能塊,然後檢查是否正確,如果執行結果與預想的不一致,可以 通過單步運行或設置斷點的方法, 查出原因並加以改正, 直到運行結果正確為止。 這時該 程序功能塊已調試完畢,可去掉附加程序段。其它程序功能塊可按此法 進行調試。 程序聯機調試就是將已調試好的各程序功能塊按總體結構聯成一個完 整程序,在所研製的硬體電路上運行。從而試驗程序整體運行的完整性、正確性 和與硬體電路的配合情況。在聯調中可能會有某些支路上的程序、功能塊因受條 件制約而得不到相應的輸入參數,這時,調試人員應創造條件進行模擬調試。在 聯調中如發現硬體問題也應及時修正,直到單片機系統的軟體、硬體全部調試成 功為止。系統調試完成後,還要進行一段時間的試運行,從而檢驗系統的穩定性 和抗干擾能力,驗證系統功能是否達到設計要求,是否達到預期的效果。 9 3.3 焊接的問題及解決一般來說,造成硬體問題的首要問題就是焊接了,也就是說焊接的好與壞直 接響產品的正常運行。 造成焊接質量不高的常見原因是:①焊錫用量過多,形成焊 點的錫堆積;焊錫過少,不足以包裹焊點。②冷焊。焊接時烙鐵溫度過低或加熱 時間不足,焊錫未完全熔化、浸潤、焊錫表面不光亮(不光滑),有細小裂紋(如同 豆腐渣一樣!)。 ③夾松香焊接,焊錫與元器件或印刷板之間夾雜著一層松香,造成 電連接不良。若夾雜加熱不足的松香,則焊點下有一層黃褐色松香膜;若加熱溫 度太高,則焊點下有一層碳化松香的黑色膜。對於有加熱不足的松香膜的情況, 可以用烙鐵進行補焊。 對於已形成黑膜的,則要"吃"凈焊錫,清潔被焊元器件或印 刷板表面,重新進行焊接才行。④焊錫連橋。指焊錫量過多,造成元器件的焊點之 間短路。這在對超小元器件及細小印刷電路板進行焊接時要尤為注意。⑤焊劑過 量,焊點明圍松香殘渣很多。當少量松香殘留時,可以用電烙鐵再輕輕加熱一下, 讓松香揮發掉,也可以用蘸有無水酒精的棉球,擦去多餘的松香或焊劑。 ⑥焊點表 面的焊錫形成尖銳的突尖。這多是由於加熱溫度不足或焊劑過少,以及烙鐵離開 焊點時角度不當浩成的內。 。 總 結 經過近半個月的努力,在我們合作下,我們較好的完成了這次設計項目,通 過此次電子製作比賽,我們重新認識到了自學的重要性,以及學以致用的道理。 我們在圖書館和網上查閱了大量的資料,同時也認識到了圖書館的重要作用。 通過此次的搶答器的設計,讓我們更加重視到專業知識的重要性及動手能力的 必要性,在整個製作過程中,我們出現很多問題,但我們並沒有因此而放棄, 在不斷調試和失敗中,我們不僅學到了專業知識,更是磨煉了我們的心智,讓 我們受益匪淺。任何事情只要去做,多多去嘗試,努力的要以自己去做為前提 的心態,那麼任何事情即使做的不好,也會受益很多,不是有句話叫做:心態 決定的成敗的話嗎,實在是有理。無論做什麼事情都不可能一帆風順,碰到阻 礙不要舍棄,不要踟躕不前,不經歷風雨,怎麼見彩虹! 在今後的學習過程中,應該多到圖書館看一些專業方面的書籍,比如 protel 畫圖,proteus 模擬軟體,以豐富自己的知識,掌握更多的硬體與軟體設計技巧, 使我們在今後的製作中提高效率。 這次設計任務也使我們加深了對單片機及介面 10 技術的理解和應用,由於知識水平的局限,設計中可能會存在著一些不足,我們 真誠的接受老師和同學的批評和指正.。 附錄( 程序) 附錄(C 程序) #include<reg52.h> #define uchar unsigned char #define uint unsigned int Uchar code table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰數碼管 0~9 編碼 uint i,j,time,num; uchar ge,shi; bit flag,flag1; sbit k1=P1^0;sbit k2=P1^1;sbit k3=P1^2; sbit k4=P1^3;sbit k5=P1^4;sbit k6=P1^5; //k1~k4 為選手按鍵,k5 為主持人開關,k6 為復位鍵 sbit beep=P1^6;//定義蜂鳴器的埠 sbit wei1=P0^0;sbit wei2=P0^1; sbit wei3=P0^2;sbit wei4=P0^3;//定義數碼管的位選埠 sbit led1=P3^4;sbit led2=P3^5; sbit led3=P3^6;sbit led4=P3^7;//定義 LED 燈的埠 void delay(uint a)//延時函數 { uint i,j; for(i=a;i>0;i--) for(j=110;j>0;j--); } 11 void display()//顯示函數 { shi=time/10; ge=time%10; P2=table[num];//顯示選手編號 wei1=0;delay(1); wei1=1; P2=table[shi]; wei3=0; delay(1); wei3=1; P2=table[ge]; wei4=0; delay(1); wei4=1; } void keyscan() { if(k1==0)//按鍵按下 { delay(10);//延時去抖動 if(k1==0) { num=1;led1=0;flag=1;TR0=~TR0;TR1=0;//開定時器 0,關定時器 1 beep=1;delay(500);beep=0;//蜂鳴器響 500 毫秒 while(!k1);//等待按鍵釋放 } } if(k2==0) { delay(10); if(k2==0) //顯示時間 12 { num=2;led2=0;flag=1;TR0=~TR0;TR1=0; beep=1;delay(500);beep=0; while(!k2); } } if(k3==0) { delay(10); if(k3==0) { num=3;led3=0;flag=1;TR0=~TR0;TR1=0; beep=1;delay(500);beep=0; while(!k3); } } if(k4==0) { delay(10); if(k4==0) { num=4;led4=0;flag=1;TR0=~TR0;TR1=0; beep=1;delay(500);beep=0; while(!k4); } } display();//顯示選手編號和時間 if(time==0) { TR0=0; TR1=0; flag=1;//關計時器 0 和 1 13 } if(time==6) TR1=1; } void init() { TMOD=0x11; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1;ET0=1;ET1=1; beep=0;//作品上蜂鳴器是賦高電平響,開始置低關閉 } void main() { init();//初始化 while(1) { display(); if(k6==0) { delay(10); if(k6==0) { P3=0xff;//關閉所有 LED 燈 flag1=k6; time=15; wei1=0; num=0; P2=table[num]; 14 while(!flag1) { if(k5==0) { delay(10); if(k5==0) { flag1=1;flag=k5; TR0=1; beep=1;delay(500);beep=0; while(!k5); while(!flag) keyscan();//掃描鍵盤 } } } } } } } void time0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; i++; if(i==20) { i=0; time--; } } 15 void time1() interrupt 3 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; j++; if(j==10) { j=0; beep=~beep; } } 16

㈡ 基於單片機的簡易八路搶答器設計

ORG0000H
JMPBEGIN
ORG0030H
TABLE:;共陰極數碼管顯示代碼表
DB3FH,06H,5BH,4FH,66H;01234
DB6DH,7DH,07H,7FH,6fh;56789
DELAY:MOVR5,#20
LOOP4:MOVR6,#50H;延時20X20ms
LOOP5:MOVR7,#100
DJNZR7,$
DJNZR6,LOOP5
DJNZR5,LOOP4
RET
;---------------------------------------
BEGIN:MOVP2,#0FFH;P2口置高電平,准備接收信號
MOVR4,#0
MOVA,R4;R4位標志值送A寄存器
AGAIN:MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP1,A
LOOP1:MOVA,P3;接收p3口的搶答信號
CPLA
JZLOOP1
LOOP2:RRCA;有人搶答信號則逐次移動判斷哪一位搶答
INCR4
JNCLOOP2
;********************
MOVA,R4
MOVCA,@A+DPTR;找到相應位顯示代碼
MOVP1,A
LEDDIS:
MOVA,#0FFH
CLRC
LEDDIS1:
RLCA
DJNZR4,LEDDIS1
MOVP0,A
LOOP3:JNBP2.2,BEGIN;若主持人按下復位信號鍵,則轉向主程序
CPLP2.0;若沒按復位信號鍵,則通過p2.2口給出高低信號驅動蜂鳴器
LCALLDELAY;調用延時子程序
SJMPLOOP3;p2.2口反復間隔0.4s變化,驅動蜂鳴器
END

㈢ 設計搶答器的意義

  1. 搶答器的發展就是人類社會進步和科學發展的標志之一。
  2. 搶答器是一種應用非常廣泛的電子電氣設備,在各種搶答場合、競賽中,它能迅速客觀地分辨出最先獲得發言權的選手以及實現設定發言時間、記錄分數等功能。
  3. 早期的搶答器只由幾個三極體、可控硅、發光管等組成,能通過發光管的指示辨認出選手號碼。現在大多數搶答器均使用單片機和數字集成電路,並增加了許多新功能,如選手號碼顯示、強大前或搶答後的計時、選手得分顯示等功能。


  4. 當今搶答器的核心部位是單片機。微型計算機具有運算速度快、精度高、方便靈活、適應范圍廣和可靠性高等特點。作為其分支的單片機,由於特殊的硬體結構和指令系統,還具有以下突出特點:1、體積小、價格低、應用廣2、通用性、靈活性、3、可靠性強、抗干擾能力強、單片機的高集成度、4、實時控制能力強5、應用開發周期短。單片機體積小、功能強等特點,決定了它在工業控制、智能化儀器、通信系統、信息處理和家用電器等領域得到了廣泛應用。

㈣ 如何設計基於單片機的多功能8路搶答器

八路搶答器的設計

摘要

本文介紹了一種採用數字電路製作的多功能數顯搶答器,它主要採用了74系列的常用集成電路,它除了具有基本的搶答功能之外,還具有定時報警的功能,和數顯的功能,當搶答開始後,系統會自動倒計時,並且時間是可以預設的,期間有人搶答的話系統會停止計時,如果期間沒人搶答,系統會有短暫的報警,提示搶答結束。

關鍵字

單片機、PLC、搶答、報警、數顯

一、 設計目的

在電視和學校中我們會經常看到一些智力搶答的節目,如果要是讓搶答者用舉手等方法,主持人很容易誤判,會造成搶答的不公平,比賽中為了准確、公正、直觀地判斷出第一搶答者,所設計的搶答器通常由數碼顯示、燈光、音響等多種手段指示出第一搶答者。為了使這種不公平不發生,只有靠電子產品的高准確性來保障搶答的公平性。

二、 方案

製作搶答器可以用好多的方法,可以用單片機來完成,它的功能強大製作簡單,並且外圍的元件也很少;也可以用PLC來實現,他的製作也是比較簡單;還可以用我們學過的EDA技術來製作;最後也可以用數字電路來實現,它的原理比較簡單,集成塊的價格也比較便宜且很容易購買,與我們學完的〈〈數字電路〉〉聯系緊密,能將我們所學知識用於實際,對鞏固所學知識有重要意義,用了一些成型電路,如NE555標准秒脈沖電路等,使總體方案易於實現。

方案一〈採用數字電路〉

1、原理方框圖

定時搶答器的總體框圖如圖1所示,它由主體電路和擴展電路兩部分組成。主體電路完成基本的搶答功能,即開始搶答後,當選手按動搶答鍵時,能顯示選手的編號,同時能封鎖輸入電路,禁止其他選手搶答。擴展電路完成定時搶答的功能。

圖1

圖1所示的定時搶答器的工作過程是:接通電源時,節目主持人將開關置於「清除」位置,搶答器處於禁止工作狀態,編號顯示器滅燈,定時顯示器顯示設定的時間,當節目主持人宣布「搶答開始」,同時將控制開關撥到「開始」位置,揚聲器給出聲響提示,搶答器處於工作狀態,定時器倒計時。當定時時間到,卻沒有選手搶答時,系統報警,並封鎖輸入電路,禁止選手超時後搶答。當選手在定時時間內按動搶答鍵時,搶答器要完成以下四項工作:

①優先編碼電路立即分辨出搶答者的編號,並由鎖存器進行鎖存,然後由解碼顯示電路顯示編號;

②揚聲器發出短暫聲響,提醒節目主持人注意;

③控制電路要對輸入編碼電路進行封鎖,避免其他選手再次進行搶答;

④控制電路要使定時器停止工作,時間顯示器上顯示剩餘的搶答時間,並保持到主持人將系統清零為止。當選手將問題回答完畢,主持人操作控制開關,使系統回復到禁止工作狀態,以便進行下一輪搶答。

方案二〈採用單片機〉

1、原理方框圖

此電路完成的功能如圖2所示,當主持人宣布搶答開始的時候,按下開始按鈕,此時電路進入搶答狀態,選手的輸入採用了掃描式的輸入,之後把相應的信息送往單片機,再由單片機輸出到顯示輸出電路中。此時有人第一按下相應的搶答按鈕,經過單片機的控制選擇,在八段顯示器上顯示相應的號碼,並鎖存,同時禁止其他按鈕的輸入。

(圖2)

方案三〈採用PLC〉

1、原理方框圖

此電路的功能如圖3所示,當主持人打開啟動開關後,在設定時間TO 內,如果某組搶先按下搶答按鈕,則驅動音效電路①發出聲響,指示燈LI亮,並且在8段數碼管顯示器上顯示出搶答成功的組號,此時電路實現互鎖,其他組再按下搶答按鈕為無效;

如果在時間TO內,無人應答,則驅動音效電路②發出聲響,指示燈L2亮,表示搶答者均放棄該題;

在搶答成功後,主持人打開限時開關SW2,啟動計時器,在設定的時間TI 內回答有效,當到達設定時間TI時,驅動音效電路③,指示燈L3亮,表示答題時間到。

(圖3)

三、 方案選擇

方案比較
數字電路
單片機
PLC

製作難度

一般
一般

實現難度
一般



價格

一般


電路原理
簡單
一般
一般

設計難度
簡單

一般

通過上面的方案比較,數字電路的製作方案比較容易實現,並且在原理方面也是比較簡單,所以我選擇採用第一種方案來完成搶答器電路。

四、 設計系統功能

1.基本功能:

(1) 同時供8名選手比賽,分別用8個按鈕S0 ~ S7表示。

(2)設置一個系統清除和搶答控制開關S,該開關由主持人控制。

(3)搶答器具有鎖存與顯示功能。即選手按動按鈕,鎖存相應的編號,揚聲器發出聲響提示,並在七段數碼管上顯示選手號碼。選手搶答實行優先鎖存,優先搶答選手的編號一直保持到主持人將系統清除為止。

2.擴展功能:

(1)搶答器具有定時搶答功能,且一次搶答的時間由主持人設定(如30秒)。當主持人啟動"開始"鍵後,定時器進行減計時。

(2)參賽選手在設定的時間內進行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,並保持到主持人將系統清除為止。在這段(3)如果定時時間已到,無人搶答,本次搶答無效,系統報警並禁止搶答,定時顯示器上顯示00。

五、 各部分單元電路的設計

(1)搶答器的主體電路設計

搶答電路的功能有兩個:一是能分辨出選手按鍵的先後,並鎖存優先搶答者的編號,供解碼顯示電路用;二是要使其他選手的按鍵操作無效。選用優先編碼器74148和DFF鎖存器可以完成上述功能,其電路組成如圖4所示。其工作原理是:當主持人控制開關處於「清除」位置時,RS觸發器的端為低電平,輸出端(4Q~1Q)全部為低電平。於是74LS48的 =0,顯示器滅燈;74148的選通輸入端 =0,74LS148處於工作狀態,此時鎖存電路不工作。當主持人開關撥到「開始」位置時,優先編碼電路和鎖存電路同時處於工作狀態,即搶答器處於等待工作狀態,等待輸入端 7... 0輸入信號,當有選手將鍵按下時(如按下S5),74LSl48的輸出=010, =0,經RS鎖存器後,CTR=l, =1,74LS279處於工作狀態,4Q3Q2Q=101,經74LS48解碼後,顯示器顯示出「5」。此外,CTR=1,使74l48的端為高電平,74LSl48處於禁止工作狀態,封鎖了其它按鍵的輸入。當按下的鍵松開後,74LSl48的為高電平,但由於CTR維持高電平不變,所以74LSl48仍處於禁止工作狀態,其它按鍵的輸入信號不會被接收。這就保證了搶答者的優先性以及搶答電路的准確性。當優先搶答者回答完問題後,由主持人操作控制開關S,使搶答電路復位,以便進行下一輪搶答。

(圖4)

74LS148為8線-3線優先編碼器,表1為其功能表。

表1 74LS148的功能真值表

(2)定時電路設計

原理及設計:該部分主要由555定時器秒脈沖產生電路、十進制同步加減計數器74LS192減法計數電路、74LS48解碼電路和2個7段數碼管即相關電路組成。具體電路如圖5所示。兩塊74LS192實現減法計數,通過解碼電路74LS48顯示到數碼管上,其時鍾信號由時鍾產生電路提供。74192的預置數控制端實現預置數,由節目主持人根據搶答題的難易程度,設定一次搶答的時間,通過預置時間電路對計數器進行預置,如果要設置為30S,就可以在計數器的預置數控制端輸入00110000。時鍾脈沖由秒脈沖電路提供。按鍵彈起後,計數器開始減法計數工作,並將時間顯示在共陰極七段數碼顯示管上,當有人搶答時,停止計數並顯示此時的倒計時時間;如果沒有人搶答,且倒計時時間到時,輸出低電平到時序控制電路,控制報警電路報警,同時以後選手搶答無效。具體電路如圖5所示。

(圖5)

秒脈沖產生電路:秒脈沖由NE555提供,它的的3端輸出的脈沖的頻率為

,結合我們的實際經驗及考慮到元器件的成本,我們選擇的電阻值為R1=15K,R2=68K,C=10uF,代入到上式中即得,即秒脈沖。

(3)報警電路的設計

採用555定時器和三極體構成的報警電路如圖6所示。其中555構成多諧振盪器,振盪頻率

其輸出信號經三極體推動揚聲器。PR為控制信號,當PR為高電平時,多諧振盪器工作,當PR為低電平的時候,電路停振。

(圖6)

(4)時序控制電路設計

與門G1 的作用是控制時鍾信號CP的放行與禁止,門G2的作用是控制74LS148的輸入使能端(即圖二中的5端)。圖7的工作原理是:主持人控制開關從"清除"位置撥到"開始"位置時,來自於圖2中的74LS279的輸出 1Q,即CTR=0,經G3反相,輸出為1,則NE555產生的時鍾信號CP能夠加到74LS192的CPD時鍾輸入端,定時電路進行遞減計時。同時,在定時時間未到時,則"定時到信號"為 1,門G2的輸出 =0,使 74LS148處於正常工作狀態。當選手在定時時間內按動搶答按鍵時,CTR=1,經G3反相,輸出為0,封鎖 CP信號,定時器處於保持工作狀態;同時,門G2的輸出 =1,74LS148處於禁止工作狀態。當定時時間到時,則"定時到信號"為0,/ST=1,74LS148處於禁止工作狀態,禁止選手進行搶答。同時,門G1處於關門狀態,封鎖時鍾CP信號,使定時電路保持00狀態不變,此次搶答結束。

(圖7)

集成單穩態觸發器74LS121用於控制報警電路及發聲的時間(其功能表見表2),具體原理如下:主要由555時鍾電路(用於控制報警聲音頻率)、蜂鳴器即相關的延時電路和控制電路組成。單穩態觸發器74121通過信號/Ys、BO2、S控制報警與否和報警時間,555時鍾電路產生脈沖時鍾。在規定的時間有人搶答時,/Ys由1跳變到0,74121有狀態2,即Q輸出暫態高電平,蜂鳴器連續發聲報警,持續時間為 =2.15秒;如果在規定時間內無人搶答,BO2由1跳變到0,74121有狀態1,Q輸出暫態高電平,蜂鳴器連續發聲報警持續時間為
結合圖6所示報警電路,分析 計算如下: 。取C=100uF, R=25K,。有=2.15秒。(原理圖見圖8)

(圖8)

表2 74121功能表

(6) 電源電路

電源電路採用三端集成線性穩壓集成塊,L7805CV,因為它的外圍電路比較簡單,並且工作比較穩定,很適合74系列的集成塊。它的穩壓精度為2%,工作電流1.5A,封裝為TO-220(A),工作溫度也很不錯,並且具有過溫保護和短路保護,最大輸入電壓為35V,能對電路的長時間工作有很大的保障。(具體電路見圖9)

(圖9)

六、 總結

畢業設計不僅是對前面所學知識的一種檢驗,而且也是對自己能力的一種提高。下面我對整個畢業設計的過程做一下簡單的總結。

第一,接到任務以後進行選題。選題是畢業設計的開端,選擇恰當的、感興趣的題目,這對於整個畢業設計是否能夠順利進行關系極大。好比走路,這開始的第一步是具有決定意義的,第一步邁向何方,需要慎重考慮。否則,就可能走許多彎路、費許多周折,甚至南轅北轍,難以到達目的地。因此,選;題時一定要考慮好了。

第二,題目確定後就是找資料了。查資料是做畢業設計的前期准備工作,好的開端就相當於成功了一半,到圖書館、書店、資料室去雖說是比較原始的方式,但也有可取之處的。總之,不管通過哪種方式查的資料都是有利用價值的,要一一記錄下來以備後用。

第三,通過上面的過程,已經積累了不少資料,對所選的題目也大概有了一些了解,這一步就是在這樣一個基礎上,綜合已有的資料來更透徹的分析題目。

第四,有了研究方向,就應該動手實現了。其實以前的三步都是為這一步作的鋪墊。

通過這次設計,我對數字電路設計中的邏輯關系等有了一定的認識,對以前學的數字電路又有了一定的新認識,溫習了以前學的知識,就像人們常說的溫故而知新嘛,但在設計的過程中,遇到了很多的問題,有一些知識都已經不太清楚了,但是通過一些資料又重新的溫習了一下數字電路部分的內容。在這次畢業設計中也使我們的同學關系更進一步了,同學之間互相幫助,有什麼不懂的大家在一起商量,聽聽不同的看法對我們更好的理解知識,所以在這里非常感謝幫助我的同學。

在此要感謝我的指導老師,感謝老師給我這樣的機會鍛煉。在整個畢業設計過程中我懂得了許多東西,也培養了我獨立工作的能力,樹立了對自己工作能力的信心,相信會對今後的學習工作生活有非常重要的影響。而且大大提高了動手的能力,使我充分體會到了在創造過程中的探索的艱難和成功的喜悅。雖然這個項目還不是很完善,但是在設計過程中所學到的東西是這次畢業設計的最大收獲和財富,使我終身受益。

㈤ AT89S51單片機八路搶答器工作原理

基於MCS-51系列單片機AT89S51的八路搶答器

基於MCS-51系列單片機AT89S51的八路搶答器

前言

隨著現代電子電路的快速發展,以及電子行業對現有電子工程技術的不斷需求,特別是對實際操作實踐的電子人才的需求越來越多,所以加強學生動手能力、重視實踐應該是電子發展需求的必然趨向。實踐動手能力的培養是一種綜合能力,這種能力當然是在一定難度的前提下完成的,通過一定數量的實踐才能逐步形成的。因此在培養實踐能力的同時,要通過實踐來不斷的發現問題和解決問題的途徑和方法,從而提高實踐能力。

近年來,隨著單片機檔次的不斷提高,功能的不斷完善,其應用日趨成熟、應用領域日趨擴大,特別是工業測控、尖端武器和日用家電等領域更是因為有了單片機而生輝增色。單片機應用技術已成為一項新的工程應用技術。本次實習設計的題目為基於單片機的搶答器。

在本次的課程設計中我主要負責了該系統的印製電路板PCB的製作

一、方案論證

方案一:系統各部分採用中小規模集成數字電路,用機械開關按鈕作為控制開關,完成搶答輸入信號的觸發。該方案的特點是中小規模集成電路應用技術成熟,性能可靠,能方便地完成選手搶答的基本功能,但是由於系統功能要求較高,所以電路連接集成電路相對較多,而且過於復雜,並且製作過程工序比較煩瑣,使用不太方便。

方案二:該系統採用MCS-51系列單片機AT89S51作為控制核心,該系統可以完成運算控制、信號識別以及顯示功能的實現。由於用了單片機,使其技術比較成熟,應用起來方便、簡單並且單片機周圍的輔助電路也比較少,便於控制和實現。整個系統具有極其靈活的可編程性,能方便地對系統進行功能的擴張和更改性。CS-51單片機特點如下:

1>可靠性好:單片機按照工業控制要求設計,抵抗工業雜訊干擾優於一般的CPU,程序指令和數據都可以燒寫在ROM許多信號通道都在同一晶元,因此可靠性高。

2>易擴充:單片機有一般電腦所必須的器件,如三態雙向匯流排,串並行的輸入及輸出引腳,可擴充為各種規模的微電腦系統

3>控制功能強:單片機指令除了輸入輸出指令,邏輯判斷指令外還有更豐富的條件分支跳躍指令。原理框圖如1-1所示;

圖1-1

方案比較及其選用依據,顯然方案二比方案一簡單的多,不但從性能上優於方案一,而且在使用上及其功能的實現上都較方案一簡潔,並且由於單片機具有優越的高集成電路性,使其工作速度更快、效率更高。另外AT89S51單片機採用12MHz的晶振,提高了信號的測量精度,並且使該系統可以通過軟體改進來擴張功能。而方案一採用了中小規模集成電路,有其復雜的電路性能,從而可能會使信號的輸入輸出產生延時及不必要的誤差。依此依據選擇方案二比較適合。

二、原理分析

1.本電路採用單片機AT89C51作為控制晶元,單片機的P0口外接八個發光二極體,每個發光二極體分別作為八位選手的信號指示燈。並在各個外接電路上並接開關按鍵,按鍵另一端接地。發光二極體採用共陽極接法,由於P0口為高電平呈輸入狀態,當有按鍵按下時,P0口呈低電平與按鍵對應的發光二極體滿足點亮條件點亮。在程序編程上採用查詢,查詢P0口P0。0到P0。7的八個埠呈低電平,即查詢是哪個選手先按鍵,然後將選手號碼的位元組數據送至串列口輸出並在數碼管上顯現出來。

2.蜂鳴器是利用三極體處於開關狀態是的導通與截止工作,在三極體導通時蜂鳴器工作,三極體截止時蜂鳴器不工作。三極體採用8550PNP型基極接於P1。2口置其低電平時三極體導通,置其高電平時三極體截止。

3.數碼管採用共陽極七段顯示,其內部發光二極體為共陽極接高電平,當對應發光二極體一端為低電平時發光二極體點亮,顯示的數字或字元由送入的位元組數據控制,位元組數據的輸出採用串形口工作模式0,8位串列位元組數據的輸出通過RXD埠送出,TXD端用於送出同步移位脈沖,作為外接器件的同步移位信號。數據的發送是在TI=0的情況下,由一寫發送緩沖器的指令開始CPU執行完該指令,串列口即將8位數據從RXD端送出,同時TXD端發出同步移位脈沖。8位數據發送完畢後由硬體置位TI=1,通過查詢TI位來確定是否發送完一組數據,TI=1表示發送緩沖器已空,當要發送下一組數據時用軟體使TI清零,然後即可發送下一組數據。

4.軟體設計分析首先在程序的開始為選手設置了一段違規程序,該程序的作用是為了防止選手在主持人沒有按下搶答鍵時,有的選手已經提前搶答了,本次搶答為無效搶答,並有報警和記錄下該位選手的選號,做違規處理,如果選手超出了在規定的提前搶答次數,則該選手將被取消以後的搶答資格。如果在主持按下搶答鍵時再搶答,該次搶答被視為有效搶答,在主持按下回答問題的鍵時選手就可以在規定的時間內回答問題了

圖1-2

<1>選手查詢程序:

ORG0000H

START:CLRA

MOVA,#0FFH

MOVP0,A

LOP:JNBP2。4,LP

JNBP0。0,SA1

JNBP0。1,SA2

JNBP0。2,SA3

JNBP0。3,SA4

JNBP0。4,SA5

JNBP0。5,SA6

JNBP0。6,SA7

JNBP0。7,SA8

SJMPLOP

SA1:AJMPSB1

SA2:AJMPSB2

SA3:AJMPSB3

SA4:AJMPSB4

SA5:AJMPSB5

SA6:AJMPSB6

SA7:AJMPSB7

SA8:AJMPSB8

LP:MOVR0,#9

LOP1:LCALLLED

LCALLDEL

JNBP0。0,SIP1

JNBP0。1,SIP2

JNBP0。2,SIP3

JNBP0。3,SIP4

JNBP0。4,SIP5

JNBP0。5,SIP6

JNBP0。6,SIP7

JNBP0。7,SIP8

DECR0

CJNER0,#0,LOP1

MOVR0,#0

LCALLLED

LCALLDEL

SJMPLOP

SIP1:AJMPDIP1

SIP2:AJMPDIP2

SIP3:AJMPDIP3

SIP4:AJMPDIP4

SIP5:AJMPDIP5

SIP6:AJMPDIP6

SIP7:AJMPDIP7

SIP8:AJMPDIP8

SB1:MOVR2,#1

LCALLLED1

LCALLDE

SJMPLP1

SB2:MOVR2,#2

LCALLLED1

LCALLDE

SJMPLP1

SB3:MOVR2,#3

LCALLLED1

LCALLDE

SJMPLP1

SB4:MOVR2,#4

LCALLLED1

LCALLDE

SJMPLP1

SB5:MOVR2,#5

LCALLLED1

LCALLDE

SJMPLP1

SB6:MOVR2,#6

LCALLLED1

LCALLDE

SJMPLP1

SB7:MOVR2,#7

LCALLLED1

LCALLDE

SJMPLP1

SB8:MOVR2,#8

LCALLLED1

LCALLDE

SJMPLP1

LP1:JNBP2。4,LOP2

SJMPLP1

DIP1:MOVR2,#1

LCALLLED1

LCALLDE

SJMPLH1

DIP2:MOVR2,#2

LCALLLED1

LCALLDE

SJMPLH1

DIP3:MOVR2,#3

LCALLLED1

LCALLDE

SJMPLH1

DIP4:MOVR2,#4

LCALLLED1

LCALLDE

SJMPLH1

DIP5:MOVR2,#5

LCALLLED1

LCALLDE

SJMPLH1

DIP6:MOVR2,#6

LCALLLED1

LCALLDE

SJMPLH1

DIP7:MOVR2,#7

LCALLLED1

LCALLDE

SJMPLH1

DIP8:MOVR2,#8

LCALLLED1

LCALLDE

SJMPLH1

LH1:JNBP2。4,LOOP

SJMPLH1

LOP2:MOVA,#11H

MOVSBUF,A

JNBTI,$

CLRTI

LCALLDEL

AJMPLOP

<2>串列輸出程序:

該部分程序的設計利用了單片機的串列模式0輸出,該輸出方式佔用IO口少。可以省去許多IO口作為功能的擴展使用。在該模式下,我們採用了輸出查詢的方式,就是要藉助發送標志TI,當程序執行到發送標志位時,查詢其標志位TI的值,只要TI的值是0程序就繼續查詢,知道查詢到TI為1時才結束,然後在進入下一組數據的發送。由於串列輸出時送進去的數都是十進制數,以致計算機不能識別,所以還要把送進去的十進制數轉化成而進制數,這樣才能輸出。因此在輸出程序前必須有拆字程序,把原來送進去的十進制數轉化成二進制數,然後在輸出並通過數碼管顯示出來。但是如果在顯示選手選號與顯示選手回答問題所用的到計同用一段串列輸出程序時就會造成程序的混亂,所以在此處設計了兩段初始值不同的顯示程序,從而可能增加了程序的煩瑣化。

LED1:MOVA,R2

MOVB,#10

DIVAB

MOVR1,A

MOVR3,B

MOVA,R1

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVSBUF,A

JNBTI,$

CLRTI

MOVA,R3

MOVCA,@A+DPTR

MOVSBUF,A

JNBTI,$

CLRTI

RET。

LED:MOVA,R0

MOVB,#10

DIVAB

MOVR1,A

MOVR3,B

MOVA,R1

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVSBUF,A

JNBTI,$

CLRTI

MOVA,R3

MOVCA,@A+DPTR

MOVSBUF,A

JNBTI,$

CLRTI

RET

DE:CLRP1。2

LCALLDEL01

SETBP1。2

LCALLDEL01

RET

TAB:DB11H,0D7H,32H,92H,0D4H,98H,18H,0D3H,10H,90H

RET

<3>倒計時程序

該程序為選手回答問題時的30秒倒計時程序,其中前25秒為正常的倒計時,在後5秒倒計時時伴隨有報警聲,用於提示選手回答問題的剩餘時間。如果該選手在正常的倒計時內沒有完成問題的回答,那麼倒計時將被清零。

LOOP:MOVR0,#30

LPP:LCALLLED

LCALLDEL

JNBP2。4,LOP2

DECR0

CJNER0,#5,LPP

MOVR0,#5

LPP1:JNBP2。4,LOP2

LCALLLED

LCALLDE

DECR0

CJNER0,#0,LPP1

MOVR0,#0

LCALLLED

LCALLDEL

LJMPSTART

<4>延時程序

該系統設計了兩段延時程序,一段1秒延時,是為了30秒倒計時調用和程序中一秒延時所用;另一段為0。5秒延時,用於報警。程序的設計中報警時間為一秒,但是由於在硬體的設計時只設計了一個按鍵,這樣就會造成連續按鍵時會使所設定的報警聲不斷的響,這是設計中不允許的,所以在軟體編程時設計了一個0。5秒的延時,被報警時所調用,這樣就使報警聲能很清楚地區分出來了

DEL:MOVR6,#20DEL01:MOVR6,#10

DEL1:MOVR5,#100DEL11:MOVR5,#100

DEL2:MOVR4,#250DEL21:MOVR4,#250

DJNZR4,$DJNZR4,$

DJNZR5,DEL2DJNZR5,DEL21

DJNZR6,DEL1DJNZR6,DEL11

RETRET

<5>報警程序

該段程序主要是用於本系統中的所有報警使用,報警時間延時為1秒鍾。

DE:CLRP1。2

LCALLDEL01

SETBP1。2

LCALLDEL01

RET

三、製作過程

五、參考文獻

曾峰,鞏海洪,曾波,電子工業出版社,印刷電路板(PCB)設計與製作2005.8

梅海鳳,王艷秋,張軍,汪毓鐸,清華大學出版社單片機原理與介面技術2004.2

北京交通大學出版社

第二個文獻:基於51單片機八路搶答器設計程序及電路圖

基於51單片機八路搶答器設計程序及電路圖

說明:本人的這個設計改進後解決了前一個版本中1號搶答優先的問題,並增加了錦囊的設置,當參賽選手在回答問題時要求使用錦囊,則主持人按下搶答開始鍵,計時重新開始。

;八路搶答器電路請看下圖是用ps模擬的,已經測試成功

<單片機八路搶答器電路圖>

;============================================================

;================單片機八路搶答器程序=====================

;================51hei=======================

;================2008年5月=======================

;============================================================

OKEQU20H;搶答開始標志位

RINGEQU22H;響鈴標志位

ORG0000H

AJMPMAIN

ORG0003H

AJMPINT0SUB

ORG000BH

AJMPT0INT

ORG0013H

AJMPINT1SUB

ORG001BH

AJMPT1INT

ORG0040H

MAIN:MOVR1,#30;初設搶答時間為30s

MOVR2,#60;初設答題時間為60s

MOVTMOD,#11H;設置未定時器/模式1

MOVTH0,#0F0H

MOVTL0,#0FFH;越高發聲頻率越高,越尖

MOVTH1,#3CH

MOVTL1,#0B0H;50ms為一次溢出中斷

SETBEA

SETBET0

SETBET1

SETBEX0

SETBEX1;允許四個中斷,T0/T1/INT0/INT1

CLROK

CLRRING

SETBTR1

SETBTR0;一開始就運行定時器,以開始顯示FFF.如果想重新計數,重置TH1/TL1就可以了

;=====查詢程序=====

START:MOVR5,#0BH

MOVR4,#0BH

MOVR3,#0BH

ACALLDISPLAY;未開始搶答時候顯示FFF

JBP3.0,NEXT;ddddddd

ACALLDELAY

JBP3.0,NEXT;去抖動,如果"開始鍵"按下就向下執行,否者跳到非法搶答查詢

ACALLBARK;按鍵發聲

MOVA,R1

MOVR6,A;送R1->R6,因為R1中保存了搶答時間

SETBOK;搶答標志位,用於COUNT只程序中判斷是否查詢搶答

MOVR7,#01H;讀搶答鍵數據信號標志,這里表示只讀一次有用信號

MOVR3,#0AH;搶答只顯示計時,滅號數

AJMPCOUNT;進入倒計時程序,"查詢有效搶答的程序"在COUNT裡面

NEXT:JNBP1.0,FALSE1

JNBP1.1,FALSE2

JNBP1.2,FALSE3

JNBP1.3,FALSE4

JNBP1.4,FALSE5

JNBP1.5,FALSE6

JNBP1.6,FALSE7

JNBP1.7,FALSE8

AJMPSTART

;=====非法搶答處理程序=====

FALSE1:MOVR3,#01H

AJMPERROR

FALSE2:MOVR3,#02H

AJMPERROR

FALSE3:MOVR3,#03H

AJMPERROR

FALSE4:MOVR3,#04H

AJMPERROR

FALSE5:MOVR3,#05H

AJMPERROR

FALSE6:MOVR3,#06H

AJMPERROR

FALSE7:MOVR3,#07H

AJMPERROR

FALSE8:MOVR3,#08H

AJMPERROR

;=====INT0(搶答時間R1調整程序)=====

INT0SUB:MOVA,R1

MOVB,#0AH

DIVAB

MOVR5,A

MOVR4,B

MOVR3,#0AH

ACALLDISPLAY;先在兩個時間LED上顯示R1

JNBP3.4,INC0;P3.4為+1s鍵,如按下跳到INCO

JNBP3.5,DEC0;P3.5為-1s鍵,如按下跳到DECO

JNBP3.1,BACK0;P3.1為確定鍵,如按下跳到BACKO

AJMPINT0SUB

INC0:MOVA,R1

CJNEA,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。

MOVR1,#00H

ACALLDELAY1

AJMPINT0SUB

ADD0:INCR1

ACALLDELAY1

AJMPINT0SUB

DEC0:MOVA,R1

JZSETR1;如果R1為0,R1就置99,

DECR1

ACALLDELAY1

AJMPINT0SUB

SETR1:MOVR1,#63H

ACALLDELAY1

AJMPINT0SUB

BACK0:RETI

;=====INT1(回答時間R2調整程序)=====

INT1SUB:MOVA,R2

MOVB,#0AH

DIVAB

MOVR5,A

MOVR4,B

MOVR3,#0AH

ACALLDISPLAY

JNBP3.4,INC1

JNBP3.5,DEC1

JNBP3.1,BACK1

AJMPINT1SUB

INC1:MOVA,R2

CJNEA,#63H,ADD1

MOVR2,#00H

ACALLDELAY1

AJMPINT1SUB

ADD1:INCR2

ACALLDELAY1

AJMPINT1SUB

DEC1:MOVA,R2

JZSETR2

DECR2

ACALLDELAY1

AJMPINT1SUB

SETR2:MOVR2,#63H

ACALLDELAY1

AJMPINT1SUB

BACK1:RETI

;=====倒計時程序(搶答倒計時和回答倒計時都跳到改程序)=====

REPEAT:MOVA,R2;使用錦囊時重新計時

MOVR6,A

CLRRING

COUNT:MOVR0,#00H;重置定時器中斷次數

MOVTH1,#3CH

MOVTL1,#0B0H;重置定時器

RECOUNT:MOVA,R6;R6保存了倒計時的時間,之前先將搶答時間或回答時間給R6

MOVB,#0AH

DIVAB;除十分出個位/十位

MOV30H,A;十位存於(30H)

MOV31H,B;個位存於(31H)

MOVR5,30H;取十位

MOVR4,31H;取個位

MOVA,R6

SUBBA,#07H

JNCLARGER;大於5s跳到LARGER,小於等於5s會提醒

MOVA,R0

CJNEA,#0AH,FULL;1s中0.5s向下運行

CLRRING

AJMPCHECK

FULL:CJNEA,#14H,CHECK;下面是1s的情況,響並顯示號數並清R0,重新計

SETBRING

MOVA,R6

JZQUIT;計時完畢

MOVR0,#00H

DECR6;一秒標志減1

AJMPCHECK

LARGER:MOVA,R0

CJNEA,#14H,CHECK;如果1s向下運行,否者跳到查"停/顯示"

DECR6;計時一秒R6自動減1

MOVR0,#00H

CHECK:JNBP3.1,QUIT;如按下停止鍵退出

JNBOK,CHECKK;只在回答倒計時才有效

AJMPNEXTT

CHECKK:JNBP3.0,REPEAT;判斷是否使用錦囊

NEXTT:ACALLDISPLAY

JBOK,ACCOUT;如果是搶答倒計時,如是則查詢搶答,否者跳過查詢繼續倒數(這里起到鎖搶答作用)

AJMPRECOUNT

ACCOUT:

MOVA,36H

JNBACC.0,TRUE1

JNBACC.1,TRUE2

JNBACC.2,TRUE3

JNBACC.3,TRUE4

JNBACC.4,TRUE5

JNBACC.5,TRUE6

JNBACC.6,TZ1

JNBACC.7,TZ2

AJMPRECOUNT

TZ1:JMPTRUE7

TZ2:JMPTRUE8

QUIT:CLROK;如果按下了"停止鍵"執行的程序

CLRRING

AJMPSTART

;=====正常搶答處理程序=====

TRUE1:ACALLBARK

MOVA,R2

MOVR6,A;搶答時間R2送R6

MOVR3,#01H

CLROK;因為答題的計時不再查詢搶答,所以就鎖了搶答

AJMPCOUNT

TRUE2:ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#02H

CLROK

AJMPCOUNT

TRUE3:ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#03H

CLROK

AJMPCOUNT

TRUE4:ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#04H

CLROK

AJMPCOUNT

TRUE5:ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#05H

CLROK

AJMPCOUNT

TRUE6:ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#06H

CLROK

AJMPCOUNT

TRUE7:ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#07H

CLROK

AJMPCOUNT

TRUE8:ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#08H

CLROK

AJMPCOUNT

;=====犯規搶答程序=====

ERROR:MOVR0,#00H

MOVTH1,#3CH

MOVTL1,#0B0H

MOV34H,R3;犯規號數暫存與(34H)

HERE:MOVA,R0

CJNEA,#06H,FLASH;0.3s向下運行->滅並停響

CLRRING

MOVR3,#0AH

MOVR4,#0AH

MOVR5,#0AH;三燈全滅

AJMPCHECK1

FLASH:CJNEA,#0CH,CHECK1;下面是0.8s的情況,響並顯示號數並清R0,重新計

SETBRING

MOVR0,#00H

MOVR3,34H;取回號數

MOVR5,#0BH

MOVR4,#0BH;顯示FF和號數

AJMPCHECK1

CHECK1:JNBP3.1,QUIT1

ACALLDISPLAY

AJMPHERE

QUIT1:CLRRING

CLROK

AJMPSTART

;=====顯示程序=====

DISPLAY:MOVDPTR,#DAT1;查表顯示程序,利用P0口做段選碼口輸出/P2低三位做位選碼輸出,

MOVA,R3

MOVCA,@A+DPTR

MOVP2,#0feH

MOVP0,A

ACALLDELAY2

MOVDPTR,#DAT2

MOVA,R5

MOVCA,@A+DPTR

MOVP2,#0fdH

MOVP0,A

ACALLDELAY2

MOVA,R4

MOVCA,@A+DPTR

MOVP2,#0fbH

MOVP0,A

ACALLDELAY2

RET

DAT1:DB00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H

;"滅","1","2","3","4","5","6","7","8","9","滅","F"

DAT2:DB3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H

;第一個為零,其他與上相同,因為十位如果為零顯示熄滅

;====加減時間延時(起到不會按下就加N個數)======

DELAY1:MOV35H,#08H

LOOP0:ACALLDISPLAY

DJNZ35H,LOOP0

RET

;=====延時4236個機器周期(去抖動用到)=====

DELAY:MOV32H,#12H

LOOP:MOV33H,#0AFH

LOOP1:DJNZ33H,LOOP1

DJNZ32H,LOOP

RET

;=====延時4236個機器周期(顯示用到)=====

DELAY2:MOV32H,#43H

LOOP3:MOV33H,#1EH

MOVA,R7;每隔60~70個機器周期讀一次P1口,全為1時為無效數據,繼續讀,有一個不為1時,轉到正常搶答處理

JNZAAAA1;沒讀到有效數據時繼續轉到AAAA1

LOOP2:DJNZ33H,LOOP2

DJNZ32H,LOOP3

RET

;=====讀搶答按鍵數據口程序=====

;由於在讀搶答數據口的時候,單片機首先進入倒計時程序,再調用顯示程序,最後才檢測按鍵口

;然而在檢測按鍵口時動態掃描要調用三次(4ms)延時程序.這樣就會導致讀數據口出現滯後,造成1號優先最高.8號最低.

;故採用在延時子程序中加了讀數據口程序.保證了靈敏度和可靠性

AAAA1:MOVA,P1

CJNEA,#0FFH,AA1;當不全為1時的數據為有效數據

AA0:MOV36H,A;將有效數據送到36H暫存

AJMPLOOP2

AA1:DECR7

AJMPAA0

;=====發聲程序=====

BARK:SETBRING

ACALLDELAY1

ACALLDELAY1

CLRRING;按鍵發聲

RET

;=====TO溢出中斷(響鈴程序)=====

T0INT:MOVTH0,#0ECH

MOVTL0,#0FFH

JNBRING,OUT;

CPLP3.6;RING標志位為1時候P3.6口不短取反使喇叭發出一定頻率的聲音

OUT:RETI

;=====T1溢出中斷(計時程序)=====

T1INT:MOVTH1,#3CH

MOVTL1,#0B0H

INCR0

RETI

僅供參考。

㈥ 單片機八人搶答器程序設計

;------------------------------------------
KAI BIT P3.7 ;開始
;------------------------------------------
ORG 0000H
JMP START
START:
;----------------------;下面是清零(復位)
MOV P0, #0C0H ;顯示0
MOV P2, #255 ;熄燈
MOV R4, #0
;----------------------;下面等待按下"開始"鍵
KAISHI:
JB KAI, KAISHI ;沒有按"開始",就循環
CALL DELAY ;延時
JB KAI, KAISHI ;消抖
JNB KAI, $ ;等待釋放
;----------------------
MOV P0, #0CH ;顯示P
WAIT: ;等待搶答
MOV A, P1
CPL A
JZ WAIT ;繼續等待
;----------------------
XS: ;查找選手按鍵的位置
CPL A
MOV P2, A
JNB ACC.0, J0
JNB ACC.1, J1
JNB ACC.2, J2
JNB ACC.3, J3
JNB ACC.4, J4
JNB ACC.5, J5
JNB ACC.6, J6
; JMP J7
J7: INC R4
J6: INC R4
J5: INC R4
J4: INC R4
J3: INC R4
J2: INC R4
J1: INC R4
J0: INC R4
MOV A, R4
MOV DPTR, #D_TAB
MOVC A, @A + DPTR
MOV P0, A
;----------------------;下面等待按下復位鍵
W_FW:
JB KAI, W_FW ;沒有按,則轉
CALL DELAY ;延時
JB KAI, W_FW ;消抖
JNB KAI, $ ;等待釋放
JMP START
;------------------------
D_TAB:
DB 0C0H,0F9H,0A4H,0B0H, 99H ;共陽極0-9
DB 92H, 82H,0F8H, 80H, 90H,0BFH ;-
;------------------------------------------
DELAY: ;延時約10ms
MOV R6, #20
DJNZ R7, $
DJNZ R6, $ - 2
RET
;==========================================
END

;以上程序已經調好。

㈦ 單片機八路搶答器程序

OK EQU 20H;搶答開始標志位
RING EQU 22H;響鈴標志位
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP INT0SUB
ORG 000BH
AJMP T0INT
ORG 0013H
AJMP INT1SUB
ORG 001BH
AJMP T1INT
ORG 0040H
MAIN: MOV R1,#30;初設搶答時間為30s
MOV R2,#60;初設答題時間為60s
MOV TMOD,#11H;設置未定時器/模式1
MOV TH0,#0F0H
MOV TL0,#0FFH;越高發聲頻率越高,越尖
MOV TH1,#3CH
MOV TL1,#0B0H;50ms為一次溢出中斷
SETB EA
SETB ET0
SETB ET1
SETB EX0
SETB EX1;允許四個中斷,T0/T1/INT0/INT1
CLR OK
CLR RING
SETB TR1
SETB TR0;一開始就運行定時器,以開始顯示FFF.如果想重新計數,重置TH1/TL1就可以了
;=====查詢程序=====
START: MOV R5,#0BH
MOV R4,#0BH
MOV R3,#0BH
ACALL DISPLAY;未開始搶答時候顯示FFF
JB P3.0,NEXT;ddddddd
ACALL DELAY
JB P3.0,NEXT;去抖動,如果"開始鍵"按下就向下執行,否者跳到非法搶答查詢
ACALL BARK;按鍵發聲
MOV A,R1
MOV R6,A;送R1->R6,因為R1中保存了搶答時間
SETB OK;搶答標志位,用於COUNT只程序中判斷是否查詢搶答
MOV R7,#01H ;讀搶答鍵數據信號標志,這里表示只讀一次有用信號
MOV R3,#0AH;搶答只顯示計時,滅號數
AJMP COUNT;進入倒計時程序,"查詢有效搶答的程序"在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(搶答時間R1調整程序)=====
INT0SUB:MOV A,R1
MOV B,#0AH
DIV AB
MOV R5,A
MOV R4,B
MOV R3,#0AH
ACALL DISPLAY;先在兩個時間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(回答時間R2調整程序)=====
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
;=====倒計時程序(搶答倒計時和回答倒計時都跳到改程序)=====
REPEAT:MOV A,R2 ;使用錦囊時重新計時
MOV R6,A
CLR RING
COUNT: MOV R0,#00H;重置定時器中斷次數
MOV TH1,#3CH
MOV TL1,#0B0H;重置定時器
RECOUNT:MOV A,R6;R6保存了倒計時的時間,之前先將搶答時間或回答時間給R6
MOV B,#0AH
DIV AB;除十分出個位/十位
MOV 30H,A;十位存於(30H)
MOV 31H,B;個位存於(31H)
MOV R5,30H;取十位
MOV R4,31H;取個位
MOV A,R6
SUBB A,#07H
JNC LARGER;大於5s跳到LARGER,小於等於5s會提醒
MOV A,R0
CJNE A,#0AH,FULL;1s中0.5s向下運行
CLR RING
AJMP CHECK
FULL: CJNE A,#14H,CHECK;下面是1s的情況,響並顯示號數並清R0,重新計
SETB RING
MOV A,R6
JZ QUIT;計時完畢
MOV R0,#00H
DEC R6;一秒標志減1
AJMP CHECK
LARGER: MOV A,R0
CJNE A,#14H,CHECK;如果1s向下運行,否者跳到查"停/顯示"
DEC R6;計時一秒R6自動減1
MOV R0,#00H
CHECK: JNB P3.1,QUIT;如按下停止鍵退出
JNB OK,CHECKK ;只在回答倒計時才有效
AJMP NEXTT
CHECKK:JNB P3.0,REPEAT ;判斷是否使用錦囊
NEXTT: ACALL DISPLAY
JB OK,ACCOUT;如果是搶答倒計時,如是則查詢搶答,否者跳過查詢繼續倒數(這里起到鎖搶答作用)
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;如果按下了"停止鍵"執行的程序
CLR RING
AJMP START
;=====正常搶答處理程序=====
TRUE1: ACALL BARK
MOV A,R2
MOV R6,A;搶答時間R2送R6
MOV R3,#01H
CLR OK;因為答題的計時不再查詢搶答,所以就鎖了搶答
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
;=====犯規搶答程序=====
ERROR: MOV R0,#00H
MOV TH1,#3CH
MOV TL1,#0B0H
MOV 34H,R3;犯規號數暫存與(34H)
HERE: MOV A,R0
CJNE A,#06H,FLASH;0.3s向下運行->滅並停響
CLR RING
MOV R3,#0AH
MOV R4,#0AH
MOV R5,#0AH;三燈全滅
AJMP CHECK1
FLASH: CJNE A,#0CH,CHECK1;下面是0.8s的情況,響並顯示號數並清R0,重新計
SETB RING
MOV R0,#00H
MOV R3,34H;取回號數
MOV R5,#0BH
MOV R4,#0BH;顯示FF和號數
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
;第一個為零,其他與上相同,因為十位如果為零顯示熄滅
;====加減時間延時(起到不會按下就加N個數)======
DELAY1: MOV 35H,#08H
LOOP0: ACALL DISPLAY
DJNZ 35H,LOOP0
RET
;=====延時4236個機器周期(去抖動用到)=====
DELAY: MOV 32H,#12H
LOOP: MOV 33H,#0AFH
LOOP1: DJNZ 33H,LOOP1
DJNZ 32H,LOOP
RET
;=====延時4236個機器周期(顯示用到)=====
DELAY2: MOV 32H,#43H
LOOP3: MOV 33H,#1EH
MOV A,R7 ;每隔60~70個機器周期讀一次P1口,全為1時為無效數據,繼續讀,有一個不為1時,轉到正常搶答處理
JNZ AAAA1 ;沒讀到有效數據時繼續轉到AAAA1
LOOP2: DJNZ 33H,LOOP2
DJNZ 32H,LOOP3
RET
;=====讀搶答按鍵數據口程序=====
;由於在讀搶答數據口的時候,單片機首先進入倒計時程序,再調用顯示程序,最後才檢測按鍵口
;然而在檢測按鍵口時動態掃描要調用三次(4ms)延時程序.這樣就會導致讀數據口出現滯後,造成1號優先最高.8號最低.
;故採用在延時子程序中加了讀數據口程序.保證了靈敏度和可靠性
AAAA1: MOV A,P1
CJNE A,#0FFH,AA1 ;當不全為1時的數據為有效數據
AA0: MOV 36H,A ;將有效數據送到36H暫存
AJMP LOOP2
AA1: DEC R7
AJMP AA0

;=====發聲程序=====
BARK: SETB RING
ACALL DELAY1
ACALL DELAY1
CLR RING;按鍵發聲
RET
;=====TO溢出中斷(響鈴程序)=====
T0INT: MOV TH0,#0ECH
MOV TL0,#0FFH
JNB RING,OUT;
CPL P3.6;RING標志位為1時候P3.6口不短取反使喇叭發出一定頻率的聲音
OUT: RETI
;=====T1溢出中斷(計時程序)=====
T1INT: MOV TH1,#3CH
MOV TL1,#0B0H
INC R0
RETI
END

㈧ 怎麼設計基於51單片機的八位搶答器課程設計用c語言

你的描述不詳:下面我給出方法,自已參考:
1:主持人端有一個單片機設備 且設備有一個或多個按鍵,單個按鍵,那麼就做成按鍵復用,如果是多個按鍵,那就可以按要求設置按鍵功能和數量。參賽隊每隊一個設備,如果不方便能過連線來通訊,就採用無線通訊,搶答端只需一個按鍵按鍵,同時在按鍵里或邊上用指示燈來指示狀誠。
2:邏輯,當主持人按下搶答鍵時,主持人端設備向8個參賽隊發送搶答開始信號數據,參賽隊8個設備向主持端應答,判斷收到應答後,開始計時10秒,某一隊按下按鍵時,這隊會向主持端發送本隊的編號即可,說到這里,後面的基本上都是一樣的原理,就是收發數據,應答,判斷數據類型和功能。即可達到你的要求。

閱讀全文

與單片機的搶答器緒論相關的資料

熱點內容
腰椎壓縮性骨折吧 瀏覽:324
安卓怎麼把軟體改成火影忍者 瀏覽:702
手機如何切換軟體商店伺服器 瀏覽:325
江蘇省python二級題型 瀏覽:231
文件編譯器在哪 瀏覽:26
選擇目錄時此電腦的文件夾怎麼刪 瀏覽:25
狗狗幣加密支付服務 瀏覽:897
怎麼使用指南針APP確定方向 瀏覽:372
php讀取圖片並輸出 瀏覽:321
如何組合多個pdf文件 瀏覽:669
工作表格excel取消加密 瀏覽:133
真空壓縮袋手泵怎麼用 瀏覽:426
鏡面的命令 瀏覽:203
51單片機藍牙模塊有延遲 瀏覽:115
b解壓葯 瀏覽:569
跳空缺口指標源碼怎麼寫 瀏覽:701
怎麼殺掉伺服器上所有進程 瀏覽:180
c語言中水仙花數的演算法分析 瀏覽:495
心煩時玩兒的解壓神器 瀏覽:497
linux安裝的庫文件 瀏覽:920