久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 23893|回復: 36
打印 上一主題 下一主題
收起左側

單片機八路搶答器設計文檔+Proteus仿真+代碼

  [復制鏈接]
跳轉到指定樓層
樓主


仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


介紹了數碼顯示八路搶答器電路的組成、設計及功能,該搶答器除具有基本的搶答功能外,還具有計時和報警的功能。主持人通過時間預設開關預設供搶答的時間,系統將完成自動倒計時。若在規定的時間有人搶答,則計時將自動停止,若在規定的時間無人搶答,則系統中的蜂鳴器將發響,提示主持人本輪搶答無效,實現報警功能,若超過搶答時間則搶答無效。

目錄
1概 述              3
2 系統設計內容              4
2.1系統設計依據              5
2.2設計任務和要求              5
2.3設計目的              5
2.4設計要點              5
3 單元電路設計與分析              6
3.1 單片機控制原理              6
3.2搶答器的原理              9
3.3 功能模塊電路              10
3.3.1開始搶答電路              10
3.3.2 選手搶答鍵              10
3.3.3 顯示與顯示驅動電路              11
3.3.4蜂鳴器音頻輸出電路              11
4軟件設計              12
4.1程序設計              12
4.1.1 系統流程圖              12
4.1.2搶答成功流程圖              13
4.2 程序代碼              13
4.2.1 主程序              13
4.2.2 定時器子程序              18
4.2.3 延時子程序              18
4.2.4 顯示子程序              19
4.2.5  紅外中斷程序              19
5 總原理圖及元件清單              21
5.1總原理圖              21
5.2元件清單              23
6系統仿真              24
7結論              25
8心得體會              26
9參考文獻              27

隨著社會的不斷進步,電子技術也飛速的向前發展.特別是大規模集成電路的發展,把我們帶進了電子化時代。電子產品的日益增多,也讓我們的生活越來越方便。特別是計算機的發展,真可謂是突飛猛進。自從1946年世界上第一臺計算機的誕生以來,還不到六十年的時間,計算機就取得了舉世矚目的成績。特別是在通信領域,實現了信息一體化的時代。作為大學生的我們,更需要加強實踐能力的培養。課程設計在一定程度上反映了我們對理論知識的理解程度,是理論與實踐的橋梁。它不僅能鍛煉我們的動手能力,而且能夠培養我們對問題的思考能力以及對知識的進一步了解。當你能把你所學到知識化作為現實的東西時,我們能力就提升到一個新臺階。
很多人都認為學習是枯燥無味的,有時覺得與現實太遙遠。在學習之余,我們仍然可以找到一點有趣的事情,比如說做一個聲控燈泡、數字鐘等等。生活中我們要找到自己感興趣的東西。這次綜合課程設計中,我制作了八路搶答器。
搶答器是為智力競賽參賽者答題時進行搶答而設計的一種優先判決器電路,廣泛應用于各種知識競賽、文娛活動等場合。能夠實現搶答器功能的方式有多種,可以采用前期的模擬電路、數字電路或模擬與數字電路相結合的方式,但這種方式制作過程復雜,而且準確性與可靠性不高,成品面積大,安裝、維護困難。本節介紹一種利用51單片機作為核心部件進行邏輯控制及信號產生的八路搶答器。近年來,隨著單片機檔次的不斷提高,功能的不斷完善,其應用日趨成熟、應用領域日趨擴大,特別是工業測控、尖端武器和日用家電等領域更是因為有了單片機而生輝增色。單片機應用技術已成為一項新的工程應用技術。本次課程設計我們做的是無線八路搶答器,我們采用STC89C51單片機實現搶答功能,采用紅外遙控收發實現無線信號的搶答,性能更穩定,更易操作調試。
2 系統設計內容
2.1系統設計依據
   搶答器由計數器、寄存器、集成定時器和譯碼顯示等組合、無線傳輸與接收、時序電路組成。可分為搶答電路,定時電路,報警電路,無線電路等幾個單元部分。每個單元電路分別可以處理一些搶答競賽中的基本問題。
   本次課程設計設計的是一個多路定時無線搶答器,是一個多于兩位選手參賽的一個搶答器,具有鎖存和顯示功能。同時有主持人控制系統的清零和搶答的開始。搶答開始后,若有任何一名選手按動搶答按鈕,搶答器就會顯示該選手編號直至系統被主持人清零,并有揚聲器發出提示,同時其他人再搶答就無效了。這次設計的搶答器還有自動定時功能,主持人可以設定選手答題的時間。當主持人啟動“開始”鍵后,定時器會自動減計時,這個會顯示在顯示器上。選手只有在搶答時間內搶答才有效,若在答題時間內沒有選手答題,時間到時,報警電路就會發出警報亮燈并且禁止搶答。
