單片機(jī)籃球比賽記分器
《單片機(jī)籃球比賽記分器》由會(huì)員分享,可在線閱讀,更多相關(guān)《單片機(jī)籃球比賽記分器(40頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、 DA CHANGCHUN INSTITUTE OF TECHNOLOGY 籃球比賽記分器 The Game Of Basketball Scoring Device 設(shè)計(jì)題目: 籃球比賽記分器 學(xué)院名稱: 電氣與信息工程學(xué)院 專業(yè)名稱: 電子信息工程 任務(wù)分配表 班級(jí) 學(xué)號(hào) 姓名 完成主要任務(wù) 電子1042 08 PCB的繪制仿真與實(shí)現(xiàn) 電子1042 13 程序的修
2、改 PCB的繪制仿真與實(shí)現(xiàn)PROTEUS原理圖繪制與仿真 電子1042 35 文檔的編寫 程序的修改 PROTEUS原理圖繪制與仿真 籃球比賽記分器 摘 要: 本文設(shè)計(jì)了一個(gè)籃球比賽記分器主要利用單片機(jī)AT89C51作為核心元件,利用3組4位共陽極的數(shù)碼管作為顯示器件,以C語言作為編程語言,在Protues和Keil搭建的軟件仿真平臺(tái)下進(jìn)行仿真,本設(shè)計(jì)包含了AT89C51系列單片機(jī)的最小系統(tǒng)的構(gòu)成,同時(shí)在此基礎(chǔ)上擴(kuò)展了一些實(shí)用性強(qiáng)的外圍接口,可以進(jìn)一步了解譯碼器74LS247的應(yīng)用,LED七段數(shù)碼管的結(jié)構(gòu)和工作原理,主要實(shí)現(xiàn)了計(jì)時(shí)和顯示A/B隊(duì)的分?jǐn)?shù),
3、并能及時(shí)進(jìn)行加分,減分,鳴笛警示等功能。本系統(tǒng)具有成本低廉、性能穩(wěn)定、高準(zhǔn)確度顯示、操作方便且易攜帶等特點(diǎn)。廣泛適合各類學(xué)校和小團(tuán)體作為賽程計(jì)分。 關(guān)鍵詞:AT89C51單片機(jī);74LS247;七段數(shù)碼管;仿真;嵌入式 0 引言 進(jìn)入21世紀(jì),伴隨著電子,信息通信技術(shù)的應(yīng)用與普及開發(fā),人們對電子技術(shù)的要求也越來越高,目前嵌入式單片機(jī)滲透到我們生活的各個(gè)領(lǐng)域。單片機(jī)是一種集成在電路芯片,是采用超大規(guī)模集成電路技術(shù),把具有數(shù)據(jù)處理能力的中央處理器CPU、隨機(jī)存儲(chǔ)器RAM、只讀存儲(chǔ)器ROM、多種I/O口和中斷系統(tǒng)、定時(shí)器/計(jì)時(shí)器等功能集成到一塊硅片上構(gòu)成的一個(gè)小而完善的計(jì)算機(jī)系
4、統(tǒng)。按照歷史性、本質(zhì)性、普遍性要求,嵌入式系統(tǒng)應(yīng)定義為:“嵌入到對象體系中的專用計(jì)算機(jī)系統(tǒng)”,可分軟件部分和硬件部分,而當(dāng)代單片機(jī)系統(tǒng)已經(jīng)不再只在裸機(jī)環(huán)境下開發(fā)和使用,大量專用的嵌入式操作系統(tǒng)被廣泛應(yīng)用在單片機(jī)上。所以,以MCU為核心,就是各種各樣的單片機(jī),是嵌入式硬件部分的實(shí)現(xiàn)方式之一,它主要是因?yàn)榘烟幚砥骱痛鎯?chǔ)器等部件集成在一塊芯片上。 體育比賽計(jì)時(shí)計(jì)分器是對體育比賽過程中所產(chǎn)生的時(shí)間、比分等數(shù)據(jù)進(jìn)行快速采集記錄、加工處理、傳遞利用的工具?;@球比賽的計(jì)時(shí)計(jì)分器是一種得分類型的工具。雖然籃球比賽中很早就開始研究應(yīng)用了電子計(jì)分器,但通常都是利用模擬電子器件、數(shù)字電子器件或是模擬、數(shù)字混合
5、組成的,其穩(wěn)定性和高準(zhǔn)確度計(jì)分仍存在一些問題。以嵌入式單片機(jī)為核心,利用3組4位共陽極的數(shù)碼管作為顯示器件的籃球比賽計(jì)分屏,計(jì)分準(zhǔn)確,具有體積小,重量輕,能耗低,價(jià)格便宜,可靠性高,抗干擾能力強(qiáng)和使用方便等獨(dú)特的優(yōu)點(diǎn)。 1 系統(tǒng)方案 我們小組共提出了兩種數(shù)碼管顯示方案:一是共陽極數(shù)碼管靜態(tài)顯示,二是共陽極數(shù)碼管動(dòng)態(tài)顯示。 共陽數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極的數(shù)碼管。共陽數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極接地,當(dāng)某一字段發(fā)光二極管的陽極為低電平時(shí),相應(yīng)字段就點(diǎn)亮。反之,相應(yīng)字段就不亮。 共陽極數(shù)碼管靜態(tài)顯示:靜態(tài)顯示就是顯示驅(qū)動(dòng)電路具有輸出鎖存功能,即各個(gè)LE
6、D的顯示字符一經(jīng)確定,相應(yīng)的段碼將維持輸出不變,直到送入另一個(gè)字符的段碼為止。正因?yàn)槿绱?,靜態(tài)顯示器的亮度都比較高。靜態(tài)顯示的程序設(shè)計(jì),是將一個(gè)兩位數(shù)的個(gè)位與十位分開,并且用查表指令,輸出對應(yīng)位的表格代碼。 共陽極數(shù)碼管動(dòng)態(tài)顯示:動(dòng)態(tài)顯示,是數(shù)碼管有一個(gè)I/O口控制LED片的多段復(fù)用,共陽極分別由相應(yīng)的I/O口線控制,形成各片的分時(shí)選通。若要各位數(shù)碼管能夠同時(shí)顯示出與本位相應(yīng)的顯示字符,就必須采用動(dòng)態(tài)顯示方式,即在某一時(shí)刻,讓某一位的位選線處于選通狀態(tài),而且其他各位的位選線處于關(guān)閉狀態(tài),這樣在同一時(shí)刻,兩個(gè)數(shù)碼管只有選通的那一位顯示字符,而另一個(gè)是滅著的。同樣,在下一時(shí)刻,只讓第二個(gè)的位選線
7、處于選通狀態(tài),另一位選線關(guān)閉,如此循環(huán)下去,就可以使兩位數(shù)碼管顯示出所要顯示的字符。雖然這些字符不是在同一時(shí)刻出現(xiàn),但由于LED片燈的余暉和人眼的視覺暫留作用,只要每位顯示間隔足夠短,就可以造成兩位同時(shí)亮的假象,達(dá)到同時(shí)顯示的效果。設(shè)計(jì)基本與靜態(tài)設(shè)計(jì)相同,不同之處是在多了位選信號(hào)。在程序設(shè)計(jì)中在每次輸出字符時(shí),都要給相應(yīng)的那位進(jìn)行置位,另一位復(fù)位,確保每次只有一個(gè)數(shù)碼管亮。 數(shù)碼管靜態(tài)顯示需要靜態(tài)驅(qū)動(dòng):靜態(tài)驅(qū)動(dòng)也稱直流驅(qū)動(dòng),靜態(tài)驅(qū)動(dòng)是指每個(gè)數(shù)碼管的每一個(gè)段碼都有一個(gè)單片機(jī)的I/O端口進(jìn)行驅(qū)動(dòng),或者使用BCD碼二/十進(jìn)位轉(zhuǎn)換器進(jìn)行驅(qū)動(dòng),靜態(tài)驅(qū)動(dòng)的優(yōu)點(diǎn)是編程簡單,數(shù)據(jù)穩(wěn)定,顯示亮度高,無閃爍,占
8、用CPU時(shí)間少,缺點(diǎn)是功耗比較大,占用I/O端口多,如驅(qū)動(dòng)5個(gè)數(shù)碼管靜態(tài)顯示則需要58=40個(gè)I/O端口來驅(qū)動(dòng),而一個(gè)89S52單片機(jī)可用的I/O端口才32個(gè)。故實(shí)際應(yīng)用時(shí)必須增加位驅(qū)動(dòng)器進(jìn)行驅(qū)動(dòng),增加了硬體電路的復(fù)雜性。 數(shù)碼管動(dòng)態(tài)顯示需要?jiǎng)討B(tài)驅(qū)動(dòng):動(dòng)態(tài)驅(qū)動(dòng)是將所數(shù)碼管的8個(gè)顯示片段的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極COM端增加位選通控制電路,位選通有各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字型碼時(shí),所有數(shù)碼管都接受到相同的字型碼,將需要顯示的數(shù)碼管的選通COM端電路的控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會(huì)亮,通過分時(shí)輪流控制各個(gè)LED數(shù)碼管的COM端,就使各個(gè)數(shù)碼管輪流受
9、控顯示,這就是動(dòng)態(tài)驅(qū)動(dòng)。動(dòng)態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功能更低、硬件電路也較靜態(tài)顯示簡單。 經(jīng)方案對比和考慮設(shè)計(jì)要求和器件的限制,我組的課程設(shè)計(jì)采用的是共陽極數(shù)碼管的動(dòng)態(tài)顯示。 2 系統(tǒng)硬件電路 該系統(tǒng)硬件電路包括:單片機(jī)AT89C51、時(shí)鐘電路、復(fù)位電路、電源電路、按鍵控制電路、計(jì)分電路、計(jì)時(shí)電路、報(bào)警電路。軟件包括用Keil 進(jìn)行C語言編程,用Protues進(jìn)行仿真,具體系統(tǒng)硬件結(jié)構(gòu)框圖如圖2-1所示。 按鍵控制 電源電路 復(fù)位電路 時(shí)鐘電路 AT89C51 計(jì)分電路 計(jì)時(shí)電路 報(bào)警電路
10、 鳴笛示警 計(jì)分顯示 計(jì)時(shí)顯示 圖2-1 籃球賽計(jì)分器的硬件結(jié)構(gòu)框圖 (一)元器件的選擇 本設(shè)計(jì)主要選擇了以下元器件:如表2-2所示: 元器件名稱 所屬類 所屬子類 AT89C51(單片機(jī)) Microprocessor IC’s 8051 Family 7SEG-MPX4-CA-BKUE Optoelectrionics 7-Segment-Display 7SEG-MPX4-CA Optoelectrionics 7-Segment-Display SW-SPDT Switchs&Relays Miscellaneous
11、 74LS247 TTL 74LSseries All—Sub-Categories MINRES4.7K(電阻4.7K) Resistors All—Sub BUTTON All-Categories All—Sub-Categories 7404 TTL 74LSseries All—Sub-Categories SOUNDER Speakers&sounders All—Sub-Categories 表2-2 元器件列表 (二)單片機(jī)AT89C51簡介: AT89C51是一種帶4K字節(jié)FLASH存儲(chǔ)器(FPEROM——Flash Programmab
12、le and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除1000次。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C51是它的一種精簡版本。AT89C51單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。外形及引腳排列如圖2-3所示 圖2-3 AT89C51外形及引腳排列 主要特性: 與MCS-51 兼容 4K字
13、節(jié)可編程FLASH存儲(chǔ)器 壽命:1000寫/擦循環(huán) 數(shù)據(jù)保留時(shí)間:10年 全靜態(tài)工作:0Hz-24MHz 三級(jí)程序存儲(chǔ)器鎖定 1288位內(nèi)部RAM 32可編程I/O線 兩個(gè)16位定時(shí)器/計(jì)數(shù)器 5個(gè)中斷源 可編程串行通道 低功耗的閑置和掉電模式 片內(nèi)振蕩器和時(shí)鐘電路 管腳說明: VCC:供電電壓。 GND:接地。 P0口:P0口的8位皆為漏極開路輸出簡稱OD;內(nèi)部無上拉電阻,所以執(zhí)行輸出功能時(shí),外部必須接上拉電阻;若要實(shí)現(xiàn)輸入功能,必須先輸入高電平“1”,才能讀取該端口所連接的外部數(shù)據(jù);若系統(tǒng)連接外部存儲(chǔ)器,則 P0可作為地址總線和數(shù)據(jù)總線的多功能引腳,此時(shí)內(nèi)部具
14、有上拉電阻,無需外接上拉電阻。 P1口:P1口為8位,可位尋址的雙向I/O口;內(nèi)部具備約30千歐姆的上拉電阻,實(shí)現(xiàn)輸出功能時(shí),不需要連接外部上拉電阻;實(shí)現(xiàn)輸入功能時(shí),必須先輸入高電平“1”,才能讀取該端口所連接的外部數(shù)據(jù);P1口的8位類似漏極開路輸出,但內(nèi)部已接上上拉電阻,每個(gè)引腳可驅(qū)動(dòng)4個(gè)LS型TTL負(fù)載。 P2口:P2口為8位、可位尋址的雙向輸入/輸出口,內(nèi)部具備約30千歐姆的上拉電阻,實(shí)現(xiàn)輸出功能時(shí),不需要連接外部上拉電阻;實(shí)現(xiàn)輸入功能時(shí),必須先輸入高電平“1”,才能讀取該端口所連接的外部數(shù)據(jù);P2口的8位類似漏極開路輸出,但內(nèi)部已接上上拉電阻,每個(gè)引腳可驅(qū)動(dòng)4個(gè)LS型TTL負(fù)載;若
15、系統(tǒng)連接外部存儲(chǔ)器,而外部存儲(chǔ)器的地址線超過了8根時(shí),則P2可作為地址總線(A8-A15)的引腳。 P3口:P3口為8位,可位尋址的雙向I/O口;內(nèi)部具備約30千歐姆的上拉電阻,實(shí)現(xiàn)輸出功能時(shí),不需要連接外部上拉電阻;實(shí)現(xiàn)輸入功能時(shí),必須先輸入高電平“1”,才能讀取該端口所連接的外部數(shù)據(jù);P3口的8位類似漏極開路輸出,但內(nèi)部已接上上拉電阻,每個(gè)引腳可驅(qū)動(dòng)4個(gè)LS型TTL負(fù)載。P3口也可作為AT89C51的一些特殊功能口,如下表2-4所示: I/O口 備選功能/特殊功能 P3.0/RXD 串行輸入口 P3.1/TXD 串行輸出口 P3.2/ 外部中斷0 P3.3/ 外部中斷
16、1 P3.4/T0 計(jì)時(shí)器0外部輸入 P3.5/T1 計(jì)時(shí)器1外部輸入 P3.6/ 外部數(shù)據(jù)存儲(chǔ)器寫選通 P3.7/ 外部數(shù)據(jù)存儲(chǔ)器讀選通 表2-4 AT89C51的一些特殊功能口 RST:復(fù)位信號(hào)。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間,用以完成單片機(jī)的復(fù)位初始化操作。 ALE/:地址鎖存控制信號(hào)。在系統(tǒng)擴(kuò)展,訪問外部存儲(chǔ)器時(shí),ALE用于控制把P0口輸出的低8位的地址鎖存起來,以實(shí)現(xiàn)低位地址和數(shù)據(jù)的隔離。此外,由于ALE是以晶振1/6的固定頻率輸出脈沖,因此可作為外部時(shí)鐘或者外部定時(shí)脈沖使用。ALE只有在執(zhí)行MOVX,MOVC指令時(shí),ALE才起作
17、用。 :外部程序存儲(chǔ)器讀選通信號(hào)。在讀外部ROM時(shí),有效(低電平有效),以實(shí)現(xiàn)外部ROM的讀操作。在具體應(yīng)用時(shí),外部ROM讀取時(shí),在每個(gè)機(jī)器周期會(huì)動(dòng)作兩次,外部RAM讀取時(shí),兩個(gè)信號(hào)被跳過不會(huì)輸出。 /VPP:訪問程序存儲(chǔ)控制信號(hào)。當(dāng)信號(hào)保持低電平時(shí),對ROM的讀操作僅僅限定在外部程序存儲(chǔ)器,當(dāng)信號(hào)為高電平或者懸空時(shí),對ROM的讀操作是從內(nèi)部程序存儲(chǔ)器開始,并可延至外部程序存儲(chǔ)器。 XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。 XTAL2:來自反向振蕩器的輸出。 (三)晶振電路設(shè)計(jì): 圖2-5晶振電路圖 晶振,就象是單片機(jī)的核心部件,提供時(shí)鐘激勵(lì),保證單片機(jī)
18、內(nèi)部和外部電路的時(shí)序邏輯電路協(xié)調(diào)動(dòng)作。 (四)復(fù)位電路的設(shè)計(jì): 圖2-6 復(fù)位電路圖 復(fù)位一般可用上電復(fù)位、按鍵復(fù)位兩種方式完成,我們采用按鍵復(fù)位,根據(jù)元器件的要求時(shí)間常數(shù),可以選定電容和電阻的規(guī)格。 (五)按鍵控制模塊 鍵盤往往分成編碼鍵盤和非編碼鍵盤,編碼鍵盤由按鍵和鍵處理電路組成,直接為計(jì)算機(jī)提供經(jīng)過編碼的按鍵鍵碼;而非編碼鍵盤則只提供按鍵,其余由計(jì)算機(jī)自己處理。非編碼鍵盤結(jié)構(gòu)簡單,可自由裁量設(shè)計(jì),非常適用于單片應(yīng)用系統(tǒng)。 1.按鍵特性與抖動(dòng)處理 按鍵是一種機(jī)械彈性開關(guān),當(dāng)鍵按下時(shí)閉合,松開時(shí)斷開。因?yàn)橛袡C(jī)械的接觸,在觸點(diǎn)閉合或斷開的瞬間會(huì)出現(xiàn)電壓抖動(dòng)。為了
19、避免鍵輸入錯(cuò)誤,必須進(jìn)行鍵抖動(dòng)的處理。去抖動(dòng)由硬件和軟件兩種方法:硬件方法就是在鍵盤中附加去抖動(dòng)電路消除抖動(dòng);而軟件方法則是采用時(shí)間延遲以躲避抖動(dòng),待觸點(diǎn)狀方法處理。 2.鍵盤接口及功能 非編碼鍵盤是所用按鍵組成的集合。為了保證鍵盤的正確輸入,鍵接口必備以下功能: (1)鍵掃描與識(shí)別,判斷有無鍵按下以及按鍵位置,鍵掃描與識(shí)別是通過“行掃描”與“列狀態(tài)”的配合來確定是否有鍵按下以及所在行、列的位置。所謂行掃描就是一次給每條行線送低電平,而其余各行線送高電平,并檢測對每一行掃描時(shí)所產(chǎn)生的列狀態(tài)。鍵盤掃描有下列三種方式: 程控掃描方式:只有單片機(jī)空閑時(shí)才調(diào)用掃描程序響應(yīng)用戶鍵入請求。 定時(shí)
20、掃描方式:單片機(jī)定時(shí)調(diào)用掃描程序?qū)︽I盤進(jìn)行掃描,即時(shí)響應(yīng)用戶鍵入請求。 中斷掃描方式:與中斷請求電路配合,當(dāng)有鍵按下時(shí)產(chǎn)生中斷請求,由單片機(jī)響應(yīng)并執(zhí)行中斷服務(wù)程序掃描鍵盤。 (2)去鍵抖動(dòng) 消除按鍵抖動(dòng)帶來的誤輸入。檢測鍵關(guān)閉后,延時(shí)10ms后再檢測一次,兩次檢測相同再進(jìn)一步進(jìn)行鍵處理。 (3)鍵編碼 生成易于處理的鍵碼。由于鍵位碼比較零亂,因此接下來的工作是根據(jù)需要把反映閉合鍵和鍵位置的鍵位碼換乘反映鍵功能的鍵碼。有了鍵碼,才好通過散轉(zhuǎn)指令把程序執(zhí)行到閉合鍵所對應(yīng)的服務(wù)程序上去。鍵碼既可以根據(jù)鍵位碼查詢表求得,也可以根據(jù)鍵碼編排規(guī)律計(jì)算得到。 (4)等待鍵釋放 為了保證鍵一次閉
21、合僅進(jìn)行一次處理,編鍵碼之后,再以延時(shí)掃描的方法等待鍵釋放。鍵釋放后鍵處理工作完成。 本系統(tǒng)設(shè)計(jì)除復(fù)位按鍵外共配置了8個(gè)獨(dú)立鍵盤來實(shí)現(xiàn)系統(tǒng)功能的控制。8個(gè)按鍵分別為KEY1(A隊(duì)加一鍵)連接到P3.0,KEY2(A隊(duì)減一鍵)連接到P3.1,KEY3(B隊(duì)加一鍵)連接到P3.4,KEY4(B隊(duì)減一鍵)連接到P3.5,AB轉(zhuǎn)換(上下半場換場時(shí)切換比分,連接到P3.3)、start(開關(guān),連接到P3.7)、蜂鳴器開關(guān)(連接到P3.2)計(jì)時(shí)器十分位控制(連接到P1.6) ,計(jì)時(shí)器分位控制(連接到P1.7) 本設(shè)計(jì)中主要采用獨(dú)立按鍵,按鍵擴(kuò)展電路如圖2-7 圖2-7 獨(dú)立按鍵擴(kuò)展電路
22、 (六) 數(shù)碼管顯示模塊 本設(shè)計(jì)的計(jì)時(shí)、計(jì)分功能的顯示均采用共陽數(shù)碼管顯示。 我們最常用的是七段式和八段式LED數(shù)碼管,八段比七段多了一個(gè)小數(shù)點(diǎn),其他的基本相同。所謂的八段就是指數(shù)碼管里有八個(gè)小LED發(fā)光二極管,通過控制不同的LED的亮滅來顯示出不同的字形。數(shù)碼管又分為共陽極和共陽極兩種類型,其實(shí)共陽極就是將八個(gè)LED的陽極連在一起,讓其接地,這樣給任何一個(gè)LED的另一端高電平,它便能點(diǎn)亮。而共陰極就是將八個(gè)LED的陰極連在一起。其原理圖如圖2-8: 引腳圖 共陽極 共陰極 圖2-8 共陰極和
23、共陽極八段數(shù)碼管原理圖 其中引腳圖的兩個(gè)COM端連在一起,是公共端,共陰數(shù)碼管要將其接地,共陽數(shù)碼管將其接正5伏電源。一個(gè)八段數(shù)碼管稱為一位,多個(gè)數(shù)碼管并列在一起可構(gòu)成多位數(shù)碼管,它們的段選線(即a,b,c,d,e,f,g,dp)連在一起,而各自的公共端稱為位選線。顯示時(shí),都從段選線送入字符編碼,而選中哪個(gè)位選線,那個(gè)數(shù)碼管便會(huì)被點(diǎn)亮。數(shù)碼管的8段,對應(yīng)一個(gè)字節(jié)的8位,a對應(yīng)最低位,dp對應(yīng)最高位。所以如果想讓數(shù)碼管顯示數(shù)字0,那么共陰數(shù)碼管的字符編碼為00111111,即0x3f;共陽數(shù)碼管的字符編碼為11000000,即0xc0。可以看出兩個(gè)編碼的各位正好相反。如下圖: 共陰示例共陽示
24、例 圖2-9 共陰極和共陽極八段數(shù)碼管顯示舉例 (七)蜂鳴器警示模塊 蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計(jì)算機(jī)、打印機(jī)、復(fù)印機(jī)、報(bào)警器、電子玩具、汽車電子設(shè)備、電話機(jī)、定時(shí)器等電子產(chǎn)品中作發(fā)聲器件。在比賽結(jié)束時(shí),蜂鳴器自動(dòng)響,再通過按鍵關(guān)閉它。其擴(kuò)展電路如圖: 圖2-10 蜂鳴器擴(kuò)展電路圖 (八)BCD七段數(shù)碼管驅(qū)動(dòng)/譯碼器 常用的BCD對七段顯示器譯碼器/驅(qū)動(dòng)器的IC包裝設(shè)計(jì)有TTL之7446、7447、7448、7449與CMOS之4511等。其中7446、7447必須使用共陽極七段數(shù)碼顯示器,7448、7449、4511等則使用共陰極七段顯示
25、器。 74LS247的功能用于將BCD碼轉(zhuǎn)化成數(shù)碼塊中的數(shù)字,通過它解碼,可以直接把數(shù)字轉(zhuǎn)化為數(shù)碼管的顯示數(shù)字,從而簡化了程序,節(jié)約單片機(jī)的I/O開銷,因此是一個(gè)非常好的芯片。 74LS247的引腳如下圖2-11所示: 圖2-11 74LS247引腳圖 引腳的功能: (1)A、B、C、D為輸入端,abcdefg為輸出端。 當(dāng)輸入DCBA=0010時(shí),則輸出abcdefg=0010010,使數(shù)碼管顯示“2”; 當(dāng)輸入DCBA=0110時(shí),則輸出abcdefg=1100000,使數(shù)碼管顯示“6”;關(guān)系如表2-12所示: 輸入 D C
26、B A 輸出 F(a) F(b) F(c) F(d) F(e) F(f) F(g) 字形 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 0 1 1 0 0 0 0 1 0 0 1 0 1 1 0 1 1 0 1 2 0 0 1 1 1 1 1 1 0 0 1 3 0 1 0 0
27、 0 1 1 0 0 1 1 4 0 1 0 1 1 0 1 1 0 1 1 5 0 1 1 0 1 0 1 1 1 1 1 6 0 1 1 1 1 1 1 0 0 0 0 7 1 0 0 0 1 1 1 1 1 1 1 8 1 0 0 1 1 1 1
28、 1 0 1 1 9 表2-12 BCD七段譯碼真值表 (2)LT、RBI與BI/RBO為控制引腳,其功能分述如下: 74LS247電路是由與非門、輸入緩沖器和七個(gè)與或非門組成的BCD——7段譯碼器/驅(qū)動(dòng)器。7個(gè)與非門和一個(gè)驅(qū)動(dòng)電路成對連接,以產(chǎn)生可用的BCD數(shù)據(jù)及其補(bǔ)碼至7個(gè)與或非譯碼門。剩下的與非門和3個(gè)輸入緩沖器作為試燈輸入(LT)、滅燈輸入/動(dòng)態(tài)滅燈輸出(BI/RBO)以及動(dòng)態(tài)滅燈輸入(RBI)端。 該電路接受4位二進(jìn)制編碼——十進(jìn)制數(shù)(BCD)輸入并借助于輔助輸入端狀態(tài)將輸入數(shù)據(jù)譯碼后去驅(qū)動(dòng)一個(gè)七段顯示器。輸出結(jié)構(gòu)設(shè)計(jì)能承受7段顯示器所
29、需要的相當(dāng)高的高壓,驅(qū)動(dòng)顯示器各段所需要的高達(dá)24mA的電流可以由其高性能的輸出晶體管來直接提供。BCD輸入計(jì)數(shù)9以上的顯示圖案是鑒定輸入條件的唯一信號(hào)。 該電路有自動(dòng)前、后沿滅零控制(RBI和RBO)。試燈(LT)可在端處在高電平的任何時(shí)刻去進(jìn)行,該電路還含有一個(gè)滅燈輸入(BI)。它用來控制燈的亮度或禁止輸出。 1)需要0-15的輸出功能時(shí),滅燈輸入(BI)必須為開路或者保持在高電平狀態(tài),若不要滅掉十進(jìn)制零,則動(dòng)態(tài)滅燈輸入(RBI)必須開路或者處于高電平狀態(tài)。 2)當(dāng)?shù)碗娖街苯蛹拥綔鐭糨斎耄˙I)時(shí),不管其他任何輸入端的電平如何,所有段的輸出端都關(guān)死。 3)當(dāng)動(dòng)態(tài)滅燈輸入(RBI)和
30、輸入端A、B、C、D都處于低電平而試燈輸入(LT)為高電平時(shí),則所有段的輸出端進(jìn)入關(guān)閉且動(dòng)態(tài)滅燈輸出(RBO)處于低電平狀態(tài)。 4)當(dāng)滅燈輸入/動(dòng)態(tài)滅燈輸出(BI/RBO)開路或者保持在高電平狀態(tài),且將低電平加到試燈試燈輸入(LT)時(shí),所有段的輸出都得打開。 注:BI/RBO是用做滅燈(BI)與/或動(dòng)態(tài)滅燈輸出(RBO)的線與邏輯。 (9) 計(jì)分顯示屏的設(shè)計(jì)圖 圖2-13 計(jì)分顯示屏的設(shè)計(jì)圖 圖2-14 倒計(jì)時(shí)計(jì)分顯示屏的設(shè)計(jì)圖 3 系統(tǒng)軟件設(shè)計(jì) 籃球賽計(jì)時(shí)計(jì)分系統(tǒng)的軟件設(shè)計(jì)部分采用模塊化程序設(shè)計(jì),程序部分由主程序、計(jì)時(shí)計(jì)分刷新顯示程序模塊、數(shù)碼管
31、顯示記錄程序模塊等組成。 51單片機(jī)內(nèi)部有兩個(gè)16位可編程的定時(shí)器/計(jì)數(shù)器,分別稱為定時(shí)器/計(jì)數(shù)器0和定時(shí)器/計(jì)數(shù)器1,它們具有四種工作方式,其控制字和狀態(tài)均在相應(yīng)的特殊功能寄存器中,通過對控制寄存器的編程,就可方便地選擇適當(dāng)?shù)墓ぷ鞣绞?。特殊控制器有工作方式控制寄存器(TMOD),定時(shí)/計(jì)數(shù)器控制寄存器(TCON),中斷允許控制寄存器IE。定時(shí)/計(jì)數(shù)器的核心是的16位加法計(jì)數(shù)器,定時(shí)器T0的加法計(jì)數(shù)器用特殊功能寄存器TH0、TL0表示,TH0表示加法計(jì)數(shù)器的高8位,TL0表示加法計(jì)數(shù)器的低8位。TH1和TL1則分別表示定時(shí)/計(jì)數(shù)器T1的高8位和低8位。它們均是8位寄存器,在特殊功能寄存器中占
32、地址8AH-8DH。它們用于存放定時(shí)或計(jì)數(shù)的初始值。此外,內(nèi)部還有一個(gè)8位的工作方式寄存器TMOD和一個(gè)8位的控制寄存器TCON,用于選擇和控制定時(shí)/計(jì)數(shù)器的工作。這些寄存器可根據(jù)需要由程序讀寫。當(dāng)然16位加法計(jì)數(shù)器的輸入端每輸入一個(gè)脈沖,16位加法計(jì)數(shù)器的值自動(dòng)加1,當(dāng)計(jì)數(shù)器的計(jì)數(shù)值超過加法計(jì)數(shù)器字長所能表示的二進(jìn)制數(shù)的范圍而向第17位進(jìn)位,即計(jì)數(shù)溢出時(shí),置位定時(shí)中斷請求標(biāo)志,向CPU申請中斷。 1、工作方式寄存器TMOD TMOD用于控制T0和T1的工作方式,其格式如表3-1所示: 位 D7 D6 D5 D4 D3 D2 D1 D0 位符號(hào) GATE C/ M
33、1 M0 GATE C/ M1 M0 門控開關(guān) 計(jì)數(shù)/定時(shí) 方式選擇 門控開關(guān) 計(jì)數(shù)/定時(shí) 方式選擇 T1方式字段 T0方式字段 表3-1 方式控制寄存器TMOD 各位定義如下: M1,MO:工作方式控制位,可構(gòu)成表3-2所示四種工作方式: M1 M0 工作方式 說明 0 0 0 13位定時(shí)器; 0 1 1 16位計(jì)數(shù)器; 1 0 2 可自動(dòng)再裝載的8位計(jì)數(shù)器; 1 1 3 T0分成兩個(gè)獨(dú)立的8位計(jì)數(shù)器 表3-2 方式控制寄存器TMOD的工作方式 C/:計(jì)數(shù)工作方式/定時(shí)工作方式選擇位。置0時(shí),設(shè)置為定時(shí)工
34、作方式;置1時(shí),設(shè)置為計(jì)數(shù)工作方式。 GATE:門控位,用以決定是由軟件還是硬件啟動(dòng)/停止計(jì)數(shù)。GATE=0, /被封鎖,只要用軟件對TR0(或TR1)置“1”就啟動(dòng)了定時(shí)器;GATA=1時(shí),定時(shí)器/計(jì)數(shù)器的計(jì)數(shù)受外部引腳輸入電平的控制。 TMOD的所有位在復(fù)位后清0。TMOD不能位尋址,只能按字節(jié)操作設(shè)置工作方式。 2、定時(shí)/計(jì)數(shù)控制寄存器TCON TFl,TRl,TF0和TR0位用于定時(shí)器/計(jì)數(shù)器;IEl,ITl,IE0和IT0位用于中斷系統(tǒng)。其格式如表3-3所示: 位 D7 D6 D5 D4 D3 D2 D1 D0 位符號(hào) TF1 TR1 TF0 TR
35、0 IE1 IT1 IE0 IT0 表3-3 控制寄存器TCON 各位定義如下: TF1:定時(shí)器1溢出標(biāo)志位。當(dāng)定時(shí)器1計(jì)滿溢出時(shí),由硬件使TF1置“1”,并且申請中斷。進(jìn)入中斷服務(wù)程序后,由硬件自動(dòng)清“0”,在查詢方式下用軟件清“0”。 TR1:定時(shí)器1運(yùn)行控制位。由軟件清“0”關(guān)閉定時(shí)器1。當(dāng)GATE=1,且為高電平時(shí),TR1置“1”啟動(dòng)定時(shí)器1;當(dāng)GATE=0,TR1置“1”啟動(dòng)定時(shí)器1。 TF0:定時(shí)器0溢出標(biāo)志。其功能及操作情況同TF1。 TR0:定時(shí)器0運(yùn)行控制位。其功能及操作情況同TR1。 IE1:外部中斷1請求標(biāo)志位。 IT1:外部中斷1觸發(fā)方式選擇位
36、。當(dāng)IT1=0,為低電平觸發(fā)方式;當(dāng)IT1=1,為下降沿觸發(fā)方式。 IE0:外部中斷0請求標(biāo)志位。 IT0:外部中斷0觸發(fā)方式選擇位。 當(dāng)IT0=0,為低電平觸發(fā)方式;當(dāng)IT0=1,為下降沿觸發(fā)方式。 TCON中低4位與中斷有關(guān)。由于TCON是可以位尋址的,因而如果只清溢出或啟動(dòng)定時(shí)器工作,可以用位操作命令。 3、 聲音的產(chǎn)生 我們知道,聲音的產(chǎn)生是一種音頻振動(dòng)的效果。振動(dòng)的頻率越高,則為高音;振動(dòng)的頻率越低,則為低音。聲音的頻率范圍為20Hz-200kHz之間,人類耳朵比較容易辨識(shí)的聲音頻率范圍是200Hz-20kHz,一般音響電路是用正旋波信號(hào)驅(qū)動(dòng)喇叭,從而產(chǎn)生悅耳的音樂;在
37、數(shù)字電路里,則是用數(shù)字脈沖信號(hào)驅(qū)動(dòng)喇叭,從而產(chǎn)生聲音。若要AT89C51產(chǎn)生聲音,可利用程序來控制單片機(jī)某個(gè)I/O口的“高”電平或者“低”電平,則在該I/O口線上就能產(chǎn)生一定頻率的矩形波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時(shí)程序控制“高”、“低”電平的持續(xù)時(shí)間,就能改變輸出頻率,從而改變音調(diào)。 系統(tǒng)主程序流程圖如下: 停止 比賽結(jié)束 讀取功能鍵 等待按鍵釋放 N 比賽開始,并初始化 Y Y N 讀P3口的值 取出P3.6 啟動(dòng)按鍵是否按下 去抖 確認(rèn)是否有按鍵按下 B隊(duì)加1分 B隊(duì)減1分 N Y 將BCD碼轉(zhuǎn)化為7段碼顯示出來,并
38、確認(rèn)比賽是否結(jié)束 將當(dāng)前的分?jǐn)?shù)轉(zhuǎn)化為BCD碼 確認(rèn)按下的是哪個(gè)鍵 鳴笛休息 A隊(duì)減1分 A隊(duì)加1分 圖3-4 主程序流程圖 系統(tǒng)按鍵部分流程圖: 開始 Y Key4=0? 初始化定時(shí)器 N 比賽開始 設(shè)定比賽時(shí)間 B減一分 Y 時(shí)間到? Key1=0? N N A隊(duì)加一分 Y Y 蜂鳴器響 Key2=0? N Key=0? 開始 Y A隊(duì)減一分 YY
39、Y 關(guān)閉蜂鳴器 N Key3=0? 結(jié)束 Y B隊(duì)加一分 圖3-5 按鍵部分流程圖 (一)在主程序循環(huán)中,主要工作是掃描是否有鍵按下,若有鍵按下則要確認(rèn)是哪個(gè)鍵按下并做相應(yīng)的處理,并做同步顯示處理。 void main(void) { TMOD=0x01; //設(shè)置T0為工作方式1,作為16位計(jì)數(shù)器 TH0=(65535-50000)/256; //設(shè)置T0的高8位,并且T0的計(jì)數(shù)值為50ms TL0=(65535-50000)%256;
40、 //設(shè)置T0的低8位 music=0; //初值喇叭不響 EA=1; //開放所有中斷 ET0=1; //允許定時(shí)/計(jì)數(shù)器T0溢出中斷 EX0=1; //允許外部中斷0 IT0=1; //設(shè)置外部中斷0為邊沿觸發(fā)方式(下降沿) while(1) //無窮循環(huán),程序
41、一直運(yùn)行 { Key_Y(); //預(yù)置場次比賽時(shí)間 if(Star==0&&f!=0&&Puse!=0) //按下“開始鍵”,設(shè)置好比賽時(shí)間,并且未按“停止”鍵時(shí),比賽正式開始 { TR0=1; //啟動(dòng)定時(shí)器T0,開始計(jì)時(shí) Key_if(); //開始計(jì)分 } else { TR0=0; //比賽還未開始或比賽結(jié)束時(shí)間到,停止計(jì)時(shí) } Js_Jf_Scan();
42、 //將相應(yīng)的分?jǐn)?shù)、時(shí)間同步進(jìn)行顯示 } } (二)時(shí)間顯示設(shè)計(jì) 系統(tǒng)要實(shí)現(xiàn)時(shí)間的計(jì)時(shí)功能,所以要用定時(shí)/計(jì)數(shù)器的定時(shí)功能進(jìn)行時(shí)間處理,在本程序設(shè)計(jì)中,用一個(gè)定時(shí)50ms的時(shí)間中斷函數(shù)void Js_50ms(void),一個(gè)時(shí)間處理函數(shù)void Ptime(uchar)。 由于時(shí)間顯示屏用的是4位的數(shù)碼管進(jìn)行顯示,用動(dòng)態(tài)掃描顯示驅(qū)動(dòng),用void Js_Scan(void)處理動(dòng)態(tài)掃描顯示。 時(shí)間預(yù)置用按鍵實(shí)現(xiàn),首先進(jìn)行按鍵判斷處理,用void Key_Y(void)函數(shù)處理。 嵌入式籃球計(jì)分屏實(shí)現(xiàn)時(shí)間顯示屏的部分源程序如下: /************
43、*******設(shè)置場次比賽時(shí)間********************/ void Key_Y(void) { if(YK1==0) //初始狀態(tài),分鐘的十位為0 { delay(1); //延時(shí)去抖動(dòng) fs=fs+1; //分十位加1分 fy=fs*10+fg; //求出預(yù)置時(shí)間的分鐘值 f=fy; //中間變量 } if(YK2==0)
44、 //初始狀態(tài),分鐘的個(gè)位為0 { delay(1); //延時(shí)去抖動(dòng) fg=fg+1; //分個(gè)位加1分 fy=fs*10+fg; //求出預(yù)置時(shí)間的分鐘值 f=fy; //中間變量 } Js_Scan(); } /********T0中斷服務(wù)函數(shù),每隔50ms產(chǎn)生一次中斷********/ void Js_50ms(void)interrupt 1 using 1 //定時(shí)器T0中斷
45、,用工作寄存器組1 { TH0=(65535-50000)/256; //定時(shí)器T0的高8位 TL0=(65535-50000)%256; //定時(shí)器T0的低8位 num++; //每50ms累加一次 Ptime(num); //調(diào)用時(shí)間處理函數(shù) } /**********************時(shí)間處理函數(shù)********************/ void Ptime(uchar time) { if(time==20)
46、 //如果為1s(50ms*20=1s) { num=0; m++; //每到1s,計(jì)時(shí)器累加1次 ms=m/10; //秒的十位 mg=m%10; //秒的個(gè)位 if(m==60) //如果為1min { m=0; //秒鐘置0 mg=m%10; //秒鐘的個(gè)位置0 ms=m/10; //秒鐘的十位
47、置0 f--; //分鐘開始在預(yù)設(shè)的比賽時(shí)間基礎(chǔ)上倒計(jì)時(shí) fs=f/10; //分鐘的十位 fg=f%10; //分鐘的個(gè)位 if(f==0) //分鐘數(shù)倒計(jì)時(shí)到0 { TR0=0; //時(shí)間到,停止計(jì)時(shí) } } } } /****************數(shù)碼管動(dòng)態(tài)掃描顯示******************/ void Js_Scan(void) { uchar j;
48、 for(j=0;j<=5;j++) { S4=0;P0=LED_Num[mg];delay(1);S4=1; /*將秒鐘的個(gè)位傳遞給譯碼器,通過按鍵,實(shí)現(xiàn)邊沿跳變,并把結(jié)果譯成相應(yīng)的段碼顯示出來*/ S3=0;P0=LED_Num[ms];delay(1);S3=1; /*將秒鐘的十位傳遞給譯碼器,通過按鍵,實(shí)現(xiàn)邊沿跳變,并把結(jié)果譯成相應(yīng)的段碼顯示出來*/ S2=0;P0=LED_Num[fg];delay(1);S2=1; /*將分鐘的個(gè)位傳遞給譯碼器,通過按鍵,實(shí)現(xiàn)邊沿跳變,并把結(jié)果譯成相應(yīng)的段碼顯示出來*/ S1=0;P0=LED_Num[fs];delay(1)
49、;S1=1; /*將分鐘的十位傳遞給譯碼器,通過按鍵,實(shí)現(xiàn)邊沿跳變,并把結(jié)果譯成相應(yīng)的段碼顯示出來*/ } } (三)計(jì)分顯示設(shè)計(jì) 本系統(tǒng)是利用按鍵來實(shí)現(xiàn)兩隊(duì)的計(jì)分功能的,當(dāng)按一次加分鍵,在程序中要用兩個(gè)整形的變量作為A、B隊(duì)的分值計(jì)分器,程序里用sum及sum1分別表示B和A隊(duì)的分值。 如分別要在數(shù)碼管的每位上動(dòng)態(tài)掃描顯示出來,就必須對兩隊(duì)所得的分?jǐn)?shù)進(jìn)行分位計(jì)算。程序里分別用q、b、s、g表示B隊(duì)顯示屏的千位、百位、十位、個(gè)位;用q1、b1、s1、g1表示A隊(duì)顯示屏的千位、百位、十位、個(gè)位。通過按鍵判斷處理,判斷是加分還是減分,用函數(shù)void Key_if(void)來
50、實(shí)現(xiàn),用void Jf_Scan(void)函數(shù)進(jìn)行動(dòng)態(tài)掃描顯示分值。 嵌入式籃球計(jì)分屏計(jì)分顯示的部分實(shí)現(xiàn)程序如下: /*******************數(shù)碼管動(dòng)態(tài)掃描顯示********************/ void Jf_Scan(void) { uchar j; for(j=0;j<=5;j++) { KL4=0;P0=LED_Num[g1];delay(1);KL4=1; /*將A隊(duì)分?jǐn)?shù)的個(gè)位傳遞給譯碼器,通過按鍵,實(shí)現(xiàn)邊沿跳變,并把結(jié)果譯成相應(yīng)的段碼顯示出來*/ KL3=0;P0=LED_Num[s1];delay(1);KL3=1; /*將A隊(duì)
51、分?jǐn)?shù)的十位傳遞給譯碼器,通過按鍵,實(shí)現(xiàn)邊沿跳變,并把結(jié)果譯成相應(yīng)的段碼顯示出來*/ KL2=0;P0=LED_Num[b1];delay(1);KL2=1; /*將A隊(duì)分?jǐn)?shù)的百位傳遞給譯碼器,通過按鍵,實(shí)現(xiàn)邊沿跳變,并把結(jié)果譯成相應(yīng)的段碼顯示出來*/ KL1=0;P0=LED_Num[q1];delay(1);KL1=1; /*將A隊(duì)分?jǐn)?shù)的千位傳遞給譯碼器,通過按鍵,實(shí)現(xiàn)邊沿跳變,并把結(jié)果譯成相應(yīng)的段碼顯示出來*/ CL4=0;P0=LED_Num[g];delay(1);CL4=1; /*將B隊(duì)分?jǐn)?shù)的個(gè)位傳遞給譯碼器,通過按鍵,實(shí)現(xiàn)邊沿跳變,并把結(jié)果譯成相應(yīng)的段碼顯示出來*
52、/ CL3=0;P0=LED_Num[s];delay(1);CL3=1; /*將B隊(duì)分?jǐn)?shù)的十位傳遞給譯碼器,通過按鍵,實(shí)現(xiàn)邊沿跳變,并把結(jié)果譯成相應(yīng)的段碼顯示出來*/ CL2=0;P0=LED_Num[b];delay(1);CL2=1; /*將B隊(duì)分?jǐn)?shù)的百位傳遞給譯碼器,通過按鍵,實(shí)現(xiàn)邊沿跳變,并把結(jié)果譯成相應(yīng)的段碼顯示出來*/ CL1=0;P0=LED_Num[q];delay(1);CL1=1; /*將B隊(duì)分?jǐn)?shù)的千位傳遞給譯碼器,通過按鍵,實(shí)現(xiàn)邊沿跳變,并把結(jié)果譯成相應(yīng)的段碼顯示出來*/ }} /*****************判斷是哪個(gè)隊(duì)加分或者減分*
53、****************/ void Key_if(void) { if(Key1==0) //當(dāng)按鍵按下時(shí) { delay(1); //延時(shí)去抖動(dòng) sum=sum+1; //B隊(duì)加1分 } if(Key2==0 && sum>=1) //減分按鍵按下并且中得分不得少于1分 { delay(1); //延時(shí)去抖動(dòng) sum=sum-1;
54、 //B隊(duì)減1分 } if(Key3==0) //當(dāng)按鍵按下時(shí) { delay(1); //延時(shí)去抖動(dòng) sum1=sum1+1; //A隊(duì)加1分 } if(Key4==0 && sum1>=1) //減分按鍵按下并且中得分不得少于1分 { delay(1); //延時(shí)去抖動(dòng) sum1=sum1-1; //A隊(duì)減1分 } q=0;
55、 // A隊(duì)分值的千位默認(rèn)為0 b=sum/100; //求出A隊(duì)分值的百位 s=sum/10-b*10; //求出A隊(duì)分值的十位 g=sum%10; //求出A隊(duì)分值的個(gè)位 q1=0; // B隊(duì)分值的千位默認(rèn)為0 b1=sum1/100; //求出B隊(duì)分值的百位 s1=sum1/10-b1*10;
56、 //求出B隊(duì)分值的十位 g1=sum1%10; //求出B隊(duì)分值的個(gè)位 } (四)鳴笛器設(shè)計(jì) 聲音的頻率范圍約在幾十到幾千赫茲,利用程序來控制單片機(jī)的P1.4口線的“高”電平或者“低”電平,在該口線上產(chǎn)生一定頻率的矩形波,街上喇叭就能發(fā)出一定頻率的聲音,通過延時(shí)程序控制“高”、“低”電平的持續(xù)時(shí)間,就能改變輸出頻率,從而改變音調(diào)。 要使喇叭出聲,就要給P1.4引腳上不同頻率的電平信號(hào),如果我們要想喇叭發(fā)出“嘀——嗒”、“嘀——嗒”的鳴笛聲,只要給P1.4腳的高低電平延時(shí)不同即可。當(dāng)P3.2腳上的按鍵按下,就開始鳴笛,鳴笛的長短
57、用循環(huán)值控制。判斷鳴笛按鍵是否按下即P2.3腳上有沒有低電平,當(dāng)鍵按下,就鳴笛。本程序用void sound(void)來處理鳴笛。 嵌入式籃球計(jì)分屏鳴笛報(bào)警的部分實(shí)現(xiàn)程序如下: /***********************鳴笛處理***********************/ void sound(void) interrupt 0 using 0 //外部中斷0(),用工作寄存器組0 { uchar i,j; if(Int_key==0) //判斷鳴笛鍵是否按下,有按下就鳴笛 { for(i=0;i<8;i++)
58、 //控制一種發(fā)音的時(shí)間 { for(j=0;j<250;j++) //控制發(fā)音的頻率,延時(shí)長,頻率低些,音低 { music=~music; //取反 delay1(1); } //延時(shí)去抖動(dòng) } for(i=0;i<16;i++) //控制另一種發(fā)音的時(shí)間 { for(j=0;j<250;j++) //控制發(fā)音的頻率,延時(shí)短,頻率高些,音高 { music=~music; //取反 delay(1); } //
59、延時(shí)去抖動(dòng) } } else music=0; //喇叭不響 } 本節(jié)對嵌入式籃球計(jì)分屏的軟件部分進(jìn)行了詳細(xì)設(shè)計(jì)并詳細(xì)介紹了本次設(shè)計(jì)所涉及到的原理,包括單片機(jī)的定時(shí)/計(jì)數(shù)原理和聲音的產(chǎn)生原理,單片機(jī)的定時(shí)/計(jì)數(shù)功能可以實(shí)現(xiàn)比賽雙方的計(jì)分和計(jì)時(shí)功能,利用發(fā)音原理可以實(shí)現(xiàn)本設(shè)計(jì)的鳴笛警示功能。 4 系統(tǒng)調(diào)試與結(jié)果分析 在數(shù)碼管模塊的設(shè)計(jì)時(shí)我們組忽略了P0口接負(fù)載是需要有上拉電阻來提高I/O口帶負(fù)載的能力,以至于所有數(shù)碼管均不工作,在老師的幫助下我們及時(shí)的加入上拉電阻,使數(shù)碼管工作,在設(shè)計(jì)過程中我們應(yīng)用了一個(gè)譯碼器來對單片機(jī)的I/O口進(jìn)行擴(kuò)
60、展。在軟件調(diào)試部分我們的數(shù)碼管倒計(jì)時(shí)部分總是不能正常工作,倒計(jì)時(shí)總是正著計(jì)時(shí),我們組通過討論對送顯的數(shù)字個(gè)位進(jìn)行取余操作才使數(shù)碼管正常工作。在按鍵環(huán)節(jié)的設(shè)計(jì)中我組只注重了硬件防抖而沒有在軟件部分進(jìn)行操作致使設(shè)計(jì)的系統(tǒng)很不穩(wěn)定,在老師的幫助下我組又隊(duì)軟件部分進(jìn)行防抖和延時(shí)操作,這樣才使得系統(tǒng)穩(wěn)定的運(yùn)行。 圖4-1 計(jì)分模塊仿真原理圖 圖4-2 比分互換模塊仿真原理圖 圖4-3 計(jì)時(shí)器模塊仿真原理圖 圖4-4 蜂鳴器模塊仿真原理圖 5 結(jié)論 本設(shè)計(jì)對嵌入式籃球計(jì)分屏的軟件部分和硬件部分進(jìn)行了詳細(xì)設(shè)計(jì)并詳細(xì)介紹了本次設(shè)計(jì)所涉及到的原理,包括單
61、片機(jī)的定時(shí)/計(jì)數(shù)原理和聲音的產(chǎn)生原理,單片機(jī)的定時(shí)/計(jì)數(shù)功能可以實(shí)現(xiàn)比賽雙方的計(jì)分和計(jì)時(shí)功能,利用發(fā)音原理可以實(shí)現(xiàn)本設(shè)計(jì)的鳴笛警示功能。通過以上的敘述本次設(shè)計(jì)的核心部分基本完成。在本次設(shè)計(jì)中我組學(xué)到了很多,同時(shí)也看到了自身的不足,我們不能很好的把學(xué)到的知識(shí)應(yīng)用于實(shí)踐中,在實(shí)踐過程中遇到問題不知如何解決,缺乏自學(xué)能力等各種不足。在本次設(shè)計(jì)中我們學(xué)到了好多,對單片機(jī)有了更進(jìn)一步的認(rèn)識(shí),對所學(xué)過的C語言數(shù)字電子和模擬電子作了很好的復(fù)習(xí)工作。在今后的學(xué)習(xí)過程中我組應(yīng)更加注重理論聯(lián)系實(shí)際。更好的把所學(xué)的知識(shí)運(yùn)用到生活實(shí)踐中。在設(shè)計(jì)的過程中,不可避免地遇到了很多問題,發(fā)現(xiàn)了自己的很多不足,自己掌握的知識(shí)很
62、多都是一知半解,實(shí)踐經(jīng)驗(yàn)及動(dòng)手能力也比較薄弱,理論聯(lián)系實(shí)際的能力還急需提高,不管是在程序設(shè)計(jì)階段還是在仿真調(diào)試階段都出現(xiàn)了很多錯(cuò)誤。我覺得以前不夠努力,不夠?qū)P?,才?huì)有“書到用時(shí)方恨少”的體會(huì),經(jīng)過這次設(shè)計(jì)我學(xué)到了很多知識(shí),同時(shí)也端正了自己的學(xué)習(xí)態(tài)度。我曾經(jīng)因?yàn)閷纹瑱C(jī)的了解不是很多,因?yàn)閷?shí)踐經(jīng)驗(yàn)的缺乏,對此次設(shè)計(jì)沒有半點(diǎn)信心,但也曾因?yàn)榉抡娉晒Χ鵁崆楦邼q。我想,生活就是這樣,汗水預(yù)示著結(jié)果也見證著收獲,勞動(dòng)是人類生存永恒不變的話題。平心而論,這次設(shè)計(jì)花了我很多時(shí)間,耗費(fèi)了很多心血,甚至有過恐慌,做不出來怎么辦。雖然很辛苦,但是學(xué)到了很多,我覺得很值。這是我們邁向社會(huì),從事職業(yè)工作前一個(gè)必不可
63、少的過程,“實(shí)踐出真知”,通過此次設(shè)計(jì),我認(rèn)識(shí)到只有理論聯(lián)系實(shí)際,多學(xué)習(xí)新知識(shí),鞏固舊知識(shí),溫故而知新。 參考文獻(xiàn): [1]王守中.51單片機(jī)開發(fā)入門與典型實(shí)例〔M〕.北京∶黃炎,2007∶68-126 [2]徐愛鈞.單片機(jī)原理實(shí)用教程[M]. 第二版.北京∶索蓉霞,2011∶3-168 [3]蔡明文.單片機(jī)課程設(shè)計(jì)[M]. .北京∶余文君,2007∶2-120 [4]籃何慧.電子競賽單片機(jī)用用精講[M]. .北京∶萬隆,2009∶16-35 [5]宏晶科技.AT89C51D單片機(jī)用戶手冊 [6]谷樹忠.protel2004實(shí)用教程
64、[M].北京∶曲鑫,2012∶30-275
附錄一:protel原理圖
圖F1-1 protel原理圖
附錄二:protel PCB板圖
圖F2-1 protel PCB板圖
附錄三:protues電路圖
圖F3-1 protues電路圖
圖F3-2 protues原理仿真圖
附錄四:程序源代碼
系統(tǒng)完整源程序代碼
#include
65、signed int void delay(uchar x); //延時(shí)(時(shí)間較短) void delay1(uchar x); //延時(shí)(時(shí)間較長) void Js_Jf_Scan(void); //數(shù)碼管動(dòng)態(tài)掃描顯示函數(shù) void Key_if(void); //A、B兩隊(duì)分值處理函數(shù) void Js_50ms(void); //定時(shí)50ms中斷函數(shù) void Key_Y(void); //預(yù)置時(shí)間函數(shù) void Ptime(uchar); //時(shí)間處理函數(shù) void
66、sound(void); //鳴笛警示函數(shù) sbit CL1=P2^0; //B隊(duì)4位計(jì)分?jǐn)?shù)碼管位控線 sbit CL2=P2^1; sbit CL3=P2^2; sbit CL4=P2^3; sbit KL1=P2^4; // A隊(duì)4位計(jì)分?jǐn)?shù)碼管位控線 sbit KL2=P2^5; sbit KL3=P2^6; sbit KL4=P2^7; sbit S1=P1^3; //驅(qū)動(dòng)4位計(jì)時(shí)數(shù)碼管位控線 sbit S2=P1^2; sbit S3=P1^1; sbit S4=P1^0; sbit YK1=P1^6; //預(yù)置分鐘的十位 sbit YK2=P1^7; //預(yù)置分鐘的個(gè)位 sbit music=P1^4; //P1.4接喇叭,發(fā)聲,鳴笛 sbit Key1=P3^0; //B隊(duì)加分鍵 sbit Key2=P3^1; //B隊(duì)減分鍵 sbit Key3=
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年六年級(jí)數(shù)學(xué)下冊6整理和復(fù)習(xí)2圖形與幾何第7課時(shí)圖形的位置練習(xí)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊6整理和復(fù)習(xí)2圖形與幾何第1課時(shí)圖形的認(rèn)識(shí)與測量1平面圖形的認(rèn)識(shí)練習(xí)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊6整理和復(fù)習(xí)1數(shù)與代數(shù)第10課時(shí)比和比例2作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊4比例1比例的意義和基本性質(zhì)第3課時(shí)解比例練習(xí)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊3圓柱與圓錐1圓柱第7課時(shí)圓柱的體積3作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊3圓柱與圓錐1圓柱第1節(jié)圓柱的認(rèn)識(shí)作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊2百分?jǐn)?shù)(二)第1節(jié)折扣和成數(shù)作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊1負(fù)數(shù)第1課時(shí)負(fù)數(shù)的初步認(rèn)識(shí)作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)上冊期末復(fù)習(xí)考前模擬期末模擬訓(xùn)練二作業(yè)課件蘇教版
- 2023年六年級(jí)數(shù)學(xué)上冊期末豐收園作業(yè)課件蘇教版
- 2023年六年級(jí)數(shù)學(xué)上冊易錯(cuò)清單十二課件新人教版
- 標(biāo)準(zhǔn)工時(shí)講義
- 2021年一年級(jí)語文上冊第六單元知識(shí)要點(diǎn)習(xí)題課件新人教版
- 2022春一年級(jí)語文下冊課文5識(shí)字測評習(xí)題課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊6整理和復(fù)習(xí)4數(shù)學(xué)思考第1課時(shí)數(shù)學(xué)思考1練習(xí)課件新人教版