2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩58頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  福建工程學(xué)院軟件學(xué)院</p><p>  題 目: 基于單片機(jī)的籃球計(jì)時(shí)計(jì)分器</p><p><b>  目錄</b></p><p><b>  1 摘要 3</b></p><p>  2  設(shè)計(jì)要求 3<

2、/p><p>  2.1  功能需求 3</p><p>  2.2  設(shè)計(jì)要求 4</p><p>  3  硬件設(shè)計(jì)及描述 4</p><p>  3.1  總體描述 4</p><p>  

3、3.2  系統(tǒng)總體框圖 12</p><p>  3.3  Proteus電路圖12</p><p>  3.4  各部分硬件介紹  13</p><p>  4  軟件設(shè)計(jì)流程及描述 14</p><p>  4.

4、1  程序流程圖 14</p><p>  4.2函數(shù)模塊及功能   15</p><p>  5  功能實(shí)現(xiàn)(功能介紹+照片)16</p><p>  6 心得體會(huì) 17</p><p>  7 源程序  

5、; 17</p><p><b>  1 摘要 </b></p><p>  本文主要內(nèi)容是利用AT89C51單片機(jī)與160*128的液晶組合設(shè)計(jì)的籃球計(jì)時(shí)計(jì)分器,在像素為160*128的液晶上顯示時(shí)間,分?jǐn)?shù),節(jié)次等信息,并可通過按鍵來加分,暫停時(shí)間,攻守方互換,進(jìn)入下一節(jié)等操作。本課題是基于單片機(jī)技術(shù)和160*128的廣泛應(yīng)用而提出。

6、本次做的籃球計(jì)時(shí)計(jì)分器是以單片機(jī)為核心,結(jié)合PG160128ALCD 顯示器,再配以相應(yīng)的軟件,達(dá)到實(shí)現(xiàn)模擬籃球計(jì)時(shí)計(jì)分的目的. 近年來隨著計(jì)算機(jī)在社會(huì)領(lǐng)域的滲透和大規(guī)模集成電路的發(fā)展,單片機(jī)的應(yīng)用正在不斷地走向深入,由于它具有功能強(qiáng),體積小,功耗低,價(jià)格便宜,工作可靠,使用方便等特點(diǎn),因此特別適合于與控制有關(guān)的系統(tǒng),越來越廣泛地應(yīng)用于自動(dòng)控制,智能化儀器,儀表,數(shù)據(jù)采集,軍工產(chǎn)品以及家用電器等各個(gè)領(lǐng)域,單片機(jī)往往是作為一個(gè)核心部件來使

7、用,在根據(jù)具體硬件結(jié)構(gòu),以及針對(duì)具體應(yīng)用對(duì)象特點(diǎn)的軟件結(jié)合,以作完善。 單片機(jī)應(yīng)用的重要意義在于,它從根本上改變了傳統(tǒng)的控制系統(tǒng)設(shè)計(jì)思想和設(shè)計(jì)方法。從前必須由模擬電路或數(shù)字電路實(shí)現(xiàn)的大部分功能,現(xiàn)在已能用單片機(jī)通過軟件方法來實(shí)現(xiàn)了。這種軟件代替硬件的控制技術(shù)也稱為微控制技術(shù),是傳統(tǒng)控制技術(shù)的一次革命</p><p><b>  2  設(shè)計(jì)要求</b></p>

8、<p>  要求能夠在160128LCD上顯示隊(duì)伍名稱,各隊(duì)得分,節(jié)次,每節(jié)剩余時(shí)間,24秒進(jìn)攻時(shí)間計(jì)時(shí),比賽狀態(tài),以及通過按鍵加分,暫停時(shí)間,攻守方互換,進(jìn)入下一節(jié)等操作,還要通過蜂鳴器表現(xiàn)節(jié)次結(jié)束,24秒進(jìn)攻時(shí)間結(jié)束,比賽結(jié)束時(shí)的笛聲。               

9、0;              </p><p>  2.1  功能需求 </p><p>  信息顯示,包括:隊(duì)伍名稱,比賽狀態(tài),,進(jìn)攻方,兩隊(duì)得分,節(jié)次,節(jié)次剩余時(shí)間,24秒進(jìn)攻時(shí)間剩余時(shí)間。</p>&

10、lt;p>  按鍵,包括:加1分,加2分,加3分,啟動(dòng)、暫停,復(fù)位,下一節(jié),A隊(duì)進(jìn)攻,B隊(duì)進(jìn)攻,8個(gè)按鍵的功能實(shí)現(xiàn)。</p><p>  對(duì)進(jìn)攻方的加分,攻守方互換時(shí)進(jìn)攻時(shí)間的重置,進(jìn)攻時(shí)間結(jié)束時(shí)攻守方互換等算法實(shí)現(xiàn)。</p><p>  節(jié)次結(jié)束,24秒進(jìn)攻時(shí)間結(jié)束,比賽結(jié)束時(shí)的笛聲。</p><p>  2.2  設(shè)計(jì)要求 &

