單片機(jī)個(gè)實(shí)驗(yàn)代碼詳細(xì)_第1頁
單片機(jī)個(gè)實(shí)驗(yàn)代碼詳細(xì)_第2頁
單片機(jī)個(gè)實(shí)驗(yàn)代碼詳細(xì)_第3頁
單片機(jī)個(gè)實(shí)驗(yàn)代碼詳細(xì)_第4頁
單片機(jī)個(gè)實(shí)驗(yàn)代碼詳細(xì)_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第一章 單片機(jī)系統(tǒng)板說明一、概述單片機(jī)實(shí)驗(yàn)開發(fā)系統(tǒng)是一種多功能、高配置、高品質(zhì)的MCS-51單片機(jī)教學(xué)與開發(fā)設(shè)備。適用于大學(xué)本科單片機(jī)教學(xué)、課程設(shè)計(jì)和畢業(yè)設(shè)計(jì)以及電子設(shè)計(jì)比賽。該系統(tǒng)采用模塊化設(shè)計(jì)思想,減小了系統(tǒng)面積,同時(shí)增加了可靠性,使得單片機(jī)實(shí)驗(yàn)開發(fā)系統(tǒng)能滿足從簡(jiǎn)單的數(shù)字電路實(shí)驗(yàn)到復(fù)雜的數(shù)字系統(tǒng)設(shè)計(jì)實(shí)驗(yàn),并能一直延伸到綜合電子設(shè)計(jì)等創(chuàng)新性實(shí)驗(yàn)項(xiàng)目。該系統(tǒng)采用集成穩(wěn)壓電源供電,使電源系統(tǒng)的穩(wěn)定性大大提高,同時(shí)又具備完備的保護(hù)措施。為適應(yīng)市場(chǎng)上多種單片機(jī)器件的應(yīng)用,該系統(tǒng)采用“單片機(jī)板+外圍擴(kuò)展板”結(jié)構(gòu),通過更換不同外圍擴(kuò)展板,可實(shí)驗(yàn)不同的單片機(jī)功能,適應(yīng)了各院校不同的教學(xué)需求。二、 單片機(jī)板

2、簡(jiǎn)介 本實(shí)驗(yàn)系統(tǒng)因?yàn)樽詭Я薓CS-51單片機(jī)系統(tǒng),因此沒有配置其他單片機(jī)板,但可以根據(jù)教學(xué)需要隨時(shí)配置。以單片機(jī)板為母板,并且有I/O接口引出,可以很方便的完成所有實(shí)驗(yàn)。因此構(gòu)成單片機(jī)實(shí)驗(yàn)系統(tǒng)。1、主要技術(shù)參數(shù)(1)MSC-51單片機(jī)板板上配有ATMEL公司的STC89C51芯片。STC89C51資源:32個(gè)I/O口;封裝DIP40。STC89C51開發(fā)軟件:KEIL C51。2、MSC-51單片機(jī)結(jié)構(gòu)(1)單片機(jī)板中央放置一塊可插拔的DIP封裝的STC89C51芯片。(2)單片機(jī)板左上側(cè)有一個(gè)串口,用于下載程序。(3)單片機(jī)板的四周是所有IO引腳的插孔,旁邊標(biāo)有I0引腳的腳引。(4)單片機(jī)板

3、與各個(gè)模塊配合使用時(shí),可形成個(gè)完整的實(shí)驗(yàn)系統(tǒng)。三、 母板簡(jiǎn)介主要技術(shù)參數(shù)(1)實(shí)驗(yàn)系統(tǒng)電源實(shí)驗(yàn)系統(tǒng)內(nèi)置了集成穩(wěn)壓電源,使整個(gè)電源具有短路保護(hù)、過流保護(hù)功能,提高了實(shí)驗(yàn)的穩(wěn)定性。 主板的右上角為電源總開關(guān),當(dāng)把220V交流電源線插入主板后,打開電源開關(guān),主板得電工作。為適用多種需要,配置了+5V,+12V,5V電壓供主板和外設(shè)需要,通過右上角的插針排和插孔輸出到外設(shè)。此外,還設(shè)有螺旋保險(xiǎn)插孔保護(hù)實(shí)驗(yàn)箱。(2)RS232接口RS232接口通過MAX232芯片實(shí)現(xiàn)與計(jì)算機(jī)的串行通訊,通過接口引出信號(hào)。(3)單片機(jī)最小系統(tǒng)單片機(jī)最小系統(tǒng)的核心是ATMEL公司的AT89S51單片機(jī),AT89S51右邊的

4、按鍵是復(fù)位鍵,按下時(shí)單片機(jī)復(fù)位,單片機(jī)的放兩排插孔,分別是:P1.0P1.7,P0.0P1.7,P3.0P3.7, P2.0P2.7,它們可以實(shí)現(xiàn)單片機(jī)實(shí)驗(yàn)和開發(fā)。(4)模擬量接口一個(gè)模擬量接口,由ICL8038產(chǎn)生,通過插孔引出。(5)DA轉(zhuǎn)換器DA轉(zhuǎn)換器由DA0832,LM324芯片組成,(8位,05V電壓輸出),對(duì)應(yīng)的接口序號(hào)為:數(shù)據(jù)信號(hào):D0D7;片選信號(hào):/CS;讀有效信號(hào)OE。(6)AD轉(zhuǎn)換器AD轉(zhuǎn)換器和 DA轉(zhuǎn)換器相臨,主要由ADC0809組成,(8位)對(duì)應(yīng)的接口序號(hào)為:模擬輸入:IN0-IN7;基準(zhǔn)電壓:REF+,REF -;讀寫信號(hào):RD,WR;輸出信號(hào):D0D7;檢測(cè)信號(hào):

5、I0;地址鎖存允許:ALE。(7)8位撥動(dòng)開關(guān)8位撥動(dòng)開關(guān)由KlK8組成,每一位都有相應(yīng)LED(DlD8)指示,當(dāng)撥碼開關(guān)撥上邊時(shí)輸出高電平,LED亮;撥下邊時(shí)輸出低電平,由插孔l8輸出。(8)24位按鍵開關(guān)24位按鍵開關(guān)位于主板中下方,由按鍵KlK24組成,有六排,第一排按下時(shí)是高電平,彈上時(shí)是低電平,由插孔14輸出;第二排按下時(shí)是低電平,彈上時(shí)高電平,由插孔14輸出;第三到第六排是4*4的行列式鍵盤;由L1L4,H1H4輸出。(9)靜態(tài)顯示數(shù)碼管靜態(tài)顯示區(qū)由數(shù)碼管DP1DP6組成,由插孔輸出,供靜態(tài)顯示用。(10)發(fā)光二極管顯示區(qū)8位紅色發(fā)光二極管,高電平亮,可作為狀態(tài)指示用;另一部分是交

6、通燈,由東西南北四組紅綠黃發(fā)光二極管構(gòu)成,高電平亮。(11)動(dòng)態(tài)掃描顯示區(qū)系統(tǒng)的顯示采用8位8段共陰或共陽數(shù)碼管(高電平有效),所對(duì)應(yīng)的接口序號(hào)為:段碼:a,b,c,d,e,f,g,h;位選:L1,L2,L3,L4,L5,L6,L7,L8。(12)蜂鳴器蜂鳴器(高電平TTL驅(qū)動(dòng))從其下方對(duì)應(yīng)輸入口,會(huì)產(chǎn)生lKHz的信號(hào)響聲。(13)繼電器控制區(qū)繼電器控制區(qū)主要由KJ1KJ3三個(gè)繼電器及其驅(qū)動(dòng)電路組成,高電平TTL驅(qū)動(dòng),輸出接口分別為JJ1,JJ2,JJ3。(14)數(shù)字溫度計(jì)數(shù)字溫度計(jì)使用DS1302溫度傳感器,輸出接口為SCLK、I/O、RESET。(15)EEPROMEEPROM(AT24C

7、16),用來保存數(shù)據(jù)信息,接口序號(hào)為:串行數(shù)據(jù)線:SDA;時(shí)鐘線:SCL;寫保護(hù)線:WP。(16)串行A/DAD轉(zhuǎn)換器主要由MAX192組成,(8位)對(duì)應(yīng)的接口序號(hào)為:模擬輸入:IN0-IN7;片選信號(hào):CS;輸出信號(hào):DOUT;時(shí)鐘信號(hào):SCLK;轉(zhuǎn)換開始:SSTRB。(17)變頻模塊(18)直流斬波模塊(19)紅外模塊四、 主要實(shí)驗(yàn)項(xiàng)目本實(shí)驗(yàn)系統(tǒng)由于采用模塊化設(shè)計(jì),各模塊之間既相互獨(dú)立,又可相互組合,完成各種類型實(shí)驗(yàn)。其中包括驗(yàn)證性基礎(chǔ)實(shí)驗(yàn),綜合性、設(shè)計(jì)性、創(chuàng)新性實(shí)驗(yàn)以及研究開發(fā)性、創(chuàng)新性、及全國(guó)電子大賽賽前培訓(xùn)實(shí)驗(yàn)等。以下列舉了本實(shí)驗(yàn)系統(tǒng)能做的部分單片機(jī)原理課程實(shí)驗(yàn)及課外開放性備選實(shí)驗(yàn)項(xiàng)

8、目。單片機(jī)原理課程實(shí)驗(yàn)實(shí)驗(yàn)一 LED顯示器指示實(shí)驗(yàn)二 軟件延時(shí)及燈光控制實(shí)驗(yàn)實(shí)驗(yàn)三 多級(jí)外部中斷實(shí)驗(yàn)實(shí)驗(yàn)四 脈沖頻率的測(cè)量實(shí)驗(yàn)實(shí)驗(yàn)五 串行口擴(kuò)展實(shí)驗(yàn)實(shí)驗(yàn)六 串行EEPROM的讀出和寫入實(shí)驗(yàn)實(shí)驗(yàn)七 8位A/D、D/A轉(zhuǎn)換器的應(yīng)用實(shí)驗(yàn)實(shí)驗(yàn)八 串行A/D、D/A的應(yīng)用實(shí)驗(yàn)實(shí)驗(yàn)九 直流繼電器的驅(qū)動(dòng)及控制實(shí)驗(yàn)實(shí)驗(yàn)十 數(shù)據(jù)采集的軟件抗干擾實(shí)驗(yàn)實(shí)驗(yàn)十一 密碼鎖控制器的設(shè)計(jì)實(shí)驗(yàn)十二 數(shù)字溫度控制器的設(shè)計(jì)實(shí)驗(yàn)十三 8255掃描鍵盤顯示實(shí)驗(yàn)實(shí)驗(yàn)十四 音樂編程實(shí)驗(yàn)實(shí)驗(yàn)十五 聲光報(bào)警實(shí)驗(yàn)實(shí)驗(yàn)十六 可預(yù)置可逆計(jì)數(shù)器實(shí)驗(yàn)實(shí)驗(yàn)十七 DS1302時(shí)鐘芯片的應(yīng)用實(shí)驗(yàn)實(shí)驗(yàn)十八 紅外通信接口實(shí)驗(yàn)實(shí)驗(yàn)十九 單片機(jī)變頻調(diào)速實(shí)驗(yàn)實(shí)驗(yàn)二十

9、 交通燈控制實(shí)驗(yàn)部分備選實(shí)驗(yàn)項(xiàng)目實(shí)驗(yàn)一 閃爍燈實(shí)驗(yàn)一 模擬開關(guān)燈實(shí)驗(yàn)一 多路開關(guān)狀態(tài)指示實(shí)驗(yàn)一 廣告燈的左移右移實(shí)驗(yàn)一 廣告燈(利用取表方式)實(shí)驗(yàn)一 報(bào)警產(chǎn)生器實(shí)驗(yàn)一 I/O并行口直接驅(qū)動(dòng)LED顯示實(shí)驗(yàn)一 按鍵識(shí)別方法之一實(shí)驗(yàn)一 0099計(jì)數(shù)器實(shí)驗(yàn)一 定時(shí)計(jì)數(shù)器T0作定時(shí)應(yīng)用技術(shù)(一)實(shí)驗(yàn)一 動(dòng)態(tài)數(shù)碼顯示技術(shù)實(shí)驗(yàn)一 44矩陣式鍵盤識(shí)別技術(shù)實(shí)驗(yàn)一 定時(shí)計(jì)數(shù)器T0作定時(shí)應(yīng)用技術(shù)(一)實(shí)驗(yàn)一 定時(shí)計(jì)數(shù)器T0作定時(shí)應(yīng)用技術(shù)(二)實(shí)驗(yàn)一 “叮咚”門鈴實(shí)驗(yàn)一 數(shù)字鐘實(shí)驗(yàn)一 ADC0809A/D轉(zhuǎn)換器基本應(yīng)用技術(shù)第二章 Keil C軟件使用Keil C51 軟件是眾多單片機(jī)應(yīng)用開發(fā)的優(yōu)秀軟件之一,它集編輯,

10、編譯,仿真于一體,支持匯編,PLM 語言和 C 語言的程序設(shè)計(jì),界面友好,易學(xué)易用。下面介紹Keil C51軟件的使用方法進(jìn)入 Keil C51 后,屏幕如下圖所示。幾秒鐘后出現(xiàn)編輯界啟動(dòng)Keil C51時(shí)的屏幕進(jìn)入Keil C51后的編輯界面簡(jiǎn)單程序的調(diào)試學(xué)習(xí)程序設(shè)計(jì)語言、學(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如下圖

11、所示,然后點(diǎn)擊保存. 3)這時(shí)會(huì)彈出一個(gè)對(duì)話框,要求你選擇單片機(jī)的型號(hào),你可以根據(jù)你使用的單片機(jī)來選擇,keil c51幾乎支持所有的51核的單片機(jī),我這里還是以大家用的比較多的Atmel 的89C51來說明,如下圖所示,選擇89C51之后,右邊欄是對(duì)這個(gè)單片機(jī)的基本的說明,然后點(diǎn)擊確定.4)完成上一步驟后,屏幕如下圖所示到現(xiàn)在為止,我們還沒有編寫一句程序,下面開始編寫我們的第一個(gè)程序。5)在下圖中,單擊“File”菜單,再在下拉菜單中單擊“New”選項(xiàng) 新建文件后屏幕如下圖所示此時(shí)光標(biāo)在編輯窗口里閃爍,這時(shí)可以鍵入用戶的應(yīng)用程序了,但筆者建議首先保存該空白的文件,單擊菜單上的“File”,在

12、下拉菜單中選中“Save As”選項(xiàng)單擊,屏幕如下圖所示,在“文件名”欄右側(cè)的編輯框中,鍵入欲使用的文件名,同時(shí),必須鍵入正確的擴(kuò)展名。注意,如果用語言編寫程序,則擴(kuò)展名為(.c);如果用匯編語言編寫程序,則擴(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.

13、c”了嗎?子項(xiàng)的多少與所增加的源程序的多少相同 7)現(xiàn)在,請(qǐng)輸入如下的C語言源程序: #include /包含文件#include 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ì)使用戶少犯

14、錯(cuò)誤,有利于提高編程效率。程序輸入完畢后,如下圖所示 8)在上圖中,單擊“Project”菜單,再在下拉菜單中單擊“Built 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 Wind

15、ows #1”選項(xiàng),就可以看到程序運(yùn)行后的結(jié)果,其結(jié)果如下圖所示 至此,我們?cè)贙eil C51上做了一個(gè)完整工程的全過程。但這只是純軟件的開發(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 界面右

16、邊為操作狀態(tài)顯示區(qū);2 界面左上為下載芯片選擇區(qū),該軟件支持多種芯片的程序在線下載,對(duì)系統(tǒng)板上的單片機(jī)AT89S51是其中一種,軟件默認(rèn)情況下為AT89S51單片機(jī)。3 界面左邊為在線下載的操作區(qū),它可以提供如下的操作(1) 初始化:?jiǎn)?dòng)AT89S51單片機(jī)進(jìn)入ISP下載狀態(tài),若啟動(dòng)成功,則狀態(tài)顯示區(qū)就會(huì)顯示如圖3.2所示的文字。否則,不成功會(huì)有“初始化失敗”的字樣提示。圖3.2(2) 特征字:點(diǎn)擊一下檢測(cè)器件,會(huì)讀出單片機(jī)的芯片的特征字,對(duì)于AT89S51單片機(jī)的特征字為:1E5106。(3) 擦除器件:是把單片機(jī)的內(nèi)容擦除干凈,即單片機(jī)內(nèi)部ROM的內(nèi)容全為FFH。(4) 寫器件:把代碼區(qū)中

17、的程序代碼下載到單片機(jī)的內(nèi)部ROM中。注意在編程之前,要對(duì)單片機(jī)芯片進(jìn)行擦除操作。(5) 效驗(yàn)數(shù)據(jù):是經(jīng)過編程之后,對(duì)下載到單片機(jī)內(nèi)部ROM中的內(nèi)容與代碼區(qū)的內(nèi)容相比較,若程序下載過程中完全正確,則提示校驗(yàn)正確,否則提示出現(xiàn)錯(cuò)誤。那就得需要重新下載程序到ROM中。(6) 自動(dòng):提供了從內(nèi)部ROM從擦除到編程,最后到校驗(yàn)這三個(gè)過程。(7) 讀器件:從單片機(jī)內(nèi)部ROM中讀取內(nèi)容到代碼顯示區(qū)中。第四章 實(shí)驗(yàn)及實(shí)踐課題1 閃爍燈1 實(shí)驗(yàn)任務(wù)如圖所示:在P1.0端口上接一個(gè)發(fā)光二極管L1,使L1在不停地一亮一滅,一亮一滅的時(shí)間間隔為0.2秒。2 電路原理圖圖3 系統(tǒng)板上硬件連線把“單片機(jī)系統(tǒng)”區(qū)域中的P

18、1.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ì)呢?下面具體介紹其原理:498*20+2*20+2=10002如圖所示的石英晶體為12MHz,因此,1個(gè)機(jī)器周期為1微秒機(jī)器周期微秒MOV R6,#202個(gè)2D1:MOV R7,#2482個(gè)22224849820DJNZ R7,$2個(gè)2248 (498DJNZ R6,D12個(gè)2204010

19、002因此,上面的延時(shí)程序時(shí)間為10.002ms。由以上可知,當(dāng)R610、R7248時(shí),延時(shí)5ms,R620、R7248時(shí),延時(shí)10ms,以此為基本的計(jì)時(shí)單位。如本實(shí)驗(yàn)要求0.2秒200ms,10msR5200ms,則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ā)光二極管L1熄滅;當(dāng)P1.0端口輸出低電平,即P1.00時(shí),發(fā)光二極管L1亮;我們可以使用SETB

20、P1.0指令使P1.0端口輸出高電平,使用CLRP1.0指令使P1.0端口輸出低電平。5 程序框圖如圖所示圖6 匯編源程序ORG 0000HSTART: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語言源程序#include sbit L1=P10;void delay02s(void)/延時(shí)0.2秒子程序 unsigned char i,j,k; for(

21、i=20;i0;i-) for(j=20;j0;j-) for(k=248;k0;k-);void main(void) while(1) L1=0; delay02s(); L1=1; delay02s(); 2 模擬開關(guān)燈1 實(shí)驗(yàn)任務(wù)如圖所示,監(jiān)視開關(guān)K1(接在P3.0端口上),K1撥上為高電平,撥下為低電平。用發(fā)光二極管L1(接在單片機(jī)P1.0端口上)顯示開關(guān)狀態(tài),如果開關(guān)撥上,L1亮,開關(guān)撥下,L1熄滅。2 電路原理圖圖3 系統(tǒng)板上硬件連線(1) 把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0端口用導(dǎo)線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的L1端口上;(2) 把“單片機(jī)系統(tǒng)”區(qū)域中的P3.0端口用

22、導(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端口輸出高電平,即P1.01時(shí),根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍?,這時(shí)發(fā)光二極管L1熄滅;當(dāng)P1.0端口輸出低電平,即P1.00時(shí),發(fā)光二極管L1亮;我們可以使用SETBP1.

23、0指令使P1.0端口輸出高電平,使用CLRP1.0指令使P1.0端口輸出低電平。5 程序框圖開始K1開關(guān)閉合了嗎?L1亮L1滅圖6 匯編源程序ORG 00HSTART:JB P3.0,LIGCLR P1.0SJMP STARTLIG:SETB P1.0SJMP STARTEND7 C語言源程序#include sbit K1=P30;sbit L1=P10;void main(void) while(1) if(K1=0) L1=0;/燈亮 else L1=1;/燈滅 3 多路開關(guān)狀態(tài)指示1 實(shí)驗(yàn)任務(wù)如圖所示,AT89S51單片機(jī)的P1.0P1.3接四個(gè)發(fā)光二極管L1L4,P1.4P1.7接了

24、四個(gè)開關(guān)K1K4,編程將開關(guān)的狀態(tài)反映到發(fā)光二極管上。(開關(guān)閉合,對(duì)應(yīng)的燈亮,開關(guān)斷開,對(duì)應(yīng)的燈滅)。2 電路原理圖圖3 系統(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ì)于開關(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),然后讓其指示

25、,可以采用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口圖6 方法一(匯編源程序)ORG 0000HSTART:MOV A,P1ANL A,#0F0HRR ARR ARR ARR AORL A,#0F0HMOV P1,ASJMP STARTEND7 方法一(C語言源程序)#include unsigned

26、char temp;void main(void) while(1) temp=P14; temp=temp | 0xf0; P1=temp; 8 方法二(匯編源程序)ORG 00HSTART:JB P1.4,NEXT1CLR P1.0SJMP NEX1NEXT1:SETB P1.0NEX1:JB P1.5,NEXT2CLR 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:SJM

27、P STARTEND9 方法二(C語言源程序)#include 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 P1_2=1; if(P1_7=0) P1_3=0; else P1_3=1; 4 廣告燈的左移右移1 實(shí)驗(yàn)任務(wù)做單一燈的左移右移,硬件電路如圖所示,八個(gè)發(fā)光二極管L1L8分別接在單片機(jī)的P1.0P1.7接口上,輸出“0”時(shí),發(fā)光二極管亮,開始時(shí)P1.0P1.1P1.2P1.3P1.7P1.6P1.0亮,重復(fù)

28、循環(huán)。2 電路原理圖圖3 系統(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或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亮1110

29、1111L5亮11011111L6亮10111111L7亮01111111L8亮表15 程序框圖圖6 匯編源程序ORG 0START:MOV R2,#8MOV A,#0FEHSETB CLOOP:MOV P1,ALCALL DELAYRLC ADJNZ R2,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語言源程序#include unsigned

30、 char i;unsigned char temp;unsigned char a,b;void delay(void) unsigned char m,n,s; for(m=20;m0;m-) for(n=20;n0;n-) for(s=248;s0;s-);void main(void) while(1) temp=0xfe; P1=temp; delay(); for(i=1;i8;i+) a=temp(8-i); P1=a|b; delay(); for(i=1;ii; b=temp(8-i); P1=a|b; delay(); 5 廣告燈(利用取表方式)1 實(shí)驗(yàn)任務(wù)利用取表的方法,

31、使端口P1做單一燈的變化:左移2次,右移2次,閃爍2次(延時(shí)的時(shí)間0.2秒)。2 電路原理圖圖3 系統(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工,

32、ADPTR做取碼的操作,就可方便地處理一些復(fù)雜的控制動(dòng)作,取表過程如下圖所示:5 程序框圖圖6 匯編源程序ORG 0START:MOV DPTR,#TABLELOOP:CLR AMOVC A,A+DPTRCJNE A,#01H,LOOP1JMP STARTLOOP1:MOV P1,AMOV R3,#20LCALL DELAYINC DPTRJMP LOOPDELAY:MOV R4,#20D1:MOV R5,#248DJNZ R5,$DJNZ R4,D1DJNZ R3,DELAYRETTABLE:DB 0FEH,0FDH,0FBH,0F7HDB 0EFH,0DFH,0BFH,07FHDB 0FE

33、H,0FDH,0FBH,0F7HDB 0EFH,0DFH,0BFH,07FHDB 07FH,0BFH,0DFH,0EFHDB 0F7H,0FBH,0FDH,0FEHDB 07FH,0BFH,0DFH,0EFHDB 0F7H,0FBH,0FDH,0FEHDB 00H, 0FFH,00H, 0FFHDB 01HEND7 C語言源程序#include unsigned char code table=0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f, 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f, 0x7f,0xbf,0xdf,0x

34、ef, 0xf7,0xfb,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;m0;m-) for(n=20;n0;n-) for(s=248;s0;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和500

35、Hz的音頻信號(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 電路原理圖圖3 系統(tǒng)板上硬件連線(1 把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0端口用導(dǎo)線連接到“揚(yáng)聲器模塊”區(qū)域中的MIC-IN端口上;(2 把“單片機(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變反1次,1KHz的信號(hào)周期為1ms,信號(hào)電平每500us變反1次;5 程序框圖開始K1按下了嗎?FL

36、AG0嗎?置200次計(jì)數(shù)P1.0輸出取反延時(shí)500us計(jì)數(shù)值計(jì)完了嗎?FLAG取反置200次計(jì)數(shù)P1.0輸出取反延時(shí)1ms計(jì)數(shù)值計(jì)完了嗎?FLAG取反圖6 匯編源程序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 R2,DV1CPL FLAGSJMP STARTDELY500:MOV R7,#250LOOP:NOPDJNZ

37、 R7,LOOPRETEND7 C語言源程序#include #include bit flag;unsigned char count;void dely500(void) unsigned char i; for(i=250;i0;i-) _nop_(); void main(void) while(1) if(P1_7=0) for(count=200;count0;count-) P1_0=P1_0; dely500(); for(count=200;count0;count-) P1_0=P1_0; dely500(); dely500(); 7 I/O并行口直接驅(qū)動(dòng)LED顯示1.

38、實(shí)驗(yàn)任務(wù)如圖13所示,利用AT89S51單片機(jī)的P0端口的P0.0P0.7連接到一個(gè)共陰數(shù)碼管的ah的筆段上,數(shù)碼管的公共端接地。在數(shù)碼管上循環(huán)顯示09數(shù)字,時(shí)間間隔0.2秒。2. 電路原理圖圖3. 系統(tǒng)板上硬件連線把“單片機(jī)系統(tǒng)”區(qū)域中的P0.0/AD0P0.7/AD7端口用8芯排線連接到“四路動(dòng)態(tài)數(shù)碼顯示模塊”區(qū)域中的數(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ù)各管的極管

39、的接線形式,可分成共陰極型和共陽極型。LED數(shù)碼管的ga七個(gè)發(fā)光二極管因加正電壓而發(fā)亮,因加零電壓而不以發(fā)亮,不同亮暗的組合就能形成不同的字形,這種組合稱之為字形碼,下面給出共陰極的字形碼見表2“0”3FH“8”7FH“1”06H“9”6FH“2”5BH“A”77H“3”4FH“b”7CH“4”66H“C”39H“5”6DH“d”5EH“6”7DH“E”79H“7”07H“F”71H(2 由于顯示的數(shù)字09的字形碼沒有規(guī)律可循,只能采用查表的方式來完成我們所需的要求了。這樣我們按著數(shù)字09的順序,把每個(gè)數(shù)字的筆段代碼按順序排好!建立的表格如下所示:TABLEDB3FH,06H,5BH,4FH,

40、66H,6DH,7DH,07H,7FH,6FH5程序框圖圖6 匯編源程序ORG 0START:MOV R1,#00H NEXT:MOV A,R1MOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,ALCALL DELAYINC R1CJNE R1,#10,NEXTLJMP STARTDELAY:MOV R5,#20D2:MOV R6,#20D1:MOV R7,#248DJNZ R7,$DJNZ R6,D1DJNZ R5,D2RETTABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND7 C語言源程序#include unsign

41、ed char code table=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f;unsigned char dispcount;void delay02s(void) unsigned char i,j,k; for(i=20;i0;i-) for(j=20;j0;j-) for(k=248;k0;k-);void main(void) while(1) for(dispcount=0;dispcount10;dispcount+) P0=tabledispcount; delay02s(); 8 按鍵識(shí)別方法之一1 實(shí)驗(yàn)任務(wù)每按下一

42、次開關(guān)SP1,計(jì)數(shù)值加1,通過AT89S51單片機(jī)的P1端口的P1.0到P1.3顯示出其的二進(jìn)制計(jì)數(shù)值。2 電路原理圖圖3 系統(tǒng)板上硬件連線(1 把“單片機(jī)系統(tǒng)”區(qū)域中的P3.7/RD端口連接到“低脈沖鍵盤”區(qū)域中的SP1端口上;(2 把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0P1.4端口用8芯排線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的“L1L8”端口上;要求,P1.0連接到L1,P1.1連接到L2,P1.2連接到L3,P1.3連接到L4上。4 程序設(shè)計(jì)方法(1 其實(shí),作為一個(gè)按鍵從沒有按下到按下以及釋放是一個(gè)完整的過程,也就是說,當(dāng)我們按下一個(gè)按鍵時(shí),總希望某個(gè)命令只執(zhí)行一次,而在按鍵按下的過程中,

43、不要有干擾進(jìn)來,因?yàn)?,在按下的過程中,一旦有干擾過來,可能造成誤觸發(fā)過程,這并不是我們所想要的。因此在按鍵按下的時(shí)候,圖要把我們手上的干擾信號(hào)以及按鍵的機(jī)械接觸等干擾信號(hào)給濾除掉,一般情況下,我們可以采用電容來濾除掉這些干擾信號(hào),但實(shí)際上,會(huì)增加硬件成本及硬件電路的體積,這是我們不希望,總得有個(gè)辦法解決這個(gè)問題,因此我們可以采用軟件濾波的方法去除這些干擾信號(hào),一般情況下,一個(gè)按鍵按下的時(shí)候,總是在按下的時(shí)刻存在著一定的干擾信號(hào),按下之后就基本上進(jìn)入了穩(wěn)定的狀態(tài)。具體的一個(gè)按鍵從按下到釋放的全過程的信號(hào)圖如上圖所示:從圖中可以看出,我們?cè)诔绦蛟O(shè)計(jì)時(shí),從按鍵被識(shí)別按下之后,延時(shí)5ms以上,從而避開

44、了干擾信號(hào)區(qū)域,我們?cè)賮頇z測(cè)一次,看按鍵是否真得已經(jīng)按下,若真得已經(jīng)按下,這時(shí)肯定輸出為低電平,若這時(shí)檢測(cè)到的是高電平,證明剛才是由于干擾信號(hào)引起的誤觸發(fā),CPU就認(rèn)為是誤觸發(fā)信號(hào)而舍棄這次的按鍵識(shí)別過程。從而提高了系統(tǒng)的可靠性。由于要求每按下一次,命令被執(zhí)行一次,直到下一次再按下的時(shí)候,再執(zhí)行一次命令,因此從按鍵被識(shí)別出來之后,我們就可以執(zhí)行這次的命令,所以要有一個(gè)等待按鍵釋放的過程,顯然釋放的過程,就是使其恢復(fù)成高電平狀態(tài)。(2 對(duì)于按鍵識(shí)別的指令,我們依然選擇如下指令JBBIT,REL指令是用來檢測(cè)BIT是否為高電平,若BIT1,則程序轉(zhuǎn)向REL處執(zhí)行程序,否則就繼續(xù)向下執(zhí)行程序?;蛘呤?/p>

45、JNBBIT,REL指令是用來檢測(cè)BIT是否為低電平,若BIT0,則程序轉(zhuǎn)向REL處執(zhí)行程序,否則就繼續(xù)向下執(zhí)行程序。(3 但對(duì)程序設(shè)計(jì)過程中按鍵識(shí)別過程的框圖如右圖所示:圖5 程序框圖圖6 匯編源程序ORG 0START:MOV R1,#00H;初始化R7為0,表示從0開始計(jì)數(shù)MOV A,R1;CPL A;取反指令MOV P1,A;送出P1端口由發(fā)光二極管顯示REL:JNB P3.7,REL;判斷SP1是否按下LCALL DELAY10MS;若按下,則延時(shí)10ms左右JNB P3.7,REL;再判斷SP1是否真得按下INC R7;若真得按下,則進(jìn)行按鍵處理,使MOV A,R7;計(jì)數(shù)內(nèi)容加1,并送出P1端口由CPL A;發(fā)光二極管顯示MOV P1,A;JNB P3.7,$;等待SP1釋放SJMP REL;繼續(xù)對(duì)K1按鍵掃描DELAY10MS:MOV R6,#20;延時(shí)10ms子程序L1:MOV R7,#248DJNZ R7,$DJNZ

溫馨提示

  • 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. 人人文庫網(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)論