找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 27063|回復(fù): 19
收起左側(cè)

八位競賽搶答器的單片機課程設(shè)計 仿真+源碼+論文

  [復(fù)制鏈接]
ID:253682 發(fā)表于 2017-11-26 10:21 | 顯示全部樓層 |閱讀模式
Keilc課程設(shè)計

成績評定表
學(xué)生姓名
賈超
班級學(xué)號
140302*
專  業(yè)
測控
課程設(shè)計題目
八位競賽搶答器的設(shè)計



組長簽字:

成績

日期

             2017年  月  日


課程設(shè)計任務(wù)書
學(xué)  院
自動化與電氣工程
專 業(yè)
測控技術(shù)與儀器
學(xué)生姓名
賈超
班級學(xué)號
1403020313
課程設(shè)計題目
八位競賽搶答器的設(shè)計

實踐教學(xué)要求與任務(wù):
通過本課程設(shè)計使學(xué)生進一步鞏固《KeilC程序設(shè)計》的基本概念、理論、分析方法和實現(xiàn)方法;增強學(xué)生軟件編程實現(xiàn)能力和解決實際問題的能力。
1、熟悉所確定的題目從問題需求,數(shù)據(jù)結(jié)構(gòu),程序結(jié)構(gòu),難點及關(guān)鍵技術(shù)等方面進行分析,形成系統(tǒng)的設(shè)計方案;
2、根據(jù)方案設(shè)計硬件電路;
3、軟件編程并調(diào)試;
4、完成文檔整理,按照軟件工程的要求完成設(shè)計論文;
5、通過答辯的形式對程序的功能進行評價與驗收。


工作計劃與進度安排:

第18周(12月26日-1月4日):布置設(shè)計任務(wù),查資料,完成總體設(shè)計框架,完善設(shè)計內(nèi)容,系統(tǒng)調(diào)試,驗收答辯。



指導(dǎo)教師:
   2017年  月  日
專業(yè)負責(zé)人:
2017 年  月  日
學(xué)院教學(xué)副院長:
2017 年  月  日


Keilc課程設(shè)計
目錄
引言
1  設(shè)計背景
1.1課題背景
1.2設(shè)計要求
2  8位競賽搶答器系統(tǒng)簡介
2.1系統(tǒng)設(shè)計原理
2.2系統(tǒng)組成
3  系統(tǒng)硬件設(shè)計
3.1主控制器選擇
3.2 數(shù)碼管動態(tài)顯示電路
3.3 8位競賽搶答器與單片機的接口電路圖
3.4時鐘電路
3.5復(fù)位電路
3.6系統(tǒng)總體電路圖
4  程序設(shè)計
4.1系統(tǒng)運行結(jié)果
4.2系統(tǒng)分析
附錄:源程序代碼            
參考文獻

引言

單片機的出現(xiàn)方便了人們的生活,所以單片機的使用也使搶答器電路更加簡單和實用。但是傳統(tǒng)搶答器具有以下問題有待解決:

  • 有的傳統(tǒng)搶答器由數(shù)字電路組成,在使用現(xiàn)場會有多名選手或代表團參加比賽,所以會造成布線繁瑣麻煩,現(xiàn)場不美觀等問題;
  • 由于傳統(tǒng)搶答器由電子元器件集成制作而成,所以會造成可靠性低,元器件集成工藝復(fù)雜,花費比較高等麻煩;

    3、由于傳統(tǒng)搶答器由數(shù)字電路構(gòu)成,所以可能造成搶答時控制不精確,功能單一等缺陷。

隨著科學(xué)技術(shù)的發(fā)展和普及,各種各樣的競賽越來越多, 其中搶答器的作用也就顯而易見。因此設(shè)計一種更易于使用和區(qū)分度高的搶答器成了非常迫切的任務(wù)。 現(xiàn)在單片機已進入各個領(lǐng)域,以其功耗小、智能化而著稱。所以來利用單片機來設(shè)計搶答器便使以上問題得以解決。針對以上情況, 本課程通過Keilc軟件編程,Protues軟件仿真,設(shè)計出以AT89C51單片機為核心的八位搶答器,與晶振、數(shù)碼管、蜂鳴器等通過外圍接口實現(xiàn)的八路搶答器,利用單片機的延時電路、按鍵復(fù)位電路、時鐘電路、定時器/計數(shù)器等,設(shè)計八路搶答器不僅具有實時顯示選手的號碼和搶答時間的功能,同時還利用匯編語言,使其實現(xiàn)復(fù)位,定時和報警功能。本次設(shè)計的系統(tǒng)實用性強,操作簡單,擴展功能強。