11、lt;/p><p>  通過160128LCD顯示各種計(jì)分計(jì)時(shí)信息。</p><p>  通過控制鍵實(shí)現(xiàn):加1分,加2分,加3分,啟動(dòng)、暫停,復(fù)位,下一節(jié),A隊(duì)進(jìn)攻,B隊(duì)進(jìn)攻,8個(gè)按鍵功能。</p><p>  3  硬件設(shè)計(jì)及描述 </p><p>  3.1  總體描述 </p

12、><p>  系統(tǒng)硬件電路圖如下圖3-1所示:</p><p>  圖3-1硬件整體結(jié)構(gòu)圖</p><p>  系統(tǒng)的主要芯片包括Atmel公司的8位單片機(jī)AT89C51,PG60128ALCD,蜂鳴器以及一個(gè)八個(gè)按鍵組成。下面將對(duì)這些芯片分別予以介紹。</p><p>  3.1.1 AT89C51單片機(jī)簡(jiǎn)介</p><p&

13、gt;  STC是美國(guó)公司生產(chǎn)的低電壓,高性能CMOS8位單片機(jī),片內(nèi)含4k bytes的可反復(fù)擦寫的只讀程序存儲(chǔ)器(PEROM)和128 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器(CPU)和Flash存儲(chǔ)單元,可靈活應(yīng)用于各種控制領(lǐng)域。</p><p>  圖3-2單片機(jī)引腳圖</p>&

14、lt;p><b>  主要特性</b></p><p>  ·與MCS-51產(chǎn)品指令系統(tǒng)完全兼容</p><p>  ·4k字節(jié)可重擦寫Flash閃速存儲(chǔ)器</p><p>  ·1000次擦寫周期</p><p>  ·全靜態(tài)操作:0Hz-24MHz</p>

15、<p>  ·三級(jí)加密程序存儲(chǔ)器</p><p>  ·128×8字節(jié)內(nèi)部RAM</p><p>  ·32個(gè)可編程I/O口線</p><p>  ·2個(gè)16位定時(shí)/計(jì)數(shù)器</p><p><b>  ·6個(gè)中斷源</b></p><

16、;p>  ·可編程串行UART通道</p><p>  ·低功耗空閑和掉電模式</p><p>  AT89C51 提供以下標(biāo)準(zhǔn)功能:4k 字節(jié)Flash 閃速存儲(chǔ)器,128字節(jié)內(nèi)部RAM,32 個(gè)I/O 口線,兩個(gè)16位定時(shí)/計(jì)數(shù)器,一個(gè)5向量?jī)杉?jí)中斷結(jié)構(gòu),一個(gè)全雙工串行通信口,片內(nèi)振蕩器及時(shí)鐘電路。同時(shí),AT89C51可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟件

17、可選的節(jié)電工作模式。空閑方式停止CPU的工作,但允許RAM,定時(shí)/計(jì)數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到下一個(gè)硬件復(fù)位。</p><p><b>  2.管腳說明</b></p><p><b>  Vcc:電源電壓</b></p><p><b&

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

19、節(jié),校驗(yàn)時(shí),要求外接上拉電阻。</p><p>  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)。Flash編程和程序校驗(yàn)期間,P1接收低8位地址。</p><p> 

20、 P2 :P2是一個(gè)帶有內(nèi)部上拉電阻的8位雙向I/O口,P2的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)端口寫“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

21、 指令)時(shí),P2 口線上的內(nèi)容(也即特殊功能寄存器(SFR)區(qū)中R2寄存器的內(nèi)容),在整個(gè)訪問期間不改變。Flash編程或校驗(yàn)時(shí),P2亦接收高位地址和其它控制信號(hào)。</p><p>  P3: P3口是一組帶有內(nèi)部上拉電阻的8 位雙向I/O 口。P3 口輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4 個(gè)TTL邏輯門電路。對(duì)P3 口寫入“1”時(shí),它們被內(nèi)部上拉電阻拉高并可作為輸入端口。作輸入端時(shí),被外部拉低的P3 口將用上拉

22、電阻輸出電流(IIL)。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能,如下表所示:</p><p>  P3.0 RXD(串行輸入口) </p><p>  P3.1 TXD(串行輸出口) </p><p>  P3.2 /INT0(外部中斷0) </p><p>  P3.3 /INT1(外部中斷1) </p>