2.2設計任務和要求
以單片機為核心,設計一個8位競賽搶答器。
1)搶答器同時供8名選手或2個代表隊比賽,分別用8個按鈕S0-S7表示。
2)設置一個系統清除和搶答控制開關S,該開關由主持人控制。
3)搶答器具有鎖存與顯示功能。即選手按動按鈕,鎖存相應的編號,并在優先搶答選手的編號一直保持到主持人將系統清除為止。
4)搶答器具有定時搶答功能,且一次搶答的時間由主持人設定(如30s等)。當主持人啟動“開始”按鍵后,定時器進行減計時,同時揚聲器發出短暫的聲響,聲響持續時間為0.5s左右。
5)參賽選手在設定時間內進行搶答,搶答有效,定時器停止工作,顯示器上顯示選手編號和搶答時間,并保持到主持人將系統清除為止。
6)如果定時時間到,無人搶答,本次搶答無效,系統報警并禁止搶答,定時顯示器上顯示00;
7)設計出軟件編程方法,并寫出源代碼;
8)主機與從機實現無線搶答
9)用PROTEUS進行仿真;
10)論文格式要符合學院的統一規定,結構要合符邏輯,表達要得體。
2.3 設計目的
通過設計學習單片機最小系統的基本設計方法,掌握單片機應用系統的開發調試過程。
(1)學習單片機開發工具功能、特點和使用方法。
(2)學會單片機控制系統程序的編制和編制和調試方法。
(3)設計單片機搶答器硬件電路,繪制出電路原理圖。
(4)編制并調試出鍵盤掃描程序和顯示驅動程序。
(5)掌握單片機定時器的基本用法,編制出定時器的中斷程序。
2.4 設計要點
根據控制系統的工作原理和執行裝置,可以將系統設計分為硬件和軟件兩大部分。硬件設計部分,包括編寫電路原理圖、合理選擇元器件、焊接各個元器件,然后對硬件性能進行調試、測試,以達到設計要求。軟件設計部分,首先在設計之前完成系統總框圖和確定各個功能模塊,然后進行具體設計,包括各模塊的流程圖,選擇合適的編程語言和軟件應用程序,進行編程設計等;最后是通過軟件對程序進行調試、測試,以及仿真,以達到性能的最優化。
下面是軟硬件設計方法確定的。軟件設計的方法與開發環境的選取有著直接的關系,本系統由于是采用51系列單片機,因此使用Keil C語言進行開發。此編程工具相比匯編語言具有結構化、適用范圍大、可移植性好等特點。本系統軟件設計采用模塊化系統設計方法,先編寫各個功能模塊子程序,然后進行組合與調整,經過調試后,可以進行仿真測試,已達到設計功能要求。為配合軟件的靈活設計,硬件電路是采用結構化系統設計方法,該方法保證設計電路的標準化、模塊化。硬件電路的設計最重要的選擇用于控制的單片機,再確定與之配套的外圍芯片,使所設計的系統既經濟又高性能。硬件電路設計可以在焊接元器件之前畫出詳細電路圖,標出芯片的型號、器件參數值,根據電路圖在仿真軟件上進行調試,發現設計錯誤時立即修改,高效,準確地完成硬件設計。
3單元電路設計與分析
3.1 單片機控制原理
單片機(SCM)是單片微型計算機(Single Chip Microcomputer)的簡稱。它是把中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、I/O接口電路、定時/計數器以及輸入輸出適配器都集成在一塊芯片上,構成一個完整的微型計算機。它的最大優點是體積小,可放在儀表內部。但存儲量小,輸入輸出適配器簡單,功能較低。目前,單片機在民用和工業測控領域得到最廣泛的應用,早已深深地融入人們的生活中。
簡單的說,用單片機系統來設計搶答器,實現兩組的搶答時間即使是相差幾微秒,也可分辨出哪組優先答題。
P0端口(P0.0-P0.7):P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。
STC89C51是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統可編程Flash 存儲器。在單芯片上,擁有靈巧的8 位CPU 和在系統可編程Flash,使得STC89C51為眾多嵌入式控制應用系統提供高靈活、超有效的解決方案。 具有以下標準功能: 8k字節Flash,512字節RAM, 32 位I/O 口線,看門狗定時器,內置4KB EEPROM,MAX810復位電路,三個16 位 定時器/計數器,一個6向量2級中斷結構,全雙工串行口。另外 STC89X51 可降至0Hz 靜態邏輯操作,支持2種軟件可選擇節電模式。空閑模式下,CPU 停止工作,允許RAM、定時器/計數器、串口、中斷繼續工作。掉電保護方式下,RAM內容被保存,振蕩器被凍結,單片機一切工作停止,直到下一個中斷或硬件復位為止。最高運作頻率35Mhz,6T/12T可選。

圖3-2 STC89C51單片機引腳圖