1  設(shè)計背景1.1課題背景

各種知識競賽、文娛活動的廣泛開展,使搶答器成了必不可少的電子設(shè)備,它為參賽選手提供了公正、客觀、快速的裁決,已逐漸發(fā)展成為一種成型的電子產(chǎn)品,但市面上所售搶答器價格一般較貴且多為小規(guī)模集成電路構(gòu)成,其性能單一,工作起來不夠理想。本文介紹了通過Keilc軟件編程,及Protues軟件仿真,模擬出一種以AT89C51單片機為核心的智能搶答器,它充分利用了單片機系統(tǒng)的優(yōu)點,具有結(jié)構(gòu)簡單、功能強大、可靠性好、成本較低的特點。它能根據(jù)不同的搶答輸入信號,經(jīng)過單片機的控制處理并產(chǎn)生不同的與輸入信號相對應(yīng)的輸出信號,最后通過液晶顯示屏顯示相應(yīng)的路數(shù)和答題時間等。

1.2設(shè)計要求

本設(shè)計主要是介紹了單片機控制下的八路智能搶答器系統(tǒng),詳細介紹了其硬件和軟件設(shè)計,并對其各功能模塊做了詳細介紹,其主要功能和指標(biāo)如下:

    (1)同時供8名選手或8個代表隊比賽,分別用8個按鈕表示。

(2)設(shè)置系統(tǒng)清除開關(guān)S和搶答控制開關(guān)S,該開關(guān)由主持人控制。

(3)搶答器具有鎖存與顯示功能。即選手按動按鈕,鎖存相應(yīng)的編號,并在數(shù)碼管上顯示選手號碼。并且優(yōu)先搶答選手的編號一直保持到主持人將系統(tǒng)清除為止。

    (4)搶答器具有定時搶答功能,且一次搶答的時間由主持人設(shè)定。

    (5)當(dāng)主持人啟動“開始”鍵后,定時器進行減計時。參賽選手在設(shè)定的時間內(nèi)進行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,并保持到主持人將系統(tǒng)清除為止。如果定時時間已到,無人搶答,本次搶答無效,定時顯示器上顯示00。


2  8位競賽搶答器系統(tǒng)簡介

2.1系統(tǒng)設(shè)計原理

該搶答器系統(tǒng)的硬件設(shè)計是以單片機為中心控制模塊,采用模塊化設(shè)計的八路搶答器,具有四個模塊,分別為:按鍵輸入模塊、顯示模塊、時鐘與復(fù)位模塊、核心控制模塊。

2.2系統(tǒng)組成

按鍵輸入模塊共有10個按鍵,分為搶答按鍵和控制按鍵。搶答按鍵共有八個,分別為S0―S7,供搶答選手進行搶答使用,P1.0-P1.7口為八個按鍵搶答信號的輸入口,低電平有效。控制按鍵有2個,分別為S8與S9,S8和S9分別為“清除/設(shè)置時間”和“開始鍵”, 其對應(yīng)的I∕O接口分P2.0與P2.1
    顯示模塊本系統(tǒng)采用七段數(shù)碼管顯示搶答選手及時間。

時鐘與復(fù)位模塊包括時鐘電路和復(fù)位電路,單片機的最小系統(tǒng)就是由時鐘電路、復(fù)位電路、電源電路及單片機構(gòu)成。單片機的時鐘信號用來提供單片機片內(nèi)各種操作的時間基準(zhǔn),單片機的時鐘信號通常用兩種電路形式得到:內(nèi)部振蕩方式和外部振蕩方式。復(fù)位操作則使單片機的片內(nèi)電路初始化,使單片機從一種確定的初態(tài)開始運行。根據(jù)應(yīng)用的要求,復(fù)位操作通常有兩種基本形式:上電復(fù)位或開關(guān)復(fù)位。當(dāng)5l系列單片機的復(fù)位引腳RST(全稱RESET)出現(xiàn)2個機器周期以上的高電平時,單片機就執(zhí)行復(fù)位操作。如果RST持續(xù)為高電平,單片機就處于循環(huán)復(fù)位狀態(tài)。
    核心控制模塊就是人們所謂的CPU,它是整個系統(tǒng)的總控制部分,本系統(tǒng)的核心控制模塊為51系列的單片機,只有我們通過軟件程序的編寫,并將程序?qū)懭雴纹瑱C,該系統(tǒng)才會正確的工作。

