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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 48742|回復(fù): 27
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)籃球計(jì)時(shí)計(jì)分器的設(shè)計(jì)(附源碼)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:444537 發(fā)表于 2018-12-11 23:05 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
摘    要
籃球計(jì)時(shí)計(jì)分器是一種應(yīng)用非常廣泛比賽計(jì)時(shí)工具,對(duì)現(xiàn)代社會(huì)越來越重要。此籃球計(jì)時(shí)計(jì)分器在硬件方面主要采用STC89C51RC單片機(jī)作為主控核心,由獨(dú)立按鍵、共陽數(shù)碼管顯示屏顯示。STC89C51RC單片機(jī)是由STC公司推出的,功耗小,電壓可選用4~6V電壓供電;所有程序編寫完成后,在Keil軟件中進(jìn)行調(diào)試,確定沒有問題后,燒寫到單片機(jī)上進(jìn)行測(cè)試。
此設(shè)計(jì)主要由獨(dú)立按鍵采集數(shù)據(jù)到單片機(jī)進(jìn)行處理再通過數(shù)碼管顯示出來,本論文主要研究了數(shù)碼管及獨(dú)立按鍵,對(duì)硬件連接方案進(jìn)行了詳盡的介紹,在軟件方面算法也進(jìn)行了論述。
目錄
前  言
第一章  工作原理
1.1設(shè)計(jì)目標(biāo)
1.1.1基本功能
第二章  硬件設(shè)計(jì)與原理
2.1 總設(shè)計(jì)框圖
2.2 硬件設(shè)計(jì)分析
2.2.1 電源的設(shè)計(jì)
2.2.2 單片機(jī)最小系統(tǒng)
2.2.3 顯示系統(tǒng)
2.2.4 按鍵調(diào)整電路
2.2.5 蜂鳴器電路
第三章  軟件設(shè)計(jì)與分析
3.1 軟件設(shè)計(jì)的組成
3.2 源程序
第四章  軟件仿真
4.1 PROTEUS簡(jiǎn)介
4.2仿真圖
4.3原理圖
4.4 元件清單
4.5 硬件結(jié)果圖
總結(jié)
致  謝
參考文獻(xiàn)
前  言

最近幾年來,隨著科技的飛速發(fā)展,單片機(jī)領(lǐng)域正在不斷的走向社會(huì)各個(gè)角落,還帶動(dòng)傳統(tǒng)控制檢測(cè)日新月異更新。在實(shí)時(shí)運(yùn)作和自動(dòng)控制的單片機(jī)應(yīng)用到系統(tǒng)中,單片機(jī)如今是作為一個(gè)核心部件來使用,僅掌握單片機(jī)方面知識(shí)是不夠的,還應(yīng)根據(jù)其具體硬件結(jié)構(gòu),以及針對(duì)具體應(yīng)用對(duì)象特點(diǎn)的軟件結(jié)合,加以完善!皢纹瑱C(jī)原理及應(yīng)用課程設(shè)計(jì)”是電子類專業(yè)的學(xué)科基礎(chǔ)科,它是繼“匯編語言程序設(shè)計(jì)”,“接口技術(shù)”等課程之后開出的實(shí)踐環(huán)節(jié)課程。









第一章  工作原理1.1設(shè)計(jì)目標(biāo)1.1.1基本功能
  • 51單片機(jī)+按鍵+蜂鳴器+數(shù)碼管
  • 數(shù)碼管:2個(gè)4位一體共陽數(shù)碼管
  • 具有12分鐘倒計(jì)時(shí)功能,精確到秒,能夠暫停
  • 最后10秒,聲音和指示燈報(bào)警功能
  • 能記錄兩隊(duì)分?jǐn)?shù),并且能夠加減功能
  • 半場(chǎng)比賽結(jié)束能夠交換兩隊(duì)比分
  • 具有時(shí)間暫停功能,可以快進(jìn)或者快退時(shí)間
  • 51單片機(jī)型號(hào):STC89C51RC、AT89C51單片機(jī)任選一個(gè)
  • C語言編程





第二章  硬件設(shè)計(jì)與原理

以STC89C51RC單片機(jī)為核心,起著控制作用。系統(tǒng)包括數(shù)碼管顯示電路、復(fù)位電路、時(shí)鐘電路、按鍵調(diào)整電路和蜂鳴器電路。設(shè)計(jì)思路分為六個(gè)模塊:復(fù)位電路、晶振電路模、STC89C51RC、數(shù)碼管顯示電路、按鍵調(diào)整電路和蜂鳴器電路這六個(gè)模塊。

2.1 總設(shè)計(jì)框圖

2.2 硬件設(shè)計(jì)分析2.2.1 電源的設(shè)計(jì)

系統(tǒng)電源使用外接直流5伏。

USB是通用串行總線(Universal Serial Bus)接口的簡(jiǎn)稱。它是目前使用比較廣泛的電腦接口之一,主要版本有1.0、1.1和最新的2.0三種版本。根據(jù)USB總線的工業(yè)標(biāo)準(zhǔn),它可以提供額定功率為5V/500mA的電源供USB設(shè)備使用。

2.2.2 單片機(jī)最小系統(tǒng)

