版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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é)次等信息,并可通過(guò)按鍵來(lái)加分,暫停時(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ì)分的目的. 近年來(lái)隨著計(jì)算機(jī)在社會(huì)領(lǐng)域的滲透和大規(guī)模集成電路的發(fā)展,單片機(jī)的應(yīng)用正在不斷地走向深入,由于它具有功能強(qiáng),體積小,功耗低,價(jià)格便宜,工作可靠,使用方便等特點(diǎn),因此特別適合于與控制有關(guān)的系統(tǒng),越來(lái)越廣泛地應(yīng)用于自動(dòng)控制,智能化儀器,儀表,數(shù)據(jù)采集,軍工產(chǎn)品以及家用電器等各個(gè)領(lǐng)域,單片機(jī)往往是作為一個(gè)核心部件來(lái)使
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ī)通過(guò)軟件方法來(lái)實(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),以及通過(guò)按鍵加分,暫停時(shí)間,攻守方互換,進(jìn)入下一節(jié)等操作,還要通過(guò)蜂鳴器表現(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> 通過(guò)160128LCD顯示各種計(jì)分計(jì)時(shí)信息。</p><p> 通過(guò)控制鍵實(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é)電工作模式??臻e方式停止CPU的工作,但允許RAM,定時(shí)/計(jì)數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到下一個(gè)硬件復(fù)位。</p><p><b> 2.管腳說(shuō)明</b></p><p><b> Vcc:電源電壓</b></p><p><b&
18、gt; GND:地</b></p><p> P0 :P0 口是一組8 位漏極開(kāi)路型雙向I/O 口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時(shí),每位能吸收電流的方式驅(qū)動(dòng)8個(gè)TTL邏輯門電路,對(duì)端口寫“1”可作為高阻抗輸入端用。在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器時(shí),這組口線分時(shí)轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)用,在訪問(wèn)期間激活內(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”,通過(guò)內(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”,通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口,作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(IIL)。在訪問(wèn)外部程序存儲(chǔ)器或16位地址的外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行MOVX@DPTR指令)時(shí),P2口送出高8位地址數(shù)據(jù)。在訪問(wèn)8 位地址的外部數(shù)據(jù)存儲(chǔ)器(如執(zhí)行MOVX@RI
21、 指令)時(shí),P2 口線上的內(nèi)容(也即特殊功能寄存器(SFR)區(qū)中R2寄存器的內(nèi)容),在整個(gè)訪問(wèn)期間不改變。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)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳
25、過(guò)一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無(wú)效。 </p><p> /PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問(wèn)外部數(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:來(lái)自反向振蕩器的輸出。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.操作說(shuō)明</b></p><p> 圖3-3 PG160128引腳說(shuō)明</p><p> 圖3-4 PG160128內(nèi)部結(jié)構(gòu)及時(shí)序圖</p><p> 圖3-5 讀數(shù)據(jù)時(shí)序圖與讀/寫時(shí)間表</p><p> 圖3-6 設(shè)置顯示起始說(shuō)明</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、通過(guò)控制鍵實(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); // 寫無(wú)參數(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)前地址功能說(shuō)</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ù): 無(wú)。</p><p><b> 返 回 值:無(wú)
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ù): 無(wú)。</p><p><b> 返 回 值:無(wú)。</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ù): 無(wú)。</p><p><b> 返 回 值:無(wú)。</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> 通過(guò)本次課程設(shè)計(jì)增加了我對(duì)單片機(jī)各模塊功能的了解。實(shí)驗(yàn)過(guò)程讓我更加了解并進(jìn)一步掌握了中斷,定時(shí)計(jì)數(shù),鍵盤等程序編寫。以及更加懂得了通過(guò)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ì)分效果具有較高的可用性。還可以通過(guò)修改程序,增加加時(shí)賽更好的完善該系統(tǒng)。</p><p> 液晶顯示技術(shù)的普及應(yīng)用和發(fā)展,給儀器、設(shè)備的小型化及智能化帶來(lái)了光輝的前景,特別是點(diǎn)陣圖形式液晶顯示模塊,它具有體積小、重量輕、低電
45、壓、底功耗之優(yōu)點(diǎn),因而在顯示內(nèi)容和顯示功能等方面表現(xiàn)出了獨(dú)特的性能。由于液晶顯示器已成為日常工作和生活中各種顯示儀器、儀表、和袖珍電子產(chǎn)品的重要組成部分,因此對(duì)于點(diǎn)陣圖形液晶顯示器件(模塊)的開(kāi)發(fā)、設(shè)計(jì)、應(yīng)用和研究對(duì)于將來(lái)的從事有關(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&§ion<=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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)報(bào)告-籃球計(jì)時(shí)計(jì)分器
- 單片機(jī)課程設(shè)計(jì)——籃球計(jì)時(shí)計(jì)分器
- 單片機(jī)課程設(shè)計(jì)—籃球計(jì)時(shí)計(jì)分器
- 單片機(jī)課程設(shè)計(jì)——籃球計(jì)時(shí)計(jì)分器
- 單片機(jī)課程設(shè)計(jì)—籃球計(jì)時(shí)計(jì)分器
- 單片機(jī)籃球計(jì)時(shí)計(jì)分器課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)——籃球計(jì)時(shí)計(jì)分器 - 副本
- -基于單片機(jī)的籃球計(jì)時(shí)計(jì)分器設(shè)計(jì)
- 單片機(jī)c51籃球計(jì)時(shí)計(jì)分器課程設(shè)計(jì)
- 基于單片機(jī)的籃球計(jì)時(shí)計(jì)分器設(shè)計(jì)設(shè)計(jì)
- 課程設(shè)計(jì)--- 基于單片機(jī)的籃球賽計(jì)時(shí)計(jì)分器的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---籃球比賽計(jì)分計(jì)時(shí)器
- 綜合課程設(shè)計(jì)--籃球計(jì)時(shí)計(jì)分器
- 單片機(jī)課程設(shè)計(jì)---單片機(jī)籃球計(jì)分器
- 畢業(yè)設(shè)計(jì)---基于單片機(jī)的籃球計(jì)時(shí)計(jì)分器設(shè)計(jì)
- 課程設(shè)計(jì)-- 籃球賽計(jì)時(shí)計(jì)分器
- 基于單片機(jī)籃球賽計(jì)時(shí)計(jì)分器設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 基于51單片機(jī)的籃球計(jì)時(shí)計(jì)分器畢業(yè)論文
- 籃球計(jì)時(shí)計(jì)分器設(shè)計(jì)
- 基于單片機(jī)的籃球比賽計(jì)時(shí)計(jì)分系統(tǒng)設(shè)計(jì).pdf
評(píng)論
0/150
提交評(píng)論