



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1.閃爍燈.實驗任務(wù)如圖4.1.1所示:在P1.0端口上接ー個發(fā)光二極管L1,使L1在不停地ー亮ー滅,ー亮一滅的時間間隔為0.2秒。.電路原理圖圖4.1.1.系統(tǒng)板上硬件連線把“單片機系統(tǒng)’’區(qū)域中的P1.0端口用導(dǎo)線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的L1端口上。.程序設(shè)計內(nèi)容(1),延時程序的設(shè)計方法作為單片機的指令的執(zhí)行的時間是很短,數(shù)量大微秒級,因此,我們要求的閃爍時間間隔為0.2秒,相對于微秒來說,相差太大,所以我們在執(zhí)行某一指令時,插入延時程序,來達到我們的要求,但這樣的延時程序是如何設(shè)計呢?下面具體介紹其原理:2如圖4.1.1所示的石英晶體為12MHz,因此,1個機器周期為1微秒機器周期微秒MOVR6,#202個機器周期2DI:MOVR7,#2482個機器周期22+2x248=49820、DJNZR7,$2個機器周期2x248498DJNZR6,D12個機器周期2x20=4010002因此,上面的延時程序時間為!0.002mso由以上可知,當(dāng)R6=10、R7=248時,延時5ms,R6=20、R7=248吋,延時10ms,以此為基本的計時單位。如本實驗要求0.2秒=200ms,10msxR5=200ms,貝リR5=20,延時子程序如下:DELAY:MOVR5,#20DI:MOVR6,#20D2:MOVR7,#248DJNZR7,$DJNZR6,D2DJNZR5,D1RET(2).輸出控制如圖1所示,當(dāng)P1.0端口輸出高電平,即P1.0=!時,根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍?這時發(fā)光二極管L1熄滅;當(dāng)P1.0端口輸出低電平,即P1.0=0時,發(fā)光二極管L1亮;我們可以使用SETBP1.0指令使P1.0端口輸出高電平,使用CLRP1.0指令使P1.0端口輸出低電平。.程序框圖如圖4.1.2所示3圖4.1.2.匯編源程序ORGOSTART:CLRP1.0LCALLDELAYSETBP1.0LCALLDELAYLJMPSTARTDELAY:MOVR5,#20誕時子程序,延時0.2秒DI:MOVR6,#20D2:MOVR7,#248DJNZR7,$DJNZR6,D2DJNZR5,D1RETEND.C語言源程序#include<AT89X5l.H>sbitLl=Pl;voiddelayO2s(void)//延時0,2秒子程序(unsignedchari,j,k;for(i=20;i>0;i—)for(j=20;j>0;j-)for(k=248;k>0;k-);}voidmain(void)while(l)(Ll=0;delay02s();4Ll=l;delay02s();2.模擬開關(guān)燈.實驗任務(wù)如圖4.2.1所示,監(jiān)視開關(guān)K1(接在P3.0端口上),用發(fā)光二極管L1(接在單片機P1.0端口上)顯示開關(guān)狀態(tài),如果開關(guān)合上,L1亮,開關(guān)打開,L1熄滅。.電路原理圖圖4.2.1.系統(tǒng)板上硬件連線.把“單片機系統(tǒng)’’區(qū)域中的P1.0端口用導(dǎo)線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的L1端口上;.把“單片機系統(tǒng)”區(qū)域中的P3.0端口用導(dǎo)線連接到“四路撥動開關(guān)”區(qū)域中的K!端口上:.程序設(shè)計內(nèi)容5(1),開關(guān)狀態(tài)的檢測過程單片機對開關(guān)狀態(tài)的檢測相對于單片機來說,是從單片機的P3.0端口輸入信號,而輸入的信號只有高電平和低電平兩種,當(dāng)撥開開關(guān)K!撥上去,即輸入高電平,相當(dāng)開關(guān)斷開,當(dāng)撥動開關(guān)K1撥下去,即輸入低電平,相當(dāng)開關(guān)閉合。單片機可以采用JBBIT,REL或者是JNBBIT,REL指令來完成對開關(guān)狀態(tài)的檢測即可。(2),輸出控制如圖3所示,當(dāng)PI.0端口輸出髙電平,即PI.O=I時,根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍?這時發(fā)光二極管L1熄滅;當(dāng)P1.0端口輸出低電平,即P1.0=0時,發(fā)光二極管LI亮;我們可以使用SETBPI.0指令使PI.0端口輸出高電平,使用CLRPI.0指令使PI.0端口輸出低電平。.程序框圖圖4.2.2.匯編源程序ORG00HSTART:JBP3.0,LIGCLRP1.0SJMPSTARTLIG:SETBP1.0SJMPSTARTEND.C語言源程序#include<AT89X5l.H>sbitK1=P3;sbitLl=Pl;6voidmain(void)(while(l)(if(Kl=0)(LI=0;〃燈亮elseLl=l;//燈滅J}3.多路開關(guān)狀態(tài)指不.實驗任務(wù)如圖4.3.1所示,AT89S5I單片機的PL0-P1.3接四個發(fā)光二極管L1-L4,P1.4-P1.7接了四個開關(guān)K1-K4.編程將開關(guān)的狀態(tài)反映到發(fā)光二極管上。(開關(guān)閉合,對應(yīng)的燈亮,開關(guān)斷開,對應(yīng)的燈滅)。.電路原理圖7圖4.3.1.系統(tǒng)板上硬件連線(1.把“單片機系統(tǒng)’’區(qū)域中的P1.0—P1.3用導(dǎo)線連接到“八路發(fā)光二極管指示模塊’‘區(qū)域中的L1-L4端口上;(2.把“單片機系統(tǒng)''區(qū)域中的P1.4-P1.7用導(dǎo)線連接到“四路撥動開關(guān)''區(qū)域中的K1-K4端口上;.程序設(shè)計內(nèi)容(1.開關(guān)狀態(tài)檢測對于開關(guān)狀態(tài)檢測,相對單片機來說,是輸入關(guān)系,我們可輪流檢測每個開關(guān)狀態(tài),根據(jù)每個開關(guān)的狀態(tài)讓相應(yīng)的發(fā)光二極管指示,可以采用JBP1.X,REL或JNBPLX,REL指令來完成;也可以一次性檢測四路開關(guān)狀態(tài),然后讓其指示,可以采用MOVA,P1指令一次把P1端口的狀態(tài)全部讀入,然后取高4位的狀態(tài)來指示。8(2.輸出控制根據(jù)開關(guān)的狀態(tài),由發(fā)光二極管L1-L4來指示,我們可以用SETBP1.X和CLRPLX指令來完成,也可以采用MOVP1,#U11XXXXB方法一次指示。.程序框圖讀P1口數(shù)據(jù)到ACC中<![endif]—>圖4.3.2.方法一(匯編源程序)ORG00HSTART:MOVA,PlANLA,#0F0HRRARRARRARRAORIA,#0F0HMOVPl,ASJMPSTARTACC內(nèi)容右移4次ACC內(nèi)容與FOH相或ACC內(nèi)容送入Plロ9END.方法一(C語言源程序)#include<AT89X51.H>unsignedchartemp;voidmain(void){while(l)(temp=P1>>4;temp=temp|OxfO;P1=temp;}).方法二(匯編源程序)ORGOOHSTART:JBP1.4,NEXT1CLRP1.0SJMPNEX1NEXT1:SETBP1.0NEX1:JBP1.5,NEXT2CLRPl.lSJMPNEX2NEXT2:SETBPl.lNEX2:JBP1.6,NEXT3CLRP1.2SJMPNEX3NEXT3:SETBPl.2NEX3:JBP1.7,NEXT4CLRP1.3SJMPNEX4NEXT4:SETBP1.3NEX4:SJMPSTARTEND.方法二(C語言源程序)#include<AT89X51.H>voidmain(void)(while(l)(if(Pl_4=0)(Pl_0=0;elseP1_O=1;)if(Pl_5=0)(P1_1=O;}else(Pl」=l;}if(Pl_6=0)(Pl_2=0;)else(Pl_2=l;)if(Pl_7=0)(Pl_3=0;}else(Pl_3=l;4.廣告燈的左移右移.實驗任務(wù)做單一燈的左移右移,硬件電路如圖4.4.1所示,八個發(fā)光二極管L1—L8分別接在單片機的P1.0-P1.7接口上,輸出“〇”時,發(fā)光二極管亮,開始時P1.0->P1.1tP1.2—P1.3-P1.7rP1.6-PL0亮,重復(fù)循環(huán)。.電路原理圖11圖4.4.1,系統(tǒng)板上硬件連線把“單片機系統(tǒng),,區(qū)域中的P1.0-P1.7用8芯排線連接到“八路發(fā)光二極管指示模塊’‘區(qū)域中的L1-L8端口上,要求:P1.0對應(yīng)著L1,P1.1對應(yīng)著L2, P1.7對應(yīng)著L8。.程序設(shè)計內(nèi)容我們可以運用輸出端口指令MOVPl,A或MOVPl,#DATA,只要給累加每次送出的器值或常數(shù)值,然后執(zhí)行上述的指令,即可達到輸出控制的動作。每次送出的數(shù)據(jù)是不同,具體的數(shù)據(jù)如下表1所示:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0說明L8L7L6L5L4L3L2L111111110L!亮TOC\o"1-5"\h\z111 1 11 0 1 L2 亮111 1 10 1 1 L3 亮111 1 01 1 1 L4 亮111 0 11 1 1 L5 亮12表1.程序框圖圖4.4.2.匯編源程序ORGOSTART:MOVR2,#8MOVA,#OFEHSETBCLOOP:MOVPl,ALCALLDELAYRLCADJNZR2,LOOPMOVR2,#8LOOP1:MOVPl,ALCALLDELAYRRCADJNZR2,LOOP1LJMPSTARTDELAY:MOVR5,#20;DI:MOVR6,#20D2:MOVR7,#248DJNZR7,$DJNZR6,D2DJNZR5,D1TOC\o"1-5"\h\z11011 1 1 1L6 亮10111 1 1 1L7 亮01111 1 1 1L8 亮13RETEND.C語言源程序#include<AT89X51,H>unsignedchari;unsignedchartemp;unsignedchara,b;voiddelay(void)(unsignedcharm,n,s;fbr(m=20;m>0;m—)fbr(n=20;n>0;n-)for(s=248;s>0;s—);}voidmain(void)(while(l){temp=0xfe;Pl=temp;delay();fbr(i=l;i<8;i++)(a=temp<<i;b=temp>>(8-i);Pl=a|b;delay();}fbr(i=l;i<8;i++)(a=temp>>i;b=temp<<(8-i);Pl=a|b;delay();)I)5.廣告燈(利用取表方式).實驗任務(wù)14利用取表的方法,使端口PI做單一燈的變化:左移2次,右移2次,閃爍2次(延時的時間0.2秒)。.電路原理圖圖4.5.1.系統(tǒng)板上硬件連線把“單片機系統(tǒng)”區(qū)域中的P1.0-P1.7用8芯排線連接到“八路發(fā)光二極管指示模塊’‘區(qū)域中的L1-L8端口上,要求:P1.0對應(yīng)著LLP1.1對應(yīng)著L2 P1.7對應(yīng)著L8。.程序設(shè)計內(nèi)容在用表格進行程序設(shè)計的時候,要用以下的指令來完成.利用MOVDPTR,#DATA16的指令來使數(shù)據(jù)指針寄存器指到表的開頭。.利用MOVCA,@A+DPTR的指令,根據(jù)累加器的值再加上DPTR的值,就可以使程序計數(shù)器PC指到表格內(nèi)所要取出的數(shù)據(jù)。15因此,只要把控制碼建成一個表,而利用MOVCA,@A+DPTR做取碼的操作,就可方便地處理一些復(fù)雜的控制動作,取表過程如下圖所示:.程序框圖圖4.5.2.匯編源程序ORGOSTART:MOVDPTR,#TABLELOOP:CLRAMOVCA,@A+DPTRCJNEA,#01H,LOOP1JMPSTARTLOOP1:MOVPl,AMOVR3,#20LCALLDELAYINCDPTRJMPLOOPDELAY:MOVR4,#20DI:MOVR5,#248DJNZR5,$DJNZR4,D1DJNZR3,DELAY16RETTABLE:DB0FEH,0FDH,0FBH,0F7HDB0EFH,0DFH,0BFH,07FHDB0FEH,0FDH,0FBH,0F7HDB0EFH,0DFH,0BFH,07FHDB07FH,0BFH,0DFH,0EFHDB0F7H,0FBH,0FDH,0FEHDB07FH,0BFH,0DFH,0EFHDB0F7H,0FBH,0FDH,0FEHDBOOH,0FFH,00H,OFFHDB01HEND.C語言源程序#include<AT89X5l.H>unsignedcharcodetable[]={Oxfe,Oxfd,Oxfb,Oxf7,0xef,0xdf,0xbf,0x7f,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,Oxf7,0xfb,Oxfd,Oxfe,Ox7f,Oxbf,Oxdf,Oxef,0xf7,0xfb,Oxfid,Oxfe,OxOO,Oxff,OxOO,Oxff^OxOl);unsignedchari;voiddelay(void)unsignedcharm,n,s;fior(m=20;m>0;m—)fbr(n=20;n>0;n-)fbr(s=248;s>0;s—);)voidmain(void)(while(l)(if(table[i]!=0x01)(Pl=table[i];i++;delay();)17else(i=0;}J}6.報警產(chǎn)生器.實驗任務(wù)用P1.0輸出IKHz和500Hz的音頻信號驅(qū)動揚聲器,作報警信號,要求IKHz信號響!00ms,500Hz信號響200ms,交替進行,P1.7接ー開關(guān)進行控制,當(dāng)開關(guān)合上響報警信號,當(dāng)開關(guān)斷開告警信號停止,編出程序。.電路原理圖圖4.6.1.系統(tǒng)板上硬件連線18(1.把“單片機系統(tǒng)’’區(qū)域中的PLO端口用導(dǎo)線連接到“音頻放大模塊”區(qū)域中的SPKIN端口上;(2.在“音頻放大模塊”區(qū)域中的SPKOUT端口上接上一個8歐的或者是16歐的喇叭;(3.把“單片機系統(tǒng)”區(qū)域中的P1.7/RD端口用導(dǎo)線連接至()“四路撥動開關(guān)”區(qū)域中的K1端口上;.程序設(shè)計內(nèi)容(1.信號產(chǎn)生的方法500Hz信號周期為2ms,信號電平為每1ms變反1次,IKHz的信號周期為1ms,信號電平每500us變反1次;.程序框圖圖4.6.219.匯編源程序FLAGBITOOHORGOOHSTART:JBPl.7,STARTJNBFLAG,NEXTMOVR2,#200DV:CPLP1.0LCALLDELY500LCALLDELY500DJNZR2,DVCPLFLAGNEXT:MOVR2,#200DVI:CPLP1.0LCALLDELY500DJNZR2,DV1CPLFLAGSJMPSTARTDELY500:MOVR7,#250LOOP:NOPDJNZR7,LOOPRETEND.C語言源程序#include<AT89X51,H>#include<INTRINS.H>bitflag;unsignedcharcount;voiddely500(void)(unsignedchari;fbr(i=250;i>0;i—)_nop_();voidmain(void)(while(l)(if(Pl_7=0){20fbr(count=200;count>0;count—)(P1_O=-P1_O;dely500();}fbr(count=200;count>0;count—)(P1_O=~P1_O;dely500();dely500();)7.I/O并行口直接驅(qū)動LED顯示.實驗任務(wù)如圖!3所示,利用AT89S5I單片機的P0端口的P0.0-P0.7連接到?個共陰數(shù)碼管的a—h的筆段上,數(shù)碼管的公共端接地。在數(shù)碼管上循環(huán)顯示0一9數(shù)字,時間間隔0.2秒。.電路原理圖21圖4.7,1.系統(tǒng)板上硬件連線把“單片機系統(tǒng)’’區(qū)域中的P0.0/AD0-P0.7/AD7端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊’‘區(qū)域中的任一個數(shù)碼管的a—h端口上;要求:P0.0/AD0與a相連,P0.1/AD!與b相連,P0.2/AD2與c相連 P0.7/AD7與h相連。.程序設(shè)計內(nèi)容(1.LED數(shù)碼顯示原理七段LED顯示器內(nèi)部由七個條形發(fā)光二極管和一個小圓點發(fā)光二極管組成,根據(jù)各管的極管的接線形式,可分成共陰極型和共陽極型。LED數(shù)碼管的g?a七個發(fā)光二極管因加正電壓而發(fā)亮,因加零電壓而不以發(fā)亮,不同亮暗的組合就能形成不同的字形,這種組合稱之為字形碼,下面給出共陰極的字形碼見表2“〇’'3FH“8”7FHヵ"06H“9”6FH“2”5BH“A”77H22(2.由于顯示的數(shù)字0—9的字形碼沒有規(guī)律可循,只能采用查表的方式來完成我們所需的要求了。這樣我們按著數(shù)字0—9的順序,把每個數(shù)字的筆段代碼按順序排好!建立的表格如下所示:TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH.程序框圖圖4.7.2.匯編源程序ORGOSTART:MOVR1,#OOHNEXT:MOVA,RIMOVDPTR,#TABLEMOVCA,@A+DPTRMOVP0,ALCALLDELAYINCRICJNER1,#1O,NEXTLJMPSTARTDELAY:MOVR5,#20D2:MOVR6,#20DI:MOVR7,#248“3”4FH"b”7CH“4”66H“C”39H“5”6DH"d”5EH“6”7DH"E”79H“7,,07H“ド71H23DJNZR7,$DJNZR6,D1DJNZR5,D2RETTABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND.C語言源程序#include<AT89X5l.H>unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsignedchardispcount;voiddelay02s(void)(unsignedchari,j,k;fbr(i=20;i>0;i-)for(j=20;j>0;j-)fbr(k=248;k>0;k—);}voidmain(void)(while(l){fbr(dispcount=0;dispcount<10;dispcount-H-){PO=table[dispcount];delay02s();)':).按鍵識別方法之一?.實驗任務(wù)每按下一次開關(guān)SP1,計數(shù)值加1,通過AT89s51單片機的Pl端口的PL0到P1.3顯示出其的二進制計數(shù)值。.電路原理圖24圖4.8.1.系統(tǒng)板上硬件連線(1.把“單片機系統(tǒng)’’區(qū)域中的P3.7/RD端口連接至!!”獨立式鍵盤”區(qū)域中的SP1端口上;(2.把“單片機系統(tǒng)”區(qū)域中的P1.0—P1.4端口用8芯排線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的“L1—L8”端口上;要求,P1.0連接到LI,P1.1連接到L2,P1.2連接到L3,P1.3連接到L4上。.程序設(shè)計方法(1.其實,作為一個按鍵從沒有按下到按下以及釋放是ー個完整的過程,也就是說,當(dāng)我們按下ー個按鍵時,總希望某個命令只執(zhí)行一次,而在按鍵按下的過程中,不要有干擾進來,因為,在按下的過程中,一旦有干擾過來,可能造成誤觸發(fā)過程,這并不是我們所想要的。因此在按鍵按下的時候,25圖4.8.2要把我們手上的干擾信號以及按鍵的機械接觸等干擾信號給濾除掉,一般情況下,我們可以采用電容來濾除掉這些干擾信號,但實際上,會增加硬件成本及硬件電路的體積,這是我們不希望,總得有個辦法解決這個問題,因此我們可以采用軟件濾波的方法去除這些干擾信號,一般情況下,ー個按鍵按下的時候,總是在按下的時刻存在著一定的干擾信號,按下之后就基本上進入了穩(wěn)定的狀態(tài)。具體的?個按鍵從按下到釋放的全過程的信號圖如上圖所示:從圖中可以看出,我們在程序設(shè)計時,從按鍵被識別按下之后,延時5ms以上,從而避開了干擾信號區(qū)域,我們再來檢測一次,看按鍵是否真得已經(jīng)按下,若真得已經(jīng)按下,這時肯定輸出為低電平,若這時檢測到的是高電平,證明剛オ是由于干擾信號引起的誤觸發(fā),CPU就認(rèn)為是誤觸發(fā)信號而舍棄這次的按鍵識別過程。從而提高了系統(tǒng)的可靠性。由于要求每按下一次,命令被執(zhí)行一次,直到下一次再按下的時候,再執(zhí)行ー次命令,因此從按鍵被識別出來之后,我們就可以執(zhí)行這次的命令,所以要有ー個等待按鍵釋放的過程,顯然釋放的過程,就是使其恢復(fù)成高電平狀態(tài)。(1.對于按鍵識別的指令,我們依然選擇如下指令JBBIT,REL指令是用來檢測BIT是否為高電平,若BIT=1,則程序轉(zhuǎn)向REL處執(zhí)行程序,否則就繼續(xù)向下執(zhí)行程序?;蛘呤荍NBBIT,REL指令是用來檢測BIT是否為低電平,若BIT=O,則程序轉(zhuǎn)向REL處執(zhí)行程序,否則就繼續(xù)向下執(zhí)行程序。26(2.但對程序設(shè)計過程中按鍵識別過程的框圖如右圖所示:圖4.8.3.程序框圖圖4.8.4.匯編源程序ORGOSTART:MOVR1,#OOH;初始化R1為〇,表示從〇開始計數(shù)MOVA,R1;CPLA;取反指令MOVP1,A;送出P1端ロ由發(fā)光二極管顯示REL:JNBP3.7,REL;判斷SP1是否按下27LCALLDELAY1OMS;若按下,則延時10ms左右JNBP3.7,REL;再判斷SP1是否真得按下INCR1;若真得按下,則進行按鍵處理,使MOVA,R1;計數(shù)內(nèi)容加1,并送出P1端口由CPLA;發(fā)光二極管顯示MOVP1,A;JNBP3.7,$;等待SP1釋放SJMPREL;繼續(xù)對K1按鍵掃描DELAY10MS:MOVR6,#20;延時10ms子程序LI:MOVR7,#248DJNZR7,$DJNZR6,L1RETEND.C語言源程序include<AT89X51.H>unsignedcharcount;voiddelay10ms(void)(unsignedchari,j;for(i=20;i>0;i—)for(j=248;j>0;j-);}voidmain(void)(while(l)(if(P3_7=O)(delaylOms();if(P3_7=O){count+H-;if{count=16)(count=0;)281=~count;while(P3_7=0);)I}ー鍵多功能按鍵識別技術(shù).實驗任務(wù)如圖4.9.1所示,開關(guān)SP1接在P3.7/RD管腳上,在AT89s51單片機的Pl端口接有四個發(fā)光二極管,上電的時候,L1接在P1.0管腳上的發(fā)光二極管在閃爍,當(dāng)每一次按下開關(guān)SP1的時候,L2接在P1.1管腳上的發(fā)光二極管在閃爍,再按下開關(guān)SP1的時候,L3接在P1.2管腳上的發(fā)光二極管在閃爍,再按下開關(guān)SP1的時候,L4接在P1.3管腳上的發(fā)光二極管在閃爍,再按下開關(guān)SP1的時候,又輪到L1在閃爍了,如此輪流下去。.電路原理圖圖4.9.129.系統(tǒng)板上硬件連線(1.把“單片機系統(tǒng)’’區(qū)域中的P3.7/RD端口連接至リ“獨立式鍵盤”區(qū)域中的SP1端口上;(2.把“單片機系統(tǒng)”區(qū)域中的P1.0-P1.4端口用8芯排線連接到“八路發(fā)光二極管指示模塊’‘區(qū)域中的“L1—L8”端口上;要求,P1.0連接到LI,P1.1連接到L2,P1.2連接到L3,P1.3連接到L4上。.程序設(shè)計方法(1.設(shè)計思想由來在我們生活中,我們很容易通過這個叫張三,那個叫李四,另外一個是王五;那是因為每個人有不同的名子,我們就很快認(rèn)出,同樣,對于要通過一個按鍵來識別每種不同的功能,我們給每個不同的功能模塊用不同的1D號標(biāo)識,這樣,每按下一次按鍵,ID的值是不相同的,所以單片機就很容易識別不同功能的身份了。(2.設(shè)計方法從上面的要求我們可以看出,L1到L4發(fā)光二極管在每個時刻的閃爍的時間是受開關(guān)SP1來控制,我們給L1到L4閃爍的時段定義出不同的ID號,當(dāng)L1在閃爍時,1D=O;當(dāng)L2在閃爍時,ID=1;當(dāng)L3在閃爍時,ID=2;當(dāng)L4在閃爍時,ID=3;很顯然,只要每次按下開關(guān)K1時,分別給出不同的ID號我們就能夠完成上面的任務(wù)了。下面給出有關(guān)程序設(shè)計的框圖。.程序框圖30圖4.9.2.匯編源程序IDEQU30HSP1BITP3.7LIBITP1.0L2BITP1.1L3BITP1.2L4BITPl.3ORGOMOVID,#00HSTART:JBKI,RELLCALLDELAY10MSJBKI,RELINCIDMOVA,IDCJNEA,#04,RELMOVID,#00HREL:JNBKl,$MOVA,ID31CJNEA,#00H,IS0CPLL1LCALLDELAYSJMPSTARTCJNEA,#O1H,IS1CPLL2LCALLDELAYSJMPSTARTCJNEA,#02H,IS2CPLL3LCALLDELAYSJMPSTARTCJNEA,#O3H,IS3CPLL4LCALLDELAYSJMPSTARTLJMPSTARTDELAY10MS:MOVR6,#20LOOP1:MOVR7,#248DJNZR7,$DJNZR6,LOOP1RETDELAY:MOVR5,#20LOOP2:LCALLDELAY10MSDJNZR5,LOOP2RETEND7.C語言源程序#include<AT89X51.H>unsignedcharID;voiddelaylOms(void){unsignedchari,j;fbr(i=20;i>0;i—)fbr(j=248;j>0;j-);}voiddelay02s(void){unsignedchari;fbr(i=20;i>0;i—){delaylOms();}}32voidmain(void){while(l){if(P3_7=O){delay10ms();if(P3_7==O)(ID++;if(ID=4)(ID=0;)while(P3_7=0);)switch(ID){case0:PI〇?P10;delay02s();break;delay02s();break;P1_2=~P1_2;delay02s();break;P1_3=~P1_3;delay02s();break;)I)00-99計數(shù)器.實驗任務(wù)利用AT89s51單片機來制作一個手動計數(shù)器,在AT89s51單片機的P3.7管腳接ー個輕觸開關(guān),作為手動計數(shù)的按鈕,用單片機的P2.0—P2.7接ー個共陰數(shù)碼管,作為00—99計數(shù)的個位數(shù)顯示,用單片機的P0.0—P0.7接ー個共陰數(shù)碼管,作為00—99計數(shù)的十位數(shù)顯示;硬件電路圖如圖19所示。33.電路原理圖圖4.10.1.系統(tǒng)板上硬件連線(1.把“單片機系統(tǒng)”區(qū)域中的P0.0/AD0-P0.7/AD7端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊’‘區(qū)域中的任一個a-h端口上;要求:P0.0/AD0對應(yīng)著a,P0.1/AD!對應(yīng)著b, P0.7/AD7 對應(yīng)著h。(2.把“單片機系統(tǒng)”區(qū)域中的P2.0/A8—P2.7/A15端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任??個數(shù)碼管的a—h端口上;(3.把“單片機系統(tǒng)嘔域中的P3.7/RD端口用導(dǎo)線連接到“獨立式鍵盤嘔域中的SP1端口上;.程序設(shè)計內(nèi)容(1.單片機對按鍵的識別的過程處理(2.單片機對正確識別的按鍵進行計數(shù),計數(shù)滿時,又從零開始計數(shù);34(3.單片機對計的數(shù)值要進行數(shù)碼顯示,計得的數(shù)是十進數(shù),含有十位和個位,我們要把上位和個位拆開分別送出這樣的上位和個位數(shù)值到對應(yīng)的數(shù)碼管上顯示。如何拆開十位和個位我們可以把所計得的數(shù)值對!0求余,即可得個位數(shù)字,對10整除,即可得到十位數(shù)字了。(4.通過查表方式,分別顯示出個位和十位數(shù)字。.程序框圖圖4.10.2.匯編源程序CountEQU30HSP1BITP3.7ORGOSTART:MOVCount,#00HNEXT:MOVA,CountMOVB,#10DIVABMOVDPTR,#TABLEMOVCA,@A+DPTRMOVP0,AMOVA,BMOVCA,@A+DPTRMOVP2,AWT:JNBSP1,WTWAIT:JBSP1,WAITLCALLDELY10MSJBSP1,WAITINCCountMOVA,CountCJNEA,#100,NEXT35UMPSTARTDELY10MS:MOVR6,#20DI:MOVR7,#248DJNZR7,$DJNZR6,D1RETTABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND.C語言源程序#include<AT89X51.H>unsignedcharcodetable口={0x3£0x06,0x5b,0x4£0x66,0x6d,0x7d,0x07,0x7f^0x6f};unsignedcharCount;voiddelay10ms(void)(unsignedchari,j;for(i=20;i>0;i-)for(j=248;j>0;j-);)voidmain(void)Count=0;PO=table[Count/l0];P2=table[Count%10];while(l){if(P3_7=0)(delay10ms();if(P3_7=0){Count++;if{Count==100)(Count=0;)P0=table[Count/l0];P2=table[Count%10];while(P3_7=0);)36)11.00-59秒計時器(利用軟件延時).實驗任務(wù)如下圖所示,在AT89s51單片機的P0和P2端口分別接有兩個共陰數(shù)碼管,P0口驅(qū)動顯示秒時間的十位,而P2口驅(qū)動顯示秒時間的個位。.電路原理圖圖4.11.1.系統(tǒng)板上硬件連線(1.把“單片機系統(tǒng)’’區(qū)域中的P0.0/AD0-P0.7/AD7端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊’‘區(qū)域中的任一個a-h端口上;要求:P0.0/AD0對應(yīng)著a,P0.1/AD!對應(yīng)著b, P0.7/AD7 對應(yīng)著h。(2.把“單片機系統(tǒng)”區(qū)域中的P2.0/A8—P2.7/A15端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊''區(qū)域中的任一個a-h端口上;要求:P2.0/A8對應(yīng)著a,P2.1/A9對應(yīng)著b, P2.7/A15 對應(yīng)著h。.程序設(shè)計內(nèi)容37(1.在設(shè)計過程中我們用ー個存儲單元作為秒計數(shù)單元,當(dāng)一秒鐘到來時,就讓秒計數(shù)單元加1,當(dāng)秒計數(shù)達到60時,就自動返回到〇,重新秒計數(shù)。(2.對于秒計數(shù)單元中的數(shù)據(jù)要把它十位數(shù)和個數(shù)分開,方法仍采用對10整除和對10求余。(3.在數(shù)碼上顯示,仍通過查表的方式完成。(4. 一秒時間的產(chǎn)生在這里我們采用軟件精確延時的方法來完成,經(jīng)過精確計算得到1秒時間為1.002秒。DELY1S:MOVR5,#100D2:MOVR6,#20DI:MOVR7,#248DJNZR7,$DJNZR6,D1DJNZR5,D2RET.程序框圖圖4.11.238.匯編源程序SecondEQU30HORGOSTART:MOVSecond,#00HNEXT:MOVA,SecondMOVB,#10DIVABMOVDPTR,#TABLEMOVCA,@A+DPTRMOVP0,AMOVA,BMOVCA,@A+DPTRMOVP2,ALCALLDELY1SINCSecondMOVA,SecondCJNEA,#60,NEXTLJMPSTARTDELY1S:MOVR5,#100D2:MOVR6,#20DI:MOVR7,#248DJNZR7,$DJNZR6,D1DJNZR5,D2RETTABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND.C語言源程序#include<AT89X5l.H>unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsignedcharSecond;voiddelayIs(void){unsignedchari,j,k;fbr(k=1OO;k>O;k—)for(i=20;i>0;i—)for(j=248;j>0;j-);)voidmain(void){39Second=0;P0=table[Second/10];P2=table[Second%10];while(l)(delayls();Second++;if{Second=60)(Second=0;)PO=table[Second/l0];P2=table[Second%10];12.可預(yù)置可逆4位計數(shù)器.實驗任務(wù)利用AT89S51單片機的P1.0-P1.3接四個發(fā)光二極管L1-L4?用來指示當(dāng)前計數(shù)的數(shù)據(jù);用P1.4-P1.7作為預(yù)置數(shù)據(jù)的輸入端,接四個撥動開關(guān)K1一K4,用P3.6/WR和P3.7/RD端口接兩個輕觸開關(guān),用來作加計數(shù)和減計數(shù)開關(guān)。具體的電路原理圖如下圖所示.電路原理圖40圖4.12.1.系統(tǒng)板上硬件連線(1.把“單片機系統(tǒng)’’區(qū)域中的P1.0—P1.3端口用8芯排線連接到“八路發(fā)光二極管指示模塊’‘區(qū)域中的L1-L4上;要求:P1.0對應(yīng)著LI,P1.1對應(yīng)著L2,P1.2對應(yīng)著L3,P1.3對應(yīng)著L4;(2.把“單片機系統(tǒng)"區(qū)域中的P3.0/RXD,P3.1/TXD,P3.2/INT0,P3.3/INT1用導(dǎo)線連接到“四路撥動開關(guān)''區(qū)域中的K1-K4±;¢3.把“單片機系統(tǒng)”區(qū)域中的P3.6/WR,P3.7/RD用導(dǎo)線連接到“獨立式鍵盤”區(qū)域中的SP1和SP2上;.程序設(shè)計內(nèi)容¢1.兩個獨立式按鍵識別的處理過程;41¢2.預(yù)置初值讀取的問題(3.LED輸出指示.程序框圖圖4.12.2.匯編源程序COUNTEQU30HORG00HSTART:MOVA,P3ANLA,#0FIIMOVCOUNT,AMOVPl,ASK2:JBP3.6,SK1LCALLDELY10MSJBP3.6,SK1INCCOUNTMOVA,COUNTCJNEA,#16,NEXTMOVA,P342ANLA,#0FHMOVCOUNT,ANEXT:MOVPl,AWAIT:JNBP3.6,WAITLJMPSK2SKI:JBP3.7,SK2LCALLDELY10MSJBP3.7,SK2DECCOUNTMOVA,COUNTCJNEA,#0FFH,NEXMOVA,P3ANLA,#OFHMOVCOUNT,ANEX:MOVPl,AWAIT2:JNBP3.7,WAIT2LJMPSK2DELY10MS:MOVR6,#20MOVR7,#248DI:DJNZR7,$DJNZR6,D1RETEND.C語言源程序#include<AT89X51.H>unsignedcharcurcount;voiddelaylOms(void){unsignedcharij;fbr(i=20;i>0;i—)fbr(j=248;j>0;j—);}voidmain(void){curcount=P3&OxOf;Pl=~curcount;while(l)(if(P3_6=O){43delay10ms();if(P3_6=O)(if(curcount>=15){curcount=15;)else(curcount++;}P1=~curcount;while(P3_6=0);}}if(P3_7=O)(delay10ms();if(P3_7=O)(if{curcount<=0){curcount=0;)else(curcount—;)Pl=~curcount;while(P3_7=0);}JJ13.動態(tài)數(shù)碼顯示技術(shù).實驗任務(wù)如圖4.13.1所示,P0端口接動態(tài)數(shù)碼管的字形碼筆段,P2端口接動態(tài)數(shù)碼管的數(shù)位選擇端,P1.?接ー個開關(guān),當(dāng)開關(guān)接高電平時,顯示“12345”字樣;當(dāng)開關(guān)接低電平時,顯示“HELLO”字樣。.電路原理圖44圖4.13.1.系統(tǒng)板上硬件連線(1.把“單片機系統(tǒng)”區(qū)域中的P0.0/AD0—P0.7/AD7用8芯排線連接到“動態(tài)數(shù)碼顯示”區(qū)域中的a—h端口上;(2.把“單片機系統(tǒng)”區(qū)域中的P2.0/A8-P2.7/A15用8芯排線連接到“動態(tài)數(shù)碼顯示”區(qū)域中的S1-S8端口上:(3.把“單片機系統(tǒng)”區(qū)域中的P1.7端口用導(dǎo)線連接至リ“獨立式鍵盤”區(qū)域中的SP1端口上;.程序設(shè)計內(nèi)容(1.動態(tài)掃描方法45動態(tài)接口采用各數(shù)碼管循環(huán)輪流顯示的方法,當(dāng)循環(huán)顯示頻率較高時,利用人眼的暫留特性,看不出閃爍顯示現(xiàn)象,這種顯示需要一個接口完成字形碼的輸出(字形選擇),另ー接口完成各數(shù)碼管的輪流點亮(數(shù)位選擇)。(2.在進行數(shù)碼顯示的時候,要對顯示單元開辟8個顯示緩沖區(qū),每個顯示緩沖區(qū)裝有顯示的不同數(shù)據(jù)即可。(3.對于顯示的字形碼數(shù)據(jù)我們采用查表方法來完成。.程序框圖圖4.13.2.匯編源程序ORG00HSTART:JBP1.7,DIR1MOVDPTR,#TABLE1SJMPDIRDIRI:MOVDPTR,#TABLE2DIR:MOVR0,#00HMOVR1,#01HNEXT:MOVA,ROMOVCA,@A+DPTR46MOVP0,AMOVA,RIMOVP2,ALCALLDAYINCRORLAMOVRI,ACJNER1,#ODFH,NEXTSJMPSTARTDAY:MOVR6,#4DI:MOVR7,#248DJNZR7,$DJNZR6,D1RETTABLEI:DB06H,5BH,4FH,66H,6DHTABLE2:DB78H,79H,38H,38H,3FHEND.C語言源程序#include<AT89X5l.H>unsignedcharcodetable1[]={0x06,0x5b,0x4f^0x66,0x6d};unsignedcharcodetable2[]={0x78,0x79,0x38,0x38,0x3f};unsignedchari;unsignedchara,b;unsignedchartemp;voidmain(void)(while(l)(temp=0xfe;fbr(i=0;i<;5;i++)(if(Pl_7==l)(PO=tablel[i];)else(P0=table2[i];)P2=temp;a=temp<<(i+l);b=temp>>(7-i);47temp=a|b;fbr(a=4;a>0;a—)fbr(b=248;b>0;b-);})4x4矩陣式鍵盤識別技術(shù).實驗任務(wù)如圖4.14.2所示,用AT89s51的并行口Pl接4メ4矩陣鍵盤,以P1.0-P1.3作輸入線,以Pl.4—P1.7作輸出線;在數(shù)碼管上顯示每個按鍵的“0一F”序號。對應(yīng)的按鍵的序號排列如圖4.14.1所示圖4.14.1.硬件電路原理圖48圖4.14.2.系統(tǒng)板上硬件連線(1.把“單片機系統(tǒng)“區(qū)域中的P3.0—P3.7端口用8芯排線連接到“4X4行列式鍵盤’‘區(qū)域中的C1-C4R1—R4端口上;(2.把“單片機系統(tǒng)”區(qū)域中的P0.0/AD0-P0.7/AD7端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊’‘區(qū)域中的任一個a-h端口上;要求:PO.O/ADO對應(yīng)著a,P0.1/AD!對應(yīng)著b, P0.7/AD7 對應(yīng)著h。.程序設(shè)計內(nèi)容(1.4x4矩陣鍵盤識別處理(2.每個按鍵有它的行值和列值,行值和列值的組合就是識別這個按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和CPU通信。每個按鍵的狀態(tài)同樣需變成數(shù)字量“〇''和“1",開關(guān)的一端(列線)通過電阻接VCC,而接地是通過程序輸出數(shù)字“0”實現(xiàn)的。鍵盤處理程序的任務(wù)是:確定有無鍵按下,判斷哪ー個鍵按下,鍵的功能是什么;還要消除按鍵在閉合或斷開時的抖動。兩個并行口中,ー個輸出掃描碼,使按鍵逐行動態(tài)接地,另一個并行口輸入按鍵狀態(tài),由行掃描值和回饋信號共同形成鍵編碼而識別按鍵,通過軟件查表,查出該鍵的功能。49.程序框圖圖4.14.3.匯編源程序KEYBUFEQU30HO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 天津大學(xué)《數(shù)據(jù)庫系統(tǒng)設(shè)計實踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 菏澤學(xué)院《醫(yī)學(xué)影像設(shè)備安裝與維修學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 肇慶醫(yī)學(xué)高等??茖W(xué)?!犊删幊炭刂破骷夹g(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 信陽航空職業(yè)學(xué)院《建筑設(shè)計基礎(chǔ)二》2023-2024學(xué)年第二學(xué)期期末試卷
- 哈爾濱傳媒職業(yè)學(xué)院《畢業(yè)論文寫作》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖州學(xué)院《微信小程序開發(fā)與實踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶移通學(xué)院《Pthon數(shù)據(jù)分析與挖掘基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州航海學(xué)院《體育(上)》2023-2024學(xué)年第二學(xué)期期末試卷
- 四川應(yīng)用技術(shù)職業(yè)學(xué)院《工程制圖與CAD》2023-2024學(xué)年第二學(xué)期期末試卷
- 溫州科技職業(yè)學(xué)院《智能汽車傳感技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 《道路建筑材料緒論》課件
- 醫(yī)學(xué)遺傳學(xué)教案-山東大學(xué)醫(yī)學(xué)遺傳學(xué)
- 2025年湖南現(xiàn)代物流職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- 第二十章手術(shù)減肥及體形塑造美容手術(shù)美容外科學(xué)概論講解
- 2025年蘇州衛(wèi)生職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 履帶式剪叉高空作業(yè)平臺安全操作規(guī)程
- 《水稻育秧技術(shù)新》課件
- 2024-2025年第一學(xué)期初中德育工作總結(jié)
- 圍手術(shù)期手術(shù)患者護理要點
- 2025年大連長興開發(fā)建設(shè)限公司工作人員公開招聘高頻重點提升(共500題)附帶答案詳解
- 貨物學(xué) 課件1.3貨物的計量
評論
0/150
提交評論