單片機(jī)實(shí)驗(yàn)報(bào)告DOC_第1頁
單片機(jī)實(shí)驗(yàn)報(bào)告DOC_第2頁
單片機(jī)實(shí)驗(yàn)報(bào)告DOC_第3頁
單片機(jī)實(shí)驗(yàn)報(bào)告DOC_第4頁
單片機(jī)實(shí)驗(yàn)報(bào)告DOC_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

實(shí)驗(yàn)一I/O口輸入輸出實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康恼莆諉纹瑱C(jī)P1口、P3口的使用方法。二、實(shí)驗(yàn)內(nèi)容以P1口為輸出口,接八位邏輯電平顯示,LED顯示跑馬燈效果。以P3口為輸入口,接八位邏輯電平輸出,用來控制跑馬燈的方向。三、實(shí)驗(yàn)要求根據(jù)實(shí)驗(yàn)內(nèi)容編寫一個(gè)程序,并在實(shí)驗(yàn)儀上調(diào)試和驗(yàn)證。四、實(shí)驗(yàn)步驟1)系統(tǒng)各跳線器處在初始設(shè)置狀態(tài)。用導(dǎo)線連接八位邏輯電平輸出模塊的K0到CPU模塊的RXD(P3.0口);用8位數(shù)據(jù)線連接八位邏輯電平顯示模塊的JD4B到CPU模塊JD8(P1口)。2)啟動(dòng)PC機(jī),打開THGMW-51軟件,輸入源程序,并編譯源程序。編譯無誤后,下載程序運(yùn)行。3)觀察發(fā)光二極管顯示跑馬燈效果,撥動(dòng)K0可改變跑馬燈的方向。五、實(shí)驗(yàn)參考程序;//******************************************************************;文件名:PortforMCU51;功能:I/O口輸入、輸出實(shí)驗(yàn);接線:用導(dǎo)線連接八位邏輯電平輸出模塊的K0到CPU模塊的RXD(P3.0口);;用8位數(shù)據(jù)線連接八位邏輯電平顯示模塊的JD2B到CPU模塊的JD8(P1口)。;//******************************************************************DIRBITP3.0ORG0000HLJMPSTARTORG0100HSTART:OUTPUT1:MOVA,#0FEHMOVR5,#8LOOP1:CLRCMOVC,DIRJCOUTPUT2MOVP1,ARLAACALLDELAYDJNZR5,LOOP1SJMPOUTPUT1OUTPUT2:MOVA,#07FHMOVR5,#8LOOP2:CLRCMOVC,DIRJNCOUTPUT1MOVP1,ARRAACALLDELAYDJNZR5,LOOP2SJMPOUTPUT2DELAY:MOVR6,#0DELAYLOOP1:MOVR7,#0DELAYLOOP2:NOPNOPDJNZR7,DELAYLOOP2DJNZR6,DELAYLOOP1RETEND實(shí)驗(yàn)結(jié)果當(dāng)八位邏輯電平的K0撥到上方,即輸出高電平時(shí),實(shí)驗(yàn)箱B5區(qū)的八個(gè)LED燈從左至右循環(huán)點(diǎn)亮,當(dāng)K0撥到下方,即輸出低電平時(shí),八個(gè)LED燈從右至左循環(huán)點(diǎn)亮。結(jié)果分析程序通過查詢方式不斷檢測P3.0口的輸入狀態(tài),當(dāng)P3.0輸入為0時(shí),由P1口通過左移指令RL輪流輸出低電平驅(qū)動(dòng)LED發(fā)光,在左移時(shí)通過軟件延時(shí)控制LED亮的時(shí)間;當(dāng)P3.0輸入為1時(shí),由P1口通過右移指令RR輪流輸出低電平驅(qū)動(dòng)LED發(fā)光,在右移時(shí)同樣通過軟件延時(shí)控制LED亮的時(shí)間,如此循環(huán)掃描查詢,便可實(shí)現(xiàn)流水燈的效果。實(shí)驗(yàn)二外部中斷實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)外部中斷技術(shù)的基本使用方法。二、實(shí)驗(yàn)內(nèi)容INT0端接單次脈沖發(fā)生器。按一次脈沖產(chǎn)生一次中斷,CPU使P1.0狀態(tài)發(fā)生一次反轉(zhuǎn),P1.0接LED燈,以查看信號(hào)反轉(zhuǎn)。三、實(shí)驗(yàn)要求根據(jù)實(shí)驗(yàn)內(nèi)容編寫一個(gè)程序,并在實(shí)驗(yàn)儀上調(diào)試和驗(yàn)證。四、實(shí)驗(yàn)步驟1)系統(tǒng)各跳線器處在初始設(shè)置狀態(tài),用導(dǎo)線連接單次脈沖模塊的輸出端到CPU模塊的P32;CPU模塊的P10接八位邏輯電平顯示模塊的燈。2)啟動(dòng)PC機(jī),打開THGMW-51軟件,輸入源程序,并編譯源程序。編譯無誤后,下載程序運(yùn)行。3)連續(xù)按動(dòng)單次脈沖產(chǎn)生電路的按鍵,發(fā)光二極管L0每按一次狀態(tài)取反,即隔一次點(diǎn)亮。五、實(shí)驗(yàn)參考程序;//*************************************************;文件名:EXintforMCU51;功能:外部中斷實(shí)驗(yàn);接線:導(dǎo)線連接單次脈沖模塊的輸出端到CPU模塊的P32,;CPU模塊的P10接八位邏輯電平顯示模塊的L0燈。;//*************************************************LEDBITP1.0LEDBUFBIT20HORG0LJMPSTARTORG3INTERRUPT0:PUSHPSW;保護(hù)現(xiàn)場CPLLEDBUF;取反LEDMOVC,LEDBUFMOVLED,CPOPPSW;恢復(fù)現(xiàn)場RETISTART:CLRLEDBUFCLRLEDMOVTCON,#01H;外部中斷0下降沿觸發(fā)MOVIE,#81H;打開外部中斷允許位(EX0)及總中斷允許位(EA)OK:LJMPOKEND六、實(shí)驗(yàn)結(jié)果每按下E3區(qū)的單次脈沖觸發(fā)按鈕時(shí),B5區(qū)的發(fā)光二極管狀態(tài)取反一次,即原來是亮按下時(shí)滅,原來是滅則按下時(shí)亮。結(jié)果分析程序由外部中斷0實(shí)現(xiàn),外部中斷0由下降沿觸發(fā),外部輸入由單次脈沖觸發(fā)器輸入,每次按下按鈕時(shí)會(huì)觸發(fā)單次脈沖,產(chǎn)生一個(gè)下降沿,從而使程序產(chǎn)生中斷,在中斷服務(wù)函數(shù)的程序里面對(duì)P1.0取反,由P1.0驅(qū)動(dòng)LED,就可實(shí)現(xiàn)本實(shí)驗(yàn)的功能。實(shí)驗(yàn)三定時(shí)/計(jì)數(shù)器實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)MCS-51內(nèi)部計(jì)數(shù)器的使用和編程方法。二、實(shí)驗(yàn)內(nèi)容使用MCS-51內(nèi)部定時(shí)/計(jì)數(shù)器,定時(shí)一秒鐘,CPU運(yùn)用定時(shí)中斷方式,實(shí)現(xiàn)每一秒鐘輸出狀態(tài)發(fā)生一次反轉(zhuǎn),即發(fā)光管每隔一秒鐘亮一次。三、實(shí)驗(yàn)要求根據(jù)實(shí)驗(yàn)內(nèi)容編寫一個(gè)程序,并在實(shí)驗(yàn)儀上調(diào)試和驗(yàn)證。實(shí)驗(yàn)步驟1)系統(tǒng)各跳線器處在初始設(shè)置狀態(tài),用導(dǎo)線連接CPU模塊P10到八位邏輯電平顯示模塊的L0。2)啟動(dòng)PC機(jī),打開THGMW-51軟件,輸入源程序,并編譯源程序。編譯無誤后,下載程序運(yùn)行。3)運(yùn)行程序觀察發(fā)光二極管隔一秒點(diǎn)亮一次,點(diǎn)亮?xí)r間為一秒。五、實(shí)驗(yàn)參考程序;//*************************************************;文件名:TIMERFORMCU51;功能:定時(shí)/計(jì)數(shù)器實(shí)驗(yàn);接線:導(dǎo)線連接CPU模塊P10到八位邏輯電平顯示模塊的L0.;//*************************************************TICKEQU10000;10000X100US=1ST100USEQU156;100US時(shí)間常數(shù)(6M)C100USEQU30H;100US記數(shù)單元LEDBUFBIT20HORG0LJMPSTARTORG000BHT0INT:PUSHPSWMOVA,C100US+1JNZGOONDECC100USGOON:DECC100US+1MOVA,C100USORLA,C100US+1JNZEXIT;100US記數(shù)器不為0,返回MOVC100US,#27H;#HIGH(TICK)MOVC100US+1,#10H;#LOW(TICK)CPLLEDBUF;100US記數(shù)器為0,重置記數(shù)器;取反LEDEXIT:POPPSWRETISTART:MOVTMOD,#02H;方式2,定時(shí)器MOVTH0,#T100USMOVTL0,#T100USMOVIE,#10000010B;EA=1,IT0=1SETBTR0;開始定時(shí)CLRLEDBUFCLRP1.0MOVC100US,#27H;#HIGH(TICK)MOVC100US+1,#10H;#LOW(TICK)LOOP:MOVC,LEDBUFMOVP1.0,CLJMPLOOPEND實(shí)驗(yàn)結(jié)果運(yùn)行程序之后,B5區(qū)的發(fā)光二極管L0隔一秒點(diǎn)亮一次,每次點(diǎn)亮?xí)r間為一秒。七、結(jié)果分析本實(shí)驗(yàn)通過定時(shí)器0的方式2實(shí)現(xiàn)精確定時(shí),但定時(shí)器的最長定時(shí)時(shí)間達(dá)不到一秒,所以通過一個(gè)時(shí)間變量實(shí)現(xiàn),總的定時(shí)時(shí)間等于定時(shí)器定時(shí)時(shí)間乘以時(shí)間變量初值,這樣就可實(shí)現(xiàn)一秒的定時(shí),程序通過掃描不斷檢測時(shí)間變量的值,當(dāng)定時(shí)時(shí)間一秒到時(shí),對(duì)P1.0的狀態(tài)取反,實(shí)現(xiàn)L0每隔一秒亮一次。實(shí)驗(yàn)四交通燈控制實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康恼莆帐致房诮煌艨刂品椒ā6?、?shí)驗(yàn)內(nèi)容利用系統(tǒng)提供的雙色LED顯示電路,和四位靜態(tài)數(shù)碼管顯示電路模擬十字路口交通信號(hào)燈。4位LED數(shù)碼管顯示時(shí)間,LED顯示紅綠燈狀態(tài)。三、實(shí)驗(yàn)要求根據(jù)實(shí)驗(yàn)內(nèi)容編寫一個(gè)程序,并在實(shí)驗(yàn)儀上調(diào)試和驗(yàn)證。四、實(shí)驗(yàn)步驟1)系統(tǒng)各跳線器處在初始設(shè)置狀態(tài)。P10同時(shí)接G1、G3;P11同時(shí)接R1、R3;P1.2同時(shí)接G2、G4;P1.3同時(shí)接R2、R4;P1.6、P1.7分別接靜態(tài)數(shù)碼顯示的DIN、CLK。2)啟動(dòng)PC機(jī),打開THGMW-51軟件,輸入源程序,并編譯源程序。編譯無誤后,下載程序運(yùn)行。3)觀察十字路口交通燈效果。五、實(shí)驗(yàn)參考程序;//*******************************************************************;文件名:交通燈程序FORMCU51;功能:雙色LED模擬交通燈信號(hào),并通過調(diào)用靜態(tài)數(shù)碼顯示狀態(tài)時(shí)間。;接線:P1.0同時(shí)接G1、G3,P1.1接R1、R3,P1.2接G2、G4,P1.3同時(shí)接R2、R4,;P1.6、P1.7接靜態(tài)數(shù)碼顯示的DIN、CLK。;//*******************************************************************SECOND1EQU30H;東西秒寄存器SECOND2EQU31H;南北秒寄存器DBUFEQU40H;顯示緩沖1TEMPEQU44H;顯示緩沖2LED_G1BITP1.0;東西綠燈LED_R1BITP1.1;東西紅燈LED_G2BITP1.2;南北綠燈LED_R2BITP1.3;南北紅燈DINBITP1.6;串行顯示數(shù)據(jù)CLKBITP1.7;串行顯示時(shí)鐘ORG0000HLJMPSTARTORG0100HSTART:LCALLSTATE0;調(diào)用狀態(tài)0LCALLDELAY;調(diào)用延時(shí)MOVTMOD,#01H;置T0工作方式1MOVTH0,#3CH;置T0定時(shí)初值50MSMOVTL0,#0B0HSETBTR0;啟動(dòng)T0CLREALOOP:MOVR2,#20;置1S計(jì)數(shù)初值50MS*20=1SMOVR3,#20;紅燈20SMOVSECOND1,#25;東西秒顯示初值25SMOVSECOND2,#25;南北秒顯示初值25SLCALLDISPLAYLCALLSTATE1;調(diào)用狀態(tài)1WAIT1:JNBTF0,WAIT1;查詢50MS到否CLRTF0MOVTH0,#3CH;恢復(fù)T0定時(shí)初值50MSMOVTL0,#0B0HSETBTR0;啟動(dòng)T0DJNZR2,WAIT1;判1S到否?未到繼續(xù)狀態(tài)1MOVR2,#20;置50MS計(jì)數(shù)初值DECSECOND1;東西秒顯示減一DECSECOND2;南北秒顯示減一LCALLDISPLAYDJNZR3,WAIT1;狀態(tài)1維持20SMOVR2,#5;置50MS計(jì)數(shù)初值5*4=20MOVR3,#3;綠燈閃3SMOVR4,#4;閃爍間隔200MSMOVSECOND1,#5;東西秒顯示初值5SMOVSECOND2,#5;南北秒顯示初值5SLCALLDISPLAYWAIT2:LCALLSTATE2;調(diào)用狀態(tài)2JNBTF0,WAIT2;查詢50MS到否CLRTF0MOVTH0,#3CH;恢復(fù)T0定時(shí)初值50MSMOVTL0,#0B0HDJNZR4,WAIT2;判200MS到否?未到繼續(xù)狀態(tài)2CPLLED_G1;東西綠燈閃MOVR4,#4;閃爍間隔200MSDJNZR2,WAIT2;判1S到否?未到繼續(xù)狀態(tài)2MOVR2,#5;置50MS計(jì)數(shù)初值DECSECOND1;東西秒顯示減一DECSECOND2;南北秒顯示減一LCALLDISPLAYDJNZR3,WAIT2;狀態(tài)2維持3SMOVR2,#20;置50MS計(jì)數(shù)初值MOVR3,#2;黃燈2SMOVSECOND1,#2;東西秒顯示初值2SMOVSECOND2,#2;南北秒顯示初值2SLCALLDISPLAYWAIT3:LCALLSTATE3;調(diào)用狀態(tài)3JNBTF0,WAIT3;查詢30MS到否CLRTF0MOVTH0,#3CH;恢復(fù)T0定時(shí)初值50MSMOVTL0,#0B0HDJNZR2,WAIT3;判1S到否?未到繼續(xù)狀態(tài)3MOVR2,#20;置50MS計(jì)數(shù)初值DECSECOND1;東西秒顯示減一DECSECOND2;南北秒顯示減一LCALLDISPLAYDJNZR3,WAIT3;狀態(tài)3維持2SMOVR2,#20;置50MS計(jì)數(shù)初值MOVR3,#20;紅燈20SMOVSECOND1,#25;東西秒顯示初值25SMOVSECOND2,#25;南北秒顯示初值25SLCALLDISPLAYWAIT4:LCALLSTATE4;調(diào)用狀態(tài)4JNBTF0,WAIT4;查詢50MS到否CLRTF0MOVTH0,#3CH;恢復(fù)T0定時(shí)初值50MSMOVTL0,#0B0HDJNZR2,WAIT4;判1S到否?未到繼續(xù)狀態(tài)4MOVR2,#20;置50MS計(jì)數(shù)初值DECSECOND1;東西秒顯示減一DECSECOND2;南北秒顯示減一LCALLDISPLAYDJNZR3,WAIT4;狀態(tài)4維持20SMOVR2,#5;置50MS計(jì)數(shù)初值5*4=20MOVR4,#4;閃爍間隔200MSMOVR3,#3;綠燈閃3SMOVSECOND1,#5;東西秒顯示初值5SMOVSECOND2,#5;南北秒顯示初值5SLCALLDISPLAYWAIT5:LCALLSTATE5;調(diào)用狀態(tài)5JNBTF0,WAIT5;查詢50MS到否CLRTF0MOVTH0,#3CH;恢復(fù)T0定時(shí)初值100MSMOVTL0,#0B0HDJNZR4,WAIT5;判200MS到否?未到繼續(xù)狀態(tài)5CPLLED_G2;南北綠燈閃MOVR4,#4;閃爍200MSDJNZR2,WAIT5;判1S到否?未到繼續(xù)狀態(tài)5MOVR2,#5;置100MS計(jì)數(shù)初值DECSECOND1;東西秒顯示減一DECSECOND2;南北秒顯示減一LCALLDISPLAYDJNZR3,WAIT5;狀態(tài)5維持3SMOVR2,#20;置50MS計(jì)數(shù)初值MOVR3,#2;黃燈2SMOVSECOND1,#2;東西秒顯示初值2SMOVSECOND2,#2;南北秒顯示初值2SLCALLDISPLAYWAIT6:LCALLSTATE6;調(diào)用狀態(tài)6JNBTF0,WAIT6;查詢100MS到否CLRTF0MOVTH0,#3CH;恢復(fù)T0定時(shí)初值100MSMOVTL0,#0B0HDJNZR2,WAIT6;判1S到否?未到繼續(xù)狀態(tài)6MOVR2,#20;置100MS計(jì)數(shù)初值DECSECOND1;東西秒顯示減一DECSECOND2;南北秒顯示減一LCALLDISPLAYDJNZR3,WAIT6;狀態(tài)6維持2SLJMPLOOP;大循環(huán)STATE0:;狀態(tài)0MOVP1,#0CLRLED_G1SETBLED_R1;東西紅燈亮CLRLED_G2SETBLED_R2;南北紅燈亮RETSTATE1:;狀態(tài)1SETBLED_G1;東西綠燈亮CLRLED_R1CLRLED_G2SETBLED_R2;南北紅燈亮RETSTATE2:;狀態(tài)2CLRLED_R1CLRLED_G2SETBLED_R2;南北紅燈亮RETSTATE3:;狀態(tài)3SETBLED_G1SETBLED_R1;東西黃燈亮CLRLED_G2SETBLED_R2;南北紅燈亮RETSTATE4:;狀態(tài)4CLRLED_G1SETBLED_R1;東西紅燈亮SETBLED_G2;南北綠燈亮CLRLED_R2RETSTATE5:;狀態(tài)5CLRLED_G1SETBLED_R1;東西紅燈亮CLRLED_R2RETSTATE6:;狀態(tài)6CLRLED_G1SETBLED_R1;東西紅燈亮SETBLED_G2SETBLED_R2;南北黃燈亮RETDISPLAY:;數(shù)碼顯示MOVA,SECOND1;東西秒寄存器MOVB,#10;16進(jìn)制數(shù)拆成兩個(gè)10進(jìn)制數(shù)DIVABMOVDBUF+1,AMOVA,BMOVDBUF,AMOVA,SECOND2;南北秒寄存器MOVB,#10;16進(jìn)制數(shù)拆成兩個(gè)10進(jìn)制數(shù)DIVABMOVDBUF+3,AMOVA,BMOVDBUF+2,AMOVR0,#DBUF MOV R1,#TEMP MOV R7,#4DP10: MOV DPTR,#LEDMAP MOV A,@R0 MOVCA,@A+DPTR MOV @R1,A INCR0 INC R1 DJNZR7,DP10 MOV R0,#TEMP MOV R1,#4DP12: MOV R7,#8 MOV A,@R0DP13: RLC A MOVDIN,C CLR CLK SETBCLK DJNZR7,DP13 INCR0 DJNZR1,DP12RETLEDMAP:DB3FH,6,5BH,4FH,66H,6DH;0,1,2,3,4,5 DB7DH,7,7FH,6FH,77H,7CH;6,7,8,9,A,B DB58H,5EH,7BH,71H,0,40H;C,D,E,F(xiàn),,-DELAY:MOVR5,#5DLOOP0:MOVR6,#0DLOOP1:MOVR7,#0DLOOP2:NOPNOPDJNZR7,DLOOP2DJNZR6,DLOOP1DJNZR5,DLOOP0RETEND六、實(shí)驗(yàn)結(jié)果程序開始運(yùn)行后,B5區(qū)模擬的東西紅燈亮,南北綠燈亮,同時(shí)兩個(gè)方向的數(shù)碼管分別從25秒開始倒計(jì)時(shí),當(dāng)?shù)褂?jì)時(shí)到5秒時(shí),南北綠燈閃亮3秒后變黃,再過2秒,即倒計(jì)時(shí)到0時(shí),變?yōu)闁|西綠燈亮,南北紅燈亮,同時(shí)兩個(gè)方向的數(shù)碼管分別同時(shí)從25秒開始倒計(jì)時(shí),但倒計(jì)時(shí)到5秒時(shí),東西綠燈閃亮3秒后變黃,再過2秒之后又回到初始狀態(tài),繼續(xù)循環(huán)運(yùn)行。七、結(jié)果分析本實(shí)驗(yàn)通過雙色的LED模擬交通燈的顯示狀態(tài),并用靜態(tài)數(shù)碼管結(jié)合定時(shí)器實(shí)現(xiàn)定時(shí)及顯示功能,將交通燈的顯示分為六個(gè)不同的狀態(tài),程序運(yùn)行之后進(jìn)行計(jì)數(shù)顯示,當(dāng)計(jì)時(shí)時(shí)間到達(dá)某一個(gè)狀態(tài)之后,跳轉(zhuǎn)進(jìn)入相應(yīng)的狀態(tài)執(zhí)行,執(zhí)行完之后繼續(xù)進(jìn)入下一個(gè)狀態(tài),實(shí)驗(yàn)通過程序模擬了交通燈的顯示。實(shí)驗(yàn)五串轉(zhuǎn)并與并轉(zhuǎn)串實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?.掌握使用74LS164擴(kuò)展輸出的方法。2.掌握使用74LS165擴(kuò)展輸入的方法。二、實(shí)驗(yàn)內(nèi)容使用74LS165擴(kuò)展輸入數(shù)據(jù),使用74LS164擴(kuò)展輸出數(shù)據(jù)。74LS165的并行口接八位邏輯電平輸出(開關(guān)),CPU使用P1.0、P1.1和P1.2串行讀入開關(guān)狀態(tài);74LS164的并行口接一只數(shù)碼管,CPU使用P1.3和P1.4串行輸出剛讀入的開關(guān)狀態(tài),使之在數(shù)碼管上顯示出來。三、實(shí)驗(yàn)要求根據(jù)實(shí)驗(yàn)內(nèi)容編寫一個(gè)程序,并在實(shí)驗(yàn)儀上調(diào)試和驗(yàn)證。四、實(shí)驗(yàn)步驟1)系統(tǒng)各跳線器處在初始設(shè)置狀態(tài)。用導(dǎo)線對(duì)應(yīng)連接八位邏輯電平輸出模塊的QH165、CLK165、SH/LD到CPU模塊的P10、P11、P12。用導(dǎo)線對(duì)應(yīng)連接靜態(tài)數(shù)碼管顯示模塊的DIN、CLK到CPU模塊的P13、P14。2)啟動(dòng)PC機(jī),打開THGMW-51軟件,輸入源程序,并編譯源程序。編譯無誤后,下載程序運(yùn)行。3)觀察數(shù)碼(八段碼)管的亮滅與撥動(dòng)開關(guān)的狀態(tài)是否一致。撥動(dòng)開關(guān)撥下輸出為低電平,段碼點(diǎn)亮。五、實(shí)驗(yàn)參考程序;//****************************************************************;//*文件名:164165串轉(zhuǎn)并,并轉(zhuǎn)串實(shí)驗(yàn)程序;功能:把開關(guān)量通過74**165串行輸入到內(nèi)存,并通過74**164串行輸出到數(shù);碼管上顯示。;接線:P1.0接QH165,P1.1接CLK165,P1.2接SH_LD,;P1.3、P1.4接靜態(tài)數(shù)碼顯示的DIN、CLK。;//****************************************************************QH165BITP1.0CLK165BITP1.1SH_LDBITP1.2DAT164BITP1.3CLK164BITP1.4MEMORYEQU30HORG0000HAJMPSTARTORG00B0HSTART:SETBCLK165CLRSH_LDSETBSH_LDMOVR7,#8INPUT:RRAMOVC,QH165MOVACC.7,CCLRCLK165NOPSETBCLK165DJNZR7,INPUTMOVMEMORY,AMOVA,MEMORYMOVR6,#8OUTPUT:RRCAMOVDAT164,CCLRCLK164SETBCLK164DJNZR6,OUTPUTACALLDELAYSJMPSTARTDELAY:MOVR0,#5DD2:MOVR1,#0FFHDJNZR1,$DJNZR0,DD2RETEND六、實(shí)驗(yàn)結(jié)果當(dāng)把E4區(qū)的八位邏輯電平的撥碼開關(guān)K0~K7向上撥時(shí),即邏輯電平輸出高電平時(shí),B4區(qū)的四位數(shù)碼管的段碼A~H依次點(diǎn)亮,即K0~K7每一段向上撥時(shí),對(duì)應(yīng)的A~H數(shù)碼管段碼點(diǎn)亮。結(jié)果分析實(shí)驗(yàn)通過74LS165八位邏輯電平的并行輸出數(shù)據(jù)轉(zhuǎn)成串行數(shù)據(jù),輸入單片機(jī)的P1.0口,再通過P1.3輸出到74LS164的數(shù)據(jù)輸入端,再由164的串轉(zhuǎn)并輸出口驅(qū)動(dòng)數(shù)碼管的八位段碼,從而實(shí)現(xiàn)了并轉(zhuǎn)串、串轉(zhuǎn)并的功能。實(shí)驗(yàn)六8255控制鍵盤與顯示實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?.掌握8255輸入、輸出編程方法。2.掌握陣列鍵盤和數(shù)碼管動(dòng)態(tài)掃描顯示的控制方法。二、實(shí)驗(yàn)內(nèi)容用8255可編程并行口做一個(gè)鍵盤、顯示掃描實(shí)驗(yàn),把按鍵輸入的鍵值,顯示在8255控制的七段數(shù)碼管上。8255PB口做鍵盤輸入線,PC口做顯示掃描線,PA口做顯示數(shù)據(jù)線。三、實(shí)驗(yàn)要求根據(jù)實(shí)驗(yàn)內(nèi)容編寫一個(gè)程序,并在實(shí)驗(yàn)儀上調(diào)試和驗(yàn)證。四、實(shí)驗(yàn)步驟1)系統(tǒng)各跳線器處在初始設(shè)置狀態(tài),S11E和S12E紅開關(guān)全部打到下方(OFF)。2)用8位數(shù)據(jù)線對(duì)應(yīng)連接8255模塊的JD3C(PA口)、JD4C(PB口)、JD5C(PC口)到8279模塊的JD3E、JD2E、JD4E;用導(dǎo)線連接8255模塊的CS_8255到地。3)啟動(dòng)PC機(jī),打開THGMW-51軟件,輸入源程序,并編譯源程序。編譯無誤后,下載程序運(yùn)行。4)在鍵盤上按任一單鍵,觀察數(shù)碼管的顯示,數(shù)碼管低位顯示按鍵值。五、實(shí)驗(yàn)參考程序;//*********************************************************;文件名:8255KDFORMCU51;功能:8255控制鍵盤顯示實(shí)驗(yàn);接線:連接8279鍵盤顯示模塊的JD3E到8255模塊的JD3C(PA口);;JD2E到8255模塊的JD4C(PB口);;JD4E到8255模塊的JD5C(PC口);;用導(dǎo)線連接8255模塊的CS_8255到地。;//*********************************************************D8255AEQU8000H;8255PA口地址D8255BEQU8001H;8255PB口地址D8255CEQU8002H;8255PC口地址D8255EQU8003H;8255狀態(tài)/命令口地址LEDBUFEQU50H;顯示緩存KEYVALEQU60H;讀到的鍵碼ORG0000HLJMPSTARTORG0100HSTART:MOVSP,#80HMOVDPTR,#D8255MOVA,#90H;方式0,PB,PC口輸出,PA口輸入MOVX@DPTR,AMOVLEDBUF,#10HMOVLEDBUF+1,#11HMOVLEDBUF+2,#11HMOVLEDBUF+3,#11HMOVLEDBUF+4,#5MOVLEDBUF+5,#5MOVLEDBUF+6,#2MOVLEDBUF+7,#8KB_DIS:LCALLRD_KB;讀鍵盤MOVA,#0FFHCJNEA,KEYVAL,TOSHOW;判讀到鍵SJMPSHOW;沒有則繼續(xù)讀鍵TOSHOW:MOVLEDBUF,KEYVALSHOW:LCALLDISPLAYSJMPKB_DISRD_KB:;鍵盤掃描MOVA,#02H;掃描第一行MOVDPTR,#D8255CMOVX@DPTR,AMOVDPTR,#D8255AMOVXA,@DPTRMOVR1,#00HCJNEA,#0FFH,KEYCAL;判鍵是否按下MOVA,#01H;掃描第二行MOVDPTR,#D8255CMOVX@DPTR,AMOVDPTR,#D8255AMOVXA,@DPTRMOVR1,#08HCJNEA,#0FFH,KEYCALSJMPNOKEY;無鍵按下KEYCAL:MOVR0,#08H;計(jì)算鍵碼SHIFT:RRCAJNCTORETINCR1DJNZR0,SHIFTSJMPNOKEY;無鍵按下TORET:MOVKEYVAL,R1RETNOKEY:MOVKEYVAL,#0FFH;返回?zé)o鍵標(biāo)志RETDISPLAY:MOVR7,#8;8個(gè)數(shù)碼管MOVR5,#0MOVR0,#LEDBUFDLOOP:MOVA,R5RLARLARLAANLA,#11111011BINCR5MOVDPTR,#D8255CMOVX@DPTR,A;點(diǎn)亮對(duì)應(yīng)的LEDMOVA,@R0MOVDPTR,#LEDSEGMOVCA,@A+DPTRINCR0MOVDPTR,#D8255BMOVX@DPTR,A;顯示數(shù)據(jù)LCALLDELAYDJNZR7,DLOOPRETDELAY:PUSHR7MOVR7,#200DELAYLOOP:NOPDJNZR7,DELAYLOOPPOPR7RETLEDSEG:DB3FH,06H,5BH,4FH,66H,6DH;0,1,2,3,4,5DB7DH,07H,7FH,6FH,77H,7CH;6,7,8,9,A,BDB39H,5EH,79H,71H,00H,40H;C,D,E,F,,-END實(shí)驗(yàn)結(jié)果程序運(yùn)行后,E7區(qū)數(shù)碼管的前七位依次顯示“8255---0”,當(dāng)按下E7區(qū)的按鍵時(shí),數(shù)碼管的前七位不變,依然顯示“8255---”,而第八位將顯示按下的鍵碼值,從0~F。結(jié)果分析本實(shí)驗(yàn)通過8255I/O擴(kuò)展芯片以及8279鍵盤/顯示接口芯片為硬件基礎(chǔ),實(shí)現(xiàn)了鍵盤輸入到數(shù)碼管輸出顯示的功能。程序中通過對(duì)鍵盤按下與否進(jìn)行循環(huán)掃描,當(dāng)有按鍵按下時(shí),通過程序?qū)︽I值進(jìn)行計(jì)算,并將結(jié)果送到數(shù)碼管進(jìn)行顯示。當(dāng)無按鍵按下時(shí),程序保持上一狀態(tài)繼續(xù)掃描,直到有不同的按鍵按下時(shí)狀態(tài)改變。由于矩陣按鍵及數(shù)碼顯示會(huì)用到較多的I/O口,而單片機(jī)的I/O口數(shù)量有限,所以利用8255對(duì)其進(jìn)行擴(kuò)展,再利用專門的鍵盤/顯示芯片8279實(shí)現(xiàn)鍵盤掃描和鍵值顯示的功能。實(shí)驗(yàn)七并行A/D轉(zhuǎn)換實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?.掌握ADC0809模/數(shù)轉(zhuǎn)換芯片與單片機(jī)的連接方法及ADC0809的典型應(yīng)用。2.掌握用查詢方式、中斷方式完成模/數(shù)轉(zhuǎn)換程序的編寫方法。二、實(shí)驗(yàn)內(nèi)容利用系統(tǒng)提供的ADC0809接口電路,實(shí)現(xiàn)單片機(jī)模數(shù)轉(zhuǎn)換。模擬信號(hào)為0~5V電位器分壓輸出,單片機(jī)控制ADC0809讀取模擬信號(hào),并在數(shù)碼管上用十六進(jìn)制形式顯示出來。三、實(shí)驗(yàn)要求根據(jù)實(shí)驗(yàn)內(nèi)容編寫一個(gè)程序,并在實(shí)驗(yàn)儀上調(diào)試和驗(yàn)證。四、實(shí)驗(yàn)步驟1)系統(tǒng)各跳線器處在初始設(shè)置狀態(tài)。用導(dǎo)線對(duì)應(yīng)連接并行模數(shù)轉(zhuǎn)換模塊的CS_0809、EOC到CPU模塊的8000、P32;電位器模塊的輸出端接并行模數(shù)轉(zhuǎn)換模塊的IN-0;并行模數(shù)轉(zhuǎn)換模塊的Vref接+5V電源;CPU模塊的P10、P11接串行靜態(tài)數(shù)碼顯示模塊DIN、CLK。2)啟動(dòng)PC機(jī),打開THGMW-51軟件,輸入源程序,并編譯源程序。編譯無誤后,下載程序運(yùn)行。3)數(shù)碼管以十六進(jìn)制形式顯示模擬量,手動(dòng)調(diào)節(jié)輸入電位器,改變輸入模擬量電壓的大小,數(shù)碼管顯示將隨之變化。五、實(shí)驗(yàn)參考程序;//*******************************************************************;文件名:AD0809FOR51MCU;功能:并行A/D轉(zhuǎn)換實(shí)驗(yàn);接線:用導(dǎo)線對(duì)應(yīng)連接并行模數(shù)轉(zhuǎn)換模塊的CS_0809、EOC到CPU模塊的8000、P32;;電位器模塊的輸出端接并行模數(shù)轉(zhuǎn)換模塊的IN-0;;并行模數(shù)轉(zhuǎn)換模塊的VREF接+5V電源;;CPU模塊的P10、P11接串行靜態(tài)數(shù)碼顯示模塊DIN、CLK。;//******************************************************************* DBUF EQU 30H TEMP EQU 40H D0809 EQU 8000H;通道0地址DINBITP1.0CLKBITP1.1 ORG0000HJMPSTARTORG0080HSTART: MOV DBUF+3,#0AH MOVDBUF+2,#0DH MOVDPTR,#D0809MOVA,#0 MOVX@DPTR,AJNBP3.2,$ MOVXA,@DPTR;讀入結(jié)果 MOV B,A SWAPAANLA,#0FH MOVDBUF+1,A INC R0 MOVA,BANLA,#0FH MOV DBUF,A ACALLDISP1ACALLDELAY AJMPSTARTDISP1:;串行數(shù)碼顯示 MOV R0,#DBUF MOV R1,#TEMP MOVR2,#4DP10: MOV DPTR,#SEGTAB MOV A,@R0 MOVCA,@A+DPTR MOV @R1,A INC R0 INCR1 DJNZR2,DP10 MOVR0,#TEMP MOV R1,#4DP12: MOV R2,#8 MOVA,@R0DP13: RLCA MOV DIN,C CLR CLK SETBCLK DJNZR2,DP13 INCR0 DJNZR1,DP12RETSEGTAB: DB 3FH,6,5BH,4FH,66H,6DH;0,1,2,3,4,5 DB 7DH,7,7FH,6FH,77H,7CH;6,7,8,9,A,B DB 58H,5EH,79H,71H,0,00H;C,D,E,F(xiàn),-DELAY:MOVR4,#80HAA1:MOVR5,#0FFHAA:NOPNOPDJNZR5,AADJNZR4,AA1RETEND六、實(shí)驗(yàn)結(jié)果程序運(yùn)行后,B4區(qū)的數(shù)碼管前兩位將顯示“ad”,后兩位將顯示E2區(qū)電位器輸出的模擬電壓經(jīng)AD轉(zhuǎn)換后對(duì)應(yīng)的數(shù)字量,以十六進(jìn)制顯示,即從00~FF。用萬用表測量的5組模擬電壓值及對(duì)應(yīng)的數(shù)字量顯示結(jié)果如下表所示:參考電壓:4.7V輸入模擬電壓(V)11.522.533.544.7顯示數(shù)字量(十六進(jìn)制)38526E88A3bFdAFF七、結(jié)果分析本實(shí)驗(yàn)采用ADC0809進(jìn)行模數(shù)轉(zhuǎn)換,程序通過掃描的方法對(duì)模數(shù)轉(zhuǎn)換的結(jié)果進(jìn)行實(shí)時(shí)顯示。通過ADC0809的通道0輸入模擬電壓,將轉(zhuǎn)換的數(shù)據(jù)放入數(shù)據(jù)緩沖區(qū),再通過串行的數(shù)碼管進(jìn)行顯示。實(shí)驗(yàn)八LCD顯示實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康恼莆拯c(diǎn)陣式(128×64點(diǎn))帶漢字字庫液晶顯示屏的程序設(shè)計(jì)方法。二、實(shí)驗(yàn)內(nèi)容根據(jù)系統(tǒng)提供的電路,掌握128×64點(diǎn)陣LCD的工作原理,編程實(shí)現(xiàn)顯示字符、漢字和圖片。三、實(shí)驗(yàn)要求根據(jù)實(shí)驗(yàn)內(nèi)容編寫一個(gè)程序,并在實(shí)驗(yàn)儀上調(diào)試和驗(yàn)證。四、實(shí)驗(yàn)步驟1)系統(tǒng)各跳線器處在初始設(shè)置狀態(tài),JT2B跳線器的兩只短路帽置位上端。用導(dǎo)線對(duì)應(yīng)連接液晶顯示模塊的RS、R/W、E、PSB、RST到CPU模塊的P10~P14。2)啟動(dòng)PC機(jī),打開THGMW-51軟件,輸入源程序,并編譯源程序。編譯無誤后,下載程序運(yùn)行。3)LCD將顯示字符和漢字及圖形。五、實(shí)驗(yàn)參考程序;//******************************************************************;文件名:LCD_SFORMCU51(LCD12864串行接口程序);功能:LCD顯示實(shí)驗(yàn);接線:JT2B跳線器的兩只短路帽置位上端。;對(duì)應(yīng)連接液晶顯示模塊的RS、R/W、E、PSB、RST到CPU模塊的P10~P14。;//******************************************************************;RS=CS=D/I;R/W=STD=STD;E=SCLK=SCLKCSBITP1.0;D/ISTDBITP1.1;串行數(shù)據(jù)線W/RSCLKBITP1.2;串行時(shí)鐘線EPSBBITP1.3;CS1RESBITP1.4;RESSTARTEQU30H;起始字節(jié)COMEQU31H;命令/數(shù)據(jù)HDATAEQU32H;命令/數(shù)據(jù)字節(jié)高位LDATAEQU33H;命令/數(shù)據(jù)字節(jié)低位ASCEQU34H;ASCII數(shù)據(jù)單元XPOSEQU35HYPOSEQU36HORG0000HMAIN:MOVSP,#60HCLRRESSETBRES;可以直接接電源VDDSETBCS;可以直接接電源VDDCLRPSB;可以直接接地VSSCALLLCDRESET;模塊系統(tǒng)初始化CALLHZKDIS;顯示漢字子程序MOVSTART,#0F8H;寫入命令(11111000)MOVCOM,#80H;設(shè)定顯示位置CALLLCDWRITEMOVSTART,#0FAH;寫數(shù)據(jù)(11111010)MOVCOM,#10H;顯示字符CALLLCDWRITEMOVCOM,#11H;顯示字符CALLLCDWRITEMOVCOM,#1EH;顯示字符CALLLCDWRITEMOVCOM,#1FH;顯示字符CALLLCDWRITEMOVSTART,#0F8H;寫入命令(11111000)MOVCOM,#34H;擴(kuò)充功能設(shè)定CALLLCDWRITEMOVCOM,#05H;反白選擇CALLLCDWRITECALLDL40MS;延時(shí)CALLDL40MSCALLDL40MSMOVA,#055H;繪圖方式下寫55數(shù)據(jù)CALLLCDFILLCALLCLEAR;清屏JMPMAINCLEAR:;清屏子程序MOVA,#00HCALLLCDFILLRETLCDRESET:LCALLDL1MS;延時(shí)等待內(nèi)部復(fù)位MOVSTART,#0F8H;寫入命令(11111000) MOVCOM,#30H;使用基本指令集 LCALLLCDWRITE MOVCOM,#0CH LCALLLCDWRITE;整體顯示ON MOVCOM,#01H;清屏 LCALLLCDWRITE LCALLDL1MS MOVCOM,#06H;顯示右移 LCALLLCDWRITE LCALLDL1MS RETLCDWRITE:;模塊寫入子程序 MOVA,COM;送待發(fā)數(shù)據(jù)命令A(yù) ANLA,#0F0H;屏蔽低4位 MOVHDATA,A;將高4位送HDATA單元 MOVA,COM;取低4位 SWAPA;高低4位互換 ANLA,#0F0H MOVLDATA,A;將低4位送LDATA單元 MOVA,START;取起始字節(jié) LCALLSENDBIT;發(fā)送 LCALLDL1MS;延時(shí)1MS MOVA,HDATA LCALLSENDBIT LCALLDL1MS MOVA,LDATA LCALLSENDBIT LCALLDL1MS RETHZKDIS:;顯示漢字子程序MOVR5,#2MOVSTART,#0F8H;寫入命令(11111000) MOVCOM,#80H;設(shè)定顯示位置 LCALLLCDWRITE MOVDPTR,#TAB;指向文字型代碼表 MOVA,#00H;取漢字代碼低位DIS_1:MOVR6,#8;每行八個(gè)漢字DIS_2:MOVSTART,#0FAH;寫數(shù)據(jù)(11111010)CLRAMOVCA,@A+DPTRMOVCOM,ACALLLCDWRITE;寫入顯示模塊INCDPTR;取漢字代碼高位CLRAMOVCA,@A+DPTRMOVCOM,ACALLLCDWRITE;寫入顯示模塊INCDPTRCALLDL40MSDJNZR6,DIS_2;未顯示完則繼續(xù)MOVSTART,#0F8H;寫入命令(11111000)MOVCOM,#90H;第二行地址CALLLCDWRITEDJNZR5,DIS_1MOVR5,#2MOVSTART,#0F8H;寫入命令(11111000)MOVCOM,#88H;第三行地址CALLLCDWRITEDIS_4:MOVR6,#08HDIS_3:MOVSTART,#0FAH;寫數(shù)據(jù)(11111010)CLRAMOVCA,@A+DPTRMOVCOM,ACALLLCDWRITE;寫入顯示模塊INCDPTR;取漢字代碼高位CLRAMOVCA,@A+DPTRMOVCOM,ACALLLCDWRITE;寫入顯示模塊INCDPTRCALLDL40MSDJNZR6,DIS_3;未顯示完則繼續(xù)MOVSTART,#0F8H;寫入命令(11111000)MOVCOM,#98H;第四行地址CALLLCDWRITEDJNZR5,DIS_4;遇“0”結(jié)束顯示RET;寫完兩行則結(jié)束LCDFILL:;繪圖MOVR4,AMOVXPOS,#0MOVYPOS,#0MOVSTART,#0F8HMOVCOM,#30H;重新選擇基本指令?CALLLCDWRITEMOVCOM,#01H;清屏CALLLCDWRIT

溫馨提示

  • 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)論