單片機是美國STC公司最新推出的一種新型51內核的單片機。片內含有Flash程序存儲器、SRAM、UART、SPI、PWM等模塊。
(一)STC89C51主要功能、性能參數如下:
(1)內置標準51內核,機器周期:增強型為6時鐘,普通型為12時鐘;
(2)工作頻率范圍:0~40MHZ,相當于普通8051的0~80MHZ;
(3)STC89C51RC對應Flash空間:4KB;
(4)內部存儲器(RAM):512B;
(5)定時器\計數器:3個16位;
(6)通用異步通信口(UART)1個;
(7)中斷源:8個;
(8)有ISP(在系統可編程)\IAP(在應用可編程),無需專用編程器\仿真器;
(9)通用I\O口:32\36個;
(10)工作電壓:3.8~5.5V;
(11)外形封裝:40腳PDIP、44腳PLCC和PQFP等。
(二)STC89C51單片機的引腳說明:
VCC:供電電壓。
GND:接地。
RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。
ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執行狀態ALE禁止,置位無效。
/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。
/EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。
XTAL2:來自反向振蕩器的輸出。
(三)STC89C51單片機最小系統:
最小系統包括單片機及其所需的必要的電源、時鐘、復位等部件,能使單片機始終處于正常的運行狀態。電源、時鐘等電路是使單片機能運行的必備條件,可以將最小系統作為應用系統的核心部分,通過對其進行存儲器擴展、A/D擴展等,使單片機完成較復雜的功能。
STC89C51是片內有ROM/EPROM的單片機,因此,這種芯片構成的最小系統簡單﹑可靠。用STC89C52單片機構成最小應用系統時,只要將單片機接上時鐘電路和復位電路即可,結構如圖2-3所示,由于集成度的限制,最小應用系統只能用作一些小型的控制單元。         

圖3-3 單片機最小系統原理框圖

(1) 時鐘電路
STC89C51單片機的時鐘信號通常有兩種方式產生:一是內部時鐘方式,二是外部時鐘方式。內部時鐘方式如圖2-4所示。在STC89C51單片機內部有一振蕩電路,只要在單片機的XTAL1(18)和XTAL2(19)引腳外接石英晶體(簡稱晶振),就構成了自激振蕩器并在單片機內部產生時鐘脈沖信號。圖中電容C1和C2的作用是穩定頻率和快速起振,電容值在5~30pF,典型值為30pF。晶振CYS的振蕩頻率范圍在1.2~12MHz間選擇
,典型值 為12MHz和6MHz。
         圖3-4 STC89C51內部時鐘電路

(2) 復位電路
當在STC89C51單片機的RST引腳引入高電平并保持2個機器周期時,單片機內部就執行復位操作(若該引腳持續保持高電平,單片機就處于循環復位狀態)。
復位電路通常采用上電自動復位和按鈕復位兩種方式。
最簡單的上電自動復位電路中上電自動復位是通過外部復位電路的電容充放電來實現的。只要Vcc的上升時間不超過1ms,就可以實現自動上電復位。
除了上電復位外,有時還需要按鍵手動復位。本設計就是用的按鍵手動復位。按鍵手動復位有電平方式和脈沖方式兩種。其中電平復位是通過RST(9)端與電源Vcc接通而實現的。按鍵手動復位電路見圖2-5。時鐘頻率用11.0592MHZ時C取10uF,R取10kΩ。
圖3-5 STC89C51復位電路

(3) STC89C51中斷技術概述
中斷技術主要用于實時監測與控制,要求單片機能及時地響應中斷請求源提出的服務請求,并作出快速響應、及時處理。這是由片內的中斷系統來實現的。當中斷請求源發出中斷請求時,如果中斷請求被允許,單片機暫時中止當前正在執行的主程序,轉到中斷服務處理程序處理中斷服務請求。中斷服務處理程序處理完中斷服務請求后,再回到原來被中止的程序之處(斷點),繼續執行被中斷的主程序。
圖3-6為整個中斷響應和處理過程


如果單片機沒有中斷系統,單片機的大量時間可能會浪費在查詢是否有服務請求發生的定時查詢操作上。采用中斷技術完全消除了單片機在查詢方式中的等待現象,大大地提高了單片機的工作效率和實時性。
3.2搶答器的原理
搶答器的工作原理是采用單片機最小系統,用程序查詢方式采用動態顯示組號。主持人按下開始搶答鍵才可以搶答。主持人沒有按下開始搶答按紐(P3.0),有人搶答則搶答違規,報警并顯示組號,主持人按下開始搶答開關重新搶答。主持人按下開始搶答按紐(P3.0),蜂鳴響聲提示,數碼管30秒倒計時搶答,蜂鳴器響聲提示并顯示他的組號,30秒內有人搶答則開始60秒倒計時(60秒內必須回答完問題),最后五秒倒計時警報。單片機最小系統、搶答按鍵模塊(四位并行數碼顯示)、顯示模塊、顯示驅動模塊、搶答開關模塊、蜂鳴器音頻輸出模塊。由于仿真中沒有無線芯片,所以選手搶答用按鍵代替如下圖:
圖3.2搶答器總原理圖
3.3 功能模塊電路
3.3.1開始搶答電路
圖3.3.1開始搶答電路
3.3.2 選手搶答鍵
圖3.3.2 選手搶答電路
3.3.3 顯示與顯示驅動電路
在此次課程設計電路中當一個問題結束主持人后按下復位開關后進行下一題的準備。
89C51的P1口做一個為選手搶答的輸入按鍵引腳,P1.0至P1.7輪流輸出低電位,給每一個選手編號1至8,當選手按下按鈕時,P1口個端口的電平變化從P1口輸入,經單片機處理后從P0輸出由數碼管顯示搶答者編號。由于仿真中沒有無線芯片,所以選手搶答用按鍵代替如下圖:
此電路包括顯示和驅動,顯示采用數碼管,驅動用P2口, 違規者編號、搶答30秒倒計時、正常搶答者編號和回答問題時間60秒倒計時,數碼管采用動態顯示。驅動電路P2口,查詢顯示程序利用P0口做段選碼口輸出P2低3位做位選碼輸出,當為低電平則能驅動數碼管使其顯示數字。在+5V電壓下接1k的上拉電阻,保證正常壓降,驅動數碼管更亮。
圖3.3.3 顯示與顯示驅動電路
3.3.4蜂鳴器音頻輸出電路
通過控制不同頻率的矩形脈沖來控制蜂鳴器發聲。此次課程設計中只需要一些簡單的提示聲音和稍微顯眼的燈控,有搶答違規,開始搶答,搶答時間結束和回答時間到得提示聲和亮燈提醒。
圖3.3.4蜂鳴器音頻輸出電路

