單片機(jī)課程設(shè)計(jì)---搶答器_第1頁
已閱讀1頁,還剩37頁未讀, 繼續(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>  單片機(jī)技術(shù)課程設(shè)計(jì)說明書</p><p><b>  六路搶答器</b></p><p>  系 、 部: 電氣與信息工程系 </p><p>  學(xué)生姓名: 王文剛 </p><p>  指導(dǎo)教師: 職稱 教師 </p><p

2、>  專 業(yè): 電子信息工程 </p><p>  班 級(jí): </p><p>  學(xué) 號(hào): </p><p>  完成時(shí)間: 2011-12-26 </p><p><

3、b>  目錄</b></p><p>  一、六路搶答器設(shè)計(jì)任務(wù)及要求……………………………………………………1</p><p>  1.1設(shè)計(jì)任務(wù)……………………………………………………1</p><p>  1.2設(shè)計(jì)要求……………………………………………………………………1</p><p>  1.2.1系統(tǒng)設(shè)計(jì)要求…

4、………………………………………………………1</p><p>  1.2.2設(shè)計(jì)目標(biāo)………………………………………………………………</p><p>  二、系統(tǒng)組成及工作原理……………………………………………………2</p><p>  2.1方案選擇……………………………………………………………………2</p><p>  2.1.1

5、利用譯碼芯片………………………………………………………2</p><p>  2.1.2 利用單片機(jī)…………………………………………………………2</p><p>  2.2原理分析……………………………………………………………………3</p><p>  2.3設(shè)計(jì)方案 …………………………………………………………………3三、搶答器硬件系統(tǒng)設(shè)計(jì)………………………

6、……………………………4</p><p>  3.1時(shí)鐘電路和復(fù)位電路………………………………………………………4</p><p>  3.1.1時(shí)鐘電路………………………………………………………………5</p><p>  3.1.2復(fù)位電路……………………………………………………………5</p><p>  3.2鍵盤電路……………………

7、……………………………………………6</p><p>  3.3 顯示電路………………………………………………………………7</p><p>  3.3.1 顯示驅(qū)動(dòng)電路………………………………………………………7</p><p>  3.3.2顯示報(bào)警電路…………………………………………………………8</p><p>  3.4芯片介紹……

8、……………………………………………………9</p><p>  3.4.1集成芯片AT89S52……………………………………………………9</p><p>  3.5共陽數(shù)碼管介紹…………………………………………………………11</p><p>  四、軟件系統(tǒng)設(shè)計(jì)………………………………………………………………12</p><p>  4.

9、1 設(shè)計(jì)思想………………………………………………………………12</p><p>  4.2 資源分配………………………………………………………………12</p><p>  4.3 程序設(shè)計(jì)流程圖……………………………………………………13</p><p>  4.3.1 定時(shí)器中斷服務(wù)程序流程………………………………………13</p>&l

10、t;p>  4.3.2搶答違規(guī)流程圖……………………………………………………13</p><p>  4.3.3 顯示程序流程……………………………………………………14</p><p>  4.3.4主程序流程圖……………………………………………………15</p><p>  五、調(diào)試及使用說明…………………………………………………………16</p&g

11、t;<p>  5.1實(shí)物調(diào)試……………………………………………………………16</p><p>  5.2 使用說明……………………………………………………………16</p><p>  六、設(shè)計(jì)心得體會(huì)及教學(xué)建議………………………………………………17</p><p>  6.1 設(shè)計(jì)體會(huì) ……………………………………………………………18&l

12、t;/p><p>  6.2教學(xué)建議 ……………………………………………………………18</p><p>  致謝…………………………………………………………………………………19</p><p>  參考文獻(xiàn)……………………………………………………………………20</p><p>  附錄Ⅰ 電路原理圖……………………………………………………

13、……21</p><p>  附錄Ⅱ PCB元器件布局圖……………………………………………………22</p><p>  附錄Ⅲ PCB頂層圖…………………………………………………………23</p><p>  附錄Ⅳ PCB底層圖…………………………………………………………24</p><p>  附錄Ⅴ 元器件清單………………………

14、……………………………………25</p><p>  附錄Ⅵ 程序清單……………………………………………………………27</p><p>  一、六路搶答器設(shè)計(jì)任務(wù)及要求</p><p><b>  1.1設(shè)計(jì)任務(wù)</b></p><p>  設(shè)計(jì)一個(gè)智力競(jìng)賽搶答器,可同時(shí)供8名選手或8個(gè)代表隊(duì)參加比賽,他們的編號(hào)分別是

15、1、2、3、4、5、6、各用一個(gè)搶答按鈕,按鈕的編號(hào)與選手的編號(hào)相對(duì)應(yīng),分別是S0、S1、S2、S3、S4、S5。要求一人一組在一周時(shí)間內(nèi)完成實(shí)物并打印《單片機(jī)技術(shù)》課程設(shè)計(jì)說明書一份。</p><p><b>  1.2設(shè)計(jì)要求</b></p><p>  1.2.1系統(tǒng)設(shè)計(jì)要求:</p><p>  (1)該搶答器上電或按鍵復(fù)位后能自動(dòng)顯示

16、系統(tǒng)提示符“P.” , 進(jìn)入準(zhǔn)備工作狀態(tài);</p><p>  (2)主持人按下開始按鈕后,搶答開始并限定時(shí)間30S;10S內(nèi)無人搶答,蜂鳴器發(fā)出音響;</p><p> ?。?)主持人按下開始按鈕之前有人按下?lián)尨鹌鳎瑩尨疬`規(guī),顯示器顯示違規(guī)臺(tái)號(hào),違規(guī)指示燈亮,其它按鈕不起作用;</p><p> ?。?)正常搶答下,從按下?lián)尨鸢粹o開始30S內(nèi),答完按鈕沒按下,則作

17、超時(shí)處理,超時(shí)處理時(shí),違規(guī)指示燈亮,數(shù)碼管顯示違規(guī)臺(tái)號(hào);</p><p> ?。?)在30S,內(nèi)選手提前答完,由主持人按下停止,并顯示答題時(shí)間,主持人按復(fù)位,等待下一輪搶答:</p><p> ?。?)各臺(tái)數(shù)字顯示的消除,蜂鳴器音響及違規(guī)指示燈的關(guān)斷,都要通過主持人按復(fù)位按鈕;</p><p>  1.2.2設(shè)計(jì)目標(biāo):

18、 </p><p> ?。?)通過理論設(shè)計(jì)和實(shí)物制作解決相應(yīng)的實(shí)際問題,鞏固和運(yùn)用在《單片機(jī)技術(shù)》中所學(xué)的理論知識(shí)和實(shí)驗(yàn)技能; </p><p>  (2) 熟悉電路中所用到的各集成芯片的管腳及其功能; </p><p>  (3) 進(jìn)行電路的裝接、調(diào)試,直到電路能達(dá)到規(guī)定的設(shè)計(jì)要求; </p><p> ?。?)掌握單片機(jī)應(yīng)用系統(tǒng)的一

19、般設(shè)計(jì)方法,提高設(shè)計(jì)能力和實(shí)踐動(dòng)手能力告,以后從事電子電路設(shè)計(jì)、研發(fā)電子產(chǎn)品打下良好的基礎(chǔ)。</p><p>  二、系統(tǒng)組成及工作原理</p><p><b>  2.1方案選擇</b></p><p>  2.1.1 利用譯碼芯片</p><p>  先根據(jù)74LS148的優(yōu)先功能,確定了先搶答到的選手的編碼號(hào),再

20、根據(jù)74LS279的鎖存功能,將其信號(hào)保持下來,并實(shí)現(xiàn)了鎖定功能,將選手的編碼鎖定。再者,根據(jù)74LS48的譯碼功能,將74LS279鎖定的數(shù)字編譯成二進(jìn)制,將信號(hào)送到顯示器中。這樣就實(shí)現(xiàn)了搶答功能。原理框圖如圖2.1所示。 </p><p>  2.1.2 利用單片機(jī)</p><p>  可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器進(jìn)行計(jì)時(shí),設(shè)定搶答時(shí)間和答題時(shí)間;可以利用單片

21、機(jī)的I/O口線接按鍵,通過按鍵按下后,所接口線電平的變化來判斷那位選手按下鍵。我選擇利用單片機(jī)做搶答器。</p><p><b>  2.2原理分析</b></p><p>  根據(jù)對(duì)功能要求的簡(jiǎn)要分析,將定時(shí)搶答器電路分為主題電路和擴(kuò)展電路兩部分。主體電路完成基本的搶答功能,即開始搶答后,當(dāng)選手按動(dòng)搶答器按鈕時(shí),能顯示選手的編號(hào),同時(shí)能封鎖輸入電路,禁止其他選手搶答

22、。擴(kuò)展電路完成定時(shí)搶答及報(bào)警功能。</p><p>  比賽開始時(shí),接通電源,節(jié)目主持人將開關(guān)置于“清零”位置,搶答器處于禁止工作狀態(tài),編號(hào)顯示器滅燈,定時(shí)顯示器上顯示設(shè)定時(shí)間。當(dāng)節(jié)目主持人宣布“搶答開始”,同時(shí)將控制開關(guān)撥到“開始”位置,搶答器處于工作狀態(tài),定時(shí)器開始倒計(jì)時(shí)。若定時(shí)時(shí)間到,卻沒有選手搶答時(shí),系統(tǒng)報(bào)警,并封鎖輸入電路,禁止選手超時(shí)后搶答。若選手在定時(shí)時(shí)間內(nèi)按動(dòng)搶答按鈕時(shí),搶答器要完成以下四項(xiàng)工作:

23、</p><p>  1.優(yōu)先編碼器電路立即分辨出搶答者的編號(hào),并由鎖存器進(jìn)行鎖存,然后由譯碼顯示電路顯示編號(hào);</p><p>  2.揚(yáng)聲器發(fā)出短暫聲響,提醒節(jié)目主持人注意;</p><p>  3.控制電路要對(duì)輸入編碼電路進(jìn)行封鎖,避免其他選手再次進(jìn)行搶答; </p><p>  4.控制電路要使定時(shí)器停止工作,時(shí)間顯示器上顯示剩余的搶

24、答時(shí)間,并保持到主持人將系統(tǒng)清零為止。</p><p>  當(dāng)選手將問題回答完畢時(shí),主持人操作控制開關(guān),使系統(tǒng)回復(fù)到禁止工作狀態(tài),以便進(jìn)行下一輪搶答。</p><p>  上述方案所示搶答器的工作過程:主持人按動(dòng)開始搶答的開關(guān)后,最先搶答的選手的電平信號(hào)先經(jīng)過優(yōu)先編碼器,再依次經(jīng)過數(shù)據(jù)鎖存器,此時(shí)已經(jīng)限制了其他選手的搶答,信號(hào)再經(jīng)過譯碼器和七段數(shù)碼顯示器,將最先搶答的該選手的編號(hào)顯示出來,

25、并同時(shí)產(chǎn)生報(bào)警信號(hào),到此完成的是搶答功能;如果沒有人搶答, 30秒減計(jì)數(shù)器減到00時(shí)也會(huì)發(fā)出報(bào)警信號(hào),此時(shí)完成計(jì)時(shí)功能。</p><p>  它的優(yōu)點(diǎn)表現(xiàn)在以下幾個(gè)方面:這種方案原理比較簡(jiǎn)單。主持人對(duì)整體電路的控制只需幾個(gè)門電路就可完成,不必用特別的芯片來組成控制電路;更容易實(shí)現(xiàn)報(bào)警提示功能,在有選手搶答后或者計(jì)時(shí)開始和結(jié)束時(shí)。既減少了布線使整個(gè)電路更直觀簡(jiǎn)單,又降低了產(chǎn)生錯(cuò)誤的可能性。</p>&

26、lt;p><b>  2.3設(shè)計(jì)方案 </b></p><p>  本系統(tǒng)采用AT89S52單片機(jī)作為核心,該系統(tǒng)需要單片機(jī)產(chǎn)生內(nèi)部脈沖,控制單處機(jī)的運(yùn)行速度.選手的搶答通過連接P1口的按鍵完成,主持人置位/復(fù)位通過復(fù)位電路完成.搶答完成后,選手作答.時(shí)間顯示在數(shù)碼管上.因此該系統(tǒng)所需的模塊分別為:?jiǎn)纹瑱C(jī)最小系統(tǒng)、顯示模塊、顯示驅(qū)動(dòng)模塊、搶答開關(guān)模塊。</p><p

27、>  搶答器原理框圖如圖2.3所示。 </p><p>  圖2.3 搶答器原理框圖</p><p>  設(shè)計(jì)出總體框圖之后,然后進(jìn)行單元電路設(shè)計(jì)。單元電路設(shè)計(jì)分為時(shí)鐘和復(fù)位電路、鍵盤電路、顯示驅(qū)動(dòng)電路、違規(guī)報(bào)警電路等。</p><p>  再根據(jù)課程設(shè)計(jì)選題中所提供的參考器件,設(shè)計(jì)出總體電路圖見附錄。</p><p>  三、

28、搶答器硬件系統(tǒng)設(shè)計(jì)</p><p>  本搶答器的硬件系統(tǒng)包括以下幾個(gè)部分:</p><p>  3.1時(shí)鐘電路和復(fù)位電路</p><p><b>  3.1.1時(shí)鐘電路</b></p><p>  單片機(jī)的時(shí)鐘信號(hào)是利用單片機(jī)內(nèi)部時(shí)鐘電路產(chǎn)生的。如圖3.1.1所示,用于產(chǎn)生單片機(jī)工作所需要的時(shí)鐘信號(hào),其輸入端為芯片引腳

29、XTAL1,其輸出端為引腳XTAL2。而在芯片外部,XTAL1和XTAL2之間跨接晶體震蕩器和微調(diào)電容,從而構(gòu)成一個(gè)穩(wěn)定的自激震蕩器,這就是單片機(jī)的時(shí)鐘電路。時(shí)鐘電路產(chǎn)生的震蕩脈沖經(jīng)過觸發(fā)器進(jìn)行二分頻之后,才成為單片機(jī)的時(shí)鐘脈沖信號(hào)。在此電路中,電容C1和C2取30皮法,晶振用12 MHz。時(shí)鐘信號(hào)的產(chǎn)生:在AT89S52芯片內(nèi)部有一個(gè)高增益反相放大器,其輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2,在芯片的外部通過這兩個(gè)引腳跨接

30、晶體振蕩器和微調(diào)電容,形成反饋電路,就構(gòu)成了一個(gè)穩(wěn)定的自激振蕩器,除使用晶體振蕩器外,如對(duì)時(shí)鐘頻率要求不高,還可以用電感或陶瓷諧振器代替。電路中的電容C1和C2一般取30PF左右(該電子鐘采用的是33PF的電容),而晶體的振蕩頻率范圍通常是1.2MHz~12MHz(該電子鐘采用的是12 MHz),晶體振蕩頻率高,則系統(tǒng)的時(shí)鐘頻率也高,單片機(jī)運(yùn)行速度也就快。但反過來運(yùn)行速度快對(duì)存儲(chǔ)器的速度要求也高,對(duì)印制電路板的工藝要求也高(線間寄生電&

31、lt;/p><p>  圖3.1.1 時(shí)鐘電路圖</p><p><b>  3.1.2復(fù)位電路</b></p><p>  手動(dòng)按鈕復(fù)位需要人為在復(fù)位輸入端RST上加入高電平(圖3.1.2)。一般采用的辦法是在RST端和正電源Vcc之間接一個(gè)按鈕。當(dāng)人為按下按鈕時(shí),則Vcc的+5V電平就會(huì)直接加到RST端。手動(dòng)按鈕復(fù)位的電路如所示。由于人的

32、動(dòng)作再快也會(huì)使按鈕保持接通達(dá)數(shù)十毫秒,所以,完全能夠滿足復(fù)位的時(shí)間要求。 </p><p>  單片機(jī)在啟動(dòng)時(shí)都需要復(fù)位,以使CPU及系統(tǒng)各部件處于確定的初始狀態(tài),并從初態(tài)開始工作。89系列單片機(jī)的復(fù)位信號(hào)是從RST引腳輸入到芯片內(nèi)的施密特觸發(fā)器中的。當(dāng)系統(tǒng)處于正常工作狀態(tài)時(shí),且振蕩器穩(wěn)定后,如果RST引腳上有一個(gè)高電平并維持2個(gè)機(jī)器周期(24個(gè)振蕩周期)以上,則CPU就可以響應(yīng)并將系統(tǒng)復(fù)位。</p>

33、<p>  圖3.1.2 復(fù)位電路圖</p><p><b>  3.2鍵盤電路</b></p><p>  鍵盤接口中使用多少根I/O線,鍵盤中就有幾個(gè)按鍵,鍵盤接口使用了8根I/O口線,該鍵盤就有8個(gè)按鍵,這種類型的鍵盤,其按鍵比較少,且鍵盤中各按鍵的工作互不干擾。因此可以根據(jù)實(shí)際需要對(duì)鍵盤中的按鍵靈活的編碼。最簡(jiǎn)單的編碼方式就是根據(jù)I/O輸

34、入口所直接反映的相應(yīng)按鍵,按下的狀態(tài)進(jìn)行編碼,稱按鍵直接狀態(tài)碼,對(duì)于這樣編碼的獨(dú)立式鍵盤,CPU可以通過直接讀取I/O口的狀態(tài)來獲取按鍵的直接狀態(tài)編碼值,根據(jù)這個(gè)值直接進(jìn)行按鍵識(shí)別,這樣形式的鍵盤結(jié)構(gòu)簡(jiǎn)單,按鍵識(shí)別容易。</p><p>  獨(dú)立式鍵盤的缺點(diǎn)是需要占用比較多的I/O口線,當(dāng)單片機(jī)應(yīng)用系統(tǒng)鍵盤中需要的按鍵比較少或I/O口線比較富余時(shí),可以采用這樣類型的鍵盤。</p><p>

35、  圖3.2.1鍵盤電路圖</p><p>  鍵盤電路如圖3.2.1所示,當(dāng)無鍵按下時(shí),單片機(jī)的P1.0~P1.7高電平。當(dāng)有鍵按下時(shí),單片機(jī)的相應(yīng)口線通過按鍵與地線相連被拉成低電平,其它口線電平狀態(tài)不變。因此,通過檢測(cè)I/O口線的電平狀態(tài),即可判斷鍵盤上哪個(gè)鍵被按下。</p><p><b>  3.3 顯示電路:</b></p><p>

36、  顯示電路可由LED來實(shí)現(xiàn)。此處選用七段數(shù)碼管選用共陽管,其亮度好,節(jié)能,使用簡(jiǎn)單方便。</p><p>  3.3.1 顯示驅(qū)動(dòng)電路:</p><p>  由于單片機(jī)所能提供的電流太弱,需要放大,才能驅(qū)動(dòng)數(shù)碼管,不加也行,就是很暗。三極管晶體管有三種工作狀態(tài):</p><p>  (1)截止?fàn)顟B(tài):當(dāng)基極電流很小時(shí),無論基極電流如何變化,集電極電流都接近為0,集電

37、極電流不隨基極電流而變化,也就是管子不導(dǎo)通;</p><p>  (2)放大狀態(tài):當(dāng)基極電流增大到一定值以后,集電極電流此后大于0,且集電極電流隨著基極電流而變化,這是放大狀態(tài);</p><p>  (3)飽和狀態(tài):當(dāng)基極電流繼續(xù)增大,達(dá)到一定值以后,集電極電流此后再也大不上去了,此后即便是基極電流再增加,集電極電流也不能增大,即飽和了。</p><p>  對(duì)于單

38、片機(jī)端口通過晶體管驅(qū)動(dòng)負(fù)載的情況,無論負(fù)載是數(shù)碼管還是繼電器,晶體管都只能工作在截止?fàn)顟B(tài)或飽和狀態(tài),是不能工作在放大狀態(tài)的。</p><p>  也就是說,51的IO口通過驅(qū)動(dòng)數(shù)碼管亮滅的原理是使三極管工作在飽和區(qū)和截至區(qū)才能起到電流放大的作用.</p><p>  共陽極數(shù)碼管的8個(gè)發(fā)光二極管的陽極(二極管正端)連接在一起,通常,公共陽極接高電平(一般接電源),七它管腳接段驅(qū)動(dòng)電路輸出端

39、。當(dāng)某段驅(qū)動(dòng)電路的輸出端為低電平時(shí),則該端所連接的字段導(dǎo)通并點(diǎn)亮,根據(jù)發(fā)光字段的不同組合可顯示出各種數(shù)字或字符。此時(shí),要求段驅(qū)動(dòng)電路能吸收額定的段導(dǎo)通電流,還需根據(jù)外接電源及額定段導(dǎo)通電流來確定相應(yīng)的限流電阻,這里的限流電阻選470Ω。數(shù)碼顯示程序流程如圖3.3.1.</p><p>  圖3.3.1 數(shù)碼管顯示圖</p><p>  3.3.2顯示報(bào)警電路</p>&

40、lt;p>  考慮到一個(gè)管腳很難驅(qū)動(dòng)蜂鳴器發(fā)出聲音,所以增加了一個(gè)三極管來增加通過蜂鳴器的電流,見下方原理圖3.2.1。</p><p>  圖3.3.2 蜂鳴器報(bào)警電</p><p>  蜂鳴器的正極性的一端聯(lián)接到5V電源上面,另一端聯(lián)接到三極管的集電極,三極管的基級(jí)由單片機(jī)的P36管腳通過一個(gè)與非門來控制,當(dāng)P36管腳為低時(shí),與非門輸出高電平,三極管導(dǎo)通,這樣蜂鳴器的電流

41、形成回路,發(fā)出聲音。當(dāng)P36管腳為高時(shí),與非門輸出低電平,三極管截止,蜂鳴器不發(fā)出聲音。在這里與非門是作為非門來用的,這里采用一個(gè)非門的作用是為了防止系統(tǒng)上電時(shí)峰鳴器發(fā)出聲音,以為系統(tǒng)復(fù)位以后,I/O口輸出的是高電平。</p><p>  用戶可以通過程序控制P36管腳的置低和置高來使蜂鳴器發(fā)出聲音和關(guān)閉。</p><p>  蜂鳴器的聲音大小及音調(diào)可以通過調(diào)整P36管腳的置高時(shí)間及輸出的

42、波形進(jìn)控制,這一點(diǎn)可以在調(diào)試程序的時(shí)候來試驗(yàn).</p><p>  圖3.3.3 指示燈報(bào)警電路</p><p>  當(dāng)P3.2為低電平時(shí),二極管變亮,指示報(bào)警。</p><p><b>  3.4芯片介紹</b></p><p>  3.4.1集成芯片AT89S52</p><p>  AT

43、89S52是一種低功耗、高性能的CMOS工藝的8位單片機(jī)。它帶有8KB的可在線編程的 Flash 存儲(chǔ)器,該單片機(jī)采用了ATMEL公司的高密度、非易失性存儲(chǔ)器技術(shù),與工業(yè)上標(biāo)準(zhǔn)型80C51單片機(jī)的指令系統(tǒng)及引腳完全兼容;片內(nèi)的Flash 存儲(chǔ)器可在線重新編程,或使用通用的非易失性存儲(chǔ)器編程器;通用的8位CPU與在線可編程Flash集成在一塊芯片上,從而使AT89S52功能更加完善,應(yīng)用更加靈活;具有較高的性能價(jià)格比,使其在嵌入式控制系統(tǒng)

44、中有著廣泛的應(yīng)用前景</p><p>  圖3.4.1 集成芯片AT89S52圖</p><p>  AT89S52單片機(jī)為40引腳芯片如圖3.4.1所示,具有PDIP,PLCC和TQFP3鐘封裝形式。</p><p> ?。?)VCC:電源。 </p><p>  

45、(2)GND:地線。</p><p> ?。?)P0口:是一個(gè)8位漏極開路的雙向I/O口。作為輸出口,每個(gè)引腳可吸入8個(gè)TTL輸入。當(dāng)把“1”寫入P0口的引腳時(shí)可作為高阻輸入。當(dāng)訪問外部程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器時(shí),P0口也可作復(fù)用的地址/數(shù)據(jù)總線。在此狀態(tài)下,P0口有內(nèi)部上拉電路。P0口也在Flash 編程時(shí),接收代碼字節(jié),而在程序校驗(yàn)時(shí),輸出代碼字節(jié)。在程序校驗(yàn)期間,需要外部上拉電路。</p>&l

46、t;p>  (4)P1口:是一個(gè)具有內(nèi)部上拉電路的8位雙向I/O口。P1口的輸出緩沖器能夠吸入/放出4個(gè)TTL輸入。當(dāng)對(duì)P1口的引腳寫“1”時(shí),它被內(nèi)部上拉電路拉高,并能作輸入使用,作為輸入時(shí),由于上拉電路的作用,由外部拉低的P1口引腳將放出電流(IIL)。</p><p> ?。?)P2口:是一個(gè)具有內(nèi)部上拉電路的8位雙向I/O口,P2口輸出緩沖器能吸入/放出4個(gè)TTL輸入。當(dāng)對(duì)P2口引腳寫“1”時(shí)它們被

47、內(nèi)部上拉電路拉該,并能作為輸入使用,此時(shí),由于內(nèi)部上拉電路的作用,被外部拉低的P2口引腳將放出電流(IIL)。</p><p>  當(dāng)訪問外部程序存儲(chǔ)器及使用16位地址的是數(shù)據(jù)存儲(chǔ)器(MOVX@DPTR)時(shí),P2口輸出高8位地址。這種情況下,當(dāng)不置“1”時(shí),P2口使用強(qiáng)大的內(nèi)部上拉電路。當(dāng)訪問使用8位地址的外部存儲(chǔ)器(MOVX @RI)時(shí),P2口輸出P2口鎖存器的內(nèi)容。</p><p>

48、 ?。?)P3口:是一個(gè)具有內(nèi)部上拉電路的8位雙向I/O口,P3輸出緩沖器能吸入/放出4個(gè)TTL輸入。當(dāng)對(duì)P3口引腳寫“1”時(shí),則它們被內(nèi)部上拉電路拉高,并能作為輸入使用。此時(shí),由于內(nèi)部上拉電路的作用,被外部拉低的P3口引腳將放出電流</p><p> ?。?)P3口也提供AT89C52各種專用功能,表3.1為AT89C52的P3口第二功能。</p><p>  表1 P3口第二功能&l

49、t;/p><p>  (8)RST:復(fù)位端。當(dāng)振蕩器工作時(shí),此引腳上出現(xiàn)兩個(gè)機(jī)器周期的高電平將系統(tǒng)復(fù)位。</p><p> ?。?)ALE/PROG:當(dāng)訪問外部存儲(chǔ)器時(shí),ALE(允許地址鎖存)是一個(gè)用于鎖存地址的低8位字節(jié)的書粗脈沖。在Flash 編程期間,此引腳也可用于輸入編程脈沖(PROG)。在正常操作情況下,ALE以振蕩器頻率的1/6的固定速率發(fā)出脈沖,它是用作對(duì)外輸出的時(shí)鐘,需要注意的

50、是,每當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過一個(gè)ALE脈沖。如果希望禁止ALE操作,可通過將特殊功能寄存器中位地址為8EH那位置的“0”來實(shí)現(xiàn)。該位置的“1”后。ALE僅在MOVE或MOVC指令期間激活,否則ALE引腳將被略微拉高。若微控制器在外部執(zhí)行方式,ALE禁止位無效。</p><p>  (10)PSEN:外部程序存儲(chǔ)器讀選取通信號(hào)。當(dāng)AT89C52在讀取外部程序時(shí), 每個(gè)機(jī)器周期 將PSEN激活兩次。在此期間內(nèi)

51、,每當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過兩個(gè)PSEN信號(hào)。</p><p> ?。?1)EA/Vpp:訪問外部程序存儲(chǔ)器允許端。為了能夠從外部程序存儲(chǔ)器的0000H至FFFFH單元中取指令,EA必須接地,然而要注意的是,若對(duì)加密位1進(jìn)行編程,則在復(fù)位時(shí),EA的狀態(tài)在內(nèi)部被鎖存。</p><p>  執(zhí)行內(nèi)部程序EA應(yīng)接VCC。不當(dāng)選擇12V編程電源時(shí),在Flash編程期間,這個(gè)引腳可接12V編程

52、電壓。</p><p> ?。?2)XTAL1:振蕩器反向放大器輸入端和內(nèi)部時(shí)鐘發(fā)生器的輸入端。XTAL2:振蕩器反相放大器輸出端。</p><p><b>  共陽數(shù)碼管介紹</b></p><p>  四位一體數(shù)碼管有四個(gè)位控腳,八個(gè)段控腳,四位一體數(shù)碼管內(nèi)部結(jié)構(gòu)圖如3.5.1所示,四位一體數(shù)碼管外觀圖如3.5.23所示,四位一體數(shù)碼管采用

53、動(dòng)態(tài)顯示。</p><p><b>  圖</b></p><p>  3.5.1 四位一體數(shù)碼管內(nèi)部結(jié)構(gòu)圖</p><p>  圖3.5.2 四位一體數(shù)碼管外觀圖</p><p><b>  四、軟件系統(tǒng)設(shè)計(jì)</b></p><p>  4.1 設(shè)計(jì)思想 &l

54、t;/p><p>  把八個(gè)選手的按鍵接在P1口,在P1口接上拉電阻。如果有鍵按下,接這個(gè)鍵的口線將被拉低,通過鍵掃判斷那根口線被拉低,得到鍵值,顯示到數(shù)碼管上。主持人按啟動(dòng)鍵,開啟定時(shí)器0,有選手搶答,開啟定時(shí)器1。</p><p>  4.2 資源分配 </p><p>  (1) 定時(shí)/計(jì)數(shù)器的使用</p><p>  定時(shí)/計(jì)數(shù)器0,

55、定時(shí)功能,工作方式1,定時(shí)50ms。</p><p>  定時(shí)/計(jì)數(shù)器1,定時(shí)功能,工作方式1,定時(shí)50ms。</p><p> ?。?) 中斷源的使用</p><p>  定時(shí)/計(jì)數(shù)器0,計(jì)滿20次即得秒計(jì)時(shí)單位。</p><p>  定時(shí)/計(jì)數(shù)器1,計(jì)滿20次即得秒計(jì)時(shí)單位。</p><p><b> 

56、 按鍵設(shè)定</b></p><p>  P1.0-P1.7分別設(shè)定為S1-S8按鍵,其中S1-S6接P1.0-P1.5分別代表6個(gè)參賽搶答選手。S7接P1.6,作 啟動(dòng)鍵。S8接P1.7,作搶答停止和復(fù)位按鍵。</p><p>  八個(gè)選手按鍵全接在P1口,方便搶答和控制.</p><p> ?。?) 數(shù)碼管的使用</p><p&g

57、t;  P0.7-P0.0段控線,分別接led1和led2的顯示dp,g,f,e,d,c,b,a,采取并聯(lián)的接法。</p><p>  P2.0-P2.3位控線,分別接led1的4、3、2、1,P2.4—P2.7位控線,分別接led2的4、3、2、1。</p><p>  4.3 程序設(shè)計(jì)流程圖</p><p>  4.3.1 定時(shí)器中斷服務(wù)程序流程</p

58、><p>  定時(shí)器中斷服務(wù)程序流程如圖4.3.1所示。</p><p>  圖4.3.1定時(shí)器中斷服務(wù)程序流程圖</p><p>  4.3.2搶答違規(guī)流程圖</p><p>  圖4.3.2 搶答違規(guī)流程圖</p><p>  4.3.3 顯示程序流程</p><p>  顯示程序流程如

59、圖4.3.3所示</p><p>  圖4.3.3 顯示程序流程圖</p><p>  4.3.4主程序流程圖</p><p>  主程序程序流程圖如圖4.3.4所示</p><p>  圖4.3.4主程序程序流程圖</p><p>  五、調(diào)試及使用說明 </p><p><

60、b>  5.1實(shí)物調(diào)試</b></p><p> ?。?)顯示器上不顯示數(shù)字,我們從后級(jí)往前級(jí)進(jìn)行測(cè)試,首先用1.5~2V的電壓作用各個(gè)筆段,看對(duì)應(yīng)各筆段是否亮,判斷是否完好。若完好則繼續(xù)檢測(cè)三極管芯片是否燒壞。然后再看與數(shù)碼管的引腳焊接是否都是實(shí)焊.看是否能顯示數(shù)字。無顯示的故障一般問題出在這兩個(gè)環(huán)節(jié)。</p><p>  (2)顯示器上顯示的是不符合要求的數(shù)字,在設(shè)計(jì)

61、原理正確的前提下,先通過測(cè)試判斷AT89S52的輸出口與LED管的a~g筆段是否連接有錯(cuò)。其方法是AT89S52的輸出P0.1-P0.7分別按規(guī)律輸入高低電平,觀察LED管是否顯示相應(yīng)的數(shù)字。如果這個(gè)環(huán)節(jié)正常,則問題在二極管編碼電路,再逐一進(jìn)行檢查。</p><p>  (3)在測(cè)試的過程中我們一定要注意,高低電平的測(cè)試電壓數(shù)值要針對(duì)不同的電路而選取不同的數(shù)值。比如,針對(duì)LED管,高電平只能用1.5~2V,而在C

62、D4511的輸入端高電平要用到8V以上的電源電壓。選高了,會(huì)燒管子;選低了,會(huì)看不到效果,甚至產(chǎn)生誤判斷。</p><p> ?。?)當(dāng)一切都檢查好了且都沒有問題之后,導(dǎo)入程序發(fā)現(xiàn)數(shù)碼管能夠正常顯示,但是有一些位比較亮有一些位則比較暗.檢查程序發(fā)現(xiàn)是延時(shí)不夠,加長(zhǎng)延時(shí)時(shí)間之后一切顯示正常.</p><p>  5.2 使用說明 </p><p>  該搶答器上電或

63、按鍵復(fù)位后能自動(dòng)顯示系統(tǒng)提示符“P.”,進(jìn)入準(zhǔn)備工作狀態(tài)。主持人有兩個(gè)鍵,啟動(dòng)鍵和復(fù)位鍵。</p><p> ?。?)主持按下開始按鈕后,搶答開始并限定時(shí)間30S;10S內(nèi)無人搶答,蜂鳴器發(fā)出音響;</p><p> ?。?)主持人按下開始按鈕之前有人按下?lián)尨鹌鳎瑩尨疬`規(guī),顯示器顯示違規(guī)臺(tái)號(hào),違規(guī)指示燈亮,其它按鈕不起作用。比如1號(hào)選手在主持人按下啟動(dòng)鍵之前搶答,他違規(guī),顯示器顯示違規(guī)臺(tái)號(hào)

