單片機實現八路搶答器實例分享

2021-03-01 玩轉嵌入式

單片機作為可編程器件,簡化了電路的設計、方便了邏輯設計,從此再也不用使用一大堆電路做硬體邏輯了。拆開任何一件功能稍微複雜一點電子產品,裡邊都可以看到單片機的身影。學會單片機對找工作也很有利,而且待遇還不錯,今天就從實例分享的角度和大家共享一個案例,用單片機來實現一個搶答器。

在電視節目中,經常看到搶答器出現在知識競賽、答題競賽節目中,如江蘇衛視的《一站到底》,搶答器可以準確、公正、直觀、公平的顯示出搶答選手的編號,可以更好的促進各選手之間的競爭意識,營造緊張的搶答氣氛,增加節目的趣味性和觀賞性。

搶答器的設計框圖

搶答器要實現如下功能:搶答功能、顯示功能、倒計時功能、自鎖功能。節目後臺需要控場,擁有搶答器的絕對控制權。功能需求 如下:

開始、結束功能:只有按下開始按鍵後,現場選手才可以開始搶答,否則搶答事件不被處理視為無效;

自鎖、互鎖功能:為了保證搶答的公平性,在開始搶答後,第一個按下搶答的視為有效搶答,產生有效搶答後其他搶答視為無效;

計時、設置功能:後臺/主持人可以設置搶答時間的長短,以倒數秒的方式顯示,增強緊張氣氛;

顯示、聲音功能:用數碼管顯示倒計時秒數,選手搶答成功後顯示搶答者編號和剩餘時間;

在該設計中,按鍵採用機械式的四腿按鍵來實現,按鍵數量10個;顯示採用三位數碼管來實現,兩位顯示時間,一位顯示選手編號;聲音提示用蜂鳴器來實現。核心器件採用51單片機來實現。其功能框圖如下圖所示。

1-搶答器功能框圖

按鍵輸入電路設計

該搶答器設計中總共有10個按鍵,其中8個按鍵用於給用戶搶答用,所代表的編號為1-8,另外兩個按鍵分別為開始鍵和結束鍵,由主持人或者後臺控制。由於8路輸入搶答按鍵具有互鎖功能,所以只要有一個有效輸入後,其他搶答都是無效的,這個功能可以在程序中實現,為了方便程序設計,這裡採用8輸入與非門來實現,所用型號為74LS30,該與非門有8路輸入,1個輸出,功能框圖如下所示。

2-74LS30與非門框圖

8個按鍵作為74LS30的輸入,輸出通過NPN三極體接入51單片機的外部中斷0接口,以中斷的方式實現按鍵功能的檢測,單片機的中斷資源為低電平有效,為了提高電路穩定性在三極體的集電極上加入上拉電阻,以防誤動作。

3-按鍵輸入電路設計

開始和結束兩個按鍵採用獨立式按鍵設計,佔用掉單片機的兩個IO口,程序中採用輪詢來實現。

數碼管顯示電路設計

顯示部分採用數碼管來實現,根據設計要求,兩位用於顯示倒計時時間,最大可以顯示99;一位用於顯示選手編號,故需要3顆數碼管,該設計中採用共陽數碼管來實現,所謂共陽數碼管是指公共端接高電平,段選管腳接低電平後相應的欄位才會被點亮。共陰數碼管正好相反,公共端接低電平,段選管腳接高電平後相應的欄位才會被點亮。數碼管的實物圖如下所示。

4-數碼管實物圖

數碼管的引腳比較多,除了8個段選管腳外,還有公共端/位選引腳,如果用三顆獨立的數碼管可能需要較多單片機引腳資源,為了解決這個問題,本例設計採用74HC595作為數碼管驅動。74HC595是串入並出的移位寄存器,只需要三個引腳就可以控制8個引腳的輸出,而且還可以實現級聯。所以74HC595通常在數碼管驅動和點陣屏中應用比較多。

這三顆數碼管中,分為時間顯示和編號顯示兩組,用到三顆74HC595,其中兩顆級聯用於控制時間顯示的數碼管,總共用到6個單片機的IO口,驅動電路如下圖所示。

5-數碼管驅動電路

蜂鳴器發聲電路設計