4軟件設計
4.1程序設計
4.1.1 系統流程圖





4.1.2搶答成功流程圖

5 總原理圖及元件清單
5.1總原理圖

5.2元件清單
本系統采用單片機作為整個控制核心。控制系統主要由:顯示模塊、控制模塊、報警模塊、搶答模塊和無線模塊組成。工作時,該系統通過矩陣鍵盤輸入搶答信號,經單片機的處理后,輸出控制信號,利用一個4位數碼管來完成顯示功能并伴隨蜂鳴器報警,用按鍵來讓選手進行搶答,在數碼管上顯示哪一組先答題,從而實現整個搶答過程。
當主持人按下開始鍵時,向單片機P3.2引腳輸入一個低電平信號,表示整個電路開始工作,此時數碼管前兩位顯示選手編號(無人搶答顯示00),后兩位顯示倒計時剩余時間。若在25秒內仍然無人搶答,蜂鳴器在最后8秒發出連續報警,提示搶答時間快要結束;若在30秒內有人搶答,并且搶答成功,則將選手編號顯示在數碼管前兩位上,后兩位顯示搶答剩余時間,同時蜂鳴器發出一聲報警,提示其他沒有搶答的選手此題已被人搶答成功。若在搶答過程中遇見特殊情況,主持人則可以通過時間加,時間減按鍵來進行時間調節。若要開始新的一輪搶答,主持人按下復位鍵再按開始鍵即可。
此次用單片機控制的搶答器思路簡單明了,可操作性強,可靠性高,擴展功能強,能夠完全實現普通搶答器的基本功能。


6系統仿真




7結論
1設計思路是整個設計的靈魂 拿下每個課題能有一個非常清晰的設計思路是至關重要的。 只有對課題的充分理解,對各種器件的熟練掌握,勾畫出基本的 設計圖是成功的關鍵, 必須多花時間在設計上才能為后續工作提 , 供更扎實的基礎。翻閱各種資料,上網查詢填補所需知識的空白 是必要的。
2將電路分為幾個模塊,模塊與模塊間連接最好圍繞著電源的正負極來進行模塊與模塊間的連接。
3在網上尋找到的一些原理圖,可能未經過驗證,所以使用前要驗證一下,確保正確后才采納。
4研究明白電路中各電子元件的作用,會讓你對電路更加透徹,也會讓你盡量避免焊接時的錯誤,導致飛線的產生。
8心得體會
通過本次課程設計,把我們在課堂上學到的數字電路知識運用到實際當中。如各種常見芯片的功能, 各種組合邏輯電路和時序邏輯電路的設計,在此次設計中,當然也遇到了許多問題,畢竟這是第一次設計 一個很實際的硬件的器件。在進行一個綜合性的硬件設計時,要全面考慮問題,如想用其他信號來控制一個信號,就要考慮到和 這個信號直接或間接關系的信號,必須是最重要相關的信號,然后用真值表來解決他們的關系,通過門電 路來實現。這一個星期的課程設計,讓我真正理解了書本上知識,也讓我知道我們課本上的知識在實際中 怎么應用,理論聯系實際。通過此次設計,我對理論知識的學習有了很大的興趣,現在我可以主動的去 學習,我明白自己該學習那個方面,重點是什么。我也掌握的了在理論中遇到問題,應該怎樣去解決,在 實際中遇到迷團應該怎樣去檢查調試。我也掌握的了在理論中遇到問題,應該怎樣去解決,在實際中遇到迷團應該怎樣去檢查調試。在這次設計過程中還了解到在設計的時候不僅是設計好,更重要的是想方設法在功能實現的同時降低成本。