64、1,同時(shí)違規(guī)指示燈亮。</p><p> ?。?)正常搶答,顯示器顯示臺(tái)號(hào),蜂鳴器發(fā)出聲響,其它搶答按鈕無效。比如1號(hào)選手正常搶答,顯示器顯示臺(tái)號(hào)1,蜂鳴器發(fā)出聲響。</p><p> ?。?)正常搶答下,從按下?lián)尨鸢粹o開始30S內(nèi),答完按鈕沒按下,則作超時(shí)處理,超時(shí)處理時(shí),違規(guī)指示燈亮,顯示器顯示違規(guī)臺(tái)號(hào),蜂鳴器發(fā)出聲響。比如1號(hào)選手在答題30s內(nèi)沒有答完題,超時(shí)處理,違規(guī)指示燈亮,顯示

65、器顯示違規(guī)臺(tái)號(hào)1。</p><p> ?。?)顯示器各臺(tái)數(shù)字顯示的消除,蜂鳴器音響及違規(guī)指示燈的關(guān)斷,都要通過主持人按復(fù)位按鈕,主持人有權(quán)在任何時(shí)候停止搶答。</p><p>  六、設(shè)計(jì)心得體會(huì)及教學(xué)建議</p><p>  6.1 設(shè)計(jì)體會(huì) </p><p>  通過本次畢業(yè)設(shè)計(jì)熟悉了PCB制作的流程,硬件設(shè)計(jì)和軟件設(shè)計(jì)。protel9