需求中提到發聲設計,當有效按鍵事件發生時,蜂鳴器發聲作為提示音,當倒計時進入5秒之內後還沒有人按鍵搶答時,蜂鳴器每隔1秒發聲,製造現場緊張的氣氛,提高節目的觀賞性和娛樂性,增強節目效果。本例中選擇了蜂鳴器,蜂鳴器驅動電路如下圖所示。

6-蜂鳴器驅動電路

由於單片機的IO口驅動能力有限,所以採用三極體來驅動,這裡選用了PNP三極體。三極體驅動蜂鳴器時工作於飽和狀態,為了讓三極體充分飽和,將蜂鳴器接在了三極體的集電極,這個地方初學者在設計電路時要注意。圖中當單片機的IO口輸出低電平時蜂鳴器工作發聲。

搶答器程序設計

該設計使用keil5作為編程環境,涉及到數碼管顯示、按鍵檢測/互鎖、蜂鳴器發聲、定時器等相關功能模塊的程序編寫。程序設計的流程圖如下所示。

7-程序設計流程圖

程序的功能邏輯介紹如下,上電後數碼管顯示FFF字樣,並首先檢測「開始」按鍵是否按下,如果沒有按下開始按鍵則表示搶答未開始。如果按下了開始按鍵,搶答器啟動,秒顯示開始倒計時,有人按下搶答鍵時蜂鳴器發聲、倒計時停止並顯示搶答者編號,整個搶答事件結束,直到主持人/後臺按下結束按鍵後再顯示FFF。如果倒計時進入5秒內,仍未有人搶答,則每個整秒蜂鳴器響一次,直至結束。

以上為程序邏輯設計和程序的流程圖講解,下面介紹各功能模塊的程序設計。

首先介紹數碼管的程序編寫,再編寫程序時,都會預先定義好數碼管的欄位表,根據共陽數碼管和共陰數碼管的不同,其欄位表也是不一樣的,但是兩者是互補的,數碼管可顯示的欄位表如下圖所示。

8-數碼管欄位表

程序代碼如下:

/*共陽數碼管的0-9數字字碼表*/

uchar code seg_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x8e,0xff};

其次是按鍵部分,搶答按鍵採用中斷來實現,開始/結束按鍵採用輪詢實現,部分定義代碼如下所示。

//定義搶答按鍵

sbit KEY_1=P0^0; //1

sbit KEY_2=P0^1; //2

sbit KEY_3=P0^2; //3

sbit KEY_4=P0^3; //4

sbit KEY_5=P0^4; //5

sbit KEY_6=P0^5; //6

sbit KEY_7=P0^6; //6

sbit KEY_8=P0^7; //6

//定義開始/結束按鍵

sbit START = P2^4;

sbit STOP = P2^5;

仿真電路的設計和驗證

在做板子之前,先用Proteus仿真軟體做了仿真。Proteus仿真支持51單片機並可以實現運行程序的功能,當把程序寫好後加載至Proteus即可實現程序的調試,Proteus還可以與Keil軟體實現聯調功能。所設計的仿真電路如下圖所示。

9-仿真電路-初始顯示FFF字樣

在上電初期,顯示「FFF」字樣,前兩個數碼管代表倒計時時間,後一個數碼管代表搶答者的編號。按下開始按鍵後,搶答器開始工作,如下圖所示。

10-搶答成功界面

上圖表示,在倒計時時間還有7秒的時候,5號選手完成了有效搶答,直至主持人/後臺按下結束後再顯示FFF,否則一直顯示該界面。

搶答器的焊接調試

為了實現功能驗證,選擇用萬用板手工焊接實現這個設計。最終的實物圖如下所示:

11-最終實物圖正面

電源供電為DC5V,可以使用電池盒供電,也可以選擇5V輸出的手機充電器供電,導線走在了電路板正面,雖然醜了點,但是方便一點。電路板的反面如下圖所示。

12-最終實物圖背面

反面是用焊錫連接實現的。由於功能不是很複雜,程序寫完後,調試了沒幾次就完成了功能,前文中所描述的功能都實現了。按鍵互鎖的功能也實現了。下圖是通電運行的界面,表示5號搶答者在倒計時28秒的時候搶答成功,這時候其他搶答者的按鍵無效。只有開始或者結束按鍵是其作用的。

13-搶答成功界面

該搶答器的設計雖然是一個很簡單的練手項目,但是卻涉及到了單片機中最常用的外設電路,可以幫助初學者熟悉數碼管、按鍵、蜂鳴器的使用和控制方法。初學者可以藉助這個產品熟悉單片機開發過程中所用的各種軟體和產品開發的流程。