單片機源程序如下:
  1. /*************************************************************
  2.                       八路搶答器系統

  3. 補充說明:
  4. ***************************************************************/
  5. #include<reg52.h>                   //頭文件
  6. #include<SMG.h>
  7. #include<EEPROM.h>
  8. #include<INTERRUPT.h>

  9. #define uchar unsigned char//宏定義
  10. #define uint unsigned int

  11. /**********************引腳定義************************/
  12. sbit key_zhu=P2^2;           //主持人鍵
  13. sbit key_jia=P2^1;           //加鍵
  14. sbit key_jian=P2^0;           //減鍵

  15. sbit key_1=P1^1;           //八位選手按鍵定義
  16. sbit key_2=P1^3;
  17. sbit key_3=P1^5;
  18. sbit key_4=P1^7;
  19. sbit key_5=P3^1;
  20. sbit key_6=P3^3;
  21. sbit key_7=P3^5;
  22. sbit key_8=P3^7;

  23. sbit led_1=P1^0;           //八位LED燈按鍵定義
  24. sbit led_2=P1^2;
  25. sbit led_3=P1^4;
  26. sbit led_4=P1^6;
  27. sbit led_5=P3^0;
  28. sbit led_6=P3^2;
  29. sbit led_7=P3^4;
  30. sbit led_8=P3^6;
  31. /**********************變量定義************************/
  32. uchar zhu_f=0;                   //比賽進行階段標記位,=0表示沒有按。=1表示在設置倒計時的時間。=2表示開始搶答
  33. uchar qiang_f=0;           //搶答犯規標記,=0沒有犯規。=1表示有人犯規
  34. uchar wan_f=0;                   //搶答完成標記,=0搶答沒完成后還沒有開始。=1表示搶答完成
  35. uchar time=30;                   //倒計時時間
  36. uchar T0_num;                   //定時器0計數
  37. uchar number;                   //搶答成功選手的編號,或犯規選手的編號。=0的時候表示沒有

  38. /********************************************************
  39. 函數名稱:void delayms(uint ms)
  40. 函數作用:毫秒延時函數
  41. 參數說明:
  42. ********************************************************/
  43. void delayms(uint ms)
  44. {
  45.         unsigned char i=100,j;
  46.         for(;ms;ms--)
  47.         {
  48.                 while(--i)
  49.                 {
  50.                         j=10;
  51.                         while(--j);
  52.                 }
  53.         }
  54. }
  55. /********************************************************
  56. 函數名稱:void bajing()
  57. 函數作用:搶答犯規報警提示
  58. 參數說明:
  59. ********************************************************/
  60. void bajing()
  61. {
  62.         buzz=0;                   //開蜂鳴器
  63.         delayms(10);
  64.         buzz=1;                   //關蜂鳴器
  65.         delayms(10);
  66. }
  67. /********************************************************
  68. 函數名稱:uchar qianda()
  69. 函數作用:搶答按鍵檢測,返回搶答編號
  70. 參數說明:
  71. ********************************************************/
  72. uchar qianda()
  73. {
  74.         uchar temp=0;
  75.         if(key_1==0)                                  //一號犯規,下同
  76.                 temp=1;                          //記錄1號
  77.         else
  78.                 if(key_2==0)
  79.                         temp=2;
  80.                 else
  81.                         if(key_3==0)
  82.                                 temp=3;
  83.                         else
  84.                                 if(key_4==0)
  85.                                         temp=4;
  86.                                 else
  87.                                         if(key_5==0)
  88.                                                 temp=5;
  89.                                         else
  90.                                                 if(key_6==0)
  91.                                                         temp=6;
  92.                                                 else
  93.                                                         if(key_7==0)
  94.                                                                 temp=7;
  95.                                                         else
  96.                                                                 if(key_8==0)
  97.                                                                         temp=8;       
  98.         return temp;       
  99. }
  100. /********************************************************
  101. 函數名稱:void led_kongzhi(uchar num,bit mode)
  102. 函數作用:LED燈控制
  103. 參數說明:num控制哪一個燈,k=1,點亮,=0關閉。mode=0全滅后在控制這個燈,=1單獨控制這個燈
  104. ********************************************************/
  105. void led_kongzhi(uchar num,bit k,bit mode)
  106. {
  107.         if(mode==0)
  108.         {
  109.                 led_1=1;           //八位LED燈全滅
  110.                 led_2=1;
  111.                 led_3=1;
  112.                 led_4=1;
  113.                 led_5=1;
  114.                 led_6=1;
  115.                 led_7=1;
  116.                 led_8=1;       
  117.         }       
  118.         if(k==1)
  119.         {
  120.                 switch (num)          //控制對應LED燈亮
  121.                 {
  122.                         case 1:led_1=0;
  123.                                 break;
  124.                         case 2:led_2=0;
  125.                                 break;
  126.                         case 3:led_3=0;
  127.                                 break;
  128.                         case 4:led_4=0;
  129.                                 break;
  130.                         case 5:led_5=0;
  131.                                 break;
  132.                         case 6:led_6=0;
  133.                                 break;
  134.                         case 7:led_7=0;
  135.                                 break;
  136.                         case 8:led_8=0;
  137.                                 break;
  138.                 }
  139.         }
  140.         else
  141.         {
  142.                 switch (num)          //控制對應LED燈滅
  143.                 {
  144.                         case 1:led_1=1;
  145.                                 break;
  146.                         case 2:led_2=1;
  147.                                 break;
  148.                         case 3:led_3=1;
  149.                                 break;
  150.                         case 4:led_4=1;
  151.                                 break;
  152.                         case 5:led_5=1;
  153.                                 break;
  154.                         case 6:led_6=1;
  155.                                 break;
  156.                         case 7:led_7=1;
  157.                                 break;
  158.                         case 8:led_8=1;
  159.                                 break;
  160.                 }       
  161.         }
  162. }
  163. /********************************************************
  164. 函數名稱:void scan(void)
  165. 函數作用:按鍵檢測函數
  166. 參數說明:
  167. ********************************************************/
  168. void scan(void)
  169. {       
  170.         uchar qiangda_num=0;
  171.         //主持人鍵
  172.         if(key_zhu==0)                   //按鍵按下
  173.         {
  174.                 delayms(7);                   //顯示消抖
  175.                 if(key_zhu==0&&zhu_f!=2&&qiang_f==0&&wan_f==0)//判斷是否有人犯規或者搶答是否開始或者搶答是否完成
  176.                 {
  177.                         zhu_f++;           //比賽階段標記+1
  178.                         if(zhu_f==2)   //比賽正式開始
  179.                         {
  180.                                 TR0=1;           //比賽開始,開啟定時
  181.                                 wan_f=0;   //清除比賽完成標志
  182.                                 bajing();  //提示比賽開始
  183.                         }                       
  184.                 }
  185.                 else
  186.                         if(key_zhu==0&&qiang_f==1)   //判斷是否有人犯規
  187.                         {
  188.                                 buzz=1;                                         //清除報警
  189.                                 qiang_f=0;                                 //清除搶答標志
  190.                                 number=0;                                 //清除選手編號
  191.                                 time=EEPROM_read(0x2000);//重新讀取存儲的搶答總時長
  192.                                 led_kongzhi(0,0,0);
  193.                         }
  194.                         else                                                 
  195.                                 if(key_zhu==0&&wan_f==1) //判斷是否有人完成
  196.                                 {
  197.                                         buzz=1;                                 //清除報警
  198.                                         wan_f=0;                         //清除完成標志
  199.                                         number=0;                         //清除選手編號
  200.                                         time=EEPROM_read(0x2000);//重新讀取存儲的搶答總時長
  201.                                         led_kongzhi(0,0,0);
  202.                                 }
  203.                                 else
  204.                                         if(key_zhu==0&&zhu_f==2) //暫停比賽
  205.                                         {
  206.                                                 TR0=0;                                 //關閉定時
  207.                                                 zhu_f=1;                         //重新回到設置比賽時間階段
  208.                                                 bajing();                         //提示暫停比賽
  209.                                         }
  210.                 while(!key_zhu);//檢測按鍵松開
  211.         }

  212.         //加值鍵,支持連按
  213.         if(key_jia==0&&zhu_f==1&&qiang_f==0)         //判斷是否在設置倒計時時間
  214.         {
  215.                 delayms(7);                                                         //延時消抖
  216.                 if(key_jia==0)                                                 //再次判斷按鍵按下
  217.                 {
  218.                         if(time<99)                             //比賽時間最大值99S
  219.                                 time++;                                                  //比賽時間+1S
  220.                         EEPROM_delete(0x2000);                         //擦除EEPROM煽區
  221.                         EEPROM_write(0x2000,time);                 //寫入【比賽時間】數據保存
  222.                         display(time/10,time%10,10,0);         //顯示設置比賽時間
  223.                 }
  224.         }

  225.         //減值鍵,支持連按
  226.         if(key_jian==0&&zhu_f==1&&qiang_f==0)         //判斷是否在設置倒計時時間
  227.         {
  228.                 delayms(7);                                                         //延時消抖
  229.                 if(key_jian==0)                                                 //再次判斷按鍵按下
  230.                 {
  231.                         if(time!=0)                                                   //比賽時間最小值0S
  232.                                 time--;                                 //比賽時間-1S
  233.                         EEPROM_delete(0x2000);                         //擦除EEPROM煽區
  234.                         EEPROM_write(0x2000,time);                 //寫入【比賽時間】數據保存
  235.                         display(time/10,time%10,10,0);         //顯示設置比賽時間
  236.                 }
  237.         }
  238.         //選手按鍵
  239.         qiangda_num=qianda();
  240.         if(qiangda_num!=0)                              //判斷是否有選手按下按鍵
  241.         {
  242.                 if(zhu_f!=2&&qiang_f==0&&wan_f==0)//如果還沒有開始搶答時按下
  243.                 {
  244.                         zhu_f=1;
  245.                         buzz=0;                                                  //蜂鳴器報警
  246.                         qiang_f=1;                                          //搶答犯規標記
  247.                         number=qiangda_num;
  248.                         led_kongzhi(number,1,0);
  249.                 }
  250.                 else
  251.                         if(zhu_f==2&&wan_f==0)                         //在開始搶答時按下
  252.                         {
  253.                                 wan_f=1;                                         //標記搶答完成
  254.                                 zhu_f=0;                                         //主持人標記復位
  255.                                 TR0=0;                                                 //關閉倒計時定時器
  256.                                 number=qiangda_num;
  257.                                 led_kongzhi(number,1,0);
  258.                                 bajing();                                         //提示有人搶答完成
  259.                         }
  260.         }  
  261. }

  262. /*********************************************************
  263. 函數名稱:void main()
  264. 函數作用:主函數函數
  265. 參數說明:
  266. *********************************************************/
  267. void main()
  268. {
  269.         uchar i=0;
  270.         T0_init();                                                 //定時器初始化
  271.         if(key_jian==0)          
  272.         {
  273.                 delayms(100);
  274.                 if(key_jian==0)
  275.                 {
  276.                         EEPROM_delete(0x2000);         //擦除EEPROM煽區
  277.                         EEPROM_write(0x2000,30); //寫入【比賽時間】數據保存
  278.                 }
  279.         }
  280.         time=EEPROM_read(0x2000);                 //讀取存儲的【比賽時間】數據

  281.         for(i=0;i<9;i++)
  282.         {
  283.                 led_kongzhi(i,1,1);
  284.                 delayms(10);       
  285.         }

  286.         for(i=9;i>0;i--)
  287.         {
  288.                 led_kongzhi(i-1,0,1);
  289.                 delayms(10);       
  290.         }
  291.         led_kongzhi(0,0,0);
  292.         while(1)                                                 //死循環
  293.         {
  294.                 scan();                                                 //按鍵檢測處理
  295.                 if(zhu_f==0&&wan_f==0)                 //判斷是否還沒進入比賽階段
  296.                         display(10,10,10,10);         //未進入,顯示"----"
  297.                 else
  298.                         if(zhu_f==0&&wan_f==1)         //進入比賽階段,并且處于設置比賽時間
  299.                                 display(time/10,time%10,10,number);//顯示設置比賽時間
  300.                         else
  301.                                 if(zhu_f!=0)                 
  302.                                 {               
  303.                                         if(qiang_f==1)   //設有人犯規
  304.                                                 display(11,11,10,number);                   //顯示FF-犯規編號
  305.                                         else
  306.                                                 display(time/10,time%10,10,number);//顯示比賽剩余時間和搶答者編號,未搶答顯示0
  307.                                 }               
  308.         }
  309. }