66、9中畫PCB時(shí)應(yīng)意線的寬度,線距,最重要的是布局,如果布局合理,線就比較少,甚至布出單面板,一定要注意焊盤的大小,太小了,打孔時(shí)會(huì)把焊盤打掉,太大了布出的線會(huì)有很多。在轉(zhuǎn)印PCB時(shí)一定要把板子清洗干凈。我第一次轉(zhuǎn)印時(shí)由于板子不干凈,結(jié)果把紙印到了板子上。印板要注意電熨斗的溫度。如果轉(zhuǎn)印到板子上的電路圖有短線,還有補(bǔ)救的方法,用油性筆補(bǔ)線。為了以后使用的方便和焊盤的牢固,可以在板子加上四個(gè)螺絲,把板子撐起來。在腐蝕板子時(shí)要注意水溫,加入的

67、三氯化鐵要適量,如果想減少腐蝕板子的時(shí)間,可以搖動(dòng)水盆。板子腐蝕了以后要清洗干凈。硬件設(shè)計(jì)方面:學(xué)會(huì)了如何把設(shè)計(jì)要求轉(zhuǎn)化為原理圖,原理圖十分重要,如果原理圖錯(cuò)了,那么做出來的板子必然錯(cuò)了,因此原理圖一定要準(zhǔn)。</p><p>  開始我三極管驅(qū)動(dòng)數(shù)碼管,但是在Proteus中不能仿真,所以我換用了74LS244驅(qū)動(dòng)。選用數(shù)碼管時(shí)要注意是共陰的還是共陽的。軟件設(shè)計(jì)方面:學(xué)會(huì)了用C51編寫程序。我學(xué)習(xí)了匯編語言和C5