3  系統(tǒng)硬件設(shè)計3.1主控制器選擇

主控制器選擇即為單片機的選擇,單片機實際上就是把CPU、RAM、ROM、定時器/計數(shù)器、I/O接口電路等微型機的主要部件集成在一塊芯片上,因此稱之為單片機。   

AT89C51單片機簡介:

AT89C51單片機主要有以下部件構(gòu)成:八位微處理器CPU、振蕩電路、總線控制部件、中斷控制部件、片內(nèi)Flash存儲器、片內(nèi)RAM、并行I/O接口、定時器和串行I/O接口。AT89C51單片機內(nèi)部由CPU、4KB的FPEROM ,128B的RAM,兩個16位的定時/計數(shù)器T0和T1,4個8位的I/O端P0、P1、P2、P3等組成。單片微機內(nèi)部最核心的部分是CPU,CPU按其功能可分為運算器和控制器兩部分?刂破饔沙绦蛴嫈(shù)器PC、指令儲存器、指令譯碼器、實時控制與條件轉(zhuǎn)移邏輯電路等組成。它的功能是對來自存儲器中的指令進行譯碼,通過實時控制電路,在規(guī)定的時刻發(fā)出各種操作所需的內(nèi)部和外部的控制信號,使各部分協(xié)調(diào)工作,完成指令所規(guī)定的操作。運算器由算術(shù)邏輯器部件ALU、累加器ACC、暫存器、程序狀態(tài)字寄存器PSW,BCD碼運算調(diào)整電路等組成。為了提高數(shù)據(jù)處理和位操作功能,片內(nèi)增加了一個通用寄存器B和一些專用寄存器,還增加了位處理邏輯電路的功能。

AT89C51引腳圖如圖3-1所示。

圖3-1 引腳圖


P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8個TTL門電流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。
    P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。
    P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。
    P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口,同時為閃爍編程和編程校驗接收一些控制信號。
    RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間。
    ALE∕P:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。
    PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的PSEN信號將不出現(xiàn)。
EA/VPP:當(dāng)保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,EA/VPP將內(nèi)部鎖定為RESET;當(dāng)EA/VPP端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
    XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。
    XTAL2:來自反向振蕩器的輸出。

3.2 數(shù)碼管動態(tài)顯示電路

在單片機的應(yīng)用系統(tǒng)中,顯示器是最常見的輸出設(shè)備,也是人機對話必不可少的部分。顯示器按其顯示形式分為分段式顯示器、點陣式顯示器和條圖(光柱)式顯示器。顯示器可用于數(shù)字、符號、文字、圖形和光柱顯示。七段數(shù)碼管顯示器是單片機開發(fā)中常用的輸出器件。它是由若干個發(fā)光二極管組成的,當(dāng)發(fā)光二極管導(dǎo)通時,相應(yīng)的一個點或一個筆畫發(fā)亮?刂撇煌M合的二極管導(dǎo)通,就能顯示出各種字符。 常用的LED顯示屏有7段式和“米”字段之分,7字段單個數(shù)碼管內(nèi)共有八只發(fā)光二極管,7只為字段,可組成字形,第八個為小數(shù)點。故單個管有人稱為7段數(shù)碼管顯示,也有人稱為8段顯示。7段數(shù)碼顯示管內(nèi)部結(jié)構(gòu)如圖3-2所示。

圖3-2 內(nèi)部結(jié)構(gòu)圖
顯示屏外形尺寸如圖3-3所示。

圖3-3顯示屏的外形尺寸

顯示模塊電路連接圖如圖3-4所示:



圖3-4顯示模塊電路連接圖

3.3 8位競賽搶答器與單片機的接口電路圖

    AT89C51單片機P1.0~P1.7端口分別與S0~S7按鈕相連對應(yīng)8個不同的選手的搶答按鍵。選手通過搶答按鍵進行搶答,單片機接收信號后內(nèi)部進行處理并在顯示屏上顯示選手編號。內(nèi)部進行鎖存。如圖3-5所示。