復制代碼

所有資料51hei提供下載:
八路搶答器.rar (905.64 KB, 下載次數: 748)



評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏24 分享淘帖 頂2 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2018-12-29 22:40 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:555857 發表于 2019-6-11 19:52 | 只看該作者
你好,有那個原理圖的源文件是要Altium Designer才能打開吧

51hei.png (16.04 KB, 下載次數: 167)

51hei.png
回復

使用道具 舉報

地板
ID:560514 發表于 2019-6-12 02:26 來自手機 | 只看該作者
不錯呦,加油加油
回復

使用道具 舉報

5#
ID:555254 發表于 2019-6-12 20:07 | 只看該作者
不錯,可以吆
回復

使用道具 舉報

6#
ID:560514 發表于 2019-6-14 02:37 來自手機 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

7#
ID:561196 發表于 2019-6-14 23:42 | 只看該作者
byxiao 發表于 2019-6-14 02:37
好資料,51黑有你更精彩!!!

代碼編譯沒有錯誤嗎?我的顯示有錯誤
回復

使用道具 舉報

8#
ID:568328 發表于 2019-6-20 21:12 | 只看該作者
運行有錯誤嗎
回復

使用道具 舉報

9#
ID:335259 發表于 2019-10-19 17:15 | 只看該作者
謝謝分享
回復

