(完整word版)籃球比賽30秒倒計時器的設計(word文檔良心出品)_第1頁
(完整word版)籃球比賽30秒倒計時器的設計(word文檔良心出品)_第2頁
(完整word版)籃球比賽30秒倒計時器的設計(word文檔良心出品)_第3頁
(完整word版)籃球比賽30秒倒計時器的設計(word文檔良心出品)_第4頁
(完整word版)籃球比賽30秒倒計時器的設計(word文檔良心出品)_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、籃球比賽30秒倒計時器的設計2010-04-27 11:28:22來源:我的網(wǎng)站 瀏覽:2813次李建軍(江蘇省鹽城技師學院電氣工程系江蘇鹽城224002)【摘要】籃球比賽30秒鐘規(guī)則規(guī)定:進攻球隊在場上控球時必須在30秒鐘內(nèi)投籃出手(NBA比賽為24秒,全美大學體育聯(lián)合會比賽中為35秒),因此在比賽時裁判既要看比賽又要看秒表計時,而本文介紹 的30秒倒計時器可以解決此問題。【關鍵詞】AT89C51單片機、30秒倒計時器、LED30秒倒計時器的設計和制作有很多方法,本文介紹的30秒倒計時器以AT89C51單片機作為控制單元,采用兩個數(shù)碼管顯示時間,用三個按鍵分別控制計時器的計時開始、復位和暫停

