引言單片機的出現方便了人們的生活,所以單片機的使用也使搶答器電路更加簡單和實用。但是傳統搶答器具有以下問題有待解決:
- 有的傳統搶答器由數字電路組成,在使用現場會有多名選手或代表團參加比賽,所以會造成布線繁瑣麻煩,現場不美觀等問題;
- 由于傳統搶答器由電子元器件集成制作而成,所以會造成可靠性低,元器件集成工藝復雜,花費比較高等麻煩;
3、由于傳統搶答器由數字電路構成,所以可能造成搶答時控制不精確,功能單一等缺陷。
隨著科學技術的發展和普及,各種各樣的競賽越來越多, 其中搶答器的作用也就顯而易見。因此設計一種更易于使用和區分度高的搶答器成了非常迫切的任務。 現在單片機已進入各個領域,以其功耗小、智能化而著稱。所以來利用單片機來設計搶答器便使以上問題得以解決。針對以上情況, 本課程通過Keilc軟件編程,Protues軟件仿真,設計出以AT89C51單片機為核心的八位搶答器,與晶振、數碼管、蜂鳴器等通過外圍接口實現的八路搶答器,利用單片機的延時電路、按鍵復位電路、時鐘電路、定時器/計數器等,設計八路搶答器不僅具有實時顯示選手的號碼和搶答時間的功能,同時還利用匯編語言,使其實現復位,定時和報警功能。本次設計的系統實用性強,操作簡單,擴展功能強。
1 設計背景1.1課題背景各種知識競賽、文娛活動的廣泛開展,使搶答器成了必不可少的電子設備,它為參賽選手提供了公正、客觀、快速的裁決,已逐漸發展成為一種成型的電子產品,但市面上所售搶答器價格一般較貴且多為小規模集成電路構成,其性能單一,工作起來不夠理想。本文介紹了通過Keilc軟件編程,及Protues軟件仿真,模擬出一種以AT89C51單片機為核心的智能搶答器,它充分利用了單片機系統的優點,具有結構簡單、功能強大、可靠性好、成本較低的特點。它能根據不同的搶答輸入信號,經過單片機的控制處理并產生不同的與輸入信號相對應的輸出信號,最后通過液晶顯示屏顯示相應的路數和答題時間等。
1.2設計要求本設計主要是介紹了單片機控制下的八路智能搶答器系統,詳細介紹了其硬件和軟件設計,并對其各功能模塊做了詳細介紹,其主要功能和指標如下:
(1)同時供8名選手或8個代表隊比賽,分別用8個按鈕表示。
(2)設置系統清除開關S和搶答控制開關S,該開關由主持人控制。
(3)搶答器具有鎖存與顯示功能。即選手按動按鈕,鎖存相應的編號,并在數碼管上顯示選手號碼。并且優先搶答選手的編號一直保持到主持人將系統清除為止。
(4)搶答器具有定時搶答功能,且一次搶答的時間由主持人設定。
(5)當主持人啟動“開始”鍵后,定時器進行減計時。參賽選手在設定的時間內進行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,并保持到主持人將系統清除為止。如果定時時間已到,無人搶答,本次搶答無效,定時顯示器上顯示00。
2 8位競賽搶答器系統簡介
2.1系統設計原理
該搶答器系統的硬件設計是以單片機為中心控制模塊,采用模塊化設計的八路搶答器,具有四個模塊,分別為:按鍵輸入模塊、顯示模塊、時鐘與復位模塊、核心控制模塊。
2.2系統組成按鍵輸入模塊共有10個按鍵,分為搶答按鍵和控制按鍵。搶答按鍵共有八個,分別為S0―S7,供搶答選手進行搶答使用,P1.0-P1.7口為八個按鍵搶答信號的輸入口,低電平有效。控制按鍵有2個,分別為S8與S9,S8和S9分別為“清除/設置時間”和“開始鍵”, 其對應的I∕O接口分P2.0與P2.1
顯示模塊本系統采用七段數碼管顯示搶答選手及時間。
時鐘與復位模塊包括時鐘電路和復位電路,單片機的最小系統就是由時鐘電路、復位電路、電源電路及單片機構成。單片機的時鐘信號用來提供單片機片內各種操作的時間基準,單片機的時鐘信號通常用兩種電路形式得到:內部振蕩方式和外部振蕩方式。復位操作則使單片機的片內電路初始化,使單片機從一種確定的初態開始運行。根據應用的要求,復位操作通常有兩種基本形式:上電復位或開關復位。當5l系列單片機的復位引腳RST(全稱RESET)出現2個機器周期以上的高電平時,單片機就執行復位操作。如果RST持續為高電平,單片機就處于循環復位狀態。
核心控制模塊就是人們所謂的CPU,它是整個系統的總控制部分,本系統的核心控制模塊為51系列的單片機,只有我們通過軟件程序的編寫,并將程序寫入單片機,該系統才會正確的工作。
3 系統硬件設計3.1主控制器選擇主控制器選擇即為單片機的選擇,單片機實際上就是把CPU、RAM、ROM、定時器/計數器、I/O接口電路等微型機的主要部件集成在一塊芯片上,因此稱之為單片機。
AT89C51單片機簡介:
AT89C51單片機主要有以下部件構成:八位微處理器CPU、振蕩電路、總線控制部件、中斷控制部件、片內Flash存儲器、片內RAM、并行I/O接口、定時器和串行I/O接口。AT89C51單片機內部由CPU、4KB的FPEROM ,128B的RAM,兩個16位的定時/計數器T0和T1,4個8位的I/O端P0、P1、P2、P3等組成。單片微機內部最核心的部分是CPU,CPU按其功能可分為運算器和控制器兩部分。控制器由程序計數器PC、指令儲存器、指令譯碼器、實時控制與條件轉移邏輯電路等組成。它的功能是對來自存儲器中的指令進行譯碼,通過實時控制電路,在規定的時刻發出各種操作所需的內部和外部的控制信號,使各部分協調工作,完成指令所規定的操作。運算器由算術邏輯器部件ALU、累加器ACC、暫存器、程序狀態字寄存器PSW,BCD碼運算調整電路等組成。為了提高數據處理和位操作功能,片內增加了一個通用寄存器B和一些專用寄存器,還增加了位處理邏輯電路的功能。
AT89C51引腳圖如圖3-1所示。
圖3-1 引腳圖
P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8個TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。
P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。
P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。
P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口,同時為閃爍編程和編程校驗接收一些控制信號。
RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。
ALE∕P:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。
PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次PSEN有效。但在訪問外部數據存儲器時,這兩次有效的PSEN信號將不出現。
EA/VPP:當保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,EA/VPP將內部鎖定為RESET;當EA/VPP端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。
XTAL2:來自反向振蕩器的輸出。
3.2 數碼管動態顯示電路在單片機的應用系統中,顯示器是最常見的輸出設備,也是人機對話必不可少的部分。顯示器按其顯示形式分為分段式顯示器、點陣式顯示器和條圖(光柱)式顯示器。顯示器可用于數字、符號、文字、圖形和光柱顯示。七段數碼管顯示器是單片機開發中常用的輸出器件。它是由若干個發光二極管組成的,當發光二極管導通時,相應的一個點或一個筆畫發亮。控制不同組合的二極管導通,就能顯示出各種字符。 常用的LED顯示屏有7段式和“米”字段之分,7字段單個數碼管內共有八只發光二極管,7只為字段,可組成字形,第八個為小數點。故單個管有人稱為7段數碼管顯示,也有人稱為8段顯示。7段數碼顯示管內部結構如圖3-2所示。
圖3-2 內部結構圖
顯示屏外形尺寸如圖3-3所示。
圖3-3顯示屏的外形尺寸
顯示模塊電路連接圖如圖3-4所示:
圖3-4顯示模塊電路連接圖
3.3 8位競賽搶答器與單片機的接口電路圖 AT89C51單片機P1.0~P1.7端口分別與S0~S7按鈕相連對應8個不同的選手的搶答按鍵。選手通過搶答按鍵進行搶答,單片機接收信號后內部進行處理并在顯示屏上顯示選手編號。內部進行鎖存。如圖3-5所示。
圖3-5 8位競賽搶答器與單片機的接口電路圖
3.4時鐘電路
單片機必須在時鐘的驅動下才能工作。AT89C51單片機的時鐘產生方法有兩種:內部時鐘方式和外部時鐘方式。無論何種形式,都需要外部附加電路,產生時鐘脈沖。
外部時鐘方式就是直接將外部的振蕩脈沖通過XTALl或XTAL2接入單片機,外部時鐘方式多用于多機系統,以便各個單片機能夠同時工作。對外部震蕩信號無特殊要求,但需保證脈沖寬度不小于20ns,且頻率應低于單片機所支持的最高頻率。
內部時鐘方式就是利用單片機芯片內部的振蕩器,通過在引腳XTALl和XTAL2兩端跨接晶體振蕩器,構成穩定的自激振蕩器的方法,再由獲得的自激振蕩器發出穩定的脈沖,直接送入芯片內部的時鐘電路的方式。跨接的晶體振蕩器如果已經起振,則會向XTAL2引腳上輸出一定幅值的正弦波。自激振蕩器的頻率取決于晶體振蕩器的頻率,常見的晶體振蕩器頻率有6MHz和12MHz。AT89C52單片機的時鐘頻率最高可為24Mz。
本系統中采用的是內部時鐘方式。時鐘電路如圖3-6所示。
圖3-6時鐘電路圖
從時鐘電路的示意圖中可以看到,單片機所跨接的晶體振蕩器旁邊還有兩個電容器C8和C9。C8和C9被稱為諧振電容,主要作用有兩點:一是可以促使單片機系統快速起振;二是C8、C9具有對頻率進行微調作用,有利于單片機系統振蕩頻率的穩定,維持單片機的正常運行。諧振電容的容值選擇,與所用的晶體振蕩器的頻率值有關。晶體振蕩器的振蕩頻率越高,相應的諧振電容的容值也要提高。二者如果配合的好,可以發揮諧振電容的積極作用。反之,自激振蕩器頻率的穩定性將受到影響。經過大量的實際應用,晶體振蕩器的頻率與諧振電容的容值之間形成了一定的固定搭配。例如:當晶體振蕩器的頻率為12MHz時,諧振電容的容值一般為30pF左右。
確定系統中晶體振蕩器的頻率,我認為與具體的應用有關。理論上當然希望單片機的運算速度越快越好,即晶體振蕩器的頻率越高越好。但是,在有些情況下,單片機的外圍設備的速度無法匹配單片機的運行速度。為了節約成本,可以選擇振蕩頻率較低的晶體振蕩器。基于這種考慮,本文中的晶體振蕩頻率設計為12MHz,諧振電容的容值選定為30pF。
單片機在工作時,由內部振蕩器產生或由外直接輸入的送至內部控制邏輯單元的時鐘信號的周期稱為時鐘周期。其大小是時鐘信號頻率的倒數,常用T=1/fosc表示。圖中時鐘頻率為12MHz,即fosc=12MHz,則時鐘周期為1/12µs。此電路在加電大約延遲10ms后振蕩器起振,在XTAL2引腳產生幅度為3V左右的正弦波時鐘信號。
為了減小寄生電容,更好地保證振蕩器穩定、可靠地工作。在設計電路板時,晶體振蕩器和諧振電容的位置應盡可能地靠近單片機的XTALl和XTAL2引腳 。
3.5復位電路
使CPU進入初始狀態,從0000H地址開始執行程序的過程叫系統復位。單片機本身不能自動進行復位,必須配合相應的外部復位電路才能實現。從實現系統復位的方法來看,系統復位可分為硬件復位和軟件復位。
硬件復位必須通過CPU外部的硬件電路給CPU的RESET端加上足夠時間的高電位才能實現。上電復位,人工按鈕復位和硬件看門狗復位均為硬件復位。硬件復位后,各專用寄存器的狀態均被初始化,且對片內通用寄存器的內容沒有影響。但是,硬件復位還能自動清除中斷激活標志,使中斷系統能夠正常工作,這樣一個事實卻容易為不少編碼人員所忽視。
軟件復位就是用一系列指令來模擬硬件復位功能,最后通過轉移指令使程序從0000H地址開始執行。對各專用寄存器的復位操作是容易的,也沒有必要完全模擬,可根據實際需要去主程序初始化過程中完成。而對中斷激活標志的清除工作常被遺忘,因為它沒有明確的位地址可供編程。有的編程人員用020000(LJMP 0000H)作為軟件陷阱,認為直接轉向0000H地址就完成了軟件復位,就是這類錯誤的典型代表。軟件復位是使用軟件陷阱和軟件看門狗后必須進行的工作,這時程序出錯完全有可能發生在中斷子程序中,中斷激活標志已置位,它將阻止同級中斷響應。由于軟件看門是高級中斷,它將阻止說要中斷響應,由此可見清除中斷激活標志的重要性。
單片機系統在啟動運行時,首先完成的復位操作,即上電復位。其目的是使CPU和系統中其他部件都處于一個確定的初始狀態,并從這個狀態開始工作。復位很重要,單片機有多種復位方式。這里僅介紹上電復位和按鍵復位這兩種常用的復位方式。
上電復位常用的方法是使用電容器。利用電容器的充電特性達到滿足接通電源后,單片機實現自動復位的要求。
單片機的第9腳RST為硬件復位端,只要將該端持續4個機器周期的高電平即可實現復位,復位后單片機的各狀態都恢復到初始化狀態,其電路圖如圖3-7所示。
圖3-7復位電路
在電路圖中,電容的的大小是10uF,電阻的大小是10k。所以根據公式,可以算出電容充電到電源電壓的0.7倍(3.5V),需要的時間是10K*10uF=0.1S。也就是說在電腦啟動的0.1S內,電容兩端的電壓時在0-3.5V增加。這個時候10K電阻兩端的電壓為從5-1.5V減少(串聯電路各處電壓之和為總電壓)。所以在0.1S內,RST引腳所接收到的電壓是5V-1.5V。在5V正常工作的52單片機中小于1.5V的電壓信號為低電平信號,而大于1.5V的電壓信號為高電平信號。所以在開機0.1S內,單片機系統自動復位(RST引腳接收到的高電平信號時間為0.1S左右)。
在單片機啟動0.1S后,電容C兩端的電壓持續充電為5V,這是時候10K電阻兩端的電壓接近于0V,RST處于低電平所以系統正常工作。當按鍵按下的時候,開關導通,這個時候電容兩端形成了一個回路,電容被短路,所以在按鍵按下的這個過程中,電容開始釋放之前充的電量。隨著時間的推移,電容的電壓在0.1S內,從5V釋放到變為了1.5V,甚至更小。根據串聯電路電壓為各處之和,這個時候10K電阻兩端的電壓為3.5V,甚至更大,所以RST引腳又接收到高電平。單片機系統自動復位。
復位電路的原理是單片機RST引腳接收到2uS以上的電平信號,只要保證電容的充放電時間大于2uS,即可實現復位,所以電路中的電容值是可以改變的。值得注意的是,在設計當中使用到了硬件復位和軟件復位兩種功能,軟復位實際上就是當程序執行完畢之后,將程序指針通過一條跳轉指令讓它跳轉到程序執行的起始地址。
3.6系統總體電路圖
系統總體電路圖如圖3-8所示。
本設計主要是介紹了單片機控制下的8路競賽搶答器系統,同時供8名選手或8個代表隊比賽,分別用8個按鈕S0~ S7表示。設置一個系統清楚和搶答控制開關S,該開關由主持人控制。搶答器具有鎖存與顯示功能。即選手按動按鈕,鎖存相應的編號,并在數碼管上顯示選手號碼。并且優先搶答選手的編號一直保持到主持人將系統清除為止。搶答器具有定時搶答功能,且一次搶答的時間由主持人設定。(如本次試驗設定為50s)當主持人啟動“開始”鍵后,定時器進行減計時,同時揚聲器發出短暫的聲響,聲響持續的時間為0.5s左右。參賽選手在設定的時間內進行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,并保持到主持人將系統清除為止。如果定時時間已到,無人搶答,本次搶答無效,系統報警并禁止搶答,定時顯示器上顯示00。
圖3-8系統總體電路圖
4 程序設計
4.1系統運行結果
8位競賽搶答器在正常工作的情況下,首先對控制系統進行初始化,然后進行鍵盤掃描,判斷主持人是否按下了“開始搶答”按鍵,如果按鍵沒有按下,則選手無法搶答;如果“開始搶答”按鍵按下則執行倒計時子程序和顯示子程序,并調正常搶答處理子程序,如果。其中倒計時程序包括搶答倒計時和回答倒計時。涉及的程序框圖如圖4-1,4-2,4-3所示。
圖4-1 主程序流程圖