使用道具 舉報

10#
ID:641195 發表于 2019-11-13 21:42 | 只看該作者
原理圖文件用proteus8軟件打不開啊?請問怎么解決呢?
回復

使用道具 舉報

11#
ID:659682 發表于 2019-12-9 21:17 | 只看該作者
感謝大佬分享
回復

使用道具 舉報

12#
ID:659682 發表于 2019-12-9 21:18 | 只看該作者
屏幕不會亮怎么辦
回復

使用道具 舉報

13#
ID:656668 發表于 2019-12-9 23:05 來自手機 | 只看該作者
資料很詳細,值得學習
回復

使用道具 舉報

14#
ID:27825 發表于 2019-12-10 09:03 | 只看該作者
好資料要分享,謝謝
回復

使用道具 舉報

15#
ID:660581 發表于 2019-12-10 14:38 | 只看該作者
admin 發表于 2018-12-29 22:40
好資料,51黑有你更精彩!!!

感謝老鐵,牛逼啊
回復

使用道具 舉報

16#
ID:559822 發表于 2019-12-30 14:40 | 只看該作者
收藏學習下 感謝~
回復

使用道具 舉報

17#
ID:712713 發表于 2020-3-24 14:18 | 只看該作者
你實驗里用的不是AT89CC51嗎,為什么上面介紹的是STC89C51,單片機小白很懵
回復