圖3-5 8位競賽搶答器與單片機的接口電路圖

3.4時鐘電路

單片機必須在時鐘的驅(qū)動下才能工作。AT89C51單片機的時鐘產(chǎn)生方法有兩種:內(nèi)部時鐘方式和外部時鐘方式。無論何種形式,都需要外部附加電路,產(chǎn)生時鐘脈沖。
    外部時鐘方式就是直接將外部的振蕩脈沖通過XTALl或XTAL2接入單片機,外部時鐘方式多用于多機系統(tǒng),以便各個單片機能夠同時工作。對外部震蕩信號無特殊要求,但需保證脈沖寬度不小于20ns,且頻率應(yīng)低于單片機所支持的最高頻率。
    內(nèi)部時鐘方式就是利用單片機芯片內(nèi)部的振蕩器,通過在引腳XTALl和XTAL2兩端跨接晶體振蕩器,構(gòu)成穩(wěn)定的自激振蕩器的方法,再由獲得的自激振蕩器發(fā)出穩(wěn)定的脈沖,直接送入芯片內(nèi)部的時鐘電路的方式?缃拥木w振蕩器如果已經(jīng)起振,則會向XTAL2引腳上輸出一定幅值的正弦波。自激振蕩器的頻率取決于晶體振蕩器的頻率,常見的晶體振蕩器頻率有6MHz和12MHz。AT89C52單片機的時鐘頻率最高可為24Mz。
   本系統(tǒng)中采用的是內(nèi)部時鐘方式。時鐘電路如圖3-6所示。

圖3-6時鐘電路圖

從時鐘電路的示意圖中可以看到,單片機所跨接的晶體振蕩器旁邊還有兩個電容器C8和C9。C8和C9被稱為諧振電容,主要作用有兩點:一是可以促使單片機系統(tǒng)快速起振;二是C8、C9具有對頻率進行微調(diào)作用,有利于單片機系統(tǒng)振蕩頻率的穩(wěn)定,維持單片機的正常運行。諧振電容的容值選擇,與所用的晶體振蕩器的頻率值有關(guān)。晶體振蕩器的振蕩頻率越高,相應(yīng)的諧振電容的容值也要提高。二者如果配合的好,可以發(fā)揮諧振電容的積極作用。反之,自激振蕩器頻率的穩(wěn)定性將受到影響。經(jīng)過大量的實際應(yīng)用,晶體振蕩器的頻率與諧振電容的容值之間形成了一定的固定搭配。例如:當(dāng)晶體振蕩器的頻率為12MHz時,諧振電容的容值一般為30pF左右。
    確定系統(tǒng)中晶體振蕩器的頻率,我認為與具體的應(yīng)用有關(guān)。理論上當(dāng)然希望單片機的運算速度越快越好,即晶體振蕩器的頻率越高越好。但是,在有些情況下,單片機的外圍設(shè)備的速度無法匹配單片機的運行速度。為了節(jié)約成本,可以選擇振蕩頻率較低的晶體振蕩器。基于這種考慮,本文中的晶體振蕩頻率設(shè)計為12MHz,諧振電容的容值選定為30pF。
    單片機在工作時,由內(nèi)部振蕩器產(chǎn)生或由外直接輸入的送至內(nèi)部控制邏輯單元的時鐘信號的周期稱為時鐘周期。其大小是時鐘信號頻率的倒數(shù),常用T=1/fosc表示。圖中時鐘頻率為12MHz,即fosc=12MHz,則時鐘周期為1/12µs。此電路在加電大約延遲10ms后振蕩器起振,在XTAL2引腳產(chǎn)生幅度為3V左右的正弦波時鐘信號。
    為了減小寄生電容,更好地保證振蕩器穩(wěn)定、可靠地工作。在設(shè)計電路板時,晶體振蕩器和諧振電容的位置應(yīng)盡可能地靠近單片機的XTALl和XTAL2引腳 。

3.5復(fù)位電路

