籃球計時計分控制系統(tǒng).doc_第1頁
籃球計時計分控制系統(tǒng).doc_第2頁
籃球計時計分控制系統(tǒng).doc_第3頁
籃球計時計分控制系統(tǒng).doc_第4頁
籃球計時計分控制系統(tǒng).doc_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、學習情境1 籃球計時計分控制系統(tǒng)的設計之 整體模塊系統(tǒng)設計 點名,復習1、 簡述數碼管動態(tài)顯示技術.2、 矩陣鍵盤的硬件電路設計以及軟件程序代碼設計3、 簡述74HC573的基本功能以及各引腳的作用.4、 簡述74HC154的基本功能以及各引腳的作用。 新課講授前面我們分別設計好了計時模塊(24秒計時和單節(jié)時間計時)和計分模塊,把各個模塊綜合起來就構成了籃球計時計分控制系統(tǒng)。因為各個子模塊都經過了調試,軟件和硬件都沒有什么問題,在整合這些子模塊時只需做些簡單的修改.1。4 整機硬件電路設計整機硬件電路具體如下圖所示:1。5 整機軟件設計(完整C程序代碼)#includereg51.hdefin

2、e uchar unsigned char#define uint unsigned int/*-數碼管顯示代碼-/ucharcodeshuma=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xBF,0xFF; /共陽/ucharcodeshuma=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40; /共陰uchar Attack_time,Temp,m_cou

3、nt; uchar part; /定義第幾節(jié)的變量。第1,2,3,4節(jié)uchar Key_Num=16, Pro_Key_Num=9;uint count1,count2,t_count; /時間全局變量,count1,count2用于在中斷函數中記錄中、/斷次數sbit attack_begin=P30; / 24秒進攻開始按鍵K1sbit attack_pause=P31; / 24秒進攻暫停按鍵K2int Game_time1,Game_time2; /定義每節(jié)時間的分鐘和秒鐘的時間變量sbit key_start=P32; / 比賽開始按鍵sbit item_dec=P33; / 比賽

4、減分按鍵 sbit item_add=P34; / 設置比賽為第1,2,3,4節(jié),籃球比賽有4節(jié),每節(jié)12分鐘bit flag,flag1,first_end; / 定義1秒的標志位,flag,flag1分別用于表示T0和T1定/時器產生了1秒的時間 bit game_over,OR_ZERO,k1,k2,k3,k4,l,p,h; / 定義一些標志位uchar Temp_attack_time,dis_time1,dis_time2; uint attack_sec_shi; / 進攻 秒 十位uint attack_sec_ge; / 進攻 秒 個位 uint game_point1,gam

5、e_point2; /比賽比分變量uint Tgame_sec_ge; / 單節(jié)比賽時間 秒鐘 個位 uint Tgame_sec_shi; / 單節(jié)比賽時間 秒鐘 十位 uint Tgame_min_ge; / 單節(jié)比賽時間 分鐘 個位 uint Tgame_min_shi; / 單節(jié)比賽時間 分鐘 十位 /-子程序聲明-/void delay(uint K); /延時子程序void Display(); / 顯示子程序void Attack_key_event();/進攻24秒子程序void Pause_key_event(); / 暫停子程序void Initialization();

6、/初始化子程序void Game_start(); /單節(jié)比賽啟動子程序,K3按鍵處理子程序void Increase_part(); /單節(jié)自加子程序,每節(jié)結束時,單節(jié)變量part自動加1void Key_Scan() ; / 矩陣鍵盤掃描子程序void Add_point(); /加分按鍵處理子程序void Dec_point(); /減分按鍵處理子程序/*-主程序-*/void main(void) Initialization();/P2=0xff; while(1) Display(); / 顯示子程序 Game_start();/籃球比賽開始子程序 Attack_key_event