使用道具 舉報

18#
ID:721251 發表于 2020-4-20 16:46 | 只看該作者
1428006092 發表于 2020-3-24 14:18
你實驗里用的不是AT89CC51嗎,為什么上面介紹的是STC89C51,單片機小白很懵

PROTEUS 里面 AT89c51 就是STC89C51
回復

使用道具 舉報

19#
ID:783325 發表于 2020-6-18 16:35 | 只看該作者
不錯,支持
回復

使用道具 舉報

20#
ID:769869 發表于 2020-6-18 20:40 來自手機 | 只看該作者
你好有原理圖的原文件嗎
回復

使用道具 舉報

21#
ID:783591 發表于 2020-6-18 21:25 來自手機 | 只看該作者
at89c51和at89c52的一樣嗎
回復

使用道具 舉報

22#
ID:786512 發表于 2020-6-22 11:54 | 只看該作者
謝謝分享
回復

使用道具 舉報

23#
ID:781769 發表于 2020-6-27 10:28 | 只看該作者
感謝大佬,不過我在測試中出現問題,主函數里面選手搶答倒計時的部分是不是不完整呀
回復

使用道具 舉報

24#
ID:844250 發表于 2020-11-16 14:59 來自手機 | 只看該作者
1428006092 發表于 2020-3-24 14:18
你實驗里用的不是AT89CC51嗎,為什么上面介紹的是STC89C51,單片機小白很懵

PROTEUS 里面 AT89c51 就是STC89C51
回復

使用道具 舉報

25#
ID:863848 發表于 2020-12-20 23:13 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

26#
ID:865659 發表于 2020-12-23 13:20 | 只看該作者
很好,可以用來學習
回復

使用道具 舉報

27#
ID:870739 發表于 2020-12-30 10:03 | 只看該作者
469497 發表于 2020-6-18 21:25
at89c51和at89c52的一樣嗎

差不多一樣的,c52的存儲大一些相對c51比較大,但一般應用沒什么區別,不過c52貴一些。
回復

使用道具 舉報

28#
ID:910440 發表于 2021-4-26 18:13 | 只看該作者
搞了半天才打開,原來需要下載winrar才能解壓
回復

使用道具 舉報

29#
ID:197229 發表于 2021-4-27 04:09 | 只看該作者

下載的資料 怎么會是這樣呢?

回復

使用道具 舉報

30#
ID:328014 發表于 2021-4-27 05:40 | 只看該作者
bomb1999 發表于 2021-4-27 04:09
下載的資料 怎么會是這樣呢?

你的上一樓有答案,樓主不是用的你那個壓縮軟件壓縮的
回復

使用道具 舉報

31#
ID:925547 發表于 2021-5-23 10:54 | 只看該作者
運行有錯誤嗎
回復

使用道具 舉報

32#
ID:960164 發表于 2021-8-13 10:35 來自手機 | 只看該作者
從何說起——35 發表于 2020-6-18 16:35
不錯,支持

能發一下proteus仿真原理圖給我嗎
回復

使用道具 舉報

33#
ID:92810 發表于 2021-11-2 14:52 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

34#
ID:1010438 發表于 2022-3-14 22:01 | 只看該作者
很好,可以用來學習
回復

使用道具 舉報

35#
ID:1010864 發表于 2022-3-20 09:53 | 只看該作者
想請問一下,為什么仿真里運行時蜂鳴器不響?
回復

使用道具 舉報

36#
ID:1102312 發表于 2023-12-13 12:35 | 只看該作者
469497 發表于 2020-6-18 21:25
at89c51和at89c52的一樣嗎

不一樣 但是區別不大
回復

使用道具 舉報

37#
ID:1105074 發表于 2024-11-16 17:17 | 只看該作者
感謝, 好人一生平安
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕日韩欧美 | 日韩精品在线免费 | 中文字幕在线免费观看 | 玖玖玖av| 91色视频在线观看 | 欧美黄页 | 久久久国产一区 | 免费国产视频在线观看 | 2019天天操 | 日韩一区二区在线视频 | 国产ts人妖另类 | 久久久久香蕉视频 | 国产精品国产三级国产aⅴ中文 | 大象一区| 国产精品久久一区二区三区 | 亚洲毛片在线 | 中文字幕视频免费 | 99只有精品 | 91大神在线资源观看无广告 | 日韩欧美福利视频 | 成人亚洲片 | 毛片久久久 | 精品视频在线观看 | 91精品久久久久久久久99蜜臂 | 国产视频久久久 | 久草在线影 | 久久久久久久一级 | 逼逼视频| 国产精品无码久久久久 | 日韩精品一区二 | 国产精品久久久久久久白浊 | 91伊人 | 成人av电影天堂 | 丝袜 亚洲 另类 欧美 综合 | 亚洲高清视频在线 | 免费v片在线观看 | 国产又色又爽又黄又免费 | 激情五月激情综合网 | 国产特黄一级 | 日韩国产欧美在线观看 | 欧美精品一 |