使CPU進入初始狀態(tài),從0000H地址開始執(zhí)行程序的過程叫系統(tǒng)復(fù)位。單片機本身不能自動進行復(fù)位,必須配合相應(yīng)的外部復(fù)位電路才能實現(xiàn)。從實現(xiàn)系統(tǒng)復(fù)位的方法來看,系統(tǒng)復(fù)位可分為硬件復(fù)位和軟件復(fù)位。
硬件復(fù)位必須通過CPU外部的硬件電路給CPU的RESET端加上足夠時間的高電位才能實現(xiàn)。上電復(fù)位,人工按鈕復(fù)位和硬件看門狗復(fù)位均為硬件復(fù)位。硬件復(fù)位后,各專用寄存器的狀態(tài)均被初始化,且對片內(nèi)通用寄存器的內(nèi)容沒有影響。但是,硬件復(fù)位還能自動清除中斷激活標(biāo)志,使中斷系統(tǒng)能夠正常工作,這樣一個事實卻容易為不少編碼人員所忽視。
    軟件復(fù)位就是用一系列指令來模擬硬件復(fù)位功能,最后通過轉(zhuǎn)移指令使程序從0000H地址開始執(zhí)行。對各專用寄存器的復(fù)位操作是容易的,也沒有必要完全模擬,可根據(jù)實際需要去主程序初始化過程中完成。而對中斷激活標(biāo)志的清除工作常被遺忘,因為它沒有明確的位地址可供編程。有的編程人員用020000(LJMP 0000H)作為軟件陷阱,認為直接轉(zhuǎn)向0000H地址就完成了軟件復(fù)位,就是這類錯誤的典型代表。軟件復(fù)位是使用軟件陷阱和軟件看門狗后必須進行的工作,這時程序出錯完全有可能發(fā)生在中斷子程序中,中斷激活標(biāo)志已置位,它將阻止同級中斷響應(yīng)。由于軟件看門是高級中斷,它將阻止說要中斷響應(yīng),由此可見清除中斷激活標(biāo)志的重要性。
    單片機系統(tǒng)在啟動運行時,首先完成的復(fù)位操作,即上電復(fù)位。其目的是使CPU和系統(tǒng)中其他部件都處于一個確定的初始狀態(tài),并從這個狀態(tài)開始工作。復(fù)位很重要,單片機有多種復(fù)位方式。這里僅介紹上電復(fù)位和按鍵復(fù)位這兩種常用的復(fù)位方式。
    上電復(fù)位常用的方法是使用電容器。利用電容器的充電特性達到滿足接通電源后,單片機實現(xiàn)自動復(fù)位的要求。
    單片機的第9腳RST為硬件復(fù)位端,只要將該端持續(xù)4個機器周期的高電平即可實現(xiàn)復(fù)位,復(fù)位后單片機的各狀態(tài)都恢復(fù)到初始化狀態(tài),其電路圖如圖3-7所示。



                                 圖3-7復(fù)位電路

在電路圖中,電容的的大小是10uF,電阻的大小是10k。所以根據(jù)公式,可以算出電容充電到電源電壓的0.7倍(3.5V),需要的時間是10K*10uF=0.1S。也就是說在電腦啟動的0.1S內(nèi),電容兩端的電壓時在0-3.5V增加。這個時候10K電阻兩端的電壓為從5-1.5V減少(串聯(lián)電路各處電壓之和為總電壓)。所以在0.1S內(nèi),RST引腳所接收到的電壓是5V-1.5V。在5V正常工作的52單片機中小于1.5V的電壓信號為低電平信號,而大于1.5V的電壓信號為高電平信號。所以在開機0.1S內(nèi),單片機系統(tǒng)自動復(fù)位(RST引腳接收到的高電平信號時間為0.1S左右)。
    在單片機啟動0.1S后,電容C兩端的電壓持續(xù)充電為5V,這是時候10K電阻兩端的電壓接近于0V,RST處于低電平所以系統(tǒng)正常工作。當(dāng)按鍵按下的時候,開關(guān)導(dǎo)通,這個時候電容兩端形成了一個回路,電容被短路,所以在按鍵按下的這個過程中,電容開始釋放之前充的電量。隨著時間的推移,電容的電壓在0.1S內(nèi),從5V釋放到變?yōu)榱?.5V,甚至更小。根據(jù)串聯(lián)電路電壓為各處之和,這個時候10K電阻兩端的電壓為3.5V,甚至更大,所以RST引腳又接收到高電平。單片機系統(tǒng)自動復(fù)位。
    復(fù)位電路的原理是單片機RST引腳接收到2uS以上的電平信號,只要保證電容的充放電時間大于2uS,即可實現(xiàn)復(fù)位,所以電路中的電容值是可以改變的。值得注意的是,在設(shè)計當(dāng)中使用到了硬件復(fù)位和軟件復(fù)位兩種功能,軟復(fù)位實際上就是當(dāng)程序執(zhí)行完畢之后,將程序指針通過一條跳轉(zhuǎn)指令讓它跳轉(zhuǎn)到程序執(zhí)行的起始地址。