68、1,發(fā)現(xiàn)單片機(jī)用C51更易于理解。學(xué)習(xí)匯編語言是為了了解單片機(jī)的內(nèi)部結(jié)構(gòu)和工作原理,而C51更側(cè)重于應(yīng)用。匯編語言比C51在編程時(shí)更精確,比如一個(gè)延時(shí)程序,用C51編只需用一個(gè)for循環(huán),而匯編要用到一兩個(gè)寄存器,但是匯編語言編寫的程序可以比較準(zhǔn)確的算出延時(shí)時(shí)間,C51編寫的程序要通過調(diào)試才能得到延時(shí)時(shí)間,不夠準(zhǔn)確。C51具有豐富的函數(shù)庫,可以直接調(diào)用。用C51其實(shí)就是編函數(shù),調(diào)函數(shù)。</p><p>  在實(shí)物

69、調(diào)試發(fā)現(xiàn)應(yīng)顯示P.可實(shí)際顯示為P,對(duì)照原理圖,發(fā)現(xiàn)共陽數(shù)碼管的3腳是點(diǎn)的顯示段控,對(duì)照電路板上數(shù)碼管的3腳檢查,發(fā)現(xiàn)連接3腳的底層線斷了,把線連通之后,P.正常顯示了。要根據(jù)現(xiàn)象分析問題,找出問題出現(xiàn)的原因,解決它。此次畢業(yè)設(shè)計(jì)用理論指導(dǎo)了實(shí)踐,實(shí)踐又強(qiáng)化了理論。在此次課程設(shè)計(jì)時(shí),我發(fā)現(xiàn)交流非常重要,同學(xué)之間相互交流,可以從別人那里學(xué)到你不會(huì)的知識(shí),也可以把自己會(huì)的東西與別人分享,每個(gè)人會(huì)一點(diǎn),匯合起來就有很多知識(shí),大家都得到提高,而且

70、比自己?jiǎn)为?dú)研究效率高的多。通過自己的努力和別人的指導(dǎo),做了PCB板,下載程序到板子上,經(jīng)過調(diào)試,基本實(shí)現(xiàn)所要求的功能。因此做事情前,要有信心,相信自己做得好,這樣才有動(dòng)力認(rèn)真的去做,把事情想得簡(jiǎn)單一點(diǎn),積極的思考,解決出現(xiàn)的問題,逐漸向要求靠近,最后達(dá)到要求。做好一個(gè)東西都有一個(gè)過程,不可能一次就成功,要給自己時(shí)間,通過改變達(dá)到要求。</p><p><b>  6.2教學(xué)建議</b><

71、;/p><p>  目前單片機(jī)的教材基本上都是以單片機(jī)的結(jié)構(gòu)為主線,展開的順序依次為單片機(jī)的硬件結(jié)構(gòu)到指令,然后是簡(jiǎn)單的軟件編程,最后是單片機(jī)系統(tǒng)的擴(kuò)展以及一些外圍器件的應(yīng)用。這些內(nèi)容都是比較抽象生澀的,很難理解;而一些芯片的管腳以及一些位控的標(biāo)記符也難以記憶,所以會(huì)讓人一種枯燥、難以學(xué)好的印象。</p><p>  系統(tǒng)的理論難于理解,我們可以化整為零,把那些理論拆開來,糅合到每一個(gè)小任務(wù)中

72、。這里我們可以多開創(chuàng)些小實(shí)驗(yàn),通過自主的完成實(shí)驗(yàn)的內(nèi)容來體會(huì)、思考所需的知識(shí)點(diǎn),這樣可以使知識(shí)點(diǎn)記的更牢固,也更能熟練的掌握單片機(jī)的軟硬件資源的運(yùn)用,真正意義上的做到學(xué)以致用,融會(huì)貫通。</p><p>  其次,單純的在黑板上寫教過于抽象,可以建議上多媒體課。通過觀看具體的圖像、實(shí)物感覺上會(huì)更清晰、明了,印象也更加深刻。在感官上有以實(shí)感,可以激發(fā)對(duì)單片機(jī)的興趣。</p><p>  另外

73、,在上課時(shí)可以使用擴(kuò)音器,即使是教室大且人多的情況下大部分學(xué)生也都可以清晰的聽到。同時(shí)在黑板上板書的字體可以稍大些,讓四周的人可以很容易的看仔細(xì)。</p><p><b>  致謝</b></p><p>  通過這些天的設(shè)計(jì),使我深深的感受到了,理論聯(lián)系實(shí)際的必要性及其重要性. </p><p>  在課程設(shè)計(jì)期間,要感謝老師教導(dǎo),感謝同學(xué)幫

74、助,通過不斷學(xué)習(xí)理論知識(shí)和參與實(shí)踐,感覺自己的綜合素質(zhì)在很大程度上得到了提升,努力將自己塑造成為一個(gè)專業(yè)功底扎實(shí)、知識(shí)結(jié)構(gòu)完善、適應(yīng)能力強(qiáng)的合格大學(xué)生。這次課程設(shè)計(jì),不僅讓我們大開眼界,也是對(duì)以前所學(xué)知識(shí)的一個(gè)初審,從這次實(shí)習(xí)中,進(jìn)一步鞏固和深化了所學(xué)的理論知識(shí),彌補(bǔ)了單一理論教學(xué)的不足,并為后續(xù)專業(yè)課學(xué)習(xí)和畢業(yè)設(shè)計(jì)打下了堅(jiān)實(shí)的基礎(chǔ)。</p><p><b>  參考文獻(xiàn)</b></p

75、><p>  [1]馬忠梅,單片機(jī)的C語言Windows環(huán)境編程寶典[M], 北京:北京航空航天大學(xué)出版社,2003.6;    </p><p>  [2]李光飛,單片機(jī)C程序設(shè)計(jì)指導(dǎo)[M],北京:北京航空航天大學(xué)出版社,2003.01 ;</p><p>  [3]李光飛,單片機(jī)課程設(shè)計(jì)實(shí)例指導(dǎo)[M],北京:北京航空航天大學(xué)出版社,2004.9。</p>

76、<p>  [4]閻石主編.《數(shù)字電子技術(shù)基礎(chǔ)》第四版,北京:高等教育出版社,2001年。</p><p>  [5]王正謀主編.《PROTEL99SE電路設(shè)計(jì)與仿真技術(shù)》,福建:福建科學(xué)技術(shù)出版社,2004年。</p><p>  附錄Ⅰ 電路原理圖</p><p>  附錄Ⅱ PCB元器件布局圖</p><p>  附錄

77、Ⅲ PCB頂層圖</p><p>  附錄Ⅳ PCB底層圖</p><p>  附錄Ⅴ 元器件清單</p><p>  附錄Ⅵ 程序清單</p><p>  #include"reg52.h"</p><p>  #include"intrins.h"</p&g

78、t;<p>  #include"absacc.h"</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int </p><p>  #define ulong unsigned long</p><p>  /*

79、定義定時(shí)器T0和T1時(shí)間常數(shù)和方式控制字 */</p><p>  sbit P17=P1^7;</p><p>  sbit P31=P3^1;</p><p>  sbit P30=P3^0;</p><p>  sbit P16=P1^6;</p><p>  sbit P37=P3^7;</p>

80、<p>  uchar led_buf[4];//顯示緩沖數(shù)組</p><p>  uchar led1_buf_xuehao[8]={11,0,9,0,3,12,3,2};//顯示緩沖數(shù)組</p><p>  uchar led_sel[3]={0x7f,0xdf,0xef};</p><p>  uchar code dispcode[13]={

81、0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0c,0xa1,0xbf};</p><p><b>  //段碼數(shù)組</b></p><p>  uchar keyzhi;</p><p>  uint m,time,time2;</p><p>  /////

82、////////////////////////////////////////////////延時(shí)程序 </p><p>  void delay(uint a) </p><p><b>  {</b></p><p>  while(a--);</p><p><b>  }</b>

83、;</p><p>  ///////////////////////////////////////////////////定時(shí)時(shí)間為X*40MS的子程序</p><p>  void delay2(unsigned int x) </p><p>  { unsigned int j;</p><p>  while(x--)&l

84、t;/p><p>  { for(j=0;j<5000;j++)</p><p><b>  {;}</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  ////////////////////

85、//////////////////////////////違規(guī)指示燈亮程序</p><p>  void led()</p><p><b>  {</b></p><p><b>  P30=0;</b></p><p>  delay(2000);</p><p>

86、  delay(2000);</p><p><b>  } </b></p><p>  //////////////////////////////////////////////////蜂鳴器程序</p><p>  void ring() </p><p><b>  {</b><

87、/p><p><b>  P31=0;</b></p><p>  delay(20000);</p><p><b>  P31=1;</b></p><p><b>  } </b></p><p>  /////////////////////////

88、//////////////////////// //P.顯示程序</p><p>  void ledk() </p><p>  { </p><p>  uchar sel=0x0

89、1; </p><p><b>  uchar i;</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  P2=sel; </p><p

90、>  P0=dispcode[10]; </p><p>  delay(200); </p><p>  sel=_crol_(sel,1); </p><p><b>  }</b></p><p><b>  } </b></

91、p><p>  ////////////////////////////////////////////////////////// //顯示緩沖區(qū)更新函數(shù)</p><p>  void led_buf_auto_flush(void) reentrant </p><p>  { </

92、p><p>  led_buf[0]=m; //獲得選手的號(hào)碼</p><p>  led_buf[1]=time/10; //獲得秒十位</p><p>  led_buf[2]=time%10; //獲得秒的個(gè)位</p><p><b>  } </

93、b></p><p>  //////////////////////////////////////////////////////////定時(shí)器t0中斷服務(wù)函數(shù),選用定時(shí)器0工作方式為1</p><p>  void timer0(void) interrupt 1 </p><p><b>  { </b></p>

94、<p><b>  uchar j;</b></p><p>  static uchar t=0; </p><p>  TH0=0x3c;TL1=0xb0;//設(shè)置初始值50ms為循環(huán)20次為1ms,12MHz</p><p><b>  ++t;</b></p><p&

95、gt;  if(t==20) //定時(shí)器0定時(shí)中斷次數(shù)</p><p><b>  {</b></p><p><b>  --time;</b></p><p><b>  t=0; </b></p><p>  if((time==20)&&

96、;(j!=0xff))</p><p><b>  { P31=0;</b></p><p>  delay(10000);</p><p><b>  P31=1;</b></p><p><b>  }</b></p><p>  led_buf_a

97、uto_flush(); //LED顯示緩沖區(qū)時(shí)間值更新</p><p><b>  }</b></p><p><b>  }</b></p><p>  //////////////////////////////////////////////////////////////選用定時(shí)器1工作方式為1</p

98、><p>  void timer1(void) interrupt 3 </p><p><b>  { </b></p><p><b>  uchar j; </b></p><p>  static uchar t=0; </p><p>  TH1

99、=0x3c;TL1=0xb0; </p><p><b>  ++t;</b></p><p>  if(t==20) </p><p><b>  { </b></p><p><b>  --time2;</b></p><p&g

100、t;<b>  t=0;</b></p><p>  if((time2==0)&&(j!=0xff))</p><p><b>  {</b></p><p><b>  P30=0;</b></p><p>  delay(10000);</p>

101、<p><b>  TR1=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  time=time2;</p><p>  led_buf_auto_flush(); </p>&

102、lt;p><b>  }</b></p><p>  ////////////////////////////////////////////////////////////////顯示輸出函數(shù)</p><p>  void put_on_leds(void) </p><p>  { uchar i;</

103、p><p>  for(i=0;i<3;i++)</p><p><b>  {</b></p><p>  P2=led_sel[i]; </p><p>  P0=dispcode[led_buf[i]]; </p><p>  delay(100);

104、 </p><p>  delay(100);</p><p><b>  }</b></p><p><b>  }</b></p><p>  /////////////////////////////////////////////////////////////

105、//顯示靜態(tài)學(xué)號(hào)輸出函數(shù)</p><p>  void put_on_led_jxuehao(void) </p><p><b>  {</b></p><p>  uchar sel=0x7f; </p><p><b>  uchar i;</b></p

106、><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  P2=sel; </p><p>  P0=dispcode[led1_buf_xuehao[i]]; </p><p><b>  P

107、30=1;</b></p><p>  delay(100); </p><p>  sel=_cror_(sel,1); </p><p><b>  }</b></p><p><b>  }</b></p><p>

108、;  /////////////////////////////////////////////////////////////顯示動(dòng)態(tài)學(xué)號(hào)輸出函數(shù)</p><p>  void put_on_led_dxuehao(void) </p><p><b>  {</b></p><p>  uchar sel=0x7f;

109、 </p><p><b>  uchar i;</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  P2=sel; </p><p>  P0=dispco

110、de[led1_buf_xuehao[i]];</p><p><b>  P3=0x7f;</b></p><p>  delay2(8); </p><p>  sel=_cror_(sel,1); </p><p>  while(i==7)</p><p>

111、  put_on_led_jxuehao();</p><p><b>  ring();</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  ///////////////////////////////////////

112、/////////////////////////進(jìn)行初始化并接受用戶的初始化時(shí)間設(shè)置</p><p>  void init_sys(void) </p><p><b>  {</b></p><p>  TMOD=0x11; TH0=0x3c;TL0=0xb0;TH1=0x3c;TL1=0xb0; //設(shè)置時(shí)間初值</p

113、><p>  TR0=0;TR1=0;IE=0x8e; //開啟中斷,關(guān)閉定時(shí)器</p><p><b>  } </b></p><p>  ////////////////////////////////////////////////////////// /處理與鍵盤相連的P1口的內(nèi)容,作為鍵值</p>

114、<p>  uchar keychuli() /</p><p><b>  {</b></p><p>  uchar k; </p><p>  k=P1; //P1口內(nèi)容送K</p><p> 

115、 return(k); //返回鍵值</p><p><b>  }</b></p><p>  uchar key() //鍵盤掃描函數(shù),函數(shù)返回值即鍵值</p><p><b>  {</b></p>

116、<p>  uchar keyzhi,keyzhii; </p><p>  keyzhi=keychuli(); //調(diào)P1口處理函數(shù)</p><p>  if(keyzhi!=0xff) </p><p><b>  {</b></p>

117、;<p>  delay(100); </p><p>  if(keyzhi!=0xff) //真正有鍵按下,取鍵值并暫存</p><p><b>  {</b></p><p>  keyzhii=keyzhi;</p><p>  w

118、hile(keyzhi!=0xff) //判按鍵是否釋放,沒有釋放延時(shí)去抖動(dòng)等待釋放</p><p><b>  {</b></p><p>  put_on_leds();</p><p>  put_on_leds();</p><p>  keyzhi=keychuli();</p>&

119、lt;p><b>  }</b></p><p>  keyzhi=keyzhii; //按鍵釋放后恢復(fù)按鍵鍵值</p><p><b>  }</b></p><p><b>  } </b></p><p>  return(keyzhi);

120、 //返回按鍵鍵值</p><p><b>  }</b></p><p>  /////////////////////////////////////////////////////// //外部中斷</p><p>  void intx1() interrupt 2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論