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

下載本文檔

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

文檔簡(jiǎn)介

PAGE179PAGE13目錄實(shí)驗(yàn)一P1口輸入、輸出實(shí)驗(yàn) 2實(shí)驗(yàn)二繼電器控制實(shí)驗(yàn) 8實(shí)驗(yàn)三音頻控制實(shí)驗(yàn) 11實(shí)驗(yàn)四程序調(diào)試 14實(shí)驗(yàn)五5LED靜態(tài)串行顯示實(shí)驗(yàn) 16實(shí)驗(yàn)六6LED動(dòng)態(tài)掃描顯示實(shí)驗(yàn) 23實(shí)驗(yàn)七查詢式鍵盤(pán)實(shí)驗(yàn) 31實(shí)驗(yàn)八陣列式鍵盤(pán)實(shí)驗(yàn) 39實(shí)驗(yàn)九計(jì)數(shù)器實(shí)驗(yàn) 50實(shí)驗(yàn)十定時(shí)器實(shí)驗(yàn) 52實(shí)驗(yàn)十一外部中斷實(shí)驗(yàn) 58

實(shí)驗(yàn)一P1口輸入、輸出實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?、學(xué)習(xí)P1口的使用方法2、學(xué)習(xí)延時(shí)子程序的編寫(xiě)和使用二、實(shí)驗(yàn)說(shuō)明P1口是準(zhǔn)雙向口,它作為輸出口時(shí)與一般的雙向口使用方法相同。由準(zhǔn)雙向口結(jié)構(gòu)可知當(dāng)P1口用作輸入口時(shí),必須先對(duì)口的鎖存器寫(xiě)“1”,若不先對(duì)它寫(xiě)“1”,讀入的數(shù)據(jù)是不正確的。三、實(shí)驗(yàn)內(nèi)容及步驟實(shí)驗(yàn)(一):用P1口做輸出口,接八位邏輯電平顯示,程序功能使發(fā)光二極管從右到左輪流循環(huán)點(diǎn)亮。1、使用單片機(jī)最小應(yīng)用系統(tǒng)1模塊。關(guān)閉該模塊電源,用扁平數(shù)據(jù)線連接單片機(jī)P1口與八位邏輯電平顯示模塊。2、用串行數(shù)據(jù)通信線連接計(jì)算機(jī)與仿真器,把仿真器插到模塊的鎖緊插座中,請(qǐng)注意仿真器的方向:缺口朝上。3、打開(kāi)KeiluVision2仿真軟件,首先建立本實(shí)驗(yàn)的項(xiàng)目文件,接著添加P1_A.ASM源程序,進(jìn)行編譯,直到編譯無(wú)誤。4、進(jìn)行軟件設(shè)置,選擇硬件仿真,選擇串行口,設(shè)置波特率為38400。5、打開(kāi)模塊電源和總電源,點(diǎn)擊開(kāi)始調(diào)試按鈕,點(diǎn)擊RUN按鈕運(yùn)行程序,觀察發(fā)光二極管顯示情況。發(fā)光二極管單只從右到左輪流循環(huán)點(diǎn)亮。實(shí)驗(yàn)(二):用P1.0、P1.1作輸入接兩個(gè)撥斷開(kāi)關(guān),P1.2、P1.3作輸出接兩個(gè)發(fā)光二極管。程序讀取開(kāi)關(guān)狀態(tài),并在發(fā)光二極管上顯示出來(lái)。1、用導(dǎo)線分別連接P1.0、P1.1到兩個(gè)撥斷開(kāi)關(guān),P1.2、P1.3到兩個(gè)發(fā)光二極管。2、添加P1_B.ASM源程序,編譯無(wú)誤后,運(yùn)行程序,撥動(dòng)撥斷開(kāi)關(guān),觀察發(fā)光二極管的亮滅情況。向上撥為熄滅,向下?lián)転辄c(diǎn)亮。四、流程圖及源程序1.流程圖開(kāi)始設(shè)置初始值開(kāi)始設(shè)置初始值設(shè)移位次數(shù)數(shù)據(jù)輸出左一位延時(shí)移位次數(shù)完成?是否開(kāi)始P1.0,P1.1置一讀入P1.0口值將讀入的值輸出到P1.2讀入P1.1口值將讀入的值輸出到P1.3(A)P1口循環(huán)點(diǎn)燈程序框圖(A)P1口循環(huán)點(diǎn)燈程序框圖(B)P1口輸入輸出程序框圖2.源程序:(一)實(shí)驗(yàn)一ORG0000HLJMPSTARTORG0030HSTART:mova,#0FEhmovr2,#8Output:movP1,arlaAcallDelaydjnzr2,OutputLjmpSTARTDelay:movr6,#0movr7,#0DelayLoop:;延時(shí)程序djnzr6,DelayLoopdjnzr7,DelayLoopretend(二)實(shí)驗(yàn)二KeyLeftBITP1.0;定義KeyRightBITP1.1LedleftBITP1.2LedRightBITP1.3ORG0000HLJMPSTARTORG0030HSTART:SETBKeyLeft;欲讀先置一SETBKeyRightLoop:Movc,keyleftMovLEDLeft,cMOVC,KeyRightMovLEDRIGHt,cLJMPLoopEND五、思考題(1)對(duì)于本實(shí)驗(yàn)延時(shí)子程序Delay:MOVR6,0MOVR7,0DelayLoop:DJNZR6,DelayLoopDJNZR7,DelayLoopRET如使用12MHz晶振,粗略計(jì)算此程序的執(zhí)行時(shí)間為多少?六、電路圖

實(shí)驗(yàn)二繼電器控制實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?、學(xué)習(xí)I/O端口的使用方法2、掌握繼電器的控制的基本方法3、了解用弱電控制強(qiáng)電的方法二、實(shí)驗(yàn)說(shuō)明現(xiàn)代自動(dòng)控制設(shè)備中,都存在一個(gè)電子電路的互相連接問(wèn)題,一方面要使電子電路的控制信號(hào)能控制電氣電路的執(zhí)行元件(電動(dòng)機(jī),電磁鐵,電燈等),另一方面又要為電子線路和電氣電路提供良好的電氣隔離,以保護(hù)電子電路和人身的安全。繼電器便能完成這一任務(wù)。繼電器電路中一般都要在繼電器的線圈兩頭加一個(gè)二極管以吸收繼電器線圈斷電時(shí)產(chǎn)生的反電勢(shì)。本電路的控制端為高電平時(shí),繼電器常開(kāi)觸點(diǎn)吸合,同時(shí)LED燈被點(diǎn)亮。當(dāng)控制端為低電平時(shí),繼電器不工作。三、實(shí)驗(yàn)內(nèi)容及步驟用P1.0作為控制輸出口,接繼電器電路,使繼電器重復(fù)吸合與斷開(kāi)。1、使用單片機(jī)最小應(yīng)用系統(tǒng)1模塊,用導(dǎo)線連接P1.0端口到繼電器與溫度控制部件模塊的控制口。2、用串行數(shù)據(jù)通信線連接計(jì)算機(jī)與仿真器,把仿真器插到模塊的鎖緊插座中,請(qǐng)注意仿真器的方向:缺口朝上。3、打開(kāi)KeiluVision2仿真軟件,首先建立本實(shí)驗(yàn)的項(xiàng)目文件,接著添加繼電器.ASM源程序,進(jìn)行編譯,直到編譯無(wú)誤。4、進(jìn)行軟件設(shè)置,選擇硬件仿真,選擇串行口,設(shè)置波特率為38400。5、打開(kāi)模塊電源和總電源,點(diǎn)擊開(kāi)始調(diào)試按鈕,點(diǎn)擊RUN按鈕運(yùn)行程序,觀察發(fā)光二極管亮滅情況和聽(tīng)繼電器開(kāi)合的聲音,繼電器重復(fù)延時(shí)吸合與延時(shí)斷開(kāi)。四、流程圖及源程序繼電器吸合繼電器吸合延時(shí)繼電器斷開(kāi)開(kāi)始延時(shí)源程序清單:OutputBITP1.0;P1.0輸出ORG0000HLJMPSTARTORG0030HSTART:clrOutput;斷開(kāi)callDelaysetbOutput;吸合callDelayljmpSTARTDelay:movr6,#0movr7,#0DLoop:djnzr7,DLoopdjnzr6,DLoopretend五、思考題試用單片機(jī)的其他輸入輸出口控制繼電器。六、電路圖音頻控制實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?.學(xué)習(xí)輸入/輸出端口控制方法2.了解音頻發(fā)聲原理二、實(shí)驗(yàn)儀器實(shí)驗(yàn)箱計(jì)算機(jī)三、實(shí)驗(yàn)內(nèi)容及步驟P1.0輸出音頻信號(hào)接音頻驅(qū)動(dòng)電路,使揚(yáng)聲器周期性的發(fā)聲。1、使用單片機(jī)最小應(yīng)用系統(tǒng)1模塊,用導(dǎo)線將P1.0接到音頻驅(qū)動(dòng)電路輸入端。2、用串行數(shù)據(jù)通信線連接計(jì)算機(jī)與仿真器,把仿真器插到模塊的鎖緊插座中,請(qǐng)注意仿真器的方向:缺口朝上。3、打開(kāi)KeiluVision2仿真軟件,首先建立本實(shí)驗(yàn)的項(xiàng)目文件,接著添加音頻.ASM源程序,進(jìn)行編譯,直到編譯無(wú)誤。4、進(jìn)行軟件設(shè)置,選擇硬件仿真,選擇串行口,設(shè)置波特率為38400。5、打開(kāi)模塊電源和總電源,點(diǎn)擊開(kāi)始調(diào)試按鈕,點(diǎn)擊RUN按鈕運(yùn)行程序,揚(yáng)聲器周期性的發(fā)出單頻聲音。四、流程圖及源程序1.源程序OUTPUTBITP1.0;P1.0端口ORG0000HLJMPSTARTORG0030HSTART:CLRCMOVOUTPUT,CLCALLDELAYSETBCMOVOUTPUT,CLCALLDELAYAJMPSTARTDELAY:MOVR5,#4D1:MOVR6,#20D2:MOVR7,#123NOPDJNZR7,$DJNZR6,D2DJNZR5,D1RETEND思考題:如何改變音調(diào)的高低?實(shí)驗(yàn)四程序設(shè)計(jì)(2)一、實(shí)驗(yàn)?zāi)康?、掌握單片機(jī)仿真及簡(jiǎn)單程序設(shè)計(jì)與調(diào)試方法。2、掌握KEILC環(huán)境中查看指令操作結(jié)果的技巧。二、實(shí)驗(yàn)儀器計(jì)算機(jī)三、實(shí)驗(yàn)步驟1、在對(duì)工程成功地進(jìn)行匯編、連接以后,按Ctrl+F5或者使用菜單Debug->Start/StopDebugSession即可進(jìn)入調(diào)試狀態(tài),單步調(diào)試,全速運(yùn)行兩種模式下調(diào)試。2、在程序行設(shè)置/移除斷點(diǎn)的方法是將光標(biāo)定位于需要設(shè)置斷點(diǎn)的程序行,使用菜單Debug->Insert/RemoveBreakPoint設(shè)置或移除斷點(diǎn)(也可以用鼠標(biāo)在該行雙擊實(shí)現(xiàn)同樣的功能);Debug->Enable/Disable

Breakpoint

是開(kāi)啟或暫停光標(biāo)所在行的斷點(diǎn)功能;Debug->DisableAllBreakpoint暫停所有斷點(diǎn);Debug->KillAllBreakPoint清除所有的斷點(diǎn)設(shè)置。這些功能也可以用工具條上的快捷按鈕進(jìn)行設(shè)置。3建立一個(gè)工程添加以下程序:(1)匯編、連接生成可執(zhí)行文件。利用單步,執(zhí)行到斷點(diǎn)處兩種方法執(zhí)行程序。(2)觀察結(jié)果、分析程序、說(shuō)明功能。實(shí)驗(yàn)分析:設(shè)計(jì)小程序,觀察以下幾組指令并分析其操作結(jié)果。ADDADDCXCHXCHDANLORLORG0000HLJMPMAINORG0040HMAIN:MOVA,#0FEHLOOP:MOVP1,ALCALLD_1sRLAAJMPMAIND_1s:MOVR6,#100;1D10ms:MOVR5,#40;1DL:MOVR4,#123;1NOP;1DJNZR4,$;2*123DJNZR5,DL;2DJNZR6,D10ms;2RETENDORG0000HMOVR2,#32HMOVA,R2SWAPAANLA,#0FHMOVB,#0AHMULAB實(shí)驗(yàn)五5LED靜態(tài)串行顯示實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?、掌握數(shù)字、字符轉(zhuǎn)換成顯示段碼的軟件譯碼方法2、靜態(tài)顯示的原理和相關(guān)程序的編寫(xiě)二、實(shí)驗(yàn)電路1、靜態(tài)顯示,電路圖中所示。顯示器由5個(gè)共陰極數(shù)碼管組成。輸入只有兩個(gè)信號(hào),它們是串行數(shù)據(jù)線DIN和移位信號(hào)CLK。5個(gè)串/并移位寄存器芯片74LS164首尾相連。每片的并行輸出作為L(zhǎng)ED數(shù)碼管的段碼。74LS164的引腳圖如圖所示;74LS16474LS164為8位串入并出移位寄存器,1、2為串行輸入端,Q0~Q7為并行輸出端,CLK為移位時(shí)鐘脈沖,上升沿移入一位;MR為清零端,低電平時(shí)并行輸出為零。74LS164三、實(shí)驗(yàn)內(nèi)容及步驟單片機(jī)的P1.0作數(shù)據(jù)串行輸出,P1.1作移位脈沖輸出,當(dāng)然用戶也可以用其他I/O口。1、使用單片機(jī)最小應(yīng)用系統(tǒng)1模塊,用導(dǎo)線連接P1.0、P1.1到串行靜態(tài)顯示模塊的DIN、CLK端。2、用串行數(shù)據(jù)通信線連接計(jì)算機(jī)與仿真器,把仿真器插到模塊的鎖緊插座中,請(qǐng)注意仿真器的方向:缺口朝上。3、打開(kāi)KeiluVision2仿真軟件,首先建立本實(shí)驗(yàn)的項(xiàng)目文件,接著添加串行顯示.ASM源程序,進(jìn)行編譯,直到編譯無(wú)誤。4、進(jìn)行軟件設(shè)置,選擇硬件仿真,選擇串行口,設(shè)置波特率為38400。5、打開(kāi)模塊電源和總電源,點(diǎn)擊開(kāi)始調(diào)試按鈕,點(diǎn)擊RUN按鈕運(yùn)行程序。5LED顯示“80C51”。停止程序運(yùn)行,顯示不變,說(shuō)明靜態(tài)顯示模塊具有數(shù)據(jù)鎖存功能。四、流程圖及源程序流程圖地址指針設(shè)置地址指針設(shè)置取段碼段碼左移一位輸出一位段碼輸出一個(gè)移位脈沖N開(kāi)始取段碼結(jié)束取段碼結(jié)束YYNN2、源程序DBUF0EQU30H;置存儲(chǔ)區(qū)首址TEMPEQU40H;置緩沖區(qū)首址DINBITP1.0;置串行輸出口CLKBITP1.1;置時(shí)鐘輸出口ORG0000HLJMPSTARTORG0030HSTART:MOV30H,#8;存入顯示數(shù)據(jù)MOV31H,#9MOV32H,#CMOV33H,#5MOV34H,#1DISP:MOVR0,#DBUF0MOVR1,#TEMPMOVR2,#5DP10:MOVDPTR,#SEGTAB;表頭地址MOVA,@R0MOVCA,@A+DPTR;查表指令MOV@R1,AINCR0INCR1DJNZR2,DP10MOVR0,#TEMP;段碼地址指針MOVR1,#5;段碼字節(jié)數(shù)DP12:MOVR2,#8;輸出子程序MOVA,@R0;取段碼DP13:RLCA;段碼左移MOVDIN,C;輸出一位段碼CLRCLK;發(fā)送移位脈沖一位SETBCLKDJNZR2,DP13INCR0DJNZR1,DP12SJMP$SEGTAB:DB3FH,06H,5BH,4FH,66H,6DH;0,1,2,3,4,5DB7DH,07H,7FH,6FH,77H,7CH;6,7,8,9,A,bDB58H,5EH,7BH,71H,00H,40H;C,d,E,F(xiàn),,-DELAY:MOVR4,#03H;延時(shí)子程序AA1:MOVR5,#0FFHAA:DJNZR5,AADJNZR4,AA1RETEND五、電路圖實(shí)驗(yàn)六6LED動(dòng)態(tài)掃描顯示實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?、掌握數(shù)字、字符轉(zhuǎn)換成顯示段碼的軟件譯碼方法2、動(dòng)態(tài)顯示的原理和相關(guān)程序的編寫(xiě)二、實(shí)驗(yàn)說(shuō)明動(dòng)態(tài)顯示,也稱掃描顯示。顯示器由6個(gè)共陰極LED數(shù)碼管構(gòu)成。單片機(jī)的P0口輸出顯示段碼,經(jīng)由一片74LS245驅(qū)動(dòng)輸出給LED管,由PB口輸出位碼,經(jīng)由74LS06輸出給LED管。三、實(shí)驗(yàn)內(nèi)容及步驟單片機(jī)P0輸出段碼,P1口輸出位控碼,輸出6個(gè)字符。1、單片機(jī)最小應(yīng)用系統(tǒng)1的P0口接段碼口a~h,P1口接位碼口S1~S6。2、用串行數(shù)據(jù)通信線連接計(jì)算機(jī)與仿真器,把仿真器插到模塊的鎖緊插座中,請(qǐng)注意仿真器的方向:缺口朝上。3、打開(kāi)KeiluVision2仿真軟件,首先建立本實(shí)驗(yàn)的項(xiàng)目文件,接著添加掃描顯示.ASM源程序,進(jìn)行編譯,直到編譯無(wú)誤。4、進(jìn)行軟件設(shè)置,選擇硬件仿真,選擇串行口,設(shè)置波特率為38400。5、打開(kāi)模塊電源和總電源,點(diǎn)擊開(kāi)始調(diào)試按鈕,點(diǎn)擊RUN按鈕運(yùn)行程序。6LED顯示“168168”。程序停止運(yùn)行后,顯示隨之變化,說(shuō)明運(yùn)態(tài)掃描顯示模塊不具有數(shù)據(jù)鎖存的功能。四、流程圖及源程序1、源程序DBUFEQU30H;置存儲(chǔ)區(qū)首址TEMPEQU40H;置緩沖區(qū)首址ORG0000HLJMPSTARTORG0030HSTART:MOV30H,#1;存入數(shù)據(jù)MOV31H,#6MOV32H,#8MOV33H,#1MOV34H,#6MOV35H,#8MOVR0,#DBUFMOVR1,#TEMPMOVR2,#6;6位顯示器MOVDPTR,#SEGTAB;置段碼表首址DP00:MOVA,@R0;將段碼存入緩沖區(qū)MOVCA,@A+DPTR;查表取段碼MOV@R1,A;存入暫存器INCR1INCR0DJNZR2,DP00DISP0:MOVR0,#TEMP;顯示子程序MOVR1,#6;掃描8次MOVR2,#01H;決定數(shù)據(jù)動(dòng)態(tài)顯示方向DP01:MOVA,@R0MOVP0,A;段碼輸出MOVA,R2;取位碼CPLA;低電平驅(qū)動(dòng)MOVP1,A;位碼輸出ACALLDELAY;調(diào)用延時(shí)MOVA,R2RLAMOVR2,AINCR0DJNZR1,DP01SJMPDISP0SEGTAB:DB3FH,06H,5BH,4FH,66H,6DH;0,1,2,3,4,5DB7DH,07H,7FH,6FH,77H,7CH;6,7,8,9,A,bDB58H,5EH,7BH,71H,00H,40H;C,d,E,F(xiàn),,-DELAY:;延時(shí)子程序MOVR4,#03HAA1:MOVR5,#0FFHAA:DJNZR5,ADJNZR4,AA1RETEND流程圖YYN地址指針設(shè)置輸出段碼取段碼輸出位碼調(diào)用延時(shí)程序取段碼結(jié)束五、思考題1、如何修改程序,實(shí)現(xiàn)六位LED數(shù)碼管只顯示其中的兩位?六、電路圖實(shí)驗(yàn)七查詢式鍵盤(pán)實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?、掌握鍵盤(pán)和顯示器的接口方法和編程方法2、掌握鍵盤(pán)和八段碼顯示器的工作原理3、靜態(tài)顯示的原理和相關(guān)程序的編寫(xiě)二、實(shí)驗(yàn)說(shuō)明本實(shí)驗(yàn)提供了8個(gè)按鈕的小鍵盤(pán),可接到單片機(jī)的并行口,如果有鍵按下,則相應(yīng)輸出為低,否則輸出為高。單片機(jī)通過(guò)識(shí)別,判斷按下什么鍵。有鍵按下后,要有一定的延時(shí),防止由于鍵盤(pán)抖動(dòng)而引起誤操作。三、實(shí)驗(yàn)步驟及內(nèi)容1、用一根扁平數(shù)據(jù)插頭線連接查詢式鍵盤(pán)實(shí)驗(yàn)?zāi)K與八位邏輯電平顯示模塊,無(wú)鍵按下時(shí),鍵盤(pán)輸出全為“1”發(fā)光二極管全部熄滅,有鍵按下,對(duì)應(yīng)發(fā)光二極管點(diǎn)亮。此種電路的程序要判斷是否有2個(gè)或2個(gè)以上的鍵盤(pán)同時(shí)按下,以免鍵盤(pán)分析錯(cuò)誤。陣列式鍵盤(pán)的編程同樣也有這樣的問(wèn)題要注意。2、一根扁平8線插頭連接查詢式鍵盤(pán)實(shí)驗(yàn)?zāi)K與掃描顯示實(shí)驗(yàn)?zāi)K。無(wú)鍵按下時(shí),LED數(shù)碼顯示八段全部熄滅,有鍵按下時(shí),則對(duì)應(yīng)LED段點(diǎn)亮。3、使用靜態(tài)串行顯示模塊顯示鍵值。單片機(jī)最小應(yīng)用系統(tǒng)1的P1口接查詢式鍵盤(pán)輸出口。P3.6接靜態(tài)數(shù)碼顯示DIN,P3.7接CLK。4、用串行數(shù)據(jù)通信線連接計(jì)算機(jī)與仿真器,把仿真器插到模塊的鎖緊插座中,請(qǐng)注意仿真器的方向:缺口朝上。5、打開(kāi)KeiluVision2仿真軟件,首先建立本實(shí)驗(yàn)的項(xiàng)目文件,接著添加查詢KEY.ASM源程序,進(jìn)行編譯,直到編譯無(wú)誤。6、進(jìn)行軟件設(shè)置,選擇硬件仿真,選擇串行口,設(shè)置波特率為38400。7、打開(kāi)模塊電源和總電源,點(diǎn)擊開(kāi)始調(diào)試按鈕,點(diǎn)擊RUN按鈕運(yùn)行程序。在鍵盤(pán)上按下某個(gè)鍵,觀察數(shù)顯是否與按鍵值一致,鍵值從左至右為0~7。五、流程圖及源程序1、流程圖YYN初始化地址參數(shù)去抖動(dòng)查表讀鍵值等待鍵釋放得鍵碼調(diào)整表指針調(diào)整鍵碼開(kāi)始比較相同?返回鍵入?開(kāi)始開(kāi)始顯示緩沖區(qū)初始化LED顯示讀取鍵值鍵值轉(zhuǎn)換為顯示數(shù)據(jù)有鍵輸入?N主程序框圖2、源程序DBUFEQU30HTEMPEQU40HDINBITP3.6CLKBITP3.7ORG0000HLJMPSTARTORG0030HSTART:MOV30H,#16MAIN:ACALLDISPACALLKEY0AJMPMAINKEY:MOVP1,#0FFH;輸入前,鎖存器置“1”MOVA,P1;讀取鍵盤(pán)狀況CJNEA,#0FFH,K00;有鍵按下AJMPKEY;無(wú)鍵按下K00:ACALLDELAY;延時(shí)去抖動(dòng)MOVA,P1CJNEA,#0FFH,K01;確有鍵按下AJMPKEYK01:MOVR3,#8;8個(gè)鍵MOVR2,#0;鍵碼MOVB,A;暫存鍵值MOVDPTR,#K0TABK02:MOVA,R2MOVCA,@A+DPTR;從鍵值表中取鍵值CJNEA,B,K04;鍵值比較K03:MOVA,P1;相等CJNEA#0FFH,K03;等鍵釋放ACALLDELAY;延時(shí)去抖動(dòng)MOVA,R2;得鍵碼RETK04:INCR2;不相等,到繼續(xù)訪問(wèn)鍵值表DJNZR3,K02MOVA,#0FFH;鍵值不在鍵值中,即多鍵同時(shí)按下AJMPKEYK0TAB:DB0FEH,0FDH,0FBH,0F7H;鍵值表DB0EFH,0DFH,0BFH,07FHDISP:MOVDBUF,AMOVDBUF+1,#16MOVDBUF+2,#16MOVDBUF+3,#16MOVDBUF+4,#16MOVR0,#DBUFMOVR1,#TEMPMOVR2,#5DP10:MOVDPTR,#SEGTABMOVA,@R0MOVCA,@A+DPTRMOV@R1,AINCR0INCR1DJNZR2,DP10MOVR0,#TEMPMOVR1,#5DP12:MOVR2,#8MOVA,@R0DP13:RLCAMOVDIN,CCLRCLKSETBCLKDJNZR2,DP13INCR0DJNZR1,DP12RETSEGTAB:DB3FH,06H,5BH,4FH,66H,6DH;0,1,2,3,4,5DB7DH,07H,7FH,6FH,77H,7CH;6,7,8,9,A,bDB58H,5EH,79H,71H,00H,40H;C,d,E,F(xiàn),,-DELAY:MOVR4,#02HAA1:MOVR5,#0F8HAA:DJNZR5,AADJNZR4,AA1RETEND五、思考題1、程序如何確保每按一次鍵,只處理一次。六、原理圖實(shí)驗(yàn)八陣列式鍵盤(pán)實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?、掌握鍵盤(pán)和顯示器的接口方法和編程方法2、掌握陣列式鍵盤(pán)的硬件組成和軟件編程方法二、實(shí)驗(yàn)說(shuō)明本實(shí)驗(yàn)提供了一個(gè)4X4小建盤(pán),向P0口的低四位逐個(gè)輸出低電平,如果有鍵盤(pán)按下,則相應(yīng)輸出為低,如果沒(méi)有鍵按下,則輸出為高。通過(guò)輸出的列碼和讀取的行碼來(lái)判斷按下什么鍵。有鍵按下后,要有一定的延時(shí),防止由于鍵盤(pán)抖動(dòng)而引起誤操作。三、實(shí)驗(yàn)步驟及內(nèi)容1、用一根8位數(shù)據(jù)線連接陣列式鍵盤(pán)實(shí)驗(yàn)?zāi)K與LED與單片機(jī)接口模塊。無(wú)鍵按下或有鍵按下,發(fā)光二極管全亮。若將A1-A4接地,則發(fā)光二極管顯示0000XXXX;B1線上有鍵按下,則發(fā)光二極管顯示0000XXX,B2線上有鍵按下,則發(fā)光二極管現(xiàn)世0000X0XX,B1和B2均有鍵按下,則發(fā)光二極管顯示000000XX……同樣可將B1與B4接地,按鍵與發(fā)光二極管顯示情況,用戶可以自行判斷,自由操作。2、用一根8位數(shù)據(jù)線連接陣列式鍵盤(pán)實(shí)驗(yàn)?zāi)K與掃描顯示實(shí)驗(yàn)?zāi)K。無(wú)鍵按下或有鍵按下,八段LED全亮。用戶參照1,觀察鍵盤(pán)與八段LED亮熄的關(guān)系。3、使用靜態(tài)串行顯示模塊顯示鍵值。單片機(jī)最小應(yīng)用系統(tǒng)1的P1口接陣列式鍵盤(pán)的A1~B4口,P3.6接靜態(tài)數(shù)碼顯示DIN,P3.7接CLK。4、用串行數(shù)據(jù)通信線連接計(jì)算機(jī)與仿真器,把仿真器插到模塊的鎖緊插座中,請(qǐng)注意仿真器的方向:缺口朝上。5、打開(kāi)KeiluVision2仿真軟件,首先建立本實(shí)驗(yàn)的項(xiàng)目文件,接著添加陣列KEY.ASM源程序,進(jìn)行編譯,直到編譯無(wú)誤。6、進(jìn)行軟件設(shè)置,選擇硬件仿真,選擇串行口,設(shè)置波特率為38400。在鍵盤(pán)上按下某個(gè)鍵,觀察數(shù)顯是否與按鍵值一致。16位建盤(pán)的鍵值從左至右、從上至下依次為0~F(16進(jìn)制數(shù))。四、流程圖及源程序是否是否初始化地址參數(shù)輸出列掃描信號(hào)列掃描信號(hào)移位讀入行信號(hào)返回按照行列計(jì)算鍵值查表得鍵碼等待按鍵釋放返回開(kāi)始該列有鍵輸入?四列掃描完?開(kāi)始顯示緩沖區(qū)初始化開(kāi)始顯示緩沖區(qū)初始化LED顯示讀取鍵值鍵值轉(zhuǎn)換為顯示數(shù)據(jù)有鍵輸入?N主程序框圖2、源程序DBUFEQU30HTEMPEQU40HDINBITP3.6CLKBITP3.7ORG0000HLJMPSTARTORG0030HSTART:MOVA,#16MAIN:ACALLDISPMOV30H,AACALLKEY1AJMPMAINKEY1:MOVP1,#0FH;A1-A4輸出,B1-B4輸入,輸;入者對(duì)應(yīng)鎖存先寫(xiě)“1”MOVA,P1;讀取鍵盤(pán)狀況CJNEA,#0FH,K11;有鍵按下K10:AJMPKEY1;無(wú)鍵按下K11:ACALLDELAY;去抖動(dòng)MOVP1,#0FHMOVA,P1;再讀鍵盤(pán)狀況CJNEA,#0FH,K12;確有鍵盤(pán)按下SJMPK10;誤動(dòng)作K12:MOVB,A;存列值MOVP1,#0EFH;按鍵在Ai行MOVA,P1CJNEA,#0EFH,K13;鍵在A4MOVP1,#0DFHMOVA,P1CJNEA,#0DFH,K13;鍵在A3行MOVP1,#0BFHMOVA,P1CJNEA,#0BFH,K13;鍵在A2行MOVP1,#7FHMOVA,P1CJNEA,#7FH,K13;鍵在A1行AJMPK10;多鍵同時(shí)按下K13:ANLA,#0F0H;的行值ORLA,B;的按下鍵的行列值MOVB,A;暫存鍵值MOVR1,#16;16個(gè)鍵MOVR2,#0;鍵碼初值MOVDPTR,#K1TAB;鍵碼表首址K14:MOVA,R2MOVCA,@A+DPTR;從鍵值表中取鍵值CJNEA,B,K16;與按下鍵,鍵值比較MOVP1,#0FH;相等,則完成以下步驟K15:MOVA,P1CJNEA,#0FH,K15;等釋放ACALLDELAY;去抖動(dòng)MOVA,R2;得鍵碼RETK16:INCR2;不相等,則繼續(xù)訪問(wèn)鍵值表DJNZR1,K14AJMPK10;多鍵同時(shí)按下處理K1TAB:DB0EEH,0DEH,0BEH,07EH;鍵值表DB0EDH,0DDH,0BDH,07DHDB0EBH,0DBH,0BBH,07BHDB0E7H,0D7H,0B7H,077HDISP:MOVDBUF,AMOVDBUF+1,#16MOVDBUF+2,#16MOVDBUF+3,#16MOVDBUF+4,#16MOVR0,#DBUFMOVR1,#TEMPMOVR2,#5DP10:MOVDPTR,#SEGTABMOVA,@R0MOVCA,@A+DPTRMOV@R1,AINCR0INCR1DJNZR2,DP10MOVR0,#TEMPMOVR1,#5DP12:MOVR2,#8MOVA,@R0DP13:RLCAMOV0B0H,CCLR0B1HSETB0B1HDJNZR2,DP13INCR0DJNZR1,DP12RETSEGTAB:;段碼表DB3FH,06H,5BH,4FH,66H,6DH;“0,1,2,3,4,5”DB7DH,07H,7FH,6FH,77H,7CH;“6,7,8,9,A,b”DB58H,5EH,79H,71H,00H,40H;“C,d,E,F(xiàn),,-”DELAY:MOVR4,#02HAA1:MOVR5,#0F8HAA:NOPDJNZR5,AADJNZR4,AA1RETEND五、思考題1、字符與段碼的軟件實(shí)驗(yàn)程序已很清楚,問(wèn)LED數(shù)碼顯示器是共陰極還是共陽(yáng)極,對(duì)SEGTAB的影響如何?2、程序如何確保每按一次鍵,只處理一次。六、原理圖實(shí)驗(yàn)九計(jì)數(shù)器實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?.學(xué)習(xí)80C51內(nèi)部定時(shí)/計(jì)數(shù)器使用方法2.學(xué)習(xí)計(jì)數(shù)器各種工作方式的用法二、實(shí)驗(yàn)儀器計(jì)算機(jī)仿真器實(shí)驗(yàn)箱三、實(shí)驗(yàn)內(nèi)容及步驟1、使用單片機(jī)最小應(yīng)用系統(tǒng)模塊,用扁平數(shù)據(jù)線連接P0口與八位邏輯電平顯示模塊,T0端口接單次脈沖電路的輸出端。2、用串行數(shù)據(jù)通信線連接計(jì)算機(jī)與仿真器,把仿真器插到模塊的鎖緊插座中,請(qǐng)注意仿真器的方向:缺口朝上。3、打開(kāi)KeiluVision2仿真軟件,首先建立本實(shí)驗(yàn)的項(xiàng)目文件,接著添加計(jì)數(shù)器.ASM源程序,進(jìn)行編譯,直到編譯無(wú)誤。4、進(jìn)行軟件設(shè)置,選擇硬件仿真,選擇串行口,設(shè)置波特率為38400。5、打開(kāi)模塊電源和總電源,點(diǎn)擊開(kāi)始調(diào)試按鈕,點(diǎn)擊RUN按鈕運(yùn)行程序。連續(xù)按動(dòng)單次脈沖的按鍵,8位發(fā)光二極管顯示按鍵次數(shù)。四、流程圖及源程序ORG0000HLJMPSTARTORG0030HSTART:MOVTMOD,﹟00000101bMOVTH0,﹟0MOVTL0,﹟0SETBTR0LOOP:MOVP0,TL0LJMPLOOPEND五、思考題1、如何將當(dāng)前的按一下滅一個(gè)燈改為按一下亮一個(gè)燈?六、實(shí)驗(yàn)電路實(shí)驗(yàn)十定時(shí)器實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?、學(xué)習(xí)80C51內(nèi)部計(jì)數(shù)器的使用和編程方法2、進(jìn)一步掌握中斷處理程序的編寫(xiě)方法二、實(shí)驗(yàn)說(shuō)明關(guān)于內(nèi)部計(jì)數(shù)器的編程主要是定時(shí)常數(shù)的設(shè)置和有關(guān)控制寄存器的設(shè)置。內(nèi)部計(jì)數(shù)器在單片機(jī)中主要有定時(shí)器和計(jì)數(shù)器兩個(gè)功能。本實(shí)驗(yàn)使用的是定時(shí)器,定時(shí)為一秒鐘。CPU運(yùn)用定時(shí)中斷方式,實(shí)現(xiàn)每一秒鐘輸出狀態(tài)發(fā)生一次反轉(zhuǎn),即發(fā)光管每隔一秒鐘亮一次。定時(shí)器有關(guān)的寄存器有工作方式寄存器TMOD和控制寄存器TCON。TMOD用于設(shè)置定時(shí)器/計(jì)數(shù)器的工作方式0-3,并確定用于定時(shí)還是用于計(jì)數(shù)。TCON主要功能是為定時(shí)器在溢出時(shí)設(shè)定標(biāo)志位,并控制定時(shí)器的運(yùn)行或停止等。內(nèi)部計(jì)數(shù)器用作定時(shí)器時(shí),是對(duì)機(jī)器周期計(jì)數(shù)。每個(gè)機(jī)器周期的長(zhǎng)度是12個(gè)振蕩器周期。因?yàn)閷?shí)驗(yàn)系統(tǒng)的晶振是12MHZ,本程序工作于方式2,即8位自動(dòng)重裝方式定時(shí)器,定時(shí)器100uS中斷一次,所以定時(shí)常數(shù)的設(shè)置可按以下方法計(jì)算:機(jī)器周期=12÷6MHz=1Us(256-定時(shí)常數(shù))×1uS=100uS定時(shí)常數(shù)=156。然后對(duì)100uS中斷次數(shù)計(jì)數(shù)10000次,就是1秒鐘。在本實(shí)驗(yàn)的中斷處理程序中,中斷定時(shí)常數(shù)的設(shè)置對(duì)中斷程序的運(yùn)行起到關(guān)鍵作用,所以在置數(shù)前要先關(guān)對(duì)應(yīng)的中斷,置數(shù)完之后再打開(kāi)相應(yīng)的中斷。三、實(shí)驗(yàn)內(nèi)容及步驟1、用導(dǎo)線連接單片機(jī)最小應(yīng)用系統(tǒng)1的P1.0到單只發(fā)光二極管上。2、用串行數(shù)據(jù)通信線連接計(jì)算機(jī)與仿真器,把仿真器插到模塊的鎖緊插座中,請(qǐng)注意仿真器的方向:缺口朝上。3、打開(kāi)KeiluVision2仿真軟件,首先建立本實(shí)驗(yàn)的項(xiàng)目文件,接著添加定時(shí)器.ASM源程序,進(jìn)行編譯,直到編譯無(wú)誤。4、進(jìn)行軟件設(shè)置,選擇硬件仿真,選擇串行口,設(shè)置波特率為38400。5、打開(kāi)模塊電源和總電源,點(diǎn)擊開(kāi)始調(diào)試按鈕,點(diǎn)擊RUN按鈕運(yùn)行程序。發(fā)光二極管隔一秒點(diǎn)亮一次,點(diǎn)亮?xí)r間為一秒。是否是否中斷返回定時(shí)中斷入口狀態(tài)位取反保護(hù)現(xiàn)場(chǎng)恢復(fù)現(xiàn)場(chǎng)秒計(jì)數(shù)值減1重新設(shè)置秒計(jì)數(shù)值是否到一秒開(kāi)始輸出狀態(tài)位中斷允許開(kāi)始輸出狀態(tài)位中斷允許設(shè)置秒計(jì)數(shù)值設(shè)置初始狀態(tài)位設(shè)置定時(shí)常數(shù)置T1中斷工作方式等待中斷主程序框圖定時(shí)中斷子程序框圖定時(shí)中斷子程序框圖2、源程序TICKEQU10000;10000×100uS=1ST100uSEQU256-100;100uS時(shí)間常數(shù)(12M)C100uSEQU30H;100uS記數(shù)單元LEDBUFEQU40HLEDBITP1.0ORG0000HLJMPSTART;跳至主程序ORG000BHLJMPTOINT;跳至子程序ORG0030HT0INT:PUSHPSW;狀態(tài)保護(hù)MOVA,C100uS+1JNZGOONDECC100uS;秒計(jì)數(shù)值減1GOON:DECC100uS+1MOVA,C100uSORLA,C100uS+1JNZEXI

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論