2、。倒計時器初始狀態(tài)顯示“30”當裁判員按下計時鍵,30秒倒計時開始,當計時器時間減到0時,計時器發(fā)出聲光報警,提示裁判計時時間已到。一、電路設計30秒倒計時器的電路主要由電源電路、單片機最小系統(tǒng)、按鍵輸入、顯示驅(qū)動電路、報警電路組成,30秒倒計時器控制電路如圖 1所示。aRW ID Ll: c丄*住思詠邁 和1葉ifS 阿護Wn yrhR11lEO- Wll*2盤I 丁一 1 i .1 1 1 1 1. r p p圖1 30秒倒計時器電路原理圖1、按鍵輸入“3(秒倒計時器”采用了三個按鍵來完成計數(shù)器的啟動計數(shù)、復位、暫停/繼續(xù)計數(shù)等功能。(1) K1鍵:啟動按鈕(P3.2)。按下K1鍵,計數(shù)器

3、倒計時開始,數(shù)碼管顯示數(shù)字從30開始每秒遞減計數(shù),當遞減到到零時,報警電路發(fā)出聲、光報警信號。當計數(shù)器處于暫停狀態(tài)時按下K1鍵將回到計時狀態(tài)。(2) K2鍵:復位按鈕(P3.3)o按下K2鍵,不管計數(shù)器工作于什么狀態(tài),計數(shù)器立即復位到預置值“30”在報警狀態(tài)時按下K2鍵還可取消報警。(3) K3鍵:暫停/計時切換按鈕(P3.4)o當計數(shù)器處于計時狀態(tài)時按下該鍵計數(shù)器暫停計時,數(shù)碼管顯示數(shù)字保持不變;當計數(shù)器處于暫停狀態(tài)按下該鍵計數(shù)器將回到計時狀態(tài);初始狀態(tài)時該鍵無效。2、顯示驅(qū)動電路“3(秒倒計時器”用兩個共陽數(shù)碼管來顯示時間,數(shù)碼管顯示方式為動態(tài)顯示。顯示驅(qū)動電路中,數(shù)碼管的段碼引腳通過47

4、0歐的電阻接到單片機的 P1 口,兩個片選引腳各通過一個 9012連接到正5V電源,由P3.0和P3.1控制。4、報警電路計時時間減到0,顯示數(shù)碼管顯示“00時,發(fā)光二極管D1由P3.5控制發(fā)出光報警,同時蜂鳴器由P3.7控制發(fā)出聲報警。二、軟件編程思路1、全局變量“3(秒倒計時器”動作流程主要受三個全局變量控制。首先是 bit變量“ac,當“ac為“1時倒計時開始,為“0時倒計時停止,“act初值為“0”可以由按鈕操作將其置“1”清“0”第二個全局變量是 char變量“time,存放倒計時的時間,當?shù)褂嫊r時間為0時,發(fā)出聲光報警。變量“time的初值為30,定時中斷服務程序在“act為1時,

5、每1s對其進行減1操作,減到0時保持為0,按下復位鍵”可將“time復位為30 O第三個全局變量是int變量“t,”記錄響應定時中斷0的次數(shù)。根據(jù)初始化定義,定時器 0以方式1工作,每1ms發(fā)出一次中斷請求。控制程序只開放了定時器0中斷,因此不會有比定時器 0中斷更高級的中斷被允許,所以每次請求都會立刻被響應。響應后在中斷服務程序中將全局變量"t加1記錄響應中斷次數(shù),每響應1000次即為1秒鐘。變量“t初值為0,在中斷服務程序中加1,當“t為2000時由中斷服務程序清0。在按鍵驅(qū)動程序中,按下啟動鍵、復位鍵、暫停/啟動鍵時將“t清0,目的是從0ms開始計時。2、控制流程主程序主要用來

6、檢測全局變量“time當“time為0時發(fā)出 聲光報警”。按鍵驅(qū)動、顯示驅(qū)動和“time ”操作都在定時器0中斷服務程序中進行。其控制流程如圖2所示。主程序開貽T line¥圖2控制流程圖三、軟件程序設計1、數(shù)碼管驅(qū)動程序到計時器的兩個數(shù)碼管以動態(tài)顯示的方式顯示計時時間"time"”全局變量),LED1顯示“time的十位,LED2顯示“time的個位。(1) 定義段碼數(shù)據(jù)口和片選信號根據(jù)實際電路,在 C51中定義段碼的數(shù)據(jù)口為 P1,兩個片選信號為 P3.0和P3.1。定義如下:#define duan P1sbit wei1=卩3人0;sbit wei2=P

7、3人1;(2) 定義字形碼LED顯示數(shù)字09以及全滅的字形碼表格放在數(shù)組zixing中。字形碼是固定的表格,定義時加上關鍵字“code”表示該表格存放在程序存儲器中。unsigned char code zixing=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;(3)定義數(shù)碼管LED1和LED2的顯示變量為了增加驅(qū)動程序的可移植性,筆者為數(shù)碼管LED1和LED2定義了顯示變量。顯示變量就是本驅(qū)動 程序的對外接口,外部程序只要改變顯示變量的值就可改變數(shù)碼管顯示的數(shù)值。定義方式如下:unsigned char led_str2=10

8、,10;led_str0直接對應數(shù)碼管LED1, led_str1直接對應數(shù)碼管LED2。本項目中由專門的子程序?qū)⑷肿兞?time 計算拆分成 led_str0和 led_str1。void js()led_str1=time/10%10;led_str0=time%10;(4)數(shù)碼管驅(qū)動程序數(shù)碼管驅(qū)動程序“void chushi(char i)在定時中斷服務程序中被調(diào)用執(zhí)行。根據(jù)初始化程序的定義,定時中斷服務程序每1ms被執(zhí)行一次。定時中斷服務程序中運用全局變量“t記錄進入該服務程序的次數(shù),“t ” 計滿2000由定時中斷服務程序清零。數(shù)碼管驅(qū)動程序的參數(shù)“char i是用來確定當前點亮的

9、是 LED1還是LED2,當參數(shù)為“0時點亮LED1,LED1,奇數(shù)次進入定時中斷參數(shù)為“1時點亮LED2。如果我們希望偶數(shù)次進入定時中斷服務程序時點亮服務程序時點亮LED2,我們可以用程序調(diào)用語句“chushi(t%2) ”輕松實現(xiàn)。進入數(shù)碼管驅(qū)動程序后首先調(diào)用子函數(shù)js(),計算當前的led_str0和led_str1。接下來將兩個數(shù)碼管全部熄滅以防止余暉的出現(xiàn)。最后點亮需要點亮的數(shù)碼管并送出字型碼。驅(qū)動程序代碼如下:void chushi(char i)js(); /計算顯示變量duan=0xff; / 去余暉wei1=i; wei2=!i;/ 確定片選duan=zixingled_st