7、(); /24秒進攻開始子程序 Pause_key_event(); / 暫停子程序 Increase_part();/ 比賽每節(jié)自加處理子程序 /Key_Scan(); / 矩陣鍵盤掃描子程序 Add_point();/ 加分按鍵處理子程序 Dec_point(); /減分按鍵處理子程序 /*-T0中斷服務程序-/void T0_int()interrupt 1 / 使用定時器T0,方式1,定時1s TH0 = -50000/256; / 設置定時器初值(定時50ms) TL0 = -50000%256; count1+; if(count1=10) / 循環(huán)20次 count1=0; fl

8、ag=1; /-T1中斷服務程序-*/void T1_int()interrupt 3 / 使用定時器T1,方式1,定時1s TH1 = -50000/256; / 設置定時器初值(定時50ms) TL1 = -50000%256; count2+; if(count2=10) / 循環(huán)20次 count2=0; flag1=1; /*-延時子程序-*/void delay(uint K) uint i,j; for(i=K;i>0;i-) for(j=120;j>0;j-); /*-24秒進攻按鍵(attack_begin,k1按鍵P3。0口)處理子程序-/void Attack

9、_key_event() if(attack_begin=0) /判斷進攻按鍵是否按下 delay(15); /按鍵消抖 if(attack_begin=0) /再次判斷暫停健是否按下。 k1=1; /k1為進攻按鍵按下標志 TR0=1; / 開T0計時 if(k2=0) /沒有按下暫停鍵. Attack_time=24; if(k2=1&&Attack_time=0) /有按下暫停鍵. Attack_time=24; if(k1=1&&flag=1) flag=0; Attack_time-; OR_ZERO=1; if(OR_ZERO=1&&

10、Attack_time=0) OR_ZERO=0; if(flag=1) flag=0;Attack_time=24; TR0=0; /-顯示子程序-/void Display() /定義第幾節(jié)的數碼算法。第1,2,3,4節(jié) int j; uchar Group1_ge,Group1_shi,Group1_bai,Group2_ge,Group2_shi,Group2_bai; /uchar KeyNO; Temp_attack_time=Attack_time; attack_sec_shi=Temp_attack_time/10; attack_sec_ge=Temp_attack_tim

11、e10; dis_time1=Game_time1; dis_time2=Game_time2; Tgame_sec_shi=dis_time1/10; Tgame_sec_ge=dis_time110; Tgame_min_ge=dis_time210; Tgame_min_shi=dis_time2/10; Group1_bai= game_point1/100; Group1_shi= game_point1%100/10; Group1_ge = game_point1%100%10; Group2_bai= game_point2/100; Group2_shi= game_poin

12、t2%100/10; Group2_ge = game_point2100%10; for(j=0;j<10;j+) P2=0x0f; /位選,選中百位數對應的那個數碼管 P0=shumaGroup1_bai; / 段選,把百位數的字形碼送到上面選通的數碼管中 delay(1); P2=0x01; /位選,選中十位數對應的那個數碼管 P0=shumaGroup1_shi; / 段選,把十位數的字形碼送到上面選通的數碼管中 delay(1); P2=0x02; /位選,選中個位數對應的那個數碼管 P0=shumaGroup1_ge; / 段選,把個位數的字形碼送到上面選通的數碼管中 del

13、ay(1); P2=0x03; /位選,選中百位數對應的那個數碼管 P0=shumaGroup2_bai; / 段選,把百位數的字形碼送到上面選通的數碼管中 delay(1); P2=0x04; /位選,選中十位數對應的那個數碼管 P0=shumaGroup2_shi; / 段選,把十位數的字形碼送到上面選通的數碼管中 delay(1); P2=0x05; /位選,選中個位數對應的那個數碼管 P0=shumaGroup2_ge; / 段選,把個位數的字形碼送到上面選通的數碼管中 delay(1); P2=0x0b; /位選,選中個位數對應的那個數碼管 第6個 數碼管 P0=shumaTgame

14、_min_ge; /段選,把個位數的字形碼送到上面選通的數碼管中 delay(1); P2=0x0a; /位選,選中十位數對應的那個數碼管 第5個 數碼管 P0=shumaTgame_min_shi;/段選,把十位數的字形碼送到上面選通的數碼管中 delay(1); P2=0x09; /位選,選中十位數對應的那個數碼管 第4個 數碼管 P0=shuma16; /段選,把十位數的字形碼送到上面選通的數碼管中 delay(1); P2=0x08; /位選,選中十位數對應的那個數碼管 第3個 數碼管 P0=shuma16; /段選,把十位數的字形碼送到上面選通的數碼管中 delay(1); P2=0

15、x07; /位選,選中個位數對應的那個數碼管 第1個 數碼管 P0=shumaTgame_sec_ge; /段選把個位數的字形碼送到上面選通的數碼管中 delay(1); P2=0x06; /位選,選中十位數對應的那個數碼管 1 第2個 數碼管 P0=shumaTgame_sec_shi;/段選,把十位數的字形碼送到上面選通的數碼管中 delay(1); P2=0x0c; /位選,選中個位數對應的那個數碼管 P0=shumaattack_sec_ge;/ 段選,把個位數的字形碼送到上面選通的數碼管中 delay(1); P2=0x0d; /位選,選中十位數對應的那個數碼管 P0=shumaat

16、tack_sec_shi;/段選,把十位數的字形碼送到上面選通的數碼管中 delay(1); P2=0x0e; /位選, P0=shumapart; /段選, delay(1); /-暫停子程序-*/ void Pause_key_event() if(attack_pause=0) delay(40); /按鍵消抖 if(attack_pause=0) /再次判斷暫停健是否按下。 k2=1; /k2為暫停按鍵按下標志位。 TR0=0; TR1=0; /-初始化子程序-/ void Initialization() TMOD=0x11; / 中斷初始化 TH0 = -50000/256; /