23、<p>  P3.4 T0(記時(shí)器0外部輸入) </p><p>  P3.5 T1(記時(shí)器1外部輸入) </p><p>  P3.6 /WR(外部數(shù)據(jù)存儲(chǔ)器寫選通) </p><p>  P3.7 /RD(外部數(shù)據(jù)存儲(chǔ)器讀選通) </p><p>  P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。</p>&l

24、t;p>  RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。 </p><p>  ALE/PROG:當(dāng)訪問外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳

25、過一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。 </p><p>  /PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。 </p>&l

26、t;p>  /EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。 </p><p>  XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。 </p><p>

27、  XTAL2:來自反向振蕩器的輸出。AT89C5l 中有一個(gè)用于構(gòu)成內(nèi)部振蕩器的高增益反相放大器,引腳XTAL1 和XTAL2 分別是該放大器的輸入端和輸出端。這個(gè)放大器與作為反饋元件的片外石英晶體或陶瓷諧振器一起構(gòu)成自激振蕩器,振蕩電路。</p><p>  3.1.2 PG160128LCD簡(jiǎn)介</p><p>  PG160128LCD是像素可尋址的圖形液晶顯示屏模塊</p&

28、gt;<p><b>  芯片特性</b></p><p>  160 X 128 字符顯示點(diǎn)陣;</p><p>  并行 8 線數(shù)據(jù)通信;</p><p>  白色點(diǎn)陣,藍(lán)色背景,獨(dú)立LED背光電源;</p><p>  工作溫度寬, 工業(yè)級(jí) LCM, 超薄外型設(shè)計(jì)。</p><p&

29、gt;<b>  2.操作說明</b></p><p>  圖3-3 PG160128引腳說明</p><p>  圖3-4 PG160128內(nèi)部結(jié)構(gòu)及時(shí)序圖</p><p>  圖3-5 讀數(shù)據(jù)時(shí)序圖與讀/寫時(shí)間表</p><p>  圖3-6 設(shè)置顯示起始說明</p><p>  

30、3.2  系統(tǒng)總體框圖 </p><p><b>  圖3.1總體框圖</b></p><p>  3.3  Proteus電路圖</p><p>  圖3.2Proteus電路圖</p><p>  3.4  各部分硬件介紹  

31、;</p><p>  PG160128ALCD液晶顯示模塊:</p><p>  圖3.3液晶顯示模塊</p><p>  2、通過控制鍵實(shí)現(xiàn):加1分,加2分,加3分,啟動(dòng)、暫停,復(fù)位,下一節(jié),A隊(duì)進(jìn)攻,B隊(duì)進(jìn)攻,8個(gè)按鍵功能。</p><p>  圖3.4獨(dú)立鍵盤模塊</p><p>  4 

32、0;軟件設(shè)計(jì)流程及描述 </p><p>  4.1  程序流程圖 </p><p>  圖4.1程序流程圖</p><p>  4.2函數(shù)模塊及功能  </p><p>  1、uchar Status_BIT_01(); // 狀態(tài)位STA1,STA0判斷(讀寫指令和讀寫數(shù)據(jù))

33、</p><p>  2、uchar Status_BIT_3(); // 狀態(tài)位ST3判斷(數(shù)據(jù)自動(dòng)寫狀態(tài))</p><p>  3、uchar LCD_Write_Command_P2(uchar cmd,uchar para1,uchar para2); // 寫雙參數(shù)的指令</p><p>  4、uchar LCD_Write_Command_P1(uch

34、ar cmd,uchar Para1); // 寫單參數(shù)的指令</p><p>  5、uchar LCD_Write_Command(uchar cmd); // 寫無參數(shù)的指令</p><p>  6、uchar LCD_Write_Data(uchar dat); // 寫數(shù)據(jù)</p><p>  7、uchar LCD_Read_Data(); // 讀數(shù)據(jù)

35、</p><p>  8、void Set_LCD_POS(uchar row, uchar col) reentrant;// 設(shè)置當(dāng)前地址功能說</p><p>  9、void cls(); // 清屏</p><p>  10、uchar LCD_Initialise(); // LCM 初始化明</p><p>  11、uch

36、ar Display_Str_at_xy(uchar x,uchar y,char *fmt,uchar wb) reentrant;// ASCII(8*16) 及 漢字(16*16) 顯示函數(shù)</p><p>  12、void OutToLCD(uchar Dat,uchar x,uchar y);//顯示輔助函數(shù)</p><p>  13、void Line( unsigned

37、char x1, unsigned char y1, unsigned char x2, unsigned char y2, uchar Mode) reentrant;//在指定位置畫線</p><p>  14、void Pixel(unsigned char PointX,unsigned char PointY, uchar Mode); //在指定坐標(biāo)畫點(diǎn)</p><p>  