10、ri; / 送字型碼2、按鍵驅(qū)動程序按鍵驅(qū)動程序分為按鍵識別和按鍵功能執(zhí)行兩部分。按鍵功能執(zhí)行可在按鍵按下時或按鍵抬起后執(zhí) 行,文中將其設計在按鍵抬起后執(zhí)行。(1)定義按鍵I/O地址根據(jù)實際電路,三個按鍵(啟動鍵、復位鍵、暫停/啟動鍵)分另U接在 P3 口的P3.2,P3.3和P3.4三個引腳上。為了取鍵值方便還將P3 口定義為“iokey,”程序中可作定義如下:#define iokey P3sbit key仁卩3人2;sbit key2=P 3人3;sbit key3=P 3人4;(2)按鍵驅(qū)動流程按鍵識別的通用流程為:I/O 口寫“1”判斷有無鍵按下 T延時去抖T確定鍵值T等待按鍵抬起T

11、執(zhí)行按鍵功能。按鍵驅(qū)動程序中定義了兩個靜態(tài)變量“ts ”和“kv”,分別用來延時去抖和存放鍵值。(3) 延時去抖靜態(tài)變量“ts用來延時去抖。按鍵驅(qū)動程序在定時中斷服務程序中每1ms被執(zhí)行一遍,每檢測到有鍵按下“ts加1,檢測到無鍵按下“ts清0。按鍵連續(xù)按下20ms,則連續(xù)20次執(zhí)行按鍵驅(qū)動程序時都檢測到有鍵按下,此時靜態(tài)變量“ts累加到20,可確認按鍵按下有效。為防止按鍵一直按著不放而使“ts累加到溢出,確認有鍵按下后可使“ts的值保持為20,或大于20 的某一個值如21。(4) 取鍵值確認有鍵按下后即可通過讀取按鍵的I/O 口狀態(tài)來得到鍵值。為讀取P3.2、P3.3和P3.4引腳狀態(tài),屏蔽

12、P3 口其他引腳的影響,可將讀取后的數(shù)值按位或上11100011B(0xE3)再送給靜態(tài)變量 “kv。靜態(tài)變量“kv存放按鍵的鍵值,無鍵按下或按鍵抬起后 kv的值為0。按下啟動鍵key1時kv=11111011B(0xFB),按下復位鍵 key2 時 kv=11110111B (0xF7),按下暫停 /啟動鍵 key3 時 kv=11101111B( 0xEF)。(5) 執(zhí)行按鍵功能按鍵抬起后第一次執(zhí)行按鍵驅(qū)動程序時,靜態(tài)變量“kv任保持著按鍵按下時最后得到的鍵值,以該鍵值作為參數(shù)調(diào)用按鍵執(zhí)行程序“actkey(kv); ”即可執(zhí)行按鍵功能。調(diào)用后kv值立刻清0,確保按一次鍵執(zhí)行一次按鍵功能。

13、驅(qū)動程序代碼如下:void key()static unsigned char kv=0;static unsigned char ts=0;key1=1;key2=1;key3=1;if(!(key1 &key2&key3)ts+;if(ts>=20)ts=20; / 有鍵按下if(ts=20)kv=iokey|0xe3; / 取鍵值else /無鍵按下或按鍵已抬起actkey(kv);ts=0;kv=0;函數(shù)actkey(kv)用來根據(jù)鍵值“kv執(zhí)行相應操作。當“kv等于0xFB時代表啟動鍵key1按下,函數(shù)actkey(kv)將全局變量act賦值為“1。當“ kv等于0xF7時代表復位鍵key2按下,函數(shù)actkey(kv)將全局變量“time復位為“30;當“kv等于0xEF時代表暫停/啟動鍵按下,函數(shù)actkey(kv)將全局變量act取反。每按 一個按鈕都有將全局變量 “t清0的操作,目的是每當復位、或啟動計時時,進入定時中斷的次數(shù)都從 始計算,否則會出現(xiàn)第1秒計時不準確的現(xiàn)象。程序代碼如下:void actkey(unsigned char k)switch(k)case 0xfb:act=1;t=0;break;case 0xf7:time=30;t=0; break;case 0xef:act=act;t=0; brea

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論