單片機(jī)最小系統(tǒng)板實(shí)驗(yàn)指導(dǎo)書(shū)_第1頁(yè)
單片機(jī)最小系統(tǒng)板實(shí)驗(yàn)指導(dǎo)書(shū)_第2頁(yè)
單片機(jī)最小系統(tǒng)板實(shí)驗(yàn)指導(dǎo)書(shū)_第3頁(yè)
單片機(jī)最小系統(tǒng)板實(shí)驗(yàn)指導(dǎo)書(shū)_第4頁(yè)
單片機(jī)最小系統(tǒng)板實(shí)驗(yàn)指導(dǎo)書(shū)_第5頁(yè)
已閱讀5頁(yè),還剩166頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、單片機(jī)最小系統(tǒng)板實(shí)驗(yàn)指導(dǎo)書(shū)目 錄實(shí)驗(yàn)一 閃爍燈 實(shí)驗(yàn)二 模擬開(kāi)關(guān)燈 實(shí)驗(yàn)三 多路開(kāi)關(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)九 一鍵多功能按鍵識(shí)別技術(shù) 實(shí)驗(yàn)十 0099計(jì)數(shù)器 實(shí)驗(yàn)十一 0059秒計(jì)時(shí)器(利用軟件延時(shí)) 實(shí)驗(yàn)十二 可預(yù)置可逆4位計(jì)數(shù)器 實(shí)驗(yàn)十三 動(dòng)態(tài)數(shù)碼顯示技術(shù)(需要五個(gè)動(dòng)態(tài)數(shù)碼管) 實(shí)驗(yàn)十四 4×4矩陣式鍵盤(pán)識(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)十七 99秒馬表設(shè)計(jì)實(shí)驗(yàn)十八 “嘀、

2、嘀、”報(bào)警聲實(shí)驗(yàn)十九 “叮咚”門(mén)鈴實(shí)驗(yàn)二十 智能電子鐘實(shí)驗(yàn)二十一 優(yōu)美音樂(lè)實(shí)驗(yàn)二十二 電子琴實(shí)驗(yàn)二十三 模擬計(jì)算器數(shù)字輸入及顯示()實(shí)驗(yàn)二十四 數(shù)字電壓表實(shí)驗(yàn)二十五 DS18B20數(shù)字溫度計(jì)使用單片機(jī)實(shí)驗(yàn)詳細(xì)說(shuō)明該單片機(jī)實(shí)驗(yàn)板設(shè)計(jì)思想巧妙,由于考慮到眾多的實(shí)驗(yàn)要在一個(gè)板上完成,而每個(gè)實(shí)驗(yàn)用到的I/O口又不盡一樣,所以設(shè)計(jì)時(shí)采用撥動(dòng)撥碼開(kāi)關(guān)或替換跳線帽位置來(lái)完成各個(gè)實(shí)驗(yàn)內(nèi)容。完成每個(gè)實(shí)驗(yàn)內(nèi)容時(shí),首先看清楚實(shí)驗(yàn)電路圖,然后按照實(shí)驗(yàn)內(nèi)容給出的系統(tǒng)板上硬件連線撥動(dòng)撥碼開(kāi)關(guān)或替換跳線帽位置完成系統(tǒng)設(shè)計(jì)電路。檢查無(wú)誤后下載調(diào)試程序,由于每個(gè)程序都經(jīng)過(guò)了實(shí)驗(yàn)板的驗(yàn)證,驗(yàn)證證明程序沒(méi)有問(wèn)題,板子也經(jīng)過(guò)了嚴(yán)格的

3、檢查。所以要是調(diào)不出來(lái),肯定是硬件沒(méi)有連好,再次檢查直到完成實(shí)驗(yàn)。每做完一個(gè)實(shí)驗(yàn)后,把撥碼開(kāi)關(guān)和跳線帽恢復(fù)到初始狀態(tài)。撥碼開(kāi)關(guān)和跳線帽的初始狀態(tài)介紹如下:實(shí)驗(yàn)板上有8聯(lián)撥碼開(kāi)關(guān)4個(gè)(JP1、JP2、JP3、JP4),2聯(lián)1個(gè)(JP5),跳線帽13個(gè)。 初始時(shí)撥碼開(kāi)關(guān)都處于緊靠數(shù)字的不用狀態(tài),J3上的8個(gè)跳線帽全連在上面的P0口上,J4的OE與GND相連,J5的OE與GND相連,J6的OE與VCC相連,J7的CS與GND相連,J8上面兩個(gè)相連,4個(gè)撥動(dòng)開(kāi)關(guān)SW1SW4全部位于下方。實(shí)驗(yàn)中具體使用介紹如下:(1) 用到發(fā)光二極管時(shí),JP4撥碼開(kāi)關(guān)撥到ON狀態(tài)選中。(2) 用到喇叭輸出時(shí)把JP5撥碼

4、開(kāi)關(guān)的1號(hào)撥上去,用DS18B20做測(cè)溫時(shí)把2號(hào)撥上去。(3) 用到鍵盤(pán)輸入時(shí),把JP3的開(kāi)關(guān)全撥上去。(4) 用到撥動(dòng)開(kāi)關(guān)SW1SW4時(shí),把JP2對(duì)應(yīng)的開(kāi)關(guān)撥上去。(5) 用到按鍵S18S21時(shí),把JP2對(duì)應(yīng)的開(kāi)關(guān)撥上去。(6) 要用8個(gè)動(dòng)態(tài)數(shù)碼管顯示時(shí),首先把J4的OE與VCC用跳線帽相連。同時(shí)S1S8分別對(duì)應(yīng)Q2Q9,用到哪個(gè)時(shí)把對(duì)應(yīng)的開(kāi)關(guān)撥上去。(7) 8個(gè)動(dòng)態(tài)數(shù)碼管輸入ah8個(gè)數(shù)碼時(shí),用到P0口,則不用動(dòng)跳線帽,用到P1口時(shí),把8個(gè)跳線帽移到下面的P1口。(8) 做數(shù)字電壓表實(shí)驗(yàn)時(shí),把JP3的跳線帽全部連到下面的P1口。 JP7的CS與GND相連。(8) 用P0口做數(shù)碼管靜態(tài)顯示時(shí),

5、把J5的OE與VCC用跳線帽相連。(9) 用P2口做數(shù)碼管靜態(tài)顯示時(shí),把J6的OE與GND用跳線帽相連。 單片機(jī)簡(jiǎn)單程序用匯編編起來(lái)比較簡(jiǎn)單,但復(fù)雜的程序用匯編編起來(lái)就很困難,但用C51編起來(lái)可能就比較簡(jiǎn)單,所以C51編程是必學(xué)的。這里基本上所有的實(shí)驗(yàn)程序都采用匯編和C51兩種編程方法,有的實(shí)驗(yàn)還給出了兩套設(shè)計(jì)方案,便于比較學(xué)習(xí)。實(shí)驗(yàn)二十三帶()為選做實(shí)驗(yàn),由于比較難,用匯編編起來(lái)比較復(fù)雜,這里只給出了C51程序,供大家學(xué)習(xí)參考。實(shí)驗(yàn)一           閃爍燈 1實(shí)驗(yàn)任務(wù) 如圖1.1所示:在

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

7、MOV R7,#248 2個(gè) 222×24849820×DJNZ R7,$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,#20 D1:MOV R6,#20 D2:MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RE

8、T (2)輸出控制如圖1所示,當(dāng)P1.0端口輸出高電平,即P1.01時(shí),根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍@時(shí)發(fā)光二極管D1熄滅;當(dāng)P1.0端口輸出低電平,即P1.00時(shí),發(fā)光二極管D1亮;我們可以使用SETBP1.0指令使P1.0端口輸出高電平,使用CLRP1.0指令使P1.0端口輸出低電平。5 程序框圖 如圖1.2所示          圖1.26 匯編源程序 ORG 00H START:CLR P1.0 LCALL DELAY SETB P1.0 LCALL DELAY LJMP START DELAY:MOV R5,#20;延時(shí)子程序,延

9、時(shí)0.2秒 D1:MOV R6,#20 D2:MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END  7C語(yǔ)言源程序 #include <AT89X51.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; de

10、lay02s(); 實(shí)驗(yàn)二            模擬開(kāi)關(guān)燈1 實(shí)驗(yàn)任務(wù) 如圖2.1所示,監(jiān)視開(kāi)關(guān)SW1(接在P3.0端口上),用發(fā)光二極管D1(接在單片機(jī)P1.0端口上)顯示開(kāi)關(guān)狀態(tài),如果開(kāi)關(guān)合上,D1亮,開(kāi)關(guān)打開(kāi),D1熄滅。2 電路原理圖 圖2.13 系統(tǒng)板上硬件連線 (1)    把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0端口連接到“八路發(fā)光二極管指示模塊”區(qū)域中的D1端口上;(2)    把“單片機(jī)系統(tǒng)”區(qū)域中的P3.0端口連接

11、到“四路撥動(dòng)開(kāi)關(guān)”區(qū)域中的SW1端口上。4 程序設(shè)計(jì)內(nèi)容 (1)    開(kāi)關(guān)狀態(tài)的檢測(cè)過(guò)程單片機(jī)對(duì)開(kāi)關(guān)狀態(tài)的檢測(cè)相對(duì)于單片機(jī)來(lái)說(shuō),是從單片機(jī)的P3.0端口輸入信號(hào),而輸入的信號(hào)只有高電平和低電平兩種,當(dāng)撥動(dòng)開(kāi)關(guān)K1撥上去,即輸入高電平,相當(dāng)開(kāi)關(guān)斷開(kāi),當(dāng)撥動(dòng)開(kāi)關(guān)K1撥下去,即輸入低電平,相當(dāng)開(kāi)關(guān)閉合。單片機(jī)可以采用JBBIT,REL或者是JNBBIT,REL指令來(lái)完成對(duì)開(kāi)關(guān)狀態(tài)的檢測(cè)即可。(2)    輸出控制如圖3所示,當(dāng)P1.0端口輸出高電平,即P1.01時(shí),根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍?,這時(shí)發(fā)光二極管L1熄滅;當(dāng)P1.0端口輸出

12、低電平,即P1.00時(shí),發(fā)光二極管L1亮;我們可以使用SETBP1.0指令使P1.0端口輸出高電平,使用CLRP1.0指令使P1.0端口輸出低電平。5 程序框圖 圖2.26 匯編源程序 ORG 00H START:JB P3.0,LIG CLR P1.0 SJMP START LIG:SETB P1.0 SJMP START END 7 C語(yǔ)言源程序 #include <AT89X51.H> sbit K1=P30; sbit L1=P10;   void main(void) while(1) if(K1=0) L1=0;/燈亮 else L1=1;/燈滅  

13、 實(shí)驗(yàn)三       多路開(kāi)關(guān)狀態(tài)指示1 實(shí)驗(yàn)任務(wù) 如圖3.1所示,AT89S51單片機(jī)的P1.0P1.3接四個(gè)發(fā)光二極管D1D4,P3.0P3.3接了四個(gè)開(kāi)關(guān)SW1SW4,編程將開(kāi)關(guān)的狀態(tài)反映到發(fā)光二極管上。(開(kāi)關(guān)閉合,對(duì)應(yīng)的燈亮,開(kāi)關(guān)斷開(kāi),對(duì)應(yīng)的燈滅)。2 電路原理圖 圖3.13 系統(tǒng)板上硬件連線 (1)       把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0P1.3連接到“八路發(fā)光二極管指示模塊”區(qū)域中的D1D4端口上;(2)    

14、60;  把“單片機(jī)系統(tǒng)”區(qū)域中的P3.0P3.3連接到“四路撥動(dòng)開(kāi)關(guān)”區(qū)域中的SW1SW4端口上;4  程序設(shè)計(jì)內(nèi)容 (1)       開(kāi)關(guān)狀態(tài)檢測(cè)對(duì)于開(kāi)關(guān)狀態(tài)檢測(cè),相對(duì)單片機(jī)來(lái)說(shuō),是輸入關(guān)系,我們可輪流檢測(cè)每個(gè)開(kāi)關(guān)狀態(tài),根據(jù)每個(gè)開(kāi)關(guān)的狀態(tài)讓相應(yīng)的發(fā)光二極管指示,可以采用JBP3.X,REL或JNBP3.X,REL指令來(lái)完成。 (2)       輸出控制根據(jù)開(kāi)關(guān)的狀態(tài),由發(fā)光二極管D1D4來(lái)指示,我們可以用SETBP1.X和CLRP1.X指令來(lái)完成。

15、5 程序框圖 (略)6 匯編源程序 ORG 00H START:JB P3.0,NEXT1 CLR P1.0 SJMP NEX1 NEXT1:SETB P1.0 NEX1:JB P3.1,NEXT2 CLR P1.1 SJMP NEX2 NEXT2:SETB P1.1 NEX2:JB P3.2,NEXT3 CLR P1.2 SJMP NEX3 NEXT3:SETB P1.2 NEX3:JB P3.3,NEXT4 CLR P1.3 SJMP NEX4 NEXT4:SETB P1.3 NEX4:SJMP START END 7 C語(yǔ)言源程序 #include <AT89X51.H> &

16、#160; void main(void) while(1) if(P3_0=0) P1_0=0; else P1_0=1; if(P3_1=0) P1_1=0; else P1_1=1; if(P3_2=0) P1_2=0; else P1_2=1; if(P3_3=0) P1_3=0; else P1_3=1; 實(shí)驗(yàn)四        廣告燈的左移右移1      實(shí)驗(yàn)任務(wù) 做單一燈的左移右移,硬件電路如圖4.1所示,八個(gè)發(fā)光二極管D1D8分別接在單片機(jī)的P1.0

17、P1.7接口上,輸出“0”時(shí),發(fā)光二極管亮,開(kāi)始時(shí)P1.0P1.1P1.2P1.3P1.7P1.6P1.0亮,重復(fù)循環(huán)。 2      電路原理圖 圖4.1 3      系統(tǒng)板上硬件連線 把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0P1.7用8芯排線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的D1D8端口上,要求:P1.0對(duì)應(yīng)著D1,P1.1對(duì)應(yīng)著D2,P1.7對(duì)應(yīng)著D8。4      程序設(shè)計(jì)內(nèi)容 我們可以運(yùn)用輸出端口指令MOVP1,A或MOVP1,DATA

18、,只要給累加器值或常數(shù)值,然后執(zhí)行上述的指令,即可達(dá)到輸出控制的動(dòng)作。每次送出的數(shù)據(jù)是不同,具體的數(shù)據(jù)如下表1所示P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 說(shuō)明 D8 D7 D6 D5 D4 D3 D2 D1   11111110 D1亮1111110 1D2亮111110 11D3亮11110 111D4亮1110 1111D5亮110 11111D6亮10 111111D7亮0 1111111D8亮表15      程序框圖          

19、           圖4.26      匯編源程序 ORG 00H START:MOV R2,#7 MOV A,#0FEH SETB C LOOP:MOV P1,A LCALL DELAY RLC A DJNZ R2,LOOP MOV R2,#8 LOOP1:MOV P1,A LCALL DELAYRRC A DJNZ R2,LOOP1 LJMP START DELAY:MOV R5,#20; D1:MOV R6,#20 D2:MOV R7,#248 DJNZ R7,$ DJNZ R6,D2

20、 DJNZ R5,D1 RET END 7      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>0;n-) for(s=248;s>0;s-); void main(void) while(1) temp=0xfe; P1=temp; delay()

21、; 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(); 實(shí)驗(yàn)五          廣告燈(利用取表方式)1      實(shí)驗(yàn)任務(wù) 利用取表的方法,使端口P1做單一燈的變化:左移2次,右移2次,閃爍2次(延時(shí)的時(shí)間0.2

22、秒)。2      電路原理圖 圖5.13      系統(tǒng)板上硬件連線 把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0P1.7用8芯排線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的D1D8端口上,要求:P1.0對(duì)應(yīng)著D1,P1.1對(duì)應(yīng)著D2,P1.7對(duì)應(yīng)著D8。4      程序設(shè)計(jì)內(nèi)容 在用表格進(jìn)行程序設(shè)計(jì)的時(shí)候,要用以下的指令來(lái)完成(1)  利用MOVDPTR,DATA16的指令來(lái)使數(shù)據(jù)指針寄存器指到表的開(kāi)頭。(2)  利用MOVCA,AD

23、PTR的指令,根據(jù)累加器的值再加上DPTR的值,就可以使程序計(jì)數(shù)器PC指到表格內(nèi)所要取出的數(shù)據(jù)。因此,只要把控制碼建成一個(gè)表,而利用MOVC工,ADPTR做取碼的操作,就可方便地處理一些復(fù)雜的控制動(dòng)作,取表過(guò)程如下圖所示:5      程序框圖                       圖5.26      匯編源程序 ORG 00H START:MOV DPTR,#TABLE LOO

24、P:CLR A MOVC A,A+DPTR CJNE A,#01H,LOOP1 SJMP START LOOP1:MOV P1,A LCALL DELAY1 INC DPTR SJMP LOOP DELAY1:MOV R3,#20 DELAY:MOV R4,#20 D1:MOV R5,#248 DJNZ R5,$ DJNZ R4,D1 DJNZ R3,DELAY RET TABLE:DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH,0BFH,07FH DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH,0BFH,07FHDB 07FH,0BFH,0DF

25、H,0EFH DB 0F7H,0FBH,0FDH,0FEH DB 07FH,0BFH,0DFH,0EFH DB 0F7H,0FBH,0FDH,0FEH DB 00H, 0FFH,00H, 0FFH DB 01H END 7      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,0x

26、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;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; 實(shí)驗(yàn)

27、六       報(bào)警產(chǎn)生器1 實(shí)驗(yàn)任務(wù) 用P1.0輸出1KHz和500Hz的音頻信號(hào)驅(qū)動(dòng)揚(yáng)聲器,作報(bào)警信號(hào),要求1KHz信號(hào)響100ms,500Hz信號(hào)響200ms,交替進(jìn)行,P3.0接一開(kāi)關(guān)進(jìn)行控制,當(dāng)開(kāi)關(guān)合上響報(bào)警信號(hào),當(dāng)開(kāi)關(guān)斷開(kāi)告警信號(hào)停止,編出程序。2 電路原理圖 圖6.13 系統(tǒng)板上硬件連線 (1)       把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0端口連接到“音頻放大模塊”區(qū)域中的SPK IN端口上;(2)     &#

28、160; 在“音頻放大模塊”區(qū)域中的SPK OUT端口上接上一個(gè)8歐的或者是16歐的喇叭;(3)       把“單片機(jī)系統(tǒng)”區(qū)域中的P3.0端口連接到“四路撥動(dòng)開(kāi)關(guān)”區(qū)域中的K1端口上。4 程序設(shè)計(jì)內(nèi)容        信號(hào)產(chǎn)生的方法500Hz信號(hào)周期為2ms,信號(hào)電平為每1ms變反1次,1KHz的信號(hào)周期為1ms,信號(hào)電平每500us變反1次;  5 程序框圖 圖6.26 匯編源程序 FLAGBIT 00H ORG 00H START:JB P3.0,START

29、JNB FLAG,NEXT MOV R2,#200 DV:CPL P1.0 LCALL DELY500 LCALL DELY500 DJNZ R2,DV CPL FLAG NEXT:MOV R2,#200 DV1:CPL P1.0 LCALL DELY500 DJNZ R2,DV1 CPL FLAG SJMP START DELY500:MOV R7,#250 LOOP:NOP DJNZ R7,LOOP RET END 7 C語(yǔ)言源程序 #include <AT89X51.H> #include <INTRINS.H> bit flag; unsigned char c

30、ount;   void dely500(void) unsigned char i; for(i=250;i>0;i-) _nop_();   void main(void) while(1) if(P3_0=0) for(count=200;count>0;count-) P1_0=P1_0; dely500(); for(count=200;count>0;count-) P1_0=P1_0; dely500(); dely500(); 實(shí)驗(yàn)七      I/O并行口直接驅(qū)動(dòng)LED顯示1. 

31、    實(shí)驗(yàn)任務(wù) 如圖13所示,利用AT89S51單片機(jī)的P0端口的P0.0P0.7連接到一個(gè)共陰數(shù)碼管的ah的筆段上,數(shù)碼管的公共端接地。在數(shù)碼管上循環(huán)顯示09數(shù)字,時(shí)間間隔0.2秒。2.     電路原理圖 圖7.1 3.     系統(tǒng)板上硬件連線 把“單片機(jī)系統(tǒng)”區(qū)域中的P0.0P0.7端口連接到“兩路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個(gè)數(shù)碼管的ah端口上;要求:P0.0與a相連,P0.1與b相連,P0.2與c相連,P0.7與h相連。4.    

32、; 程序設(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ā)亮,不同亮暗的組合就能形成不同的字形,這種組合稱(chēng)之為字形碼,下面給出共陰極的字形碼見(jiàn)表2 “0”3FH  “8”7FH  “1”06H  “9”6FH  “2”5BH  “A”77H  “3”4FH  “b”7CH

33、0; “4”66H  “C”39H  “5”6DH  “d”5EH  “6”7DH  “E”79H  “7”07H  “F”71H  (2)       由于顯示的數(shù)字09的字形碼沒(méi)有規(guī)律可循,只能采用查表的方式來(lái)完成我們所需的要求了。這樣我們按著數(shù)字09的順序,把每個(gè)數(shù)字的筆段代碼按順序排好!建立的表格如下所示:TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH5程序框圖      

34、             圖7.2 6 匯編源程序 ORG 00H START:MOV R1,#00H NEXT:MOV A,R1 MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,A LCALL DELAY INC R1 CJNE R1,#10,NEXT LJMP START DELAY:MOV R5,#20 D2:MOV R6,#20 D1:MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,D2 RET TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH

35、,07H,7FH,6FH END 7 C語(yǔ)言源程序 #include <AT89X51.H> unsigned 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;i>0;i-) for(j=20;j>0;j-) for(k=248;k>0;k-);   void main(void) while(1) for

36、(dispcount=0;dispcount<10;dispcount+) P0=tabledispcount; delay02s(); 實(shí)驗(yàn)八        按鍵識(shí)別方法之一1 實(shí)驗(yàn)任務(wù) 每按下一次開(kāi)關(guān)S18,計(jì)數(shù)值加1,通過(guò)AT89S51單片機(jī)的P1端口的P1.0到P1.3顯示出其的二進(jìn)制計(jì)數(shù)值。2 電路原理圖 圖8.1 3 系統(tǒng)板上硬件連線 (1)       把“單片機(jī)系統(tǒng)”區(qū)域中的P3.7端口連接到“獨(dú)立式鍵盤(pán)”區(qū)域中的S18端口上;(2) 

37、;      把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0P1.4端口用8芯排線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的“D1D8”端口上;要求,P1.0連接到D1,P1.1連接到D2,P1.2連接到D3,P1.3連接到D4上。 圖8.24 程序設(shè)計(jì)方法 (1) 其實(shí),作為一個(gè)按鍵從沒(méi)有按下到按下以及釋放是一個(gè)完整的過(guò)程,也就是說(shuō),當(dāng)我們按下一個(gè)按鍵時(shí),總希望某個(gè)命令只執(zhí)行一次,而在按鍵按下的 過(guò)程中,不要有干擾進(jìn)來(lái),因?yàn)椋诎聪碌倪^(guò)程中,一旦有干擾過(guò)來(lái),可能造成誤觸發(fā)過(guò)程,這并不是我們所想要的。因此在按鍵按下的時(shí)候,要把我們手上的干擾信號(hào)以及按鍵的機(jī)械接

38、觸等干擾信號(hào)給濾除掉,一般情況下,我們可以采用電容來(lái)濾除掉這些干擾信號(hào),但實(shí)際上,會(huì)增加硬件成本及硬件電路的體積,這是我們不希望,總得有個(gè)辦法解決這個(gè)問(wèn)題,因此我們可以采用軟件濾波的方法去除這些干擾信號(hào),一般情況下,一個(gè)按鍵按下的時(shí)候,總是在按下的時(shí)刻存在著一定的干擾信號(hào),按下之后就基本上進(jìn)入了穩(wěn)定的狀態(tài)。具體的一個(gè)按鍵從按下到釋放的全過(guò)程的信號(hào)圖如上圖所示:從圖中可以看出,我們?cè)诔绦蛟O(shè)計(jì)時(shí),從按鍵被識(shí)別按下之后,延時(shí)5ms以上,從而避開(kāi)了干擾信號(hào)區(qū)域,我們?cè)賮?lái)檢測(cè)一次,看按鍵是否真得已經(jīng)按下,若真得已經(jīng)按下,這時(shí)肯定輸出為低電平,若這時(shí)檢測(cè)到的是高電平,證明剛才是由于干擾信號(hào)引起的誤觸發(fā),C

39、PU就認(rèn)為是誤觸發(fā)信號(hào)而舍棄這次的按鍵識(shí)別過(guò)程。從而提高了系統(tǒng)的可靠性。由于要求每按下一次,命令被執(zhí)行一次,直到下一次再按下的時(shí)候,再執(zhí)行一次命令,因此從按鍵被識(shí)別出來(lái)之后,我們就可以執(zhí)行這次的命令,所以要有一個(gè)等待按鍵釋放的過(guò)程,顯然釋放的過(guò)程,就是使其恢復(fù)成高電平狀態(tài)。(2) 對(duì)于按鍵識(shí)別的指令,我們依然選擇如下指令JBBIT,REL指令是用來(lái)檢測(cè)BIT是否為高電平,若BIT1,則程序轉(zhuǎn)向REL處執(zhí)行程序,否則就繼續(xù)向下執(zhí)行程序?;蛘呤荍NBBIT,REL指令是用來(lái)檢測(cè)BIT是否為低電平,若BIT0,則程序轉(zhuǎn)向REL處執(zhí)行程序,否則就繼續(xù)向下執(zhí)行程序。 (3) 

40、0;     但對(duì)程序設(shè)計(jì)過(guò)程中按鍵識(shí)別過(guò)程的框圖如右圖所示: 圖8.35 程序框圖   圖8.4 6 匯編源程序 ORG 00HSTART:MOV R1,#00H;初始化R7為0,表示從0開(kāi)始計(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端口由

41、 CPL A;發(fā)光二極管顯示 MOV P1,A; JNB P3.7,$;等待SP1釋放 SJMP REL;繼續(xù)對(duì)K1按鍵掃描 DELAY10MS:MOV R6,#20;延時(shí)10ms子程序 L1:MOV R7,#248 DJNZ R7,$ DJNZ R6,L1 RET END 7 C語(yǔ)言源程序 #include <AT89X51.H>   unsigned char count;   void delay10ms(void) unsigned char i,j; for(i=20;i>0;i-) for(j=248;j>0;j-);   vo

42、id main(void) while(1) if(P3_7=0) delay10ms(); if(P3_7=0) count+; if(count=16) count=0; P1=count; while(P3_7=0); 實(shí)驗(yàn)九            一鍵多功能按鍵識(shí)別技術(shù)1實(shí)驗(yàn)任務(wù) 如圖9.1所示,開(kāi)關(guān)S18接在P3.7管腳上,在AT89S51單片機(jī)的P1端口接有四個(gè)發(fā)光二極管,上電的時(shí)候,D1接在P1.0管腳上的發(fā)光二極管在閃爍,當(dāng)每一次按下開(kāi)關(guān)S18的時(shí)候,D2接在P1.1管

43、腳上的發(fā)光二極管在閃爍,再按下開(kāi)關(guān)S18的時(shí)候,D3接在P1.2管腳上的發(fā)光二極管在閃爍,再按下開(kāi)關(guān)S18的時(shí)候,D4接在P1.3管腳上的發(fā)光二極管在閃爍,再按下開(kāi)關(guān)S18的時(shí)候,又輪到D1在閃爍了,如此輪流下去。2電路原理圖 圖9.13系統(tǒng)板上硬件連線 (1) 把“單片機(jī)系統(tǒng)”區(qū)域中的P3.7/RD端口連接到“獨(dú)立式鍵盤(pán)”區(qū)域中的S18端口上;(2)把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0P1.4端口用8芯排線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的“DL1DL8”端口上;要求,P1.0連接到D1,P1.1連接到D2,P1.2連接到D3,P1.3連接到D4上。 4程序設(shè)計(jì)方法 (1)

44、60;      設(shè)計(jì)思想由來(lái) 在我們生活中,我們很容易通過(guò)這個(gè)叫張三,那個(gè)叫李四,另外一個(gè)是王五;那是因?yàn)槊總€(gè)人有不同的名子,我們就很快認(rèn)出,同樣,對(duì)于要通過(guò)一個(gè)按鍵來(lái)識(shí)別每種不同的功能,我們給每個(gè)不同的功能模塊用不同的ID號(hào)標(biāo)識(shí),這樣,每按下一次按鍵,ID的值是不相同的,所以單片機(jī)就很容易識(shí)別不同功能的身份了。 (2)       設(shè)計(jì)方法 從上面的要求我們可以看出,D1到D4發(fā)光二極管在每個(gè)時(shí)刻的閃爍的時(shí)間是受開(kāi)關(guān)S18來(lái)控制,我們給D1到D4閃爍的時(shí)段定義出不同的ID號(hào),當(dāng)D1

45、在閃爍時(shí),ID0;當(dāng)D2在閃爍時(shí),ID1;當(dāng)D3在閃爍時(shí),ID2;當(dāng)D4在閃爍時(shí),ID3;很顯然,只要每次按下開(kāi)關(guān)S18時(shí),分別給出不同的ID號(hào)我們就能夠完成上面的任務(wù)了。下面給出有關(guān)程序設(shè)計(jì)的框圖。5程序框圖            圖9.2 6匯編源程序 IDEQU 30H SP1BIT P3.7 L1BIT P1.0 L2BIT P1.1 L3BIT P1.2 L4BIT P1.3 ORG 00H MOV ID,#00H START:JB SP1,RELLCALL DELAY10MS JB SP1,RELINC ID MOV A,

46、ID CJNE A,#04,RELMOV ID,#00H REL:JNB SP1,$MOV A,ID CJNE A,#00H,IS0 SETB L4 SETB L3 SETB L2CPL L1 LCALL DELAY SJMP START IS0:CJNE A,#01H,IS1 SETB L1CPL L2 LCALL DELAY SJMP START IS1:CJNE A,#02H,IS2 SETB L1 SETB L2CPL L3 LCALL DELAY SJMP START IS2:CJNE A,#03H,IS3 SETB L1 SETB L2 SETB L3CPL L4 LCALL DE

47、LAY SJMP START IS3:LJMP START DELAY10MS:MOV R6,#20 LOOP1:MOV R7,#248 DJNZ R7,$ DJNZ R6,LOOP1 RET DELAY:MOV R5,#20 LOOP2:LCALL DELAY10MS DJNZ R5,LOOP2 RET END 7C語(yǔ)言源程序 #include <AT89X51.H> unsigned char ID; void delay10ms(void) unsigned char i,j; for(i=20;i>0;i-) for(j=248;j>0;j-); void de

48、lay02s(void) unsigned char i; for(i=20;i>0;i-) delay10ms(); void main(void) while(1) if(P3_7=0) delay10ms(); if(P3_7=0) ID+; if(ID=4) ID=0; while(P3_7=0); switch(ID) case 0: P1_0=P1_0; delay02s(); break; case 1: P1_1=P1_1; delay02s(); break; case 2: P1_2=P1_2; delay02s(); break; case 3: P1_3=P1_3; delay02s(); break; 實(shí)驗(yàn)十        0099計(jì)數(shù)器1 實(shí)驗(yàn)任務(wù) 利用AT89S51單片機(jī)來(lái)制作一個(gè)手動(dòng)計(jì)數(shù)器,在AT89S51單片機(jī)的P3.7管腳接一個(gè)輕觸開(kāi)關(guān),作為手動(dòng)計(jì)數(shù)的按鈕,用單片機(jī)的P2.0P2.7接一個(gè)共陰數(shù)碼管,作為0099計(jì)數(shù)的個(gè)位數(shù)顯示,用單片機(jī)的P0.0P0.

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論