AT89S51單片機(jī)實(shí)驗(yàn)及實(shí)踐教程_第1頁(yè)
AT89S51單片機(jī)實(shí)驗(yàn)及實(shí)踐教程_第2頁(yè)
AT89S51單片機(jī)實(shí)驗(yàn)及實(shí)踐教程_第3頁(yè)
AT89S51單片機(jī)實(shí)驗(yàn)及實(shí)踐教程_第4頁(yè)
AT89S51單片機(jī)實(shí)驗(yàn)及實(shí)踐教程_第5頁(yè)
已閱讀5頁(yè),還剩214頁(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、AT89S51單片機(jī)實(shí)驗(yàn)及實(shí)踐教程孫安青編著AT89S51單片機(jī)實(shí)驗(yàn)及實(shí)踐教程第一章AT89S51單片機(jī)實(shí)驗(yàn)及實(shí)踐系統(tǒng)板簡(jiǎn)介3第二章Keil C軟件使用16第三章AT89S51單片機(jī)下載器軟件使用26第四章 實(shí)驗(yàn)及實(shí)踐課題291閃爍燈292模擬開關(guān)燈323多路開關(guān)狀態(tài)指示354廣告燈的左移右移395廣告燈(利用取表方式)426報(bào)警產(chǎn)生器457I/O并行口直接驅(qū)動(dòng)LED顯示488按鍵識(shí)別方法之一519一鍵多功能按鍵識(shí)別技術(shù)55100099計(jì)數(shù)器60110059秒計(jì)時(shí)器(利用軟件延時(shí))6312可預(yù)置可逆4位計(jì)數(shù)器6613動(dòng)態(tài)數(shù)碼顯示技術(shù)71144×4矩陣式鍵盤識(shí)別技術(shù)7415定時(shí)計(jì)數(shù)器T

2、0作定時(shí)應(yīng)用技術(shù)(一)8416定時(shí)計(jì)數(shù)器T0作定時(shí)應(yīng)用技術(shù)(二)891799秒馬表設(shè)計(jì)9418“嘀、嘀、”報(bào)警聲10019“叮咚”門鈴10520數(shù)字鐘11121拉幕式數(shù)碼顯示技術(shù)12022電子琴12723模擬計(jì)算器數(shù)字輸入及顯示140248X8 LED點(diǎn)陣顯示技術(shù)14725點(diǎn)陣式LED“09”數(shù)字顯示技術(shù)15226點(diǎn)陣式LED簡(jiǎn)單圖形顯示技術(shù)15927ADC0809A/D轉(zhuǎn)換器基本應(yīng)用技術(shù)16428數(shù)字電壓表17029兩點(diǎn)間溫度控制17430四位數(shù)數(shù)字溫度計(jì)180316位數(shù)顯頻率計(jì)數(shù)器18432電子密碼鎖設(shè)計(jì)188334×4鍵盤及8位數(shù)碼管顯示構(gòu)成的電子密碼鎖19334帶有存儲(chǔ)器功能

3、的數(shù)字溫度計(jì)DS1624技術(shù)應(yīng)用20635DS18B20數(shù)字溫度計(jì)使用218- 216 -AT89S51單片機(jī)實(shí)驗(yàn)及實(shí)踐教程第一章 AT89S51單片機(jī)實(shí)驗(yàn)及實(shí)踐系統(tǒng)板簡(jiǎn)介AT89S51單片機(jī)實(shí)驗(yàn)及實(shí)踐系統(tǒng)板(以后簡(jiǎn)介系統(tǒng)板)集成多個(gè)硬件資源模塊,每個(gè)模塊各自可以成為獨(dú)立的單元,也可以相互組合,因此,可以為不同階層的單片機(jī)愛好者及單片機(jī)開發(fā)者提供不同的開發(fā)環(huán)境。每個(gè)硬件模塊介紹如下:1 繼電器控制模塊系統(tǒng)板上提供了2路繼電器控制模塊,分布在系統(tǒng)板的最左上端區(qū)域中,輸入信號(hào)由Realy in 1和Realy in 2端口輸入分別控制兩路繼電器,繼電器控制的信號(hào)分別由最上端的兩個(gè)插針輸入和輸出。分

4、別稱為“com1 open1 short1”,“com2 open2 short2”,由于這個(gè)兩個(gè)繼電器是單刀單擲控制,當(dāng)繼電器不吸合時(shí),“com1”和“short1”相通,“com2”和“short2”相通;當(dāng)繼電器吸合時(shí),“com1”和“open1”相通,“com2”和“open2”相通。其電路原理圖1.1所示:圖1.12 參考電壓源模塊在系統(tǒng)板上寫有“參考電壓源”區(qū)域中,是由TL431來完成參考電壓的調(diào)節(jié),調(diào)節(jié)范圍在02.50V之間;主要為是系統(tǒng)板上需要參考電壓芯片或是為外部設(shè)備提供參考電壓,由Var Vref Out端口輸出。其電路原理圖如圖1.2所示:圖1.23 三路可調(diào)電壓模塊此模

5、塊主要是用于提供05V之間的可變的模擬電壓值,即可以作為參考電壓源也可以作為模擬電壓信號(hào)。這三路是相互獨(dú)立的。分別對(duì)應(yīng)著由VR1,VR2,VR3端口輸出。具體的電路原理圖如圖1.3所示:圖1.34 電源模塊電源模塊為系統(tǒng)板上其它模塊提供5V電源,電源輸入有兩種方式,一種為交直流電源從電源插座輸入,輸入的電壓要求,直流輸入應(yīng)大于7.5V,交流輸入應(yīng)大于5V,通過7805三端穩(wěn)壓器得到5V的直流電源供給系統(tǒng)其它模塊工作,另一種為從USB接口獲取5V電源,只要用相應(yīng)配套的USB線從電腦主機(jī)獲取5V直流電源,在電源模塊中加有保護(hù)電路,即電路中有短路,不會(huì)對(duì)7805三端穩(wěn)壓器及電腦主機(jī)電源有損害!其電路

6、原理圖如圖1.4所示:圖1.45 程序下載模塊該模塊完成源程序代碼下載到AT89S51或者是AT89S52芯片中,它需要和微機(jī)上的ISP下載器軟件配合使用來完成這樣的功能。具體的電路原理圖如圖1.5所示:圖1.56 232電平轉(zhuǎn)換模塊232電平轉(zhuǎn)換采用MAX232芯片把TTL電平轉(zhuǎn)換成RS232電平格式,可以用于單片機(jī)與微機(jī)通信,以及單片機(jī)與單片機(jī)之間的通信,在該系統(tǒng)板上提供了兩個(gè)DB9的接口,其中一個(gè)用ISP下載器模塊的程序下載接口,稱為“ISPInterface”,另一個(gè)接口為單片機(jī)與其它具有RS232接口的通信端口,稱為“Common Port”。具體的電路原理圖如圖1.6所示:圖1.6

7、7 頻率產(chǎn)生器模塊該模塊采用555芯片產(chǎn)生一些連續(xù)頻率的方波信號(hào),由“WAVEGND”端口輸出,其穩(wěn)定可調(diào)的頻率范圍在5KHz100KHz之間變化。電路原理圖如圖1.7所示:圖1.78 音頻放大模塊該音頻放大模塊采用LM386芯片作為音頻的功率放大,音頻信號(hào)由“SPK IN”端口輸入,信號(hào)的輸出由“SPKOUT”端口輸出,只要在“SPKOUT”接一個(gè)喇叭即可。具體的電路原理圖如圖1.8所示:圖1.89 模數(shù)轉(zhuǎn)換模塊系統(tǒng)板上的模數(shù)轉(zhuǎn)換模塊采用ADC0809芯片,組成8路8位的A/D轉(zhuǎn)換,8路模擬電壓的輸入由IN0IN7的端口輸入,控制ADC0809芯片工作的控制信號(hào)由“CLKOEEOCSTA2A

8、1A0”端口輸入,轉(zhuǎn)換的數(shù)據(jù)從D0D7的端口輸出。具體的電路原理圖如圖1.9所示:圖1.910 動(dòng)態(tài)數(shù)碼顯示模塊該系統(tǒng)中采用8位的動(dòng)態(tài)數(shù)碼顯示,控制數(shù)碼顯示的數(shù)據(jù)由兩部分組成,一部分為筆段亮滅控制的信號(hào)輸入由“ABCDEFGH”端口輸入,而控制位顯示的控制信號(hào)由“S1S2S3S4S5S6S7S8”端口輸入,同時(shí)該動(dòng)態(tài)數(shù)碼顯示采用共陰數(shù)碼管;具體的電路原理圖如圖1.10所示:圖1.1011 四路靜態(tài)數(shù)碼顯示模塊在該模塊中,每一路端口對(duì)應(yīng)著一個(gè)具體的數(shù)碼管,具體的電路原理圖如圖1.11所示:圖1.1112 8X8點(diǎn)陣模塊該系統(tǒng)板上提供了8X8點(diǎn)陣模塊,用于理解單片機(jī)是如何控制點(diǎn)陣數(shù)碼管的工作過程,

9、它有兩個(gè)輸入控制端口,對(duì)于點(diǎn)陣數(shù)碼管有行和列之分,這兩個(gè)端口分別控制它們的行和列,“DR1DR8”為8X8點(diǎn)陣模塊的行信號(hào)控制端口,“DC1DC8”為8X8點(diǎn)陣模塊的列信號(hào)控制端口。具體的電路原理圖如圖1.12所示:圖1.1213 八路發(fā)光二極管指示模塊該模塊采用8個(gè)發(fā)光二極管作為指示信號(hào)作用,即可以用排線來控制,也可以單個(gè)地控制每個(gè)發(fā)光二極管的亮滅,當(dāng)控制信號(hào)為低電平時(shí),發(fā)光二極管亮,為高電平時(shí),發(fā)光二極熄滅;控制電平的輸入由“L1L8”輸入。電路原理圖如圖1.13圖1.1314 三八譯碼模塊在系統(tǒng)板上提供了三八譯碼模塊,控制譯碼器譯碼信號(hào)由“CBA”端口輸入,譯出的控制信號(hào)由“Y0Y7”輸

10、出。電路原理圖如圖1.14圖1.1415 串并轉(zhuǎn)換模塊該系統(tǒng)板上采用了四個(gè)74LS164(移位寄存器)作為串并轉(zhuǎn)換模塊,這四路串并轉(zhuǎn)換模塊已經(jīng)級(jí)連起來。串行數(shù)據(jù)從“RXDTXD”端口輸入;具體的電路原理圖如圖1.15所示:圖1.1516 數(shù)模轉(zhuǎn)換模塊系統(tǒng)板上的數(shù)模轉(zhuǎn)換模塊采用了8位的D/A轉(zhuǎn)換芯片DAC0832來完成數(shù)模轉(zhuǎn)換過程,DAC0832是電流輸出型D/A轉(zhuǎn)換芯片,因此,后面接有集成運(yùn)放LM358來完成電流到電壓的轉(zhuǎn)換。其中的數(shù)字信號(hào)的輸入從“D0D7”端口輸入,控制DAC0832工作的控制信號(hào)由“WRCS”端口輸入,模擬量的輸出從“AOUT”端口輸出,由于LM358工作在雙電源條件下,

11、因此要給LM358加入±12V電壓,從“12VGND12V”端口加入。具體的電路原理圖如圖1.16所示:圖1.1617 單片機(jī)系統(tǒng)該系統(tǒng)板上的單片機(jī)系統(tǒng)把全部的I/O端口資源提供出來,因此,在實(shí)際應(yīng)用的時(shí)候,可以靈活地組合成不同的單片機(jī)應(yīng)用系統(tǒng),該單片機(jī)采用12MHZ晶振,具體的電路原理圖如圖1.17所示:圖1.1718 四路撥動(dòng)開關(guān)模塊開關(guān)控制信號(hào)由“K1K2K3K4”端口輸出,具體的電路原理圖如圖1.18所示:圖1.1819 分頻模塊該系統(tǒng)板上的分頻電路采用2片74LS74來完成最大16分頻,輸入的時(shí)鐘信號(hào)由“CK IN”端口輸入,經(jīng)過2片74LS74分頻后的信號(hào)分別由“/1 /

12、2 /4 /8 /16”端口輸出,分別表示未分頻,2分頻,4分頻,8分頻,16分頻;具體的電路原理圖如圖1.19所示圖1.1920 四路單總線模塊為了適應(yīng)新技術(shù)的需要,增加1Wire總線接口,在本系統(tǒng)板上提供了四路1Wire總線接口,數(shù)據(jù)傳輸通過“DQ1DQ2DQ3DQ4”端口來完成;具體的電路原理圖如圖1.20所示:圖1.2021 二線總線模塊(I2C總線)為了適應(yīng)新技術(shù)的需要,增加了2路I2C總線接口,適用8腳的I2C總線芯片,左邊的“PIN1 PIN2 PIN3 PIN4 PIN5 PIN6”與上面的接口連接,右邊的“PIN1 PIN2 PIN3 PIN4 PIN5 PIN6”與下面的接

13、口連接;具體的電路原理圖如圖1.21所示:圖1.2122 獨(dú)立式鍵盤模塊鍵盤是人機(jī)通信不可缺少的部件,獨(dú)立式鍵盤是最基本的一種鍵盤方式,在本系統(tǒng)中提供了四個(gè)獨(dú)立式按鍵;具體的電路原理圖如圖1.22所示:圖1.2223 4×4行列式鍵盤模塊行列式鍵盤也即矩陣式鍵盤,它由行和列組成,在每個(gè)行列的交叉點(diǎn)上放置一個(gè)按鍵,這樣4×4行列式鍵盤共需要16個(gè)鍵盤組成;具體的電路原理圖如圖1.23所示:圖1.2324 32KB數(shù)據(jù)存儲(chǔ)器模塊為了適應(yīng)大容量的數(shù)據(jù)處理的需要,在系統(tǒng)板上加入了32KB數(shù)據(jù)存儲(chǔ)器(RAM),數(shù)據(jù)總線從“D0D7”的端口輸入,高8位地址總線從“A8A15”端口輸入,

14、控制數(shù)據(jù)存儲(chǔ)器的讀寫控制信號(hào)從“ALECSWRRD”端口輸入,具體的電路原理圖如圖1.24所示:圖1.24以上是“AT89S51單片機(jī)實(shí)驗(yàn)及實(shí)踐系統(tǒng)板”的所有硬件資源簡(jiǎn)介,通過這24個(gè)模塊之間的相互組合,可以設(shè)計(jì)出從基本的單片機(jī)系統(tǒng)到復(fù)雜的單片機(jī)應(yīng)用控制系統(tǒng)的設(shè)計(jì),是初學(xué)者對(duì)單片機(jī)入門和開發(fā)不可缺少的過程。第二章 Keil C軟件使用Keil C51 軟件是眾多單片機(jī)應(yīng)用開發(fā)的優(yōu)秀軟件之一,它集編輯,編譯,仿真于一體,支持匯編,PLM 語(yǔ)言和 C 語(yǔ)言的程序設(shè)計(jì),界面友好,易學(xué)易用。下面介紹Keil C51軟件的使用方法進(jìn)入 Keil C51 后,屏幕如下圖所示。幾秒鐘后出現(xiàn)編輯界啟動(dòng)Keil

15、 C51時(shí)的屏幕進(jìn)入Keil C51后的編輯界面簡(jiǎn)單程序的調(diào)試學(xué)習(xí)程序設(shè)計(jì)語(yǔ)言、學(xué)習(xí)某種程序軟件,最好的方法是直接操作實(shí)踐。下面通過簡(jiǎn)單的編程、調(diào)試,引導(dǎo)大家學(xué)習(xí)Keil C51軟件的基本使用方法和基本的調(diào)試技巧。1)建立一個(gè)新工程單擊Project菜單,在彈出的下拉菜單中選中New Project選項(xiàng)2)然后選擇你要保存的路徑,輸入工程文件的名字,比如保存到C51目錄里,工程文件的名字為C51如下圖所示,然后點(diǎn)擊保存. 3)這時(shí)會(huì)彈出一個(gè)對(duì)話框,要求你選擇單片機(jī)的型號(hào),你可以根據(jù)你使用的單片機(jī)來選擇,keil c51幾乎支持所有的51核的單片機(jī),我這里還是以大家用的比較多的Atmel 的89

16、C51來說明,如下圖所示,選擇89C51之后,右邊欄是對(duì)這個(gè)單片機(jī)的基本的說明,然后點(diǎn)擊確定.4)完成上一步驟后,屏幕如下圖所示到現(xiàn)在為止,我們還沒有編寫一句程序,下面開始編寫我們的第一個(gè)程序。5)在下圖中,單擊“File”菜單,再在下拉菜單中單擊“New”選項(xiàng) 新建文件后屏幕如下圖所示 此時(shí)光標(biāo)在編輯窗口里閃爍,這時(shí)可以鍵入用戶的應(yīng)用程序了,但筆者建議首先保存該空白的文件,單擊菜單上的“File”,在下拉菜單中選中“Save As”選項(xiàng)單擊,屏幕如下圖所示,在“文件名”欄右側(cè)的編輯框中,鍵入欲使用的文件名,同時(shí),必須鍵入正確的擴(kuò)展名。注意,如果用語(yǔ)言編寫程序,則擴(kuò)展名為(.c);如果用匯編語(yǔ)

17、言編寫程序,則擴(kuò)展名必須為(.asm)。然后,單擊“保存”按鈕。 6)回到編輯界面后,單擊“Target 1”前面的“”號(hào),然后在“Source Group 1”上單擊右鍵,彈出如下菜單 然后單擊“Add File to Group Source Group 1” 屏幕如下圖所示 選中Test.c,然后單擊“Add ”屏幕好下圖所示 注意到“Source Group 1”文件夾中多了一個(gè)子項(xiàng)“Text1.c”了嗎?子項(xiàng)的多少與所增加的源程序的多少相同 7)現(xiàn)在,請(qǐng)輸入如下的C語(yǔ)言源程序: #include <reg52.h> /包含文件#include <stdio

18、.h>void main(void) /主函數(shù)SCON=0x52;TMOD=0x20;TH1=0xf3;TR1=1; /此行及以上3行為PRINTF函數(shù)所必須printf(“Hello I am KEIL. n”); /打印程序執(zhí)行的信息printf(“I will be your friend.n”);while(1); 在輸入上述程序時(shí),讀者已經(jīng)看到了事先保存待編輯的文件的好處了吧,即Keil c51會(huì)自動(dòng)識(shí)別關(guān)鍵字,并以不同的顏色提示用戶加以注意,這樣會(huì)使用戶少犯錯(cuò)誤,有利于提高編程效率。程序輸入完畢后,如下圖所示 8)在上圖中,單擊“Project”菜單,再在下拉菜單中單擊“Bu

19、ilt Target”選項(xiàng)(或者使用快捷鍵F7),編譯成功后,再單擊“Project”菜單,在下拉菜單中單擊“Start/Stop Debug Session”(或者使用快捷鍵Ctrl+F5),屏幕如下所示 9)調(diào)試程序:在上圖中,單擊“Debug”菜單,在下拉菜單中單擊“Go”選項(xiàng),(或者使用快捷鍵F5),然后再單擊“Debug”菜單,在下拉菜單中單擊“Stop Running”選項(xiàng)(或者使用快捷鍵Esc);再單擊“View”菜單,再在下拉菜單中單擊“Serial Windows #1”選項(xiàng),就可以看到程序運(yùn)行后的結(jié)果,其結(jié)果如下圖所示 至此,我們?cè)贙eil C51上做了一個(gè)完整工程的全過程

20、。但這只是純軟件的開發(fā)過程,如何使用程序下載器看一看程序運(yùn)行的結(jié)果呢?10)單擊“Project”菜單,再在下拉菜單中單擊“” 在下圖中,單擊“Output”中單擊“Create HEX File” 選項(xiàng),使程序編譯后產(chǎn)生HEX代碼,供下載器軟件使用。把程序下載到AT89S51單片機(jī)中。第三章 AT89S51單片機(jī)下載器軟件使用AT89S51單片機(jī)下載器是專門用于下載程序到單片機(jī)系統(tǒng)中,該軟件使用方便。啟動(dòng)軟件之后進(jìn)入下面的界面(如圖3.1所示):圖3.1在上圖中:1 區(qū)域1為程序代碼顯示區(qū);2 區(qū)域2為下載芯片選擇區(qū),該軟件支持多種芯片的程序在線下載,對(duì)系統(tǒng)板上的單片機(jī)AT89S51是其中一

21、種,軟件默認(rèn)情況下為AT89S51單片機(jī)。3 區(qū)域3為在線下載的操作區(qū),它可以提供如下的操作(1) 初始化:?jiǎn)?dòng)AT89S51單片機(jī)進(jìn)入ISP下載狀態(tài),點(diǎn)擊一下,若啟動(dòng)成功,則操作區(qū)后的操作按鈕就會(huì)變成如圖3.2所示的狀態(tài)。否則,不成功會(huì)有“初始化失敗”的紅色字樣提示。圖3.2(2) 特征字:點(diǎn)擊一下,會(huì)讀出單片機(jī)的芯片的特征字,對(duì)于AT89S51單片機(jī)的特征字為:1E5106,出現(xiàn)的提示框如圖3.3所示圖3.3(3) 查空:是檢查單片機(jī)是否已經(jīng)被擦除干凈。(4) 擦除:是把單片機(jī)的內(nèi)容擦除干凈,即單片機(jī)內(nèi)部ROM的內(nèi)容全為FFH。(5) 編程:把代碼區(qū)中的程序代碼下載到單片機(jī)的內(nèi)部ROM中。

22、注意在編程之前,要對(duì)單片機(jī)芯片進(jìn)行擦除操作。(6) 檢驗(yàn):是經(jīng)過編程之后,對(duì)下載到單片機(jī)內(nèi)部ROM中的內(nèi)容與代碼區(qū)的內(nèi)容相比較,若程序下載過程中完全正確,則提示校驗(yàn)正確,否則提示出現(xiàn)錯(cuò)誤。那就得需要重新下載程序到ROM中。(7) 自動(dòng):提供了從內(nèi)部ROM從擦除到編程,最后到校驗(yàn)這三個(gè)過程。(8) 讀?。簭膯纹瑱C(jī)內(nèi)部ROM中讀取內(nèi)容到代碼顯示區(qū)中。4 區(qū)域4中,有“裝載”、“設(shè)置”、“保存”和“退出”四個(gè)功能。(1) 裝載:是把經(jīng)過KEILC軟件轉(zhuǎn)化成HEX格式的文件裝入?yún)^(qū)域1中,當(dāng)單擊“裝載”按鈕時(shí),出現(xiàn)如圖3.4所示的對(duì)話框。圖3.4在這里選擇以HEX為后綴的文件,選中它并點(diǎn)擊“打開”按鈕,

23、即把程序代碼裝入到代碼顯示區(qū)1中。裝載之后如圖3.5所示圖3.5我們就可以把代碼顯示區(qū)域1中的代碼通過ISP下載線下載到AT89S51單片機(jī)中。(2) 設(shè)置:對(duì)該軟件一些操作方式進(jìn)行設(shè)置,點(diǎn)擊按鈕之后,出現(xiàn)如圖3.6所示的界面:在這里可以進(jìn)行通信端口的設(shè)置,共設(shè)置的4個(gè)串行通信端口,COM1、COM2、COM3、COM4,根據(jù)計(jì)算機(jī)的硬件特點(diǎn)來決定,默認(rèn)情況下為COM1,即串行通信口1。另外,還可以對(duì)芯片的加密位進(jìn)行設(shè)置,共有4種選擇,“不加密”對(duì)芯片的程序不進(jìn)行加密保護(hù)“鎖定位1”對(duì)芯片的程序進(jìn)行一級(jí)加密保護(hù)“鎖定位2”對(duì)芯片的程序進(jìn)行二級(jí)加密保護(hù)“鎖定位1,2”對(duì)芯片的程序進(jìn)行三級(jí)加密保護(hù)

24、圖3.6(3) 保存:是把從單片機(jī)的芯片ROM中的程序讀取出來到代碼顯示區(qū)域1中,點(diǎn)擊“保存”按鈕,即可保存為HEX格式的文件。(4) 退出:退出該軟件系統(tǒng)。在進(jìn)行程序調(diào)試的時(shí)候,我們一般通過KEILC軟件把編譯好的程序轉(zhuǎn)化成HEX格式文件,通過上面的方法,裝載程序之后,點(diǎn)擊“自動(dòng)”按鈕,程序就下載到單片機(jī)內(nèi)部ROM芯片中,最后點(diǎn)擊“運(yùn)行”,即可以看到程序的結(jié)果。注意,每次重新更新程序的時(shí)候,要點(diǎn)擊“初始化”按鈕,才可以相應(yīng)的操作。 第四章 實(shí)驗(yàn)及實(shí)踐課題1 閃爍燈1 實(shí)驗(yàn)任務(wù)如圖4.1.1所示:在P1.0端口上接一個(gè)發(fā)光二極管L1,使L1在不停地一亮一滅,一亮一滅的時(shí)間間隔為0.2秒。2 電

25、路原理圖圖4.1.13 系統(tǒng)板上硬件連線把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0端口用導(dǎo)線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的L1端口上。4 程序設(shè)計(jì)內(nèi)容(1) 延時(shí)程序的設(shè)計(jì)方法作為單片機(jī)的指令的執(zhí)行的時(shí)間是很短,數(shù)量大微秒級(jí),因此,我們要求的閃爍時(shí)間間隔為0.2秒,相對(duì)于微秒來說,相差太大,所以我們?cè)趫?zhí)行某一指令時(shí),插入延時(shí)程序,來達(dá)到我們的要求,但這樣的延時(shí)程序是如何設(shè)計(jì)呢?下面具體介紹其原理:如圖4.1.1所示的石英晶體為12MHz,因此,1個(gè)機(jī)器周期為1微秒機(jī)器周期微秒MOV R6,#202個(gè)2D1:MOV R7,#2482個(gè)222×24849820×DJNZ R7,

26、$2個(gè)2×248 (498DJNZ R6,D12個(gè)2×204010002因此,上面的延時(shí)程序時(shí)間為10.002ms。由以上可知,當(dāng)R610、R7248時(shí),延時(shí)5ms,R620、R7248時(shí),延時(shí)10ms,以此為基本的計(jì)時(shí)單位。如本實(shí)驗(yàn)要求0.2秒200ms,10ms×R5200ms,則R520,延時(shí)子程序如下:DELAY:MOV R5,#20D1:MOV R6,#20D2:MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RET(2) 輸出控制如圖1所示,當(dāng)P1.0端口輸出高電平,即P1.01時(shí),根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍?,這時(shí)發(fā)

27、光二極管L1熄滅;當(dāng)P1.0端口輸出低電平,即P1.00時(shí),發(fā)光二極管L1亮;我們可以使用SETBP1.0指令使P1.0端口輸出高電平,使用CLRP1.0指令使P1.0端口輸出低電平。5 程序框圖如圖4.1.2所示圖4.1.26 匯編源程序ORG 0START:CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP STARTDELAY:MOV R5,#20;延時(shí)子程序,延時(shí)0.2秒D1:MOV R6,#20D2:MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND7 C語(yǔ)言源程序#include <AT89X51.

28、H>sbit L1=P10;void delay02s(void)/延時(shí)0.2秒子程序 unsigned char i,j,k; for(i=20;i>0;i-) for(j=20;j>0;j-) for(k=248;k>0;k-);void main(void) while(1) L1=0; delay02s(); L1=1; delay02s(); 2 模擬開關(guān)燈1 實(shí)驗(yàn)任務(wù)如圖4.2.1所示,監(jiān)視開關(guān)K1(接在P3.0端口上),用發(fā)光二極管L1(接在單片機(jī)P1.0端口上)顯示開關(guān)狀態(tài),如果開關(guān)合上,L1亮,開關(guān)打開,L1熄滅。2 電路原理圖圖4.2.13 系統(tǒng)板上

29、硬件連線(1) 把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0端口用導(dǎo)線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的L1端口上;(2) 把“單片機(jī)系統(tǒng)”區(qū)域中的P3.0端口用導(dǎo)線連接到“四路撥動(dòng)開關(guān)”區(qū)域中的K1端口上;4 程序設(shè)計(jì)內(nèi)容(1) 開關(guān)狀態(tài)的檢測(cè)過程單片機(jī)對(duì)開關(guān)狀態(tài)的檢測(cè)相對(duì)于單片機(jī)來說,是從單片機(jī)的P3.0端口輸入信號(hào),而輸入的信號(hào)只有高電平和低電平兩種,當(dāng)撥開開關(guān)K1撥上去,即輸入高電平,相當(dāng)開關(guān)斷開,當(dāng)撥動(dòng)開關(guān)K1撥下去,即輸入低電平,相當(dāng)開關(guān)閉合。單片機(jī)可以采用JBBIT,REL或者是JNBBIT,REL指令來完成對(duì)開關(guān)狀態(tài)的檢測(cè)即可。(2) 輸出控制如圖3所示,當(dāng)P1.0端口輸出高電平,即

30、P1.01時(shí),根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍?,這時(shí)發(fā)光二極管L1熄滅;當(dāng)P1.0端口輸出低電平,即P1.00時(shí),發(fā)光二極管L1亮;我們可以使用SETBP1.0指令使P1.0端口輸出高電平,使用CLRP1.0指令使P1.0端口輸出低電平。5 程序框圖開始K1開關(guān)閉合了嗎?L1亮L1滅圖4.2.26 匯編源程序ORG 00HSTART:JB P3.0,LIGCLR P1.0SJMP STARTLIG:SETB P1.0SJMP STARTEND7 C語(yǔ)言源程序#include <AT89X51.H>sbit K1=P30;sbit L1=P10;void main(void) whil

31、e(1) if(K1=0) L1=0;/燈亮 else L1=1;/燈滅 3 多路開關(guān)狀態(tài)指示1 實(shí)驗(yàn)任務(wù)如圖4.3.1所示,AT89S51單片機(jī)的P1.0P1.3接四個(gè)發(fā)光二極管L1L4,P1.4P1.7接了四個(gè)開關(guān)K1K4,編程將開關(guān)的狀態(tài)反映到發(fā)光二極管上。(開關(guān)閉合,對(duì)應(yīng)的燈亮,開關(guān)斷開,對(duì)應(yīng)的燈滅)。2 電路原理圖圖4.3.13 系統(tǒng)板上硬件連線(1 把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0P1.3用導(dǎo)線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的L1L4端口上;(2 把“單片機(jī)系統(tǒng)”區(qū)域中的P1.4P1.7用導(dǎo)線連接到“四路撥動(dòng)開關(guān)”區(qū)域中的K1K4端口上;4 程序設(shè)計(jì)內(nèi)容(1 開關(guān)狀態(tài)檢測(cè)對(duì)

32、于開關(guān)狀態(tài)檢測(cè),相對(duì)單片機(jī)來說,是輸入關(guān)系,我們可輪流檢測(cè)每個(gè)開關(guān)狀態(tài),根據(jù)每個(gè)開關(guān)的狀態(tài)讓相應(yīng)的發(fā)光二極管指示,可以采用JBP1.X,REL或JNBP1.X,REL指令來完成;也可以一次性檢測(cè)四路開關(guān)狀態(tài),然后讓其指示,可以采用MOVA,P1指令一次把P1端口的狀態(tài)全部讀入,然后取高4位的狀態(tài)來指示。(2 輸出控制根據(jù)開關(guān)的狀態(tài),由發(fā)光二極管L1L4來指示,我們可以用SETBP1.X和CLRP1.X指令來完成,也可以采用MOVP1,1111XXXXB方法一次指示。5 程序框圖開始讀P1口數(shù)據(jù)到ACC中ACC內(nèi)容右移4次ACC內(nèi)容與F0H相或ACC內(nèi)容送入P1口圖4.3.26 方法一(匯編源程

33、序)ORG 00HSTART:MOV A,P1ANL A,#0F0HRR ARR ARR ARR AXOR A,#0F0HMOV P1,ASJMP STARTEND7 方法一(C語(yǔ)言源程序)#include <AT89X51.H>unsigned char temp;void main(void) while(1) temp=P1>>4; temp=temp | 0xf0; P1=temp; 8 方法二(匯編源程序)ORG 00HSTART:JB P1.4,NEXT1CLR P1.0SJMP NEX1NEXT1:SETB P1.0NEX1:JB P1.5,NEXT2CL

34、R P1.1SJMP NEX2NEXT2:SETB P1.1NEX2:JB P1.6,NEXT3CLR P1.2SJMP NEX3NEXT3:SETB P1.2NEX3:JB P1.7,NEXT4CLR P1.3SJMP NEX4NEXT4:SETB P1.3NEX4:SJMP STARTEND9 方法二(C語(yǔ)言源程序)#include <AT89X51.H>void main(void) while(1) if(P1_4=0) P1_0=0; else P1_0=1; if(P1_5=0) P1_1=0; else P1_1=1; if(P1_6=0) P1_2=0; else

35、P1_2=1; if(P1_7=0) P1_3=0; else P1_3=1; 4 廣告燈的左移右移1 實(shí)驗(yàn)任務(wù)做單一燈的左移右移,硬件電路如圖4.4.1所示,八個(gè)發(fā)光二極管L1L8分別接在單片機(jī)的P1.0P1.7接口上,輸出“0”時(shí),發(fā)光二極管亮,開始時(shí)P1.0P1.1P1.2P1.3P1.7P1.6P1.0亮,重復(fù)循環(huán)。2 電路原理圖圖4.4.13 系統(tǒng)板上硬件連線把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0P1.7用8芯排線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的L1L8端口上,要求:P1.0對(duì)應(yīng)著L1,P1.1對(duì)應(yīng)著L2,P1.7對(duì)應(yīng)著L8。4 程序設(shè)計(jì)內(nèi)容我們可以運(yùn)用輸出端口指令MOVP1,A或

36、MOVP1,DATA,只要給累加器值或常數(shù)值,然后執(zhí)行上述的指令,即可達(dá)到輸出控制的動(dòng)作。每次送出的數(shù)據(jù)是不同,具體的數(shù)據(jù)如下表1所示P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0說明L8L7L6L5L4L3L2L111111110L1亮11111101L2亮11111011L3亮11110111L4亮11101111L5亮11011111L6亮10111111L7亮01111111L8亮表15 程序框圖圖4.4.26 匯編源程序ORG 0START:MOV R2,#8MOV A,#0FEHSETB CLOOP:MOV P1,ALCALL DELAYRLC ADJNZ R2,

37、LOOPMOV R2,#8LOOP1:MOV P1,ALCALL DELAYRRC ADJNZ R2,LOOP1LJMP STARTDELAY:MOV R5,#20;D1:MOV R6,#20D2:MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND7 C語(yǔ)言源程序#include <AT89X51.H>unsigned char i;unsigned char temp;unsigned char a,b;void delay(void) unsigned char m,n,s; for(m=20;m>0;m-) for(n=20;n

38、>0;n-) for(s=248;s>0;s-);void main(void) while(1) temp=0xfe; P1=temp; delay(); for(i=1;i<8;i+) a=temp<<i; b=temp>>(8-i); P1=a|b; delay(); for(i=1;i<8;i+) a=temp>>i; b=temp<<(8-i); P1=a|b; delay(); 5 廣告燈(利用取表方式)1 實(shí)驗(yàn)任務(wù)利用取表的方法,使端口P1做單一燈的變化:左移2次,右移2次,閃爍2次(延時(shí)的時(shí)間0.2秒)。2

39、 電路原理圖圖4.5.13 系統(tǒng)板上硬件連線把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0P1.7用8芯排線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的L1L8端口上,要求:P1.0對(duì)應(yīng)著L1,P1.1對(duì)應(yīng)著L2,P1.7對(duì)應(yīng)著L8。4 程序設(shè)計(jì)內(nèi)容在用表格進(jìn)行程序設(shè)計(jì)的時(shí)候,要用以下的指令來完成(1) 利用MOVDPTR,DATA16的指令來使數(shù)據(jù)指針寄存器指到表的開頭。(2) 利用MOVCA,ADPTR的指令,根據(jù)累加器的值再加上DPTR的值,就可以使程序計(jì)數(shù)器PC指到表格內(nèi)所要取出的數(shù)據(jù)。因此,只要把控制碼建成一個(gè)表,而利用MOVC工,ADPTR做取碼的操作,就可方便地處理一些復(fù)雜的控制動(dòng)作,取表過程如下

40、圖所示:5 程序框圖圖4.5.26 匯編源程序ORG 0START:MOV DPTR,#TABLELOOP:CLR AMOVC A,A+DPTRCJNE A,#01H,LOOP1LJMP STARTLOOP1:MOV P1,AMOV R3,#20LCALL DELAYINC DPTRLJMP LOOPDELAY:MOV R4,#20D1:MOV R5,#248DJNZ R5,$DJNZ R4,D1DJNZ R3,DELAYRETTABLE:DB 0FEH,0FDH,0FBH,0F7HDB 0EFH,0DFH,0BFH,07FHDB 0FEH,0FDH,0FBH,0F7HDB 0EFH,0DFH

41、,0BFH,07FHDB 07FH,0BFH,0DFH,0EFHDB 0F7H,0FBH,0FDH,0FEHDB 07FH,0BFH,0DFH,0EFHDB 0F7H,0FBH,0FDH,0FEHDB 00H, 0FFH,00H, 0FFHDB 01HEND7 C語(yǔ)言源程序#include <AT89X51.H>unsigned char code table=0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f, 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f, 0x7f,0xbf,0xdf,0xef, 0xf7,0x

42、fb,0xfd,0xfe, 0x7f,0xbf,0xdf,0xef, 0xf7,0xfb,0xfd,0xfe, 0x00,0xff,0x00,0xff, 0x01;unsigned char i;void delay(void) unsigned char m,n,s; for(m=20;m>0;m-) for(n=20;n>0;n-) for(s=248;s>0;s-);void main(void) while(1) if(tablei!=0x01) P1=tablei; i+; delay(); else i=0; 6 報(bào)警產(chǎn)生器1 實(shí)驗(yàn)任務(wù)用P1.0輸出1KHz和50

43、0Hz的音頻信號(hào)驅(qū)動(dòng)揚(yáng)聲器,作報(bào)警信號(hào),要求1KHz信號(hào)響100ms,500Hz信號(hào)響200ms,交替進(jìn)行,P1.7接一開關(guān)進(jìn)行控制,當(dāng)開關(guān)合上響報(bào)警信號(hào),當(dāng)開關(guān)斷開告警信號(hào)停止,編出程序。2 電路原理圖圖4.6.13 系統(tǒng)板上硬件連線(1 把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0端口用導(dǎo)線連接到“音頻放大模塊”區(qū)域中的SPK IN端口上;(2 在“音頻放大模塊”區(qū)域中的SPK OUT端口上接上一個(gè)8歐的或者是16歐的喇叭;(3 把“單片機(jī)系統(tǒng)”區(qū)域中的P1.7/RD端口用導(dǎo)線連接到“四路撥動(dòng)開關(guān)”區(qū)域中的K1端口上;4 程序設(shè)計(jì)內(nèi)容(1 信號(hào)產(chǎn)生的方法500Hz信號(hào)周期為2ms,信號(hào)電平為每1ms變

44、反1次,1KHz的信號(hào)周期為1ms,信號(hào)電平每500us變反1次;5 程序框圖開始K1按下了嗎?FLAG0嗎?置200次計(jì)數(shù)P1.0輸出取反延時(shí)500us計(jì)數(shù)值計(jì)完了嗎?FLAG取反置200次計(jì)數(shù)P1.0輸出取反延時(shí)1ms計(jì)數(shù)值計(jì)完了嗎?FLAG取反圖4.6.26 匯編源程序FLAGBIT 00HORG 00HSTART:JB P1.7,STARTJNB FLAG,NEXTMOV R2,#200DV:CPL P1.0LCALL DELY500LCALL DELY500DJNZ R2,DVCPL FLAGNEXT:MOV R2,#200DV1:CPL P1.0LCALL DELY500DJNZ

45、R2,DV1CPL FLAGSJMP STARTDELY500:MOV R7,#250LOOP:NOPDJNZ R7,LOOPRETEND7 C語(yǔ)言源程序#include <AT89X51.H>#include <INTRINS.H>bit flag;unsigned char count;void dely500(void) unsigned char i; for(i=250;i>0;i-) _nop_(); void main(void) while(1) if(P1_7=0) for(count=200;count>0;count-) P1_0=P1

46、_0; dely500(); for(count=200;count>0;count-) P1_0=P1_0; dely500(); dely500(); 7 I/O并行口直接驅(qū)動(dòng)LED顯示1. 實(shí)驗(yàn)任務(wù)如圖13所示,利用AT89S51單片機(jī)的P0端口的P0.0P0.7連接到一個(gè)共陰數(shù)碼管的ah的筆段上,數(shù)碼管的公共端接地。在數(shù)碼管上循環(huán)顯示09數(shù)字,時(shí)間間隔0.2秒。2. 電路原理圖圖4.7.13. 系統(tǒng)板上硬件連線把“單片機(jī)系統(tǒng)”區(qū)域中的P0.0/AD0P0.7/AD7端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個(gè)數(shù)碼管的ah端口上;要求:P0.0/AD0與a相連,P0.1/AD1與b相連,P0.2/AD2與c相連,P0.7/AD7與h相連。4. 程序設(shè)計(jì)內(nèi)容(1 LED數(shù)碼顯示原理七段LED顯示器內(nèi)部由七個(gè)條形發(fā)光二極管和一個(gè)小圓點(diǎn)發(fā)光二極管組成,根據(jù)各管的極管的接線形式,可分成共陰極型和共陽(yáng)極型。LED數(shù)碼管的ga七個(gè)發(fā)光二極管因加正電壓而發(fā)亮,因加零電壓而不以發(fā)亮,不同亮暗的組合就能形成不同的字形,這種組合稱之為字形碼,下面給出共陰極的字形碼見表2“0”3FH“8”7FH“1”06H“9”6FH“2”5BH“A”77H“3”4FH“b”7C

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論