38、15、void Show_Score_A(); </p><p><b>  /*</b></p><p>  功能:顯示A隊(duì)得分。</p><p>  變量:dat_str1[4],用于存取A隊(duì)分?jǐn)?shù)。</p><p>  參 數(shù): 無。</p><p><b>  返 回 值:無

39、。</b></p><p>  調(diào)用函數(shù):Display_Str_at_xy(),顯示A隊(duì)分?jǐn)?shù)在指定位置。</p><p><b>  */ </b></p><p>  void show_Score_B();//顯示B隊(duì)得分</p><p><b>  /*</b></p>

40、;<p>  功能:顯示B隊(duì)得分。</p><p>  變量:dat_str1[4],用于存取B隊(duì)分?jǐn)?shù)。</p><p>  參 數(shù): 無。</p><p><b>  返 回 值:無。</b></p><p>  調(diào)用函數(shù):Display_Str_at_xy(),顯示B隊(duì)分?jǐn)?shù)在指定位置。</p

41、><p><b>  */ </b></p><p>  void show_Section();</p><p><b>  /*</b></p><p><b>  功能:顯示節(jié)次。</b></p><p>  變量:dat_str1[2],用于存取節(jié)次

42、。</p><p>  參 數(shù): 無。</p><p><b>  返 回 值:無。</b></p><p>  調(diào)用函數(shù):Display_Str_at_xy(),顯示節(jié)次在指定位置。</p><p>  5  功能實(shí)現(xiàn)(功能介紹+照片)</p><p>  1、計(jì)分器計(jì)

43、時(shí)計(jì)分界面。</p><p>  圖5.1 計(jì)分器計(jì)時(shí)計(jì)分界面</p><p><b>  6 心得體會(huì) </b></p><p>  通過本次課程設(shè)計(jì)增加了我對(duì)單片機(jī)各模塊功能的了解。實(shí)驗(yàn)過程讓我更加了解并進(jìn)一步掌握了中斷,定時(shí)計(jì)數(shù),鍵盤等程序編寫。以及更加懂得了通過Proteus構(gòu)造自己所需要的外圍電路,進(jìn)行仿真實(shí)驗(yàn)。&

44、lt;/p><p>  單片機(jī)應(yīng)用系統(tǒng)中,通常需要人機(jī)對(duì)話功能,能夠隨時(shí)發(fā)出各種控制命令和輸入數(shù)據(jù),報(bào)告應(yīng)用系統(tǒng)的運(yùn)行狀態(tài)與結(jié)果。該系統(tǒng)設(shè)計(jì)能夠很實(shí)用得簡(jiǎn)單模擬籃球計(jì)時(shí)計(jì)分效果具有較高的可用性。還可以通過修改程序,增加加時(shí)賽更好的完善該系統(tǒng)。</p><p>  液晶顯示技術(shù)的普及應(yīng)用和發(fā)展,給儀器、設(shè)備的小型化及智能化帶來了光輝的前景,特別是點(diǎn)陣圖形式液晶顯示模塊,它具有體積小、重量輕、低電

45、壓、底功耗之優(yōu)點(diǎn),因而在顯示內(nèi)容和顯示功能等方面表現(xiàn)出了獨(dú)特的性能。由于液晶顯示器已成為日常工作和生活中各種顯示儀器、儀表、和袖珍電子產(chǎn)品的重要組成部分,因此對(duì)于點(diǎn)陣圖形液晶顯示器件(模塊)的開發(fā)、設(shè)計(jì)、應(yīng)用和研究對(duì)于將來的從事有關(guān)液晶顯示技術(shù)方面的工作具有重要意義。</p><p><b>  7 源程序   </b></p><

46、p>  /********************************************************************籃球計(jì)分計(jì)時(shí)器.c</p><p>  *******************************************************************/</p><p>  #include <i

47、ntrins.h></p><p>  #include <string.h></p><p>  #include <stdlib.h></p><p>  #include <intrins.h></p><p>  #include <stdio.h></p><

48、p>  #include "LCD_160128.h"</p><p>  extern uchar LCD_Initialise();</p><p>  extern uchar LCD_Write_Command(uchar cmd);</p><p>  extern uchar LCD_Write_Command_P1(uchar

49、 cmd,uchar paral);</p><p>  extern uchar LCD_Write_Command_P2(uchar cmd,uchar paral,uchar para2);</p><p>  extern uchar LCD_Write_Data(uchar dat);</p><p>  extern void Pixel(uchar x

50、,uchar y, uchar Mode);</p><p>  extern void Set_LCD_POS(uchar row,uchar col) reentrant;</p><p>  extern void Line(uchar x1,uchar y1,uchar x2,uchar y2,uchar Mode) reentrant;//以上在中斷中也有用到所以定義為可重入函數(shù)

51、</p><p>  extern void Draw_Image(uchar *G_Buffer,uchar Start_Row,uchar Start_Col)reentrant;</p><p>  extern void Display_Str_at_xy(uchar x,uchar y,char *Buffer,uchar wb) reentrant;</p>&l

52、t;p>  extern void cls();</p><p>  sbit buzzer=P3^3;</p><p>  sbit Add_1=P1^0;</p><p>  sbit Add_2=P1^1;</p><p>  sbit Add_3=P1^2;</p><p>  sbit A_attack

53、=P1^3;</p><p>  sbit start_or_stop=P1^4;</p><p>  sbit B_attack=P1^5;</p><p>  sbit reset=P1^6;</p><p>  sbit next_section=P1^7;</p><p>  int A_Score=0,B_S

54、core=0;</p><p>  uchar section=1,MM=12,Last_MM=0,SS=0,Last_SS=0,team=0,A_time=24,Last_A_time=0,B_time=24,Last_B_time=0,count=0,status=0;</p><p>  void delay(uint ms)</p><p><b>

55、;  {</b></p><p><b>  uchar i;</b></p><p>  while (--ms)for(i=0;i<120;i++);</p><p><b>  }</b></p><p>  void sounder(uchar t)</p>

56、<p><b>  {</b></p><p>  uchar i,j;</p><p>  for(i = 0;i<150;i++)</p><p><b>  {</b></p><p>  buzzer=~buzzer;</p><p>  for(j

57、= 0;j<t;j++);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //顯示A隊(duì)得分</b></p><p>  void Show_Score_A()</p><p><b

58、>  {</b></p><p>  char dat_str1[4] = {0,0,0,0};</p><p>  dat_str1[0] = A_Score / 100+ '0';</p><p>  dat_str1[1] = (A_Score % 100) / 10+ '0';</p><

59、p>  dat_str1[2] = A_Score % 10+ '0';</p><p>  Display_Str_at_xy(26,24,dat_str1,0); </p><p><b>  }</b></p><p><b>  //顯示B隊(duì)得分</b></p><p>

60、;  void show_Score_B()</p><p><b>  {</b></p><p>  char dat_str1[4] = {0,0,0,0};</p><p>  dat_str1[0] = B_Score / 100+ '0';</p><p>  dat_str1[1] = (B

61、_Score % 100) / 10+ '0';</p><p>  dat_str1[2] = B_Score % 10+ '0';</p><p>  Display_Str_at_xy(102,24,dat_str1,0); </p><p><b>  }</b></p><p&

62、gt;<b>  //顯示節(jié)次</b></p><p>  void show_Section()</p><p><b>  {</b></p><p>  char dat_str1[2] = {0,0};</p><p>  dat_str1[0] = section % 10+ '0

63、';</p><p>  Display_Str_at_xy(66,46,dat_str1,0); </p><p><b>  }</b></p><p>  //顯示節(jié)次剩余時(shí)間</p><p>  void show_section_time()</p><p><b>

64、;  {</b></p><p>  char dat_str1[3] = {0,0,0};</p><p>  if(SS!=Last_SS)</p><p><b>  {</b></p><p>  Last_SS=SS;</p><p>  dat_str1[0] = SS /

65、 10+ '0';</p><p>  dat_str1[1] = SS % 10+ '0';</p><p>  Display_Str_at_xy(114,68,dat_str1,0);</p><p><b>  }</b></p><p>  if(MM!=Last_MM)<

66、/p><p><b>  { </b></p><p>  Last_MM=MM;</p><p>  dat_str1[0] = MM / 10+ '0';</p><p>  dat_str1[1] = MM % 10+ '0';</p><p>  Display

67、_Str_at_xy(90,68,dat_str1,0);</p><p><b>  } </b></p><p><b>  }</b></p><p>  void show_attack_time()</p><p><b>  {</b></p>&

68、lt;p>  char dat_str1[3] = {0,0,0};</p><p>  //顯示A對(duì)進(jìn)攻剩余時(shí)間</p><p>  if(team==0)</p><p><b>  {</b></p><p>  if(A_time!=Last_A_time)</p><p><

69、b>  {</b></p><p>  Last_A_time=A_time;</p><p>  dat_str1[0] = A_time / 10+ '0';</p><p>  dat_str1[1] = A_time % 10+ '0';</p><p>  Display_Str_a

70、t_xy(90,112,dat_str1,0);</p><p>  sounder(80);</p><p><b>  }</b></p><p><b>  }</b></p><p>  //顯示B對(duì)進(jìn)攻剩余時(shí)間</p><p><b>  else<

71、/b></p><p><b>  {</b></p><p>  if(B_time!=Last_B_time)</p><p><b>  {</b></p><p>  Last_B_time=B_time;</p><p>  dat_str1[0] = B_t

72、ime / 10+ '0';</p><p>  dat_str1[1] = B_time % 10+ '0';</p><p>  Display_Str_at_xy(90,112,dat_str1,0);</p><p>  sounder(80);</p><p><b>  }</b&g

73、t;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //顯示進(jìn)攻方</b></p><p>  void show_attacker()</p><p><b>  {</b&

74、gt;</p><p>  if(team==0)</p><p>  Display_Str_at_xy(74,90,"A",0);</p><p><b>  else</b></p><p>  Display_Str_at_xy(74,90,"B",0);</p>

75、;<p><b>  }</b></p><p><b>  //顯示狀態(tài)</b></p><p>  void show_status()</p><p><b>  {</b></p><p>  if(status==0)</p><p&

76、gt;  Display_Str_at_xy(117,46,"暫停 ",1);</p><p><b>  else</b></p><p>  Display_Str_at_xy(117,46,"進(jìn)行中",1);</p><p><b>  }</b></p>&l

77、t;p>  void show_maker()</p><p><b>  {</b></p><p>  Display_Str_at_xy(26,2,"《單片機(jī)程序設(shè)計(jì)》",0);</p><p>  Display_Str_at_xy(35,24,"籃球計(jì)分計(jì)時(shí)器",0);</p>

78、<p>  Display_Str_at_xy(39,46,"物聯(lián)網(wǎng)1102班",0);</p><p>  Display_Str_at_xy(20,68,"制作者:游建南,吳華榕",0);</p><p>  Display_Str_at_xy(20,90,"福建工程學(xué)院軟件學(xué)院",0);</p>

79、<p>  Display_Str_at_xy(46,112,"2013/12/8",0);</p><p><b>  }</b></p><p><b>  //畫主菜單</b></p><p>  void Draw_Menu_UI()</p><p><b

80、>  {</b></p><p>  Line(0,0,159,0,1);</p><p>  Line(159,0,159,127,1);</p><p>  Line(159,127,0,127,1);</p><p>  Line(0,127,0,0,1);</p><p>  Display_

81、Str_at_xy(30,2,"A隊(duì)",0);</p><p>  Display_Str_at_xy(106,2,"B隊(duì)",0);</p><p>  Show_Score_A();</p><p>  Display_Str_at_xy(76,24,":",0);</p><p>

82、;  Show_Score_B();</p><p>  Display_Str_at_xy(2,46,"當(dāng)前節(jié)次:",0);</p><p>  show_Section();</p><p>  Display_Str_at_xy(75,46," 狀態(tài):",0);</p><p>  Display

83、_Str_at_xy(117,46,"暫停",1);</p><p>  Display_Str_at_xy(2,68,"本節(jié)剩余時(shí)間:",0);</p><p>  Display_Str_at_xy(90,68,"12",0);</p><p>  Display_Str_at_xy(106,68,&q

84、uot;:",0);</p><p>  Display_Str_at_xy(114,68,"00",0);</p><p>  Display_Str_at_xy(2,90,"當(dāng)前進(jìn)攻方:",0);</p><p>  Display_Str_at_xy(74,90,"A",0);</p&

85、gt;<p>  Display_Str_at_xy(2,112,"進(jìn)攻剩余時(shí)間:",0);</p><p>  Display_Str_at_xy(90,112,"24",0);</p><p><b>  }</b></p><p><b>  /*</b><

86、;/p><p><b>  * 按鍵檢測(cè)</b></p><p><b>  */</b></p><p>  void check_key()</p><p><b>  {</b></p><p>  uchar score=0;</p>

87、<p><b>  //加分</b></p><p>  if((Add_1==0||Add_2==0||Add_3==0)&&status==1)</p><p><b>  { </b></p><p>  if(Add_1==0)</p><p><b> 

88、 score=1;</b></p><p>  else if(Add_2==0)</p><p><b>  score=2;</b></p><p>  else if(Add_3==0)</p><p><b>  score=3; </b></p><p>

89、;  if(team==0)</p><p><b>  {</b></p><p>  A_Score+=score;</p><p>  Show_Score_A();</p><p><b>  status=0;</b></p><p><b>  team

90、=1;</b></p><p><b>  ET0 = 0; </b></p><p><b>  TR0 = 0;</b></p><p>  show_status();</p><p><b>  }</b></p><p>  els

91、e if(team==1)</p><p><b>  {</b></p><p>  B_Score+=score;</p><p>  Show_Score_B();</p><p><b>  status=0;</b></p><p><b>  team

92、=0;</b></p><p><b>  ET0 = 0; </b></p><p><b>  TR0 = 0;</b></p><p>  show_status();</p><p><b>  }</b></p><p>  A_t

93、ime=24;</p><p>  B_time=24; </p><p><b>  }</b></p><p><b>  //下一節(jié)</b></p><p>  if(next_section==0&&section<=4)</p><p><

94、;b>  {</b></p><p>  next_section=1;</p><p>  section++;</p><p>  show_Section();</p><p><b>  MM=12;</b></p><p><b>  SS=0;</b&

95、gt;</p><p><b>  team=0;</b></p><p>  A_time=24;</p><p>  B_time=24;</p><p><b>  count=0;</b></p><p><b>  status=0;</b>&

96、lt;/p><p><b>  ET0 = 0; </b></p><p><b>  TR0 = 0;</b></p><p>  show_attacker();</p><p>  show_status();</p><p><b>  }</b>&

97、lt;/p><p><b>  //A隊(duì)進(jìn)攻</b></p><p>  if(A_attack==0)</p><p><b>  {</b></p><p><b>  team=0;</b></p><p>  A_time=24;</p>

98、<p>  B_time=24;</p><p>  show_attacker();</p><p><b>  }</b></p><p><b>  //B隊(duì)進(jìn)攻</b></p><p>  if(B_attack==0)</p><p><b>

99、;  {</b></p><p><b>  team=1;</b></p><p>  B_time=24;</p><p>  A_time=24;</p><p>  show_attacker();</p><p><b>  }</b></p>

100、;<p><b>  //啟動(dòng)/暫停</b></p><p>  if(start_or_stop==0)</p><p><b>  {</b></p><p>  start_or_stop=1;</p><p>  if(status==0)</p><p&g

101、t;<b>  {</b></p><p>  show_attacker();</p><p><b>  status=1;</b></p><p>  TH0 = 0x3C;</p><p>  TL0 = 0xB0;</p><p><b>  ET0 =

102、 1; </b></p><p><b>  TR0 = 1;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>&l

103、t;b>  status=0;</b></p><p><b>  ET0 = 0; </b></p><p><b>  TR0 = 0;</b></p><p><b>  }</b></p><p>  show_status();</p>

104、<p><b>  }</b></p><p><b>  //復(fù)位</b></p><p>  if(reset==0)</p><p><b>  {</b></p><p>  A_Score=0;</p><p>  B_Score=

105、0;</p><p>  section=1;</p><p><b>  MM=12;</b></p><p>  Last_MM=12;</p><p><b>  SS=0;</b></p><p><b>  team=0;</b></p&

106、gt;<p>  A_time=24;</p><p>  B_time=24;</p><p><b>  count=0;</b></p><p><b>  status=0;</b></p><p><b>  ET0 = 0; </b></p>

107、;<p><b>  TR0 = 0;</b></p><p>  show_Section();</p><p>  show_attacker();</p><p>  show_status();</p><p>  Show_Score_B();</p><p>  Show

108、_Score_A();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  /*</b></p><p><b>  * 定時(shí)器0中斷</b></p><p><b>

109、;  */</b></p><p>  void time0(void) interrupt 1</p><p><b>  {</b></p><p>  uchar a=0,i=0;</p><p><b>  TR0 = 0;</b></p><p>&l

110、t;b>  ET0 = 0; </b></p><p>  TH0 = 0x3C;</p><p>  TL0 = 0xB0;//50000(T)*0.5=25000us=25ms</p><p><b>  count++;</b></p><p>  if(count>38)</p

111、><p><b>  {</b></p><p><b>  count=0;</b></p><p><b>  if(SS==0)</b></p><p><b>  {</b></p><p><b>  if(MM==

112、0)</b></p><p><b>  {</b></p><p>  next_section=0;</p><p>  for(i=0;i<25;i++)</p><p><b>  {</b></p><p>  sounder(80);</

113、p><p><b>  delay(5);</b></p><p><b>  }</b></p><p><b>  a++;</b></p><p><b>  }</b></p><p><b>  else </

114、b></p><p><b>  {</b></p><p><b>  SS=59;</b></p><p><b>  MM--;</b></p><p><b>  }</b></p><p><b>  }&

115、lt;/b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  SS--;</b></p><p><b>  }</b></p><p>  if(team==

116、0)</p><p><b>  {</b></p><p>  if(A_time<1)</p><p><b>  {</b></p><p>  start_or_stop=0;</p><p><b>  team=1;</b></p

117、><p>  A_time=24;</p><p>  B_time=24;</p><p>  for(i=0;i<25;i++)</p><p><b>  {</b></p><p>  sounder(80);</p><p><b>  delay(

118、5);</b></p><p><b>  }</b></p><p><b>  a++;</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  A_time

119、--; </p><p><b>  }</b></p><p>  else if(team==1)</p><p><b>  {</b></p><p>  if(B_time<1)</p><p><b>  {</b></p>

120、<p>  start_or_stop=0;</p><p><b>  team=0;</b></p><p>  A_time=24;</p><p>  B_time=24;</p><p>  for(i=0;i<25;i++)</p><p><b>  {

121、</b></p><p>  sounder(80);</p><p><b>  delay(5);</b></p><p><b>  }</b></p><p><b>  a++;</b></p><p><b>  }&

122、lt;/b></p><p><b>  else</b></p><p>  B_time--; </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(a==0)</

123、b></p><p><b>  {</b></p><p><b>  ET0 = 1; </b></p><p><b>  TR0 = 1;</b></p><p><b>  }</b></p><p><b&g

124、t;  }</b></p><p>  void main()</p><p><b>  {</b></p><p>  LCD_Initialise();</p><p><b>  buzzer=0;</b></p><p>  show_maker();&

125、lt;/p><p><b>  while(1)</b></p><p>  if(start_or_stop==0)</p><p><b>  break;</b></p><p><b>  cls();</b></p><p>  Draw_Menu

126、_UI();</p><p>  TMOD = 0x01;</p><p>  TH0 = 0x3C;</p><p>  TL0 = 0xB0;</p><p><b>  ET0 = 0; </b></p><p><b>  TR0 = 0;</b></p>

127、<p><b>  EA = 1;</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  check_key();</p><p>  show_section_time();</p>

128、<p>  show_attack_time();</p><p><b>  }</b></p><p><b>  }</b></p><p>  /********************************************************************LCD

129、_160128.c</p><p>  *******************************************************************/</p><p>  #include <stdarg.h> </p><p>  #include <stdio.h> </p><p>  

130、#include <math.h> </p><p>  #include <intrins.h> </p><p>  #include <absacc.h> </p><p>  #include <string.h> </p><p>  #include <LCD_160128.h

131、> </p><p>  #define LCMDW XBYTE[0x8000]</p><p>  #define LCMCW XBYTE[0x8100]</p><p>  #define ASC_CHR_WIDTH 8 </p><p>  #define ASC_CHR_HEIGHT 12 </p><p&

132、gt;  #define HZ_CHR_HEIGHT 12 </p><p>  #define HZ_CHR_WIDTH 12 </p><p>  sbit RESET=P3^3;</p><p>  uchar code LCD_WIDTH = 20; </p><p>  uchar code LCD_HEIGHT = 128; &l

133、t;/p><p>  uchar code ASC_MSK[96*12]={ </p><p>  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff, </p><p>  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// &

134、#39; '</p><p>  0x00,0x30,0x78,0x78,0x78,0x30,0x30,0x00,0x30,0x30,0x00,0x00,// '!' </p><p>  0x00,0x66,0x66,0x66,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// '"' </p>

135、;<p>  0x00,0x6c,0x6c,0xfe,0x6c,0x6c,0x6c,0xfe,0x6c,0x6c,0x00,0x00,// '#' </p><p>  0x30,0x30,0x7c,0xc0,0xc0,0x78,0x0c,0x0c,0xf8,0x30,0x30,0x00,// '$' </p><p>  0x00,0x00,

136、0x00,0xc4,0xcc,0x18,0x30,0x60,0xcc,0x8c,0x00,0x00,// '%' </p><p>  0x00,0x70,0xd8,0xd8,0x70,0xfa,0xde,0xcc,0xdc,0x76,0x00,0x00,// '&' </p><p>  0x00,0x30,0x30,0x30,0x60,0x00,

137、0x00,0x00,0x00,0x00,0x00,0x00,// ''' </p><p>  0x00,0x0c,0x18,0x30,0x60,0x60,0x60,0x30,0x18,0x0c,0x00,0x00,// '(' </p><p>  0x00,0x60,0x30,0x18,0x0c,0x0c,0x0c,0x18,0x30,0x60,

138、0x00,0x00,// ')' </p><p>  0x00,0x00,0x00,0x66,0x3c,0xff,0x3c,0x66,0x00,0x00,0x00,0x00,// '*' </p><p>  0x00,0x00,0x00,0x18,0x18,0x7e,0x18,0x18,0x00,0x00,0x00,0x00,// '+'

139、 </p><p>  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x60,0x00,// ',' </p><p>  0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,// '-' </p><p>  

140、0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x00,0x00,// '.' </p><p>  0x00,0x00,0x02,0x06,0x0c,0x18,0x30,0x60,0xc0,0x80,0x00,0x00,// '/' </p><p>  0x00,0x7c,0xc6,0xce,0xde

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論