對這個電路進行PCB Layout,設計個外殼就成了一個不錯的產品。還可以增加藍牙模塊或者WiFi模塊,實現電子屏的控制和顯示,再把功能完善一下,就可以用在舞臺上了。

相關焦點

  • 51單片機原理及C語言實例詳解|文末贈書
    本書較為詳細地介紹了單片機的開發方法和步驟,講解了開發工具的使用及基於單片機開發的C語言基礎知識,解讀了51單片機軟硬體資源的應用,歸納總結了單片機資源的通用方法。通過本書的學習,讀者可以快速掌握單片機資源綜合運用的能力。作者具有良好的專業背景和資深的開發經驗。本書既可作為專業教材,也可作為一線開發工程師的參考資料。
  • ARM7單片機輕鬆入門與實踐 — 暢學單片機
    本教程的亮點就是在分析初學者認知規律的基礎上,結合國內重點大學一線教師的教學經驗以及借鑑國外經典教材的寫作手法,對ARM7單片機的應用基礎知識進行系統而翔實的介紹。本課程打破了單片機教學的傳統模式,採取把理論融入到實戰應用中的方法,從ARM7單片機理論細節講解知識中,快速把你帶入到實例應用中去。
  • 18位工程師DIY實例教你玩STM系列的微控制器,快速易上手!
    通過「學中做,做中學」,即DIY的方式由淺入深進入到ST公司的STM32單片機世界中。智能服務終端就是一個基於STM32 的完備系統,涵蓋了室內環境監測、高溫火警GSM 報警、A 卡管理助手、天氣助手、用戶電子帳單、萬年曆、小區意見反饋等功能。
  • 單片機實例分享,自製數字示波器
    對輸出的信號取樣後由 A/D 轉換器實現數位化,模擬信號變成了數字形式存入存儲器,微處理器對存儲器中的數據根據需要進行處理,最終在顯示屏上顯示測量波形和相關的參數,這就是數字存儲示波器的工作過程。數字示波器的電路原理圖如圖22.4所示,下面分別對各單元電路進行介紹。
  • 單片機科普:單片機的IO口不夠用了怎麼辦?如何擴展單片機的IO口
    有很多的晶片都可以實現單片機GPIO口的擴展功能,下面和大家分析幾種常用的擴展方法。1.輸入擴展1-矩陣按鍵對於單片機的按鍵輸入,大學課程裡有專門的講解,按鍵輸入可以分為獨立式按鍵和矩陣式按鍵兩類。獨立式按鍵佔用單片機IO口比較嚴重,而矩陣式按鍵就是利用較少的IO口實現較多的按鍵檢測,也屬於GPIO口擴展的範疇。
  • 51單片機中中斷程序大全(源程序)
    >」獲取單片機相關資料。一起走向智能工業革命時代,單片機DIY、基於c語言/彙編的編程。5:用定時器T0的中斷實現長時間定時#include<reg51.h>  //  包含51單片機寄存器定義的頭文件sbit D1=P2^0;  //將D1位定義為P2.0引腳unsigned char
  • FPGA入門--在FPGA中實現8051單片機
    一天下午,老師要求學生用FPGA做主控去實現某種功能,可已經習慣於C編程的學生們是這麼做的:他們先在FPGA裡面寫入了一個8051單片機,然後在其
  • 安卓手機與51單片機間藍牙通信的實現
    藍牙耳機今天分享下如利用藍牙4.0模塊建立安卓手機和51單片機間的藍牙通信。(1)安卓智慧型手機一部,只用是近幾年的智慧型手機都內嵌藍牙模塊,藍牙4.0及以上(2)任意51單片機最小系統都可使用,如下文連結。
  • 單片機電路設計中的10個難點
    單片機是嵌入式系統的核心元件,使用單片機的電路要複雜得多,但在更改和添加新功能時,帶有單片機的電路更加容易實現,這也正是電器設備使用單片機的原因。那麼在單片機電路的設計中需要注意的難點有哪些?這時可以藉助擴展晶片來實現,比如三八解碼器74HC138來拓展。
  • 單片機的Bootloader,可以實現用戶輕鬆升級程序
    CAN總線來更新程序,用Bootloader實現。其實就是通過上位機把.bin/hex文件以CAN通訊的方式發送給單片機並存儲在規定的Flash中。這個過程與手機端更新APP類似。以STM8單片機為例,該如何實現Bootloader呢?今天和大家分享一下。Bootloader是一段用於更新自身應用軟體並獨立運行的代碼,常被用於升級產品和修復產品bug。
  • 5分鐘實現單片機步進電機控制設計
    單片機模塊主要由MSP430FG4618單片機及外圍濾波、電源管理和晶振等電路組成。MSP430FG4618單片機內部的8 KB RAM和116 KB  Flash滿足控制系統的存儲要求,P1和P2埠在步進電機工作過程中根據按鍵狀態判斷是否跳入中斷服務程序來改變步進電機的工作狀態,USART模塊實現單片機和PC上位機之間的通信,實現PC機對步進電機控制。
  • 單片機、EDA實訓裝置功能及配置
    實驗項目第一部分 單片機軟體編程基礎實驗1、清零實驗2、拆字實驗3、拼字實驗4、數據傳送實驗5、數據排序實驗6、無符號雙字節快速乘法編程實驗第二部分 單片機硬體基礎應用實驗1、單片機I/O口應用實驗2、單片機定時器
  • 單片機keil 常見問題
    >1、模塊內接口:使用如下標誌符:#pragma asm彙編語句#pragma endasm注意:如果在c51程序中使用了彙編語言,注意在keil編譯器中需要激活Properties中的「Generate Assembler SRC File」 和「Assembler SRC File 」兩個選項來個實例吧
  • 跟我學51單片機
    一、本文內容提要本刊第四期介紹了單片機外接鍵盤的原理,並給出了應用實例。
  • 搶答器、電報機原來這麼簡單,輕鬆做一個
    搶答是比賽中最讓人激動緊張的形式之一了,不僅要知識淵博,還要眼疾手快~~爆爆上次收到小朋友留言說,班級舉行知識競賽,因為沒有搶答器,只能舉手搶答,根本分不清誰快誰慢!爆爆就和炸炸商量著,在科學的幫助下,動動手做一個小巧的搶答器,解決小粉絲的煩惱!搶答器還能做電報機,超棒的!
  • 7種常見的51單片機時鐘電路圖
    ,反相放大器的輸入端為XTAL1,輸出端為XTAL2,由該放大器構成的振蕩電路和時鐘電路一起構成了單片機的時鐘方式。根據硬體電路的不同,單片機的時鐘連接方式可分為內部時鐘方式和外部時鐘方式,如下圖所示。
  • 單片機初學者必看
    不過第一次還是很難實現的,最好有一個比較詳細點的教程。2、學會使用下載工具和軟體:把程序燒錄到單片機裡,運行起來,需要動手去操作。3、學會使用調試工具:如有條件,可以學習硬體仿真調試。4、以上可以在學習板上實現,不過以後你要學會自己設計 並製作電路。所以還要學會PRTEL軟體使用。
  • 圖形化編程玩51單片機(十七)-數字鐘
    我們學習單片機的同學們,大家都想用自己學到的單片機知識來做一個有實用價值的電子產品。那麼數字鐘就是最好的首選。1,邏輯思維相對簡單,容易理解,比如:我們都知道60秒=1分鐘;60分鐘=1小時;24小時=1天,;所以,到了24小時清零,再循環就可以了。2,儘管邏輯相對簡單,但要運用我們單片機的多個器件的配合使用。
  • 單片機模塊化編程的原則有哪些
    目前我們在學習和開發單片機時廣泛採用 c 語言進行編程,當我們開發的單片機項目較小時,或者我們所寫的練習程序很小時,我們總是習慣於將所有代碼編寫在同一個 c 文件下,由於程序代碼量較少,通常為幾十行或者上百行, 此時這種操作是可行方便的, 也沒有什麼問題。
  • 基於單片機的MP3播放器設計
    系統啟動後, 單片機通過USB 接口晶片CH375, 從U 盤中獲取MP3 格式文件的數據, 並存入片內RAM 進行緩衝, 然後單片機定時將數據從緩衝區送到MP3 音頻解碼晶片VS1003, 實現解碼並輸出音頻信號到耳機或者有源音響輸出。用戶可以通過鍵盤實現 「啟動」、 「上一曲」、 「下一曲」、「音量控制」及 停止!等功能, 並將播放狀態信息通過LCD 顯示。系統框圖如圖1 所示。