定時器T1用于倒計時,每次中斷為50ms,當計數標志為20時即為一秒,顯示數字減一。其流程圖如下:
圖4-2 倒計時中斷流程圖
圖4-3主程序流程圖詳細介紹
4.2系統分析
由于這次的課設我們選擇了用AT89C51單片機來設計設計搶答器,很多東西都是臨時學的,像Proteus仿真軟件的使用以及keil軟件的使用,還有各種硬件的選擇和區分。我通過查資料和搜集有關的文獻,學習使用各種軟件及焊接電路板,培養了自學能力和動手能力。在以往的傳統的學習模式下,我們可能會記住很多的書本知識,但是通過課程設計,我們學會了如何將學到的知識轉化為自己的東西,并且由原先的被動的接受知識轉換為主動的尋求知識,這可以說是學習方法上的一個很大的突破。
對于單片機設計,其硬件電路是比較簡單的,主要是解決程序設計中的問題。而程序設計是一個很靈活的東西,它反映了你解決問題的邏輯思維和創新能力。它才是一個設計的靈魂所在。因此在整個設計過程中大部分時間是用在程序上面的。很多子程序是可以借鑒書本上的,但怎樣銜接各個子程序才是關鍵的問題所在,這需要對單片機的結構很熟悉。因此可以說單片機的設計是軟件和硬件的結合,二者是密不可分的。通過這次課程設計我也發現自己的很多不足之處。在設計過程中我發現自己考慮問題很不全面,自己的專業知識掌握的很不牢固,所掌握的計算機應用軟件還不夠多,我希望自己的這些不足之處能在今后的學習中得到改善。我的設計也還存在著一些缺陷,有待于在將來設計中進一步提高,在此懇請老師批評指正。這次設計也讓我懂得細節決定成敗,在以后的設計中我會嚴格吸取教訓,做的更好!