3.6系統(tǒng)總體電路圖
    系統(tǒng)總體電路圖如圖3-8所示。

    本設(shè)計主要是介紹了單片機控制下的8路競賽搶答器系統(tǒng),同時供8名選手或8個代表隊比賽,分別用8個按鈕S0~ S7表示。設(shè)置一個系統(tǒng)清楚和搶答控制開關(guān)S,該開關(guān)由主持人控制。搶答器具有鎖存與顯示功能。即選手按動按鈕,鎖存相應(yīng)的編號,并在數(shù)碼管上顯示選手號碼。并且優(yōu)先搶答選手的編號一直保持到主持人將系統(tǒng)清除為止。搶答器具有定時搶答功能,且一次搶答的時間由主持人設(shè)定。(如本次試驗設(shè)定為50s)當(dāng)主持人啟動“開始”鍵后,定時器進行減計時,同時揚聲器發(fā)出短暫的聲響,聲響持續(xù)的時間為0.5s左右。參賽選手在設(shè)定的時間內(nèi)進行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,并保持到主持人將系統(tǒng)清除為止。如果定時時間已到,無人搶答,本次搶答無效,系統(tǒng)報警并禁止搶答,定時顯示器上顯示00。


圖3-8系統(tǒng)總體電路圖

4  程序設(shè)計

4.1系統(tǒng)運行結(jié)果

8位競賽搶答器在正常工作的情況下,首先對控制系統(tǒng)進行初始化,然后進行鍵盤掃描,判斷主持人是否按下了“開始搶答”按鍵,如果按鍵沒有按下,則選手無法搶答;如果“開始搶答”按鍵按下則執(zhí)行倒計時子程序和顯示子程序,并調(diào)正常搶答處理子程序,如果。其中倒計時程序包括搶答倒計時和回答倒計時。涉及的程序框圖如圖4-1,4-2,4-3所示。



    圖4-1 主程序流程圖
    定時器T1用于倒計時,每次中斷為50ms,當(dāng)計數(shù)標(biāo)志為20時即為一秒,顯示數(shù)字減一。其流程圖如下:

     圖4-2 倒計時中斷流程圖

圖4-3主程序流程圖詳細介紹


4.2系統(tǒng)分析

由于這次的課設(shè)我們選擇了用AT89C51單片機來設(shè)計設(shè)計搶答器,很多東西都是臨時學(xué)的,像Proteus仿真軟件的使用以及keil軟件的使用,還有各種硬件的選擇和區(qū)分。我通過查資料和搜集有關(guān)的文獻,學(xué)習(xí)使用各種軟件及焊接電路板,培養(yǎng)了自學(xué)能力和動手能力。在以往的傳統(tǒng)的學(xué)習(xí)模式下,我們可能會記住很多的書本知識,但是通過課程設(shè)計,我們學(xué)會了如何將學(xué)到的知識轉(zhuǎn)化為自己的東西,并且由原先的被動的接受知識轉(zhuǎn)換為主動的尋求知識,這可以說是學(xué)習(xí)方法上的一個很大的突破。

對于單片機設(shè)計,其硬件電路是比較簡單的,主要是解決程序設(shè)計中的問題。而程序設(shè)計是一個很靈活的東西,它反映了你解決問題的邏輯思維和創(chuàng)新能力。它才是一個設(shè)計的靈魂所在。因此在整個設(shè)計過程中大部分時間是用在程序上面的。很多子程序是可以借鑒書本上的,但怎樣銜接各個子程序才是關(guān)鍵的問題所在,這需要對單片機的結(jié)構(gòu)很熟悉。因此可以說單片機的設(shè)計是軟件和硬件的結(jié)合,二者是密不可分的。通過這次課程設(shè)計我也發(fā)現(xiàn)自己的很多不足之處。在設(shè)計過程中我發(fā)現(xiàn)自己考慮問題很不全面,自己的專業(yè)知識掌握的很不牢固,所掌握的計算機應(yīng)用軟件還不夠多,我希望自己的這些不足之處能在今后的學(xué)習(xí)中得到改善。我的設(shè)計也還存在著一些缺陷,有待于在將來設(shè)計中進一步提高,在此懇請老師批評指正。這次設(shè)計也讓我懂得細節(jié)決定成敗,在以后的設(shè)計中我會嚴格吸取教訓(xùn),做的更好!


單片機源程序如下:
  1. #include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
  2. #define  TIMEQIANG  50

  3. sbit CHN_0  = P1^0;
  4. sbit CHN_1  = P1^1;
  5. sbit CHN_2  = P1^2;
  6. sbit CHN_3  = P1^3;
  7. sbit CHN_4  = P1^4;
  8. sbit CHN_5  = P1^5;
  9. sbit CHN_6  = P1^6;
  10. sbit CHN_7  = P1^7;

  11. sbit START_BUT  = P2^1;
  12. sbit CLEAR_BUT  = P2^0;
  13. sbit BEEP  = P3^7;
  14. //顯示
  15. sbit SMG_0  = P2^2;
  16. sbit SMG_1  = P2^3;
  17. sbit SMG_2  = P2^4;
  18. sbit SMG_3  = P2^5;
  19. #define SMG_PORT   P0
  20. Unsigned char code Dofly_table[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x77,0x7c,0x39,0x5e,0x79,0x71};

  21. unsigned char ucCon_Page = 0;//顯示的界面控制


  22. void  Dis_Play(unsigned char uiDis_NumHigh,unsigned char uiDis_NumLow)
  23. {
  24. static unsigned char ucStep = 0;
  25. unsigned char ucDis_Dat = 0;
  26. switch(ucStep)
  27. {
  28. //2345  11
  29.    case 0 :               //主頻
  30.               SMG_PORT = 0XFF;
  31.               P3&=0Xf0;
  32.               ucDis_Dat = uiDis_NumHigh/10;
  33.               SMG_PORT = Dofly_table[ucDis_Dat];
  34.               P3 |=0X01;
  35.               ucStep++;
  36.               break;

  37.               case 1 :
  38.               SMG_PORT = 0XFF;
  39.               P3&=0Xf0;
  40.               ucDis_Dat = uiDis_NumHigh%10;
  41.               SMG_PORT = Dofly_table[ucDis_Dat];
  42.               P3 |=0X02;
  43.               ucStep++;
  44.               break;

  45.               case 2 :
  46.               SMG_PORT = 0XFF;
  47.               P3&=0Xf0;
  48.               ucDis_Dat = uiDis_NumLow/10;
  49.               SMG_PORT = Dofly_table[ucDis_Dat];
  50.               P3 |=0X04;
  51.               ucStep++;
  52.               break;

  53.               case 3 :
  54.               SMG_PORT = 0XFF;
  55.               P3&=0Xf0; ;
  56.               ucDis_Dat = uiDis_NumLow%10;
  57.               SMG_PORT = Dofly_table[ucDis_Dat];
  58.               //////////////
  59.               P3 |=0X08;
  60.     ucStep = 0;
  61.     break;
  62.   default: break;
  63. }
  64. }

  65. void DelayUs2x(unsigned char t)
  66. {  
  67. while(--t);
  68. }
  69. /*------------------------------------------------
  70. mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
  71. unsigned char 是定義無符號字符變量,其值的范圍是
  72. 0~255 這里使用晶振12M,精確延時請使用匯編
  73. ------------------------------------------------*/
  74. void DelayMs(unsigned char t)
  75. {

  76. while(t--)
  77. {
  78.      //大致延時1mS
  79.      DelayUs2x(245);
  80.               DelayUs2x(245);
  81. }
  82. }


  83. /*------------------------------------------------
  84.                     主函數(shù)
  85. ------------------------------------------------*/

  86. void Init_Timer0(void)
  87. {
  88.               TMOD |= 0x01;                //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響                                
  89.               TH0=(65536-2000)/256;                              //重新賦值 2ms
  90.               TL0=(65536-2000)%256;
  91.               EA=1;            //總中斷打開
  92.               ET0=1;           //定時器中斷打開
  93.               TR0=1;           //定時器開關(guān)打開
  94.               PT1 = 1;
  95. }
  96.   char Start_Flag = 0;
  97. unsigned char Time_Use = 0;
  98. unsigned int uiDis_1S = 0;
  99. unsigned char ucTime = TIMEQIANG ;
  100. char  Beep = 6;
  101. unsigned char Beep_Time = 0;
  102. void main (void)
  103. {

  104.     unsigned char  ucChn_Num = 0;
  105.               BEEP = 1;
  106.               Init_Timer0();        //定時器0初始化


  107. while (1)           //主循環(huán)
  108.   {                 
  109.   ////////////////////
  110.   if(Start_Flag == 1)//可以搶答
  111.   {
  112.                 if(CHN_0 == 0)
  113.                 {
  114.                  DelayMs(10);//去抖動
  115.                  if(CHN_0 == 0)
  116.                   
  117. ……………………

  118. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
0.png

完整的Word格式論文51黑下載地址(附仿真+程序源碼):
八路搶答器.rar (743.67 KB, 下載次數(shù): 717)




評分

參與人數(shù) 2黑幣 +51 收起 理由
347642831Q + 1 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:357642 發(fā)表于 2018-6-25 09:38 來自觸屏版 | 顯示全部樓層
仿真圖上沒有喇叭啊
回復(fù)

使用道具 舉報

ID:452950 發(fā)表于 2018-12-23 22:24 | 顯示全部樓層
很好很強大
回復(fù)

使用道具 舉報

ID:454036 發(fā)表于 2018-12-25 09:16 | 顯示全部樓層
系統(tǒng)圖沒有喇叭啊
回復(fù)

使用道具 舉報

ID:493224 發(fā)表于 2019-3-18 15:27 | 顯示全部樓層
為什么有兩個顯示數(shù)碼管
回復(fù)

使用道具 舉報

ID:568181 發(fā)表于 2019-6-20 20:37 | 顯示全部樓層
好好,功能強大
回復(fù)

使用道具 舉報

ID:569489 發(fā)表于 2019-6-22 14:54 | 顯示全部樓層
寫的太好了  謝謝樓主
回復(fù)

使用道具 舉報

ID:572202 發(fā)表于 2019-6-27 08:19 | 顯示全部樓層
非常感謝樓主,我原本還一時想不出來沒有鎖存器怎么有鎖存功能。
回復(fù)

使用道具 舉報

ID:514064 發(fā)表于 2019-7-8 10:30 | 顯示全部樓層
很好,非常有幫助
回復(fù)

使用道具 舉報

ID:660094 發(fā)表于 2019-12-9 22:10 | 顯示全部樓層
大佬就是大佬
回復(fù)

使用道具 舉報

ID:659106 發(fā)表于 2019-12-10 14:52 | 顯示全部樓層
太強了
回復(fù)

使用道具 舉報

ID:762374 發(fā)表于 2020-5-27 16:17 | 顯示全部樓層
真的很優(yōu)秀。
回復(fù)

使用道具 舉報

ID:772490 發(fā)表于 2020-6-8 10:10 | 顯示全部樓層
謝謝樓主大大
回復(fù)

使用道具 舉報

ID:775155 發(fā)表于 2020-6-10 15:41 | 顯示全部樓層
感謝樓主!
回復(fù)

使用道具 舉報

ID:774488 發(fā)表于 2020-6-11 21:53 | 顯示全部樓層
為什么打不開啊
回復(fù)

使用道具 舉報

ID:779046 發(fā)表于 2020-6-14 15:55 | 顯示全部樓層
Eason張 發(fā)表于 2018-6-25 09:38
仿真圖上沒有喇叭啊

感謝樓主
回復(fù)

使用道具 舉報

ID:785615 發(fā)表于 2020-6-21 10:38 | 顯示全部樓層
太強大了
回復(fù)

使用道具 舉報

ID:784492 發(fā)表于 2020-6-21 13:03 | 顯示全部樓層
很不錯
回復(fù)

使用道具 舉報

ID:752658 發(fā)表于 2020-7-13 15:38 | 顯示全部樓層
太棒了,對我來說太有用了
回復(fù)

使用道具 舉報

ID:840812 發(fā)表于 2020-11-10 12:09 | 顯示全部樓層
時隔多年依舊有用,謝樓主
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表