17、設置定時器T0初值(定時50ms) TL0 = -50000%256; TH1= -50000/256; / 設置定時器T1初值(定時50ms) TL1 = -50000256; EA=1; / 開總中斷 ET0=1; / T0允許 ET1=1; / T1允許 part=1; Attack_time=24; Game_time1=3; Game_time2=0; game_point1=106; game_point2=104; /-單節(jié)比賽啟動子程序,K3按鍵處理子程序-*/void Game_start() if(key_start=0) /判斷比賽開始按鍵K3是否按下? delay(40

18、); / 消抖 if(key_start=0) /再次判斷比賽開始按鍵K3是否按下? k3=1; /設置比賽開始標志位K3 TR1=1;if(k2=0) /未按下暫停按鍵。 if(flag1=1) return; flag1=0; Game_time1=2; Game_time2=59; else if(k2=1&Game_time1=3&&Game_time2=0) if(flag1=1) return; Game_time1=2; Game_time2=59; if(k3=1&&flag1=1) flag1=0; p=1; m_count+; /1秒

19、鐘累加器,60秒為1分鐘 Game_time2-; if(Game_time2<0) Game_time2=59; if( p=1&m_count=60) if(Game_time1!=0) Game_time1-; Game_time2=59; else if(Game_time1=0) /記錄每節(jié)最后一分鐘的秒鐘。 Game_time1; if(Game_time1<0) TR1=0; first_end=1; /每節(jié)結束標志 Game_time1=3; Game_time2=0; p=0;m_count=0; /-單節(jié)自加子程序,每節(jié)結束時,單節(jié)變量part自動加1-

20、/void Increase_part() if(first_end=1) first_end=0; if(+part>4) part=1; /-矩陣鍵盤掃描子程序-/ void Key_Scan() uchar key_temp;P1=0x0f;/高4位置1,放入4行delay(1);/按鍵后00001111將變成0000XXXX,X中有1個為0,其余3個仍能為1。key_temp=P10x0f; /判斷按鍵發(fā)生在03列中的哪一列。switch(key_temp) case 1:Key_Num=0;break; case 2:Key_Num=1;break; case 4:Key_Num=2;break; case 8:Key_Num=3;break; default:Key_Num=16; /說明沒有按鍵按下 P1=0xf0; /低四位置零,放入四列delay(1);/按鍵后11110000將變成XXXX0000,X中有1個為0,其余3個仍能為1.key_temp= P140x0f; /將高4位移到低4位,并將其中唯一的0變?yōu)?,其余為0switch(key_temp) case 1:Key_Num+=0;break;/對03行分別附

溫馨提示

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

評論

0/150

提交評論