51單片機(jī)是對(duì)目前所有兼容intel 8031指令系統(tǒng)的單片機(jī)的統(tǒng)稱。該系列單片機(jī)的始祖是intel的8031單片機(jī),后來隨著技術(shù)的發(fā)展,成為目前廣泛應(yīng)用的8為單片機(jī)之一。單片機(jī)是在一塊芯片內(nèi)集成了CPU、RAM、ROM、定時(shí)器/計(jì)數(shù)器和多功能I/O口等計(jì)算機(jī)所需要的基本功能部件的大規(guī)模集成電路,又稱為MCU。51系列單片機(jī)內(nèi)包含以下幾個(gè)部件:

一個(gè)8位CPU;一個(gè)片內(nèi)振蕩器及時(shí)鐘電路;

4KB的ROM程序存儲(chǔ)器;

一個(gè)128B的RAM數(shù)據(jù)存儲(chǔ)器;

尋址64KB外部數(shù)據(jù)存儲(chǔ)器和64KB外部程序存儲(chǔ)空間的控制電路;

32條可編程的I/O口線;

兩個(gè)16位定時(shí)/計(jì)數(shù)器;

一個(gè)可編程全雙工串行口;

5個(gè)中斷源、兩個(gè)優(yōu)先級(jí)嵌套中斷結(jié)構(gòu)。

如圖2-2-1所示為STC89C51RC單片機(jī)基本構(gòu)造,其基本性能介紹如下:

圖2-2-1 STC89C51RC單片機(jī)

STC89C51RC本身內(nèi)含40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O)端口,同時(shí)內(nèi)含2個(gè)外中端口,3個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,STC89C51RC可以按照常規(guī)方法進(jìn)行編程,但不可以在線編程。其將通用的微處理器和Flash存儲(chǔ)器結(jié)合在一起,特別是可反復(fù)擦寫的Flash存儲(chǔ)器可有效地降低開發(fā)成本。

STC89C51RC的主要特性如下表所示:

兼容MCS—51指令系統(tǒng)
32個(gè)可編程I/O線
4k字節(jié)可編程閃爍存儲(chǔ)器
可編程UARL通道
三個(gè)16位可編程定時(shí)/計(jì)數(shù)器中斷
時(shí)鐘頻率0-24MHz
2個(gè)外部中斷源,共8個(gè)中斷源
256×8bit內(nèi)部RAM
2個(gè)讀寫中斷口線
可直接驅(qū)動(dòng)LED
軟件設(shè)置睡眠和喚醒功能
低功耗空閑和掉電模式
表2-2-1 STC89C51RC主要功能描述

STC89C51RC為40腳雙列直插封裝的8位通用微處理器,采用工業(yè)標(biāo)準(zhǔn)的C51內(nèi)核,在內(nèi)部功能及管腳排布上與通用的89c51相同,其主要用于會(huì)聚調(diào)整時(shí)的功能控制。功能包括對(duì)會(huì)聚主IC內(nèi)部寄存器、數(shù)據(jù)RAM及外部接口等功能部件的初始化,會(huì)聚調(diào)整控制,會(huì)聚測(cè)試圖控制,紅外遙控信號(hào)IR的接收解碼及與主板CPU通信等。主要管腳有:XTAL1(19腳)和XTAL2(18腳)為振蕩器輸入輸出端口,外接12MHz 晶振。RST/Vpd(9腳)為復(fù)位輸入端口,外接電阻電容組成的復(fù)位電路。VCC(40腳)和VSS(20腳)為供電端口,分別接+5V電源的正負(fù)端。P0~P3 為可編程通用I/O腳,其功能用途由軟件定義,在本設(shè)計(jì)中,P0端口(32~39腳)被定義為N1功能控制端口,分別與N1的相應(yīng)功能管腳相連接,13腳定義為IR輸入端,10腳和11腳定義為I2C總線控制端口,分別連接N1的SDAS(18腳)和SCLS(19腳)端口,12腳、27腳及28腳定義為握手信號(hào)功能端口,連接主板CPU的相應(yīng)功能端,用于當(dāng)前制式的檢測(cè)及會(huì)聚調(diào)整狀態(tài)進(jìn)入的控制功能。

P0口:P0口是一組8位漏極開路型雙向I/O 口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時(shí),每位能吸收電流的方式驅(qū)動(dòng)8個(gè)TTL邏輯門電路,對(duì)端口P0寫“1”時(shí),可作為高阻抗輸入端用。在訪問外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器時(shí),這組口線分時(shí)轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)用,在訪問期間激活內(nèi)部上拉電阻。在Flash 編程時(shí),P0口接收指令字節(jié),而在程序校驗(yàn)時(shí),輸出指令字節(jié),校驗(yàn)時(shí),要求外接上拉電阻。

P1口:P1是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(IIL)。與AT89C51不同之處是,P1.0和P1.1還可分別作為定時(shí)/計(jì)數(shù)器2 的外部計(jì)數(shù)輸入(P1.0/T2)和輸入(P1.1/T2EX)。Flash編程和程序校驗(yàn)期間,P1接收低8位地址。

P2口:P2是一個(gè)帶有內(nèi)部上拉電阻的8 位雙向I/O口,P2的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)端口P2寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口,作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(IIL)。在訪問外部程序存儲(chǔ)器或16位地址的外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行MOVX @DPTR指令)時(shí),P2口送出高8位地址數(shù)據(jù)。在訪問8位地址的外部數(shù)據(jù)存儲(chǔ)器(如執(zhí)行MOVX @RI指令)時(shí),P2口輸出P2鎖存器的內(nèi)容。Flash編程或校驗(yàn)時(shí),P2亦接收高位地址和一些控制信號(hào)。

P3口:P3口是一組帶有內(nèi)部上拉電阻的8位雙向I/O口。P3口輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)P3口寫入“1”時(shí),它們被內(nèi)部上拉電阻拉高并可作為輸入端口。此時(shí),被外部拉低的P3口將用上拉電阻輸出電流(IIL)。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能P3口還接收一些用于Flash 閃速存儲(chǔ)器編程和程序校驗(yàn)的控制信號(hào)。

RST:復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將使單片機(jī)復(fù)位。

ALE/PROG:當(dāng)訪問外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時(shí)鐘振蕩頻率的1/6輸出固定的脈沖信號(hào),因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí)將跳過一個(gè)AL脈沖。對(duì)Flash存儲(chǔ)器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過對(duì)特殊功能寄存器(SFR)區(qū)中的8EH單元的D0位置位,可禁止ALE操作。該位置位后,只有一條 MOVX 和MOVC指令才能將ALE激活。此外,該引腳會(huì)被微弱拉高,單片機(jī)執(zhí)行外部程序時(shí),應(yīng)設(shè)置ALE禁止位無效。

PSEN:程序儲(chǔ)存允許(PSEN)輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng)STC89C51RC由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次PSEN有效,即輸出兩個(gè)脈沖。在此期間,當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器,將跳過兩次PSEN信號(hào)。

EA/VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲(chǔ)器(地址為0000H—FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復(fù)位時(shí)內(nèi)部會(huì)鎖存EA端狀態(tài)。如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲(chǔ)器中的指令。Flash存儲(chǔ)器編程時(shí),該引腳加上+12V的編程允許電源Vpp,當(dāng)然這必須是該器件是使用12V編程電壓Vpp。

XTAL1:振蕩器反相放大器的及內(nèi)部時(shí)鐘發(fā)生器的輸入端。

XTAL2:振蕩器反相放大器的輸出端。

單片機(jī)最小原理圖如圖2-2-2所示。

圖2-2-2 單片機(jī)最小系統(tǒng)
單片機(jī)最小系統(tǒng)說明:

時(shí)鐘信號(hào)的產(chǎn)生:在MCS-51芯片內(nèi)部有一個(gè)高增益反相放大器,其輸入端為芯片引腳XTAL1,其輸出端為引腳XTAL2。而在芯片的外部,XTAL1和XTAL2之間跨接晶體振蕩器和微調(diào)電容,從而構(gòu)成一個(gè)穩(wěn)定的自激振蕩器,這就是單片機(jī)的時(shí)鐘振蕩電路。

時(shí)鐘電路產(chǎn)生的振蕩脈沖經(jīng)過觸發(fā)器進(jìn)行二分頻之后,才成為單片機(jī)的時(shí)鐘脈沖信號(hào)。

一般地,電容C2和C3取30pF左右,晶體的振蕩頻率范圍是1.2-12MHz。如果晶體振蕩頻率高,則系統(tǒng)的時(shí)鐘頻率也高,單片機(jī)的運(yùn)行速度也就快。

單片機(jī)復(fù)位使CPU和系統(tǒng)中的其他功能部件都處在一個(gè)確定的初始狀態(tài)下,并從這個(gè)狀態(tài)開始工作。單片機(jī)復(fù)位條件:必須使9腳加上持續(xù)兩個(gè)機(jī)器周期(即24個(gè)振蕩周期)的高電平。

2.2.3 顯示系統(tǒng)

圖2-2-3 數(shù)碼管顯示電路

2.2.4 按鍵調(diào)整電路
圖2-2-4 按鍵調(diào)整電路
2.2.5 蜂鳴器電路
圖2-2-5 蜂鳴器電路

第三章  軟件設(shè)計(jì)與分析3.1 軟件設(shè)計(jì)的組成

該系統(tǒng)由延時(shí)子函數(shù)、蜂鳴器子函數(shù)、初始化子函數(shù)、調(diào)節(jié)比賽時(shí)間數(shù)碼管顯示子函數(shù)、比賽開始數(shù)碼管顯示子函數(shù)、甲隊(duì)得分?jǐn)?shù)碼管顯示子函數(shù)、乙隊(duì)得分?jǐn)?shù)碼管顯示子函數(shù)、按鍵掃描子函數(shù)、定時(shí)器0中斷子函數(shù)、主函數(shù)和數(shù)據(jù)定義這幾部分組成。

圖3-1-1 主程序流程圖

圖3-1-2 倒計(jì)時(shí)程序流程圖


第四章  軟件仿真4.1 PROTEUS簡(jiǎn)

Proteus ISIS是英國(guó)Labcenter公司開發(fā)的電路分析與實(shí)物仿真軟件。它運(yùn)行于Windows操作系統(tǒng)上,可以仿真、分析(SPICE)各種模擬器件和集成電路,該軟件的特點(diǎn)是:

(1)現(xiàn)了單片機(jī)仿真和SPICE電路仿真相結(jié)合。具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真、RS232動(dòng)態(tài)仿真、I2C調(diào)試器、SPI調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號(hào)發(fā)生器等。

(2)支持主流單片機(jī)系統(tǒng)的仿真。目前支持的單片機(jī)類型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各種外圍芯片。

(3)提供軟件調(diào)試功能。在硬件仿真系統(tǒng)中具有全速、單步、設(shè)置斷點(diǎn)等調(diào)試功能,同時(shí)可以觀察各個(gè)變量、寄存器等的當(dāng)前狀態(tài),因此在該軟件仿真系統(tǒng)中,也必須具有這些功能;同時(shí)支持第三方的軟件編譯和調(diào)試環(huán)境,如Keil C51 uVision2等軟件。

(4)具有強(qiáng)大的原理圖繪制功能。

可以仿真51系列、AVR、PIC、ARM、等常用主流單片機(jī)。還可以直接在基于原理圖的虛擬原型上編程,再配合顯示及輸出,能看到運(yùn)行后輸入輸出的效果。配合系統(tǒng)配置的虛擬邏輯分析儀、示波器等,Proteus建立了完備的電子設(shè)計(jì)開發(fā)環(huán)境。

在PROTEUS繪制好原理圖后,調(diào)入已編譯好的目標(biāo)代碼文件:*.HEX,可以在PROTEUS的原理圖中看到模擬的實(shí)物運(yùn)行狀態(tài)和過程。 PROTEUS 是單片機(jī)課堂教學(xué)的先進(jìn)助手。

PROTEUS不僅可將許多單片機(jī)實(shí)例功能形象化,也可將許多單片機(jī)實(shí)例運(yùn)行過程形象化。前者可在相當(dāng)程度上得到實(shí)物演示實(shí)驗(yàn)的效果,后者則是實(shí)物演示實(shí)驗(yàn)難以達(dá)到的效果。

它的元器件、連接線路等卻和傳統(tǒng)的單片機(jī)實(shí)驗(yàn)硬件高度對(duì)應(yīng)。這在相當(dāng)程度上替代了傳統(tǒng)的單片機(jī)實(shí)驗(yàn)教學(xué)的功能,例:元器件選擇、電路連接、電路檢測(cè)、電路修改、軟件調(diào)試、運(yùn)行結(jié)果等。

課程設(shè)計(jì)是學(xué)生走向就業(yè)的重要實(shí)踐環(huán)節(jié)。由于PROTEUS提供了實(shí)驗(yàn)室無法相比的大量的元器件庫(kù),提供了修改電路設(shè)計(jì)的靈活性、提供了實(shí)驗(yàn)室在數(shù)量、質(zhì)量上難以相比的虛擬儀器、儀表,因而也提供了培養(yǎng)學(xué)生實(shí)踐精神、創(chuàng)造精神的平臺(tái)。         

4.2仿真
4.3原理圖
4.4 元件清單

4.5 硬件結(jié)果圖
總結(jié)

經(jīng)過近三個(gè)月的努力,終于順利完成了設(shè)計(jì)。剛開始,我們頭緒不是很清楚,不知道從哪里入手,但通過老師的耐心指導(dǎo)并和同學(xué)認(rèn)真研究設(shè)計(jì)課題,跑圖書館查資料、確定基本設(shè)計(jì)方案、對(duì)所用芯片功能進(jìn)行查找、調(diào)試、上機(jī)仿真等,經(jīng)歷了一次次的困難,卻積累了很多寶貴的經(jīng)驗(yàn)。在整個(gè)設(shè)計(jì)的過程中遇到的問題主要有以下三點(diǎn),第一:基礎(chǔ)知識(shí)掌握的不牢固,主要表現(xiàn)在一些常用的電路的形式和功能不清楚,對(duì)書本上的內(nèi)容理解不夠透徹。第二:對(duì)一些常用的應(yīng)用軟件缺少應(yīng)用,體現(xiàn)在畫電路圖和系統(tǒng)的仿真的時(shí)候,對(duì)這些軟件的操作不熟練,浪費(fèi)了很多時(shí)間。第三:相關(guān)知識(shí)掌握的不夠全面,缺少系統(tǒng)設(shè)計(jì)的經(jīng)驗(yàn)。

這次設(shè)計(jì)進(jìn)一步端了我的學(xué)習(xí)態(tài)度,學(xué)會(huì)了實(shí)事求是,嚴(yán)謹(jǐn)?shù)淖黠L(fēng),對(duì)自己要嚴(yán)格要求,不能夠一知半解,要力求明明白白。急于求成是不好的,我有所感受。如果省略了那些必要的步驟,急于求成,不僅會(huì)浪費(fèi)時(shí)間,還會(huì)適得其反。我覺得動(dòng)手之前,頭腦里必須清楚該怎么做,這一點(diǎn)是很重要的。就目前來說,我的動(dòng)手能力雖然差一點(diǎn),但我想,通過我的不懈努力,在這方面,我總會(huì)得到提高。這一點(diǎn),我堅(jiān)信。因?yàn)閯e人能做到的,我也一定能做到。

在此次的設(shè)計(jì)中我最大的體會(huì)就是進(jìn)一步認(rèn)識(shí)到了理論聯(lián)系實(shí)踐的重要性。一份耕耘,一份收獲。通過這段時(shí)間的設(shè)計(jì),讓我明白科學(xué)的思維方法和學(xué)習(xí)方法是多么重要,只有這樣才能夠有很高的效率,才能夠讓自己的工作更完美?偠灾舜卧O(shè)計(jì)讓我學(xué)到了好多平時(shí)在課堂上學(xué)不到的東西,增加了我的知識(shí)運(yùn)用能力,增強(qiáng)我的實(shí)際操作能力。謝謝老師給我們提供這么好的機(jī)會(huì),為我們之后走向社會(huì)奠定了一個(gè)好的基礎(chǔ)。

本次設(shè)計(jì)讓我學(xué)到了很多,也學(xué)會(huì)到了要怎么樣去面對(duì)困難,不要對(duì)知識(shí)一知半截,要有的求實(shí)的能力,通過老師的幫助我學(xué)到了很多在平時(shí)的沒有注意到的動(dòng)?xùn)|西及知識(shí),更美沒有深入的的去理解,通過這次我要更加的明確自己。更要注重自己在各方面的鍛煉能力,把握機(jī)會(huì)。這次的設(shè)計(jì)非常的感謝老師們。


單片機(jī)源程序如下:




  1. #include<reg51.h>
  2. typedef unsigned char uchar;
  3. typedef unsigned int  uint;
  4. uchar code seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  5. //對(duì)應(yīng)數(shù)碼管顯示數(shù)字0-9
  6. int m=1,n=0,x=0,y=0,i=0,h=0,k;
  7. //定義全局變量并初始化,m,n表示分鐘與秒,x,y表示甲乙兩隊(duì)分?jǐn)?shù)
  8. sbit P1_0=P1^0;
  9. sbit P1_1=P1^1;
  10. sbit P1_2=P1^2;
  11. sbit P1_3=P1^3;
  12. sbit P1_4=P1^4;
  13. sbit P1_5=P1^5;
  14. sbit P1_6=P1^6;
  15. sbit P1_7=P1^7;
  16. sbit P3_0=P3^0;
  17. sbit P3_1=P3^1;
  18. sbit P3_2=P3^2;
  19. sbit P3_3=P3^3;
  20. sbit P3_6=P3^6;
  21. sbit P3_7=P3^7;
  22. void delay(uint x)//定義延時(shí)程序,通過設(shè)置參數(shù)x,改變延時(shí)時(shí)間長(zhǎng)度
  23. {
  24.               while(x--)
  25.               {
  26.                             uint y;
  27.                             for(y=0;y<200;y++);
  28.               }
  29. }
  30. void display(int i,int j,int x,int y)//顯示子程序 變量i,j分別是分秒,變量x,y是甲乙兩隊(duì)的分?jǐn)?shù)
  31. {                           
  32.               P2=~0xfe;                                                  
  33.               //數(shù)碼管刷新顯示時(shí)間的分鐘十位,調(diào)用延時(shí)程序
  34.               P0=~seg[i%100/10];
  35.               delay(1);                                                                      //延時(shí)數(shù)碼管點(diǎn)亮
  36.               P2=0x00;
  37.               P0=0xff;
  38.             
  39.               P2=~0xfd;                                                                      //同上,刷新數(shù)碼管的分鐘位的個(gè)位
  40.               P0=~seg[i%10];
  41.               delay(1);
  42.               P2=0x00;
  43.               P0=0xff;
  44.             
  45.               P2=~0xfb;                                                                      //同上。刷新數(shù)碼管秒位的十位
  46.               P0=~seg[j%100/10];
  47.               delay(1);
  48.               P2=0x00;
  49.               P0=0xff;
  50.             
  51.               P2=~0xf7;                                                                      //同上,刷新數(shù)碼管秒位的個(gè)位
  52.               P0=~seg[j%10];
  53.               delay(1);
  54.               P2=0x00;
  55.               P0=0xff;
  56.             
  57.               P2=~0xef;                                                                      //同上。刷新數(shù)碼管甲隊(duì)分?jǐn)?shù)的十位
  58.               P0=~seg[x%100/10];
  59.               delay(1);
  60.               P2=0x00;
  61.               P0=0xff;
  62.             
  63.               P2=~0xdf;                                                                      //同上。刷新數(shù)碼管甲隊(duì)分?jǐn)?shù)的個(gè)位
  64.               P0=~seg[x%10];
  65.               delay(1);
  66.               P2=0x00;
  67.               P0=0xff;
  68.             
  69.               P2=~0xbf;                                                                      //同上。刷新數(shù)碼管乙隊(duì)分?jǐn)?shù)的十位
  70.               P0=~seg[y%100/10];
  71.               delay(1);
  72.               P2=0x00;
  73.               P0=0xff;
  74.             
  75.               P2=~0x7f;                                                                      //同上。刷新數(shù)碼管乙隊(duì)分?jǐn)?shù)的個(gè)位
  76.               P0=~seg[y%10];
  77.               delay(1);
  78.               P2=0x00;
  79.               P0=0xff;
  80. }
  81. void t0() interrupt 1 //定義中斷程序,調(diào)用定時(shí)器TO
  82. {
  83.               TH0=0xb1;                                                           //對(duì)定時(shí)器T0送入初值,THO=0xb1
  84.               TL0=0x10;                                                                      //TL0=0X10 故定時(shí)器定時(shí)為20毫秒,
  85.               if(n==0)                                                                      //即每20毫秒調(diào)用一次
  86.               {
  87.                             n=60;
  88.                             m--;
  89.               }
  90.               i++;
  91.               if(i==50)                                          //定義i的值為50,即50*20毫秒=1秒
  92.               {
  93.                             n--;
  94.                             i=0;
  95.               }
  96.               display(m,n,x,y);//調(diào)用數(shù)碼管顯示程序,即每20毫秒刷
  97. }
  98. void jiafen()                                                                                                                //定義加分程序
  99. {
  100.               if(P1_1==0)//當(dāng)按下P1_1的時(shí)候
  101.               {
  102.                             delay(1);//延時(shí)去抖
  103.                             while(P1_1==0);
  104.                             x++;//甲隊(duì)加一分
  105.               }                 
  106.               if(P1_2==0)//當(dāng)按下P1_2的時(shí)候
  107.               {
  108.                             delay(1);
  109.                             while(P1_2==0);
  110.                             x+=2;//甲隊(duì)加兩分
  111.               }
  112.               if(P1_3==0)              //當(dāng)按下P1_3的時(shí)候
  113.               {
  114.                             delay(1);
  115.                             while(P1_3==0);                                         
  116.                             x+=3;//甲隊(duì)加三分
  117.               }            
  118.               if(P1_4==0)              //當(dāng)按下P1_4的時(shí)候
  119.               {
  120.                             delay(1);                                                            //延時(shí)去抖
  121.                             while(P1_4==0);
  122.                             y++;                                                                                      //乙隊(duì)加一分
  123.               }            
  124.               if(P1_5==0)              //當(dāng)按下P1_5的時(shí)候
  125.               {
  126.                             delay(1);
  127.                             while(P1_5==0);
  128.                             y+=2;                //乙隊(duì)加兩分
  129.               }               
  130.               if(P1_6==0)              //當(dāng)按下P1_6的時(shí)候
  131.               {
  132.                             delay(1);
  133.                             while(P1_6==0);
  134.                             y+=3;  //乙隊(duì)加三分
  135.               }
  136. }
  137. void jianfen()                                                                                                  //定義減分程序
  138. {
  139.               if(P3_0==0&&x>0)              //當(dāng)按下P3_0并且甲隊(duì)分?jǐn)?shù)大于0的時(shí)候
  140.               {
  141.                             delay(1);                                                                      //延時(shí)去抖
  142.                             while(P3_0==0);
  143.                             x--;                                                                         //甲隊(duì)減1分
  144.               }            
  145.               if(P3_1==0&&x>0)              //當(dāng)按下P3_1并且乙隊(duì)分?jǐn)?shù)大于0的時(shí)候
  146.               {
  147.                             delay(1);
  148.                             while(P3_1==0);
  149.                             y--;                                                                         //乙隊(duì)減1分
  150.               }
  151. }
  152. void tiaoshi()                                                                                                  //定義調(diào)時(shí)程序
  153. {
  154.               if(P3_2==0)                                                                                    //當(dāng)按下P3_2的時(shí)候
  155.               {
  156.                             delay(1);                                                                      //延時(shí)去抖
  157.                             if(P3_2==0)
  158.                             {
  159.                                           n++;                                                                      //秒位加1
  160.                                           if(n==60)//當(dāng)秒位到60的時(shí)候
  161.                                           {
  162.                                                         m++;//分位加1,并且秒位變1
  163.                                                         n=1;
  164.                                           }
  165.                             }
  166.               }
  167.               if(P3_3==0)                                                                                    //當(dāng)按下P3_3的時(shí)候
  168.               {
  169.                             delay(1);            
  170.                             if(P3_3==0)
  171.                             {
  172.                                           n--;//秒位減一
  173.                                           if(n==0)                       
  174.                                                                       //當(dāng)秒位減到0的時(shí)候,分位減一,并且秒位變59
  175.                                           {
  176.                                                         m--;            
  177.                                                         n=59;
  178.                                           }
  179.                             }
  180.               }
  181. }
  182. void jiaohuan()                                                                                      //定義比分交換程序
  183. {
  184.               int t;                                                                                                    //定義中間變量t
  185.               if(P1_7==0)                                                                                      //當(dāng)P1_7按下的時(shí)候
  186.               {
  187.                             delay(1);                                                                        //延時(shí)去抖
  188.                             while(P1_7==0);
  189.                             t=x;                                                                      //利用中間變量t,將甲乙兩隊(duì)比分交換
  190.                             x=y;
  191.                             y=t;
  192.                             display(m,n,x,y);                                          //刷新數(shù)碼管
  193.               }
  194. }
  195. void zanting()                                                                                                  //定義暫停程序
  196. {
  197.               if(P1_0==0)                                                                                                                //當(dāng)P1_0按下的時(shí)候
  198.               {
  199.                             delay(1);                                                                                      //延時(shí)去抖
  200.                             while(P1_0==0);
  201.                             EA=0;                                                                                                    //關(guān)中斷,進(jìn)入死循環(huán)
  202.                             while(1)
  203.                             {
  204.                                           display(m,n,x,y);
  205.                                           if(P1_0==0)                            //當(dāng)P1_0再次按下的時(shí)候,跳出死循環(huán)
  206.                                           {            
  207.                                                         delay(1);
  208.                                                         while(P1_0==0)
  209.                                                         EA=1;
  210.                                                         break;            
  211.                                           }
  212.                             }
  213.               }
  214. }
  215. void baojing()                                                                                    //定義報(bào)警程序
  216. {
  217.               if((m==0)&&(n<=10)&&(n>1))              //判斷當(dāng)?shù)褂?jì)時(shí)只剩下10秒的時(shí)候
  218.               {
  219.                             P3_7=1;                                                      
  220.                             //使P3_7和P3_6同時(shí)間隔輸出高低電平,點(diǎn)亮發(fā)光二極管和使蜂鳴器蜂鳴
  221.                             P3_6=1;
  222.                             delay(20);
  223.                             P3_7=0;
  224.                             P3_6=0;
  225.                             delay(20);
  226.               }
  227. }
  228. void jieshu()                                                                                    //定義結(jié)束子程序
  229. {
  230.               M:              if(h==1)                                         
  231.                             //當(dāng)時(shí)間條件滿足時(shí),關(guān)閉中斷,使數(shù)碼管保持狀態(tài)顯示
  232.                             {
  233.                                           EA=0;
  234.                                           delay(20);
  235.             m=0;
  236.                                 n=0;
  237.                                 P3_6=1;
  238.                                 P3_7=1;
  239.                                 delay(200);
  240.                                           P3_7=0;
  241.                                           P3_6=0;
  242.                                 while(1)
  243.                                 {
  244.                                                         display(m,n,x,y);
  245.                                                           jiafen();
  246.                                                           jianfen();
  247.                                                           jiaohuan();
  248.                                                           if(P1_0==0)                                          //當(dāng)P1_0再次按下的時(shí)候,跳出循環(huán)
  249.                                               {                    
  250.                                                                       delay(1);
  251.                                                                       while(P1_0==0)
  252.                                                                       {
  253.                                                                                     EA=1;
  254.                                                                                     m=10;    //重新賦予時(shí)間初始值開始下半場(chǎng)比賽
  255.                                                                                     n=0;
  256.                                                                                     h=0;
  257.                                                                                     goto M ;
  258.                                                                       }                           
  259.                                                         }
  260.                                           }
  261.                             }
  262. }
  263. void main()                                                                                                                //定義主程序
  264. {
  265.               TMOD=0x01;                                                                                                  //初始化程序
  266.               EA=1;                                                      
  267.               ET0=1;
  268.               P3_7=0;
  269.               P0=0xff;
  270.               P2=0x00;
  271.               if(P1_0==0)                            //第一次按下P1_0,單片機(jī)啟動(dòng),并顯示初始值
  272.               {                                                                                                    //由于調(diào)用了一次暫停功能,會(huì)顯示初始值
  273.                             TH0=0xb1;
  274.                             TL0=0x10;
  275.                             TR0=1;                                                                                                                //啟動(dòng)定時(shí)器
  276.                             P3=0xff;            
  277.                             P1=0x7f;
  278.                             P3_7=0;
  279.                             P1_7=1;
  280.                             while(1)
  281.                             {
  282.                                           jiafen();                                       //加分子程序
  283.                                           jianfen();                                   //減分子程序
  284.                                           tiaoshi();                                              //調(diào)時(shí)子程序
  285.                                           jiaohuan();                                   //比分交換子程序
  286.                                           zanting();                                             //暫停子程序
  287.                                           baojing();                                             //報(bào)警子程序
  288.                                           if((m==0)&&(n==1))                 //判斷結(jié)束子程序的調(diào)用條件
  289.                                           {
  290.                                                         h=1;
  291.                                           }
  292.                                           jieshu();                                                //結(jié)束子程序
  293.                             }
  294.               }
  295. }
復(fù)制代碼

以上圖文的Word格式文檔下載(內(nèi)容和本網(wǎng)頁(yè)上的一模一樣,方便保存):

基于51單片機(jī)籃球計(jì)時(shí)計(jì)分器的設(shè)計(jì).doc (808.29 KB, 下載次數(shù): 475)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏17 分享淘帖 頂7 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:402548 發(fā)表于 2019-5-26 16:18 | 只看該作者
自己做的一個(gè)較新版的

1558857682028.docx

80.79 KB, 下載次數(shù): 224, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報(bào)

板凳
ID:548996 發(fā)表于 2019-5-28 09:03 | 只看該作者
Jorge 發(fā)表于 2019-5-26 16:18
自己做的一個(gè)較新版的

可以可以
回復(fù)

使用道具 舉報(bào)

地板
ID:562183 發(fā)表于 2019-6-13 22:07 | 只看該作者
樓主,這個(gè)源程序STC8A8K64S4A12單片機(jī)能用嗎?
回復(fù)

使用道具 舉報(bào)

5#
ID:564270 發(fā)表于 2019-6-17 10:36 | 只看該作者
大佬大佬
回復(fù)

使用道具 舉報(bào)

6#
ID:570840 發(fā)表于 2019-6-24 15:40 來自手機(jī) | 只看該作者
樓主,有仿真軟件嗎
回復(fù)

使用道具 舉報(bào)

7#
ID:602563 發(fā)表于 2019-8-22 09:02 | 只看該作者
你好樓主 你發(fā)的籃球計(jì)分器的帖子為什么我的51用不了啊哥  你有連線的視頻么  可以給大家發(fā)一下么
回復(fù)

使用道具 舉報(bào)

8#
ID:602563 發(fā)表于 2019-8-22 10:10 | 只看該作者
樓主  請(qǐng)問這個(gè)代碼我要自己連線的話怎么辦啊 我有板子需要自己連線
回復(fù)

使用道具 舉報(bào)

9#
ID:553625 發(fā)表于 2019-8-24 22:25 | 只看該作者
你這個(gè)仿真用的8051哇
回復(fù)

使用道具 舉報(bào)

10#
ID:612469 發(fā)表于 2019-9-17 11:15 | 只看該作者
可以看看

籃球計(jì)時(shí)器 (1).zip

77.02 KB, 下載次數(shù): 120, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報(bào)

11#
ID:562892 發(fā)表于 2019-9-17 22:46 | 只看該作者

大哥    89c51可以用嗎   有沒有連線圖  仿真程序  以及說明書   有的話我明天就夠分了
回復(fù)

使用道具 舉報(bào)

12#
ID:626287 發(fā)表于 2019-10-18 19:55 | 只看該作者
牛人!這個(gè)時(shí)間和比分能用不同顏色的數(shù)碼管來顯示就好了。
回復(fù)

使用道具 舉報(bào)

13#
ID:626287 發(fā)表于 2019-10-20 00:14 | 只看該作者
Jorge 發(fā)表于 2019-5-26 16:18
自己做的一個(gè)較新版的

這個(gè)沒有電路圖呀!還有比分顯示能不能用六位數(shù)碼管啊???
回復(fù)

使用道具 舉報(bào)

14#
ID:626287 發(fā)表于 2019-10-20 00:15 | 只看該作者

有六位比分顯示的嗎???
回復(fù)

使用道具 舉報(bào)

15#
ID:659974 發(fā)表于 2019-12-9 19:53 | 只看該作者
咋樣更改為80c51啊
回復(fù)

使用道具 舉報(bào)

16#
ID:677047 發(fā)表于 2019-12-30 14:13 | 只看該作者
能發(fā)一份給我嗎?
回復(fù)

使用道具 舉報(bào)

17#
ID:731677 發(fā)表于 2020-4-17 21:17 | 只看該作者
我怎么用開發(fā)板運(yùn)行之后  只有末位數(shù)碼管有顯示啊
回復(fù)

使用道具 舉報(bào)

18#
ID:741054 發(fā)表于 2020-4-29 16:52 | 只看該作者
這個(gè)原理圖還有嗎?可以發(fā)給我嗎
回復(fù)

使用道具 舉報(bào)

19#
ID:739870 發(fā)表于 2020-5-1 17:45 | 只看該作者
非常感謝大佬,
回復(fù)

使用道具 舉報(bào)

20#
ID:768039 發(fā)表于 2020-6-3 07:03 | 只看該作者
謝謝大佬
回復(fù)

使用道具 舉報(bào)

21#
ID:541403 發(fā)表于 2020-6-23 11:55 | 只看該作者
很強(qiáng)很強(qiáng)
回復(fù)

使用道具 舉報(bào)

22#
ID:844498 發(fā)表于 2020-11-16 17:27 | 只看該作者
大佬,我這個(gè)顯示按鍵那里有錯(cuò),我不知道怎么改
回復(fù)

使用道具 舉報(bào)

23#
ID:328014 發(fā)表于 2020-11-16 18:02 | 只看該作者
aliu925 發(fā)表于 2020-11-16 17:27
大佬,我這個(gè)顯示按鍵那里有錯(cuò),我不知道怎么改

什么錯(cuò)誤?發(fā)圖看看
回復(fù)

使用道具 舉報(bào)

24#
ID:655782 發(fā)表于 2021-5-14 14:40 | 只看該作者
大佬大佬,收益匪淺
回復(fù)

使用道具 舉報(bào)

25#
ID:927162 發(fā)表于 2021-5-26 17:52 | 只看該作者
請(qǐng)問大佬的電路圖是對(duì)的嗎
為啥功能一直保存
回復(fù)

使用道具 舉報(bào)

26#
ID:986668 發(fā)表于 2021-12-1 09:42 | 只看該作者
樓主 能不對(duì)程序有個(gè)講解就是 為什么剛開始有60s的倒計(jì)時(shí)

回復(fù)

使用道具 舉報(bào)

27#
ID:1133878 發(fā)表于 2024-10-21 12:55 | 只看該作者
能不對(duì)程序有個(gè)講解就是
回復(fù)

使用道具 舉報(bào)

28#
ID:1133878 發(fā)表于 2024-10-21 12:56 | 只看該作者
請(qǐng)問大佬的電路圖是對(duì)的嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品国产乱码一区二区三区a | 国产精品一区二区三区久久 | 亚洲精品福利视频 | 欧美日韩免费在线 | 久久一级免费视频 | 热久久久久| 欧美一区二区三区 | 国产精品永久久久久久久www | 国产精品99久久久久久宅男 | 国产成人精品一区二区三区 | 91精品无人区卡一卡二卡三 | 毛片电影| av在线免费观看网址 | 99精品久久久 | 国产区在线免费观看 | 夜夜干夜夜操 | 狠狠色综合网站久久久久久久 | 日本精品一区二区三区四区 | av一级在线观看 | 久久精品一区二区 | 欧美黄色网| 蜜桃在线一区二区三区 | 成人在线不卡 | 日韩一二区 | 嫩草视频在线免费观看 | 日韩精品在线观看一区二区三区 | 中文字幕一区二区三区乱码在线 | 欧美自拍视频 | 国产精品久久久久久亚洲调教 | 欧美成人综合 | 91麻豆产精品久久久久久夏晴子 | 成人免费在线播放视频 | 亚洲精品黄色 | 日韩欧美大片在线观看 | 97精品一区二区 | 亚洲免费人成在线视频观看 | 国产精品视频久久 | 成人av免费在线观看 | 一区二区三区四区视频 | 国产h视频 | 国产一区二区三区在线 |