華中科技大學(xué)單片機(jī)實(shí)驗(yàn)實(shí)驗(yàn)報告MCS51單片機(jī)_第1頁
華中科技大學(xué)單片機(jī)實(shí)驗(yàn)實(shí)驗(yàn)報告MCS51單片機(jī)_第2頁
華中科技大學(xué)單片機(jī)實(shí)驗(yàn)實(shí)驗(yàn)報告MCS51單片機(jī)_第3頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、華中科技大學(xué)單片機(jī)實(shí)驗(yàn)報告MCS-51系列單片機(jī)(單片機(jī)原理及應(yīng)用實(shí)驗(yàn))(根據(jù)2014年電氣與電子工程學(xué)院單片機(jī)實(shí)驗(yàn)課程改編)專業(yè):電氣工程及其自動化班級:氣卓1301姓名:廖鵬毅學(xué)號:ALL RIGHT RESERVED目 錄實(shí)驗(yàn)3.1 軟件仿真實(shí)驗(yàn)3實(shí)驗(yàn)2 “跑馬燈”實(shí)驗(yàn) 8實(shí)驗(yàn)3數(shù)碼管顯示功能的實(shí)現(xiàn)11實(shí)驗(yàn)5按鍵功能的實(shí)現(xiàn)23實(shí)驗(yàn)7 A/D轉(zhuǎn)換器件TLC1543的用 29實(shí)驗(yàn)8 D/A轉(zhuǎn)換器件TLV5617的應(yīng)用 34實(shí)驗(yàn)14指示燈的外部中斷控制 47實(shí)驗(yàn)18定時器控制繼電器 49自行設(shè)計(jì)實(shí)驗(yàn)53實(shí)驗(yàn)總結(jié) 55實(shí)驗(yàn)3.1軟件仿真實(shí)驗(yàn)一實(shí)驗(yàn)?zāi)康膇掌握軟件仿真的方法2熟悉集成開發(fā)環(huán)境的使用3

2、熟悉常用指令的功能4熟悉程序調(diào)試的方法5學(xué)習(xí)自己編寫、調(diào)試計(jì)算機(jī)程序二實(shí)驗(yàn)內(nèi)容1將Keil軟件設(shè)置為軟件仿真的方式2將介紹的示例程序錄入、編譯、調(diào)試3觀察有關(guān)寄存器、變量的值,理解程序及指令的功能4編譯、調(diào)試、驗(yàn)證自己編寫的子程序三實(shí)驗(yàn)步驟1先閱讀課本,大致了解仿真軟件的使用和注意事項(xiàng)2結(jié)合課本,邊看書邊上機(jī)操作,逐步了解和掌握仿真軟件的使用3閱讀和理解介紹的示例程序,并將其錄入、編譯、調(diào)試4賦值給示例程序時,打開各觀察窗口,觀察有關(guān)寄存器、變量的值,驗(yàn)證其功能5自行編譯、調(diào)試、驗(yàn)證自己編寫的子程序四實(shí)驗(yàn)結(jié)果1給十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)子程序賦初值,MOV H_DAT0,#01HMOV H_D

3、AT1,#00H則編譯加載調(diào)試該子程序,打開各觀察窗口觀察有關(guān)變量,實(shí)驗(yàn)發(fā)現(xiàn) D_DAT0,D_DAT1,D_DAT2,D_DAT3 中的值分別為 00,00,00,01。則符合實(shí)際,即驗(yàn)證其功能。2給雙字節(jié)乘法運(yùn)算子程序賦初值,MOV R4,#8MOV R5,#9MOV R6,#6MOV R7,#7然后編譯加載調(diào)試該子程序,并用觀察窗口觀察有關(guān)變量,實(shí)驗(yàn)發(fā)現(xiàn)MUL_0,MUL_1,MUL_2,MUL_3 分別為08,04, 04,07.則符合實(shí)際,即驗(yàn)證其功能。3給三字節(jié)數(shù)除雙字節(jié)數(shù)運(yùn)算子程序賦初值,MOV ODIV_H,#00HMOV ODIV_M,#00HMOV ODIV_L,#01HM

4、OV DIV_1,#00HMOV DIV_0,#01H接著編譯加載調(diào)試該子程序,并用觀察窗口觀察有關(guān)變量,實(shí)驗(yàn)發(fā)現(xiàn)R0,R1,R3,R4,R5中的值分別為00,00,00,00,01,則實(shí)驗(yàn)驗(yàn)證其功能。五實(shí)驗(yàn)小結(jié)本次實(shí)驗(yàn),我初步了解仿真軟件的使用,同時掌握了編譯、加載、調(diào)試程序的方法以及驗(yàn)證實(shí)驗(yàn)結(jié)果的方法附:示例程序含主程序十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)子程序雙字節(jié)乘法運(yùn)算子程序三字節(jié)數(shù)除雙字節(jié)數(shù)運(yùn)算子程序D_DA T0EQU50HD_DAT1EQUD_DAT0+1D_DA T2EQUD_DAT1 + 1D_DA T3EQUD_DAT2+1H_DA T0EQUD_DAT3+1H_DAT1EQUH_D

5、AT0+1ODIV_LEQUH_DAT1 + 1ODIV_MEQUODIV_L+1ODIV_HEQUODIV_M+1DIV_0EQUODIV_H+1DIV_1EQUDIV_0+1MUL_0EQUDIV_1+1MUL_1EQUMUL_0+1MUL_2EQUMUL_1+1MUL 3EQUMUL 2+1ORG0000HAJMPSTARTORG0030HSTART:MOV SP,#30H;在此處給有關(guān)變量單元賦值MOV H_DAT1,#2MOV H_DAT0,#0 LCALL HTD;在此處給有關(guān)變量單元賦值LCALL TMUL;在此處給有關(guān)變量單元賦值LCALL SDIVLOOP:NOPAJMP L

6、OOPMOVD_DAT2,#00HMOVD_DAT1,#00HMOVD_DAT0,#00H;以上將各位結(jié)果存儲單元清0CLR C;進(jìn)位位C清0MOVA,H_DA T0;源數(shù)據(jù)低位裝載到累加器A中MOVR6,A;備份源數(shù)值低位到寄存器R6中SUBBA,#0E8H;源數(shù)值低位減去1000的低位0E8HMOVH_DAT0,A;余數(shù)存回到源數(shù)值低位存儲單兀MOVA,H_DAT1;源數(shù)值高位裝載到累加器A中MOVR7,A;備份源數(shù)值高位到寄存器R7中SUBBA,#03H;源數(shù)值高位帶借位減 1000的高位03HMOVH_DAT1,A;余數(shù)存回到源數(shù)值低位存儲單兀INC D_DA T3;千位增1H1000

7、:MOV D_DAT3,#00H;將結(jié)果千位清 0JNC H1000;如果沒有借位則利用余數(shù)循環(huán)再減MOVH_DAT0,R6MOVH_DAT1,R7;用備份值作為新的源數(shù)值(余數(shù))DECD_DAT3;千位數(shù)減1,去掉最后一次無效減的影響MOVA,H_DAT0;源數(shù)值低位裝載到累加器A中MOVR6,A;備份源數(shù)值低位到寄存器 R6中CLR C;清0進(jìn)位位CSUBBA,#100;減去100MOVH_DAT0,A;存回余數(shù)低位MOVA,H_DAT1;取源數(shù)值高位SUBBA,#00H;減100的高位0,實(shí)際上是減去借位位MOVH_DAT1,A;存回余數(shù)咼位H100:;有借位表明為最后一次無效減;程序順

8、序執(zhí)行,應(yīng)還原最后一次修改值JC H10;有借位則跳到下一步繼續(xù)運(yùn)算INC D_DA T2;沒有借位,百位增1AJMP H100;沒有借位繼續(xù)減;注意本輪循環(huán)中最后一次減時百位未增1HTD:;所以不存在還原的問題;進(jìn)入下一輪時,源數(shù)值(余數(shù))都在 R6中H10:CLR CMOV A,R6;源數(shù)值(低位)裝載到累加器A中;到此源數(shù)值高位已經(jīng)為 0,不用再參加計(jì)算MOVD_DAT0,A;存回源數(shù)值低位;如果是最后一次減,則此值即為個位SUBBA,#10;減去 10MOVR6,A;保存余數(shù)JC H1;有借位,運(yùn)算結(jié)束INC D_DA T1;沒有借位 汁位增1H1:TMUL:LAST:LJMP H10

9、;沒有借位繼續(xù)減RET;子程序返回MOV A,R6SDIVO:MOV B,R4MULAB,第次乘法MOVMUL_0,A;第一次乘法結(jié)果低位存到MUL_0(最終結(jié)果)MOVR3,B;第一次乘法結(jié)果高位暫存在R3中MOVA,R4MOVB,R7MULAB;第一次乘法ADDA,R3;第二次乘法結(jié)果低位加第一次乘法結(jié)果的高位MOVR3,A;所得第一次加法結(jié)果低位暫存到R3中MOVA,BADDCA,#00H;第二次乘法結(jié)果高位加進(jìn)位位CMOVR2,A;所得第一次加法結(jié)果高位暫存到R2中MOVA,R6MOVB,R5MULAB;第三次乘法ADDA,R3;第三次乘法結(jié)果低位加 R3MOVMUL_1,A;第二次加

10、法結(jié)果低位存到MUL_1(最終結(jié)果)MOVR1,#00H;第二次加法高位進(jìn)位值清 0MOVA,R2ADDCA,B;第三次乘法結(jié)果高位加R2及進(jìn)位位CMOVR2,A;第二次加法結(jié)果高位暫存R2JNC LAST;沒有進(jìn)位則跳轉(zhuǎn)(R仁0)MOVR1,#1;有進(jìn)位,第二次加法高位進(jìn)位值為1MOV A,R7MOVB,R5MULAB;第四次乘法ADDA,R2;第四次乘法結(jié)果低位加R2MOVMUL_2,A;第三次加法結(jié)果低位存到 MUL_2(最終結(jié)果)MOVA,BADDCA,R1;第四次乘法高位加第二次加法高位進(jìn)位值R1;及第三次加法低位進(jìn)位位CMOVRETMUL_3,A;第三次加法結(jié)果咼位存到MUL_3中

11、(最終結(jié)果)MOV'R0,#00HMOVR1,#00H;清0過渡單元MOVR2,#24;因被除數(shù)有三個字節(jié)(24 位),所以循環(huán)24次SDIV:CLR C;清0進(jìn)位位CMOVA,ODIV_L;(ODIV_L ARLC A;A中的值帶進(jìn)位位C左移1位MOVODIV_L,A;(AODIV_L,移位后存回MOVA,ODIV_MRLC AMOVODIV_M,AMOVA,ODIV_HRLC AMOVODIV_H,A;以上將被除數(shù)左移一位,最高位在進(jìn)位位MOVA,R0RLC AMOVR0,A;R0的值帶進(jìn)位左移后存回MOVR6,A;備份R0的值在R6中MOVA,R1RLC AMOVR1,A;R1的

12、值帶進(jìn)位左移后存回MOVR7, A;備份R1的值在R7中;以上實(shí)現(xiàn)Z和X 一起左移1位;并把Z中的值備份了一份CLR CMOVA,R0SUBBA,DIV_0MOVR0,AMOVA,R1SUBBA,DIV_1MOVR1,A;以上將Z減Y后差值寫回Z中JNC SDIV1;沒有借位(夠減)則跳轉(zhuǎn),用差值繼續(xù)計(jì)算MOVA,R6MOVR0,AMOVA,R7MOVR1,A;有借位,不夠減,用備份值取代差值,即不減CPL C;借位C取反即為商。C為0,夠減,商1MOVA,R5RLC AMOVR5,AMOVA,R4RLC AMOVR4,AMOVA,R3RLC AMOVR3,A;以上將商移入 R3、R4、R5中

13、DJNZR2,SDIV0;按R2中的值,循環(huán)24次SDIV1:RETC中END實(shí)驗(yàn)2“跑馬燈”實(shí)驗(yàn)一實(shí)驗(yàn)?zāi)康膇 了解發(fā)光二極管的使用方法2熟悉串行、并行輸出擴(kuò)展接口的方法3學(xué)習(xí)常用指令用法和簡單程序編寫技巧二實(shí)驗(yàn)內(nèi)容1理解圖的電路原理和參考程序2按圖431連接電路,調(diào)試參考程序,單步執(zhí)行每行指令,觀察有關(guān)寄存器中值的變化, 理解指令的功能和執(zhí)行效果三實(shí)驗(yàn)步驟1先閱讀課本,理解原理和程序2按圖接線,然后編譯加載調(diào)試程序,觀察實(shí)驗(yàn)現(xiàn)象,是否出現(xiàn)“跑馬燈”四實(shí)驗(yàn)結(jié)果接好線,并運(yùn)行程序后,8個燈依次循環(huán)閃亮,出現(xiàn)“跑馬燈”,驗(yàn)證其功能。五實(shí)驗(yàn)小結(jié)理解I/O 口的使用,以及發(fā)光二極管的使用和原理附:跑馬

14、燈子程序:LIGHT-S跑馬燈串行LIGHTEQU60H;定義指示燈數(shù)據(jù)存放地址單元SIO EQU P2.0;串行移位數(shù)據(jù)SCLKEQUP2.1;串行移位時鐘信號SRCLKEQUP2.2;輸出鎖存信號ORG0000HAJMP STARTORG 0030HSTART: MOV SP,#30H ;初始化堆棧指針CLR SIOCLR SCLKCLR SRCLKMOV LIGHT,#01H ;初始化指示燈輸出數(shù)據(jù)NOPMAIN: LCALL FLYLED;調(diào)用指示燈循環(huán)點(diǎn)亮子程序LCALL DELAY;延時子程序同參考例程一AJMPMAIN;循環(huán)執(zhí)行主程序*J;通過595循環(huán)點(diǎn)亮指示燈子程序*FLYL

15、ED:MOV A,L IGHTCLR CRLC A;A中最高位移到CCPL C因低電平點(diǎn)亮,故取反MOV SIO,C;LIGHT中數(shù)據(jù)最高位送到 SER輸入端SETB SCLKNOPCLR SCLK;產(chǎn)生一個移位脈沖SETB SRCLKNOPCLR SRCLK產(chǎn)生一個輸出鎖存脈沖CJNE A,#O,FLYCON ;A中不為0則繼續(xù)MOV A,#0伯;A中為0,表明循環(huán)完一輪;重新賦初值FLYCON:MOV LIGHT,ARET*J;延時子程序*DELAY:MOVR7,#80HDELY1:MOVR6,#0FFHDELY2:DJNZR6,$;$代表當(dāng)前行;作用與DJNZ R6,DELY2相冋DJN

16、Z R7,DELY1LED-P跑馬燈并行LIGHT EQU 60H;定義指示燈數(shù)據(jù)存放地址單元ORG 0000HAJMP STARTORG 0030HSTART: MOV SP,#30H;初始化堆棧指針JCLR P1.0初始化有關(guān)I/O 口MOV LIGHT,#01H ;初始化指示燈數(shù)據(jù)NOPMAIN: LCALL FLYLED;調(diào)用指示燈循環(huán)點(diǎn)亮子程序LCALL DELAY;延時子程序AJMPMAIN;死循環(huán)*;通過374循環(huán)點(diǎn)亮指示燈子程序*JFLYLED:MOVA,L IGHTCPL A因?yàn)榈碗娖近c(diǎn)亮,故取反MOV P0,A;LIGHT中數(shù)據(jù)送到374的輸入端;(因P1 口與374輸入端

17、相連)SETB P1.0NOPCLR P1.0;產(chǎn)生一個鎖存脈沖;將數(shù)據(jù)鎖存到374中輸出MOVA,L IGHTCLR CRLC A ;ACC中數(shù)據(jù)左移一位;(高位丟到,低位補(bǔ)0)CJNE A,#0,FLYCON;A中不為0則繼續(xù)MOVA,#0伯;A中為0,循環(huán)完一輪;重新賦初值FLYCON:MOV LIGHT,ARET*J;延時子程序*DELAY:MOVR7,#80HDELY1:MOVR6,#0FFHDELY2:DJNZR6,$;$代表當(dāng)前行;與 DJNZ R6QELY2 相同DJNZR7QELY1RETEND實(shí)驗(yàn)3數(shù)碼管顯示功能的實(shí)現(xiàn)一實(shí)驗(yàn)?zāi)康膇 了解數(shù)碼管顯示器的特性和使用方法2進(jìn)一步熟

18、悉常用指令和編程技巧3熟悉單片機(jī)I/O 口的使用方法二實(shí)驗(yàn)內(nèi)容1對照圖433和圖434、圖435,理解圖433所示的電路原理2讀懂參考例程一和參考例程二3分別驗(yàn)證參考例程一和參考例程二4利用試驗(yàn)箱通用板上的電路模塊,自行設(shè)計(jì)一套 4位數(shù)碼管顯示器的并行動態(tài)顯示電路三實(shí)驗(yàn)步驟1首先閱讀課本,理解相關(guān)原理和程序運(yùn)行2調(diào)試示例程序,觀察現(xiàn)象3根據(jù)所學(xué)知識,編寫一套4位數(shù)碼管顯示器的并行動態(tài)顯示電路四實(shí)驗(yàn)結(jié)果1調(diào)試示例程序,結(jié)果都出現(xiàn)6位靜態(tài)顯示2自行編寫一套4位數(shù)碼管顯示器的并行動態(tài)顯示電路子程序:MOV A,R0MOV DPTR,#DISPDMOV A,A+DPTRMOV P0,ASETB P1.

19、1NOPCLR P1.1INC ROLCALL DELAYCJNE R0,#0AH,DISPMOV R0,#00HNOPRET調(diào)試后,可以4位數(shù)碼管顯示器的并行動態(tài)顯示電路五實(shí)驗(yàn)總結(jié)進(jìn)一步了解I/O 口的使用,掌握串行和并行的區(qū)別和使用,以及數(shù)碼管的原理和使用附:參考程序LED-S-P數(shù)碼管顯示功能的實(shí)現(xiàn)(并行動態(tài)顯示參考程序 1)D_DA T0 EQU6AHD_DAT1 EQU6BHD_DA T2 EQU6CHD_DA T3 EQU6DHD_DA T4 EQU6EHD_DA T5 EQU6FH;定義顯示數(shù)據(jù)存儲單元DATA_O EQUP0;定義顯示數(shù)據(jù)輸出口PLED1 EQUP2.0PLED

20、2 EQUP2.1PLED3 EQUP2.2PLED4 EQUP2.3;以上定義四片574輸出鎖存信號ORG0000HAJMP STARTORG 0030HSTART: MOV SP,#30H;初始化堆棧指針MOV D_DAT0,#0MOV D_DAT1,#1MOV D_DAT2,#2MOV D_DAT3,#3MOVD_DAT4,#4MOVD_DA T5,#5 ;初始化顯示數(shù)據(jù)CLR PLED1CLR PLED2CLR PLED3CLR PLED4NOPMAIN:LCALL DISP;調(diào)用數(shù)碼管循環(huán)點(diǎn)亮子程序LOOP: AJMPLOOP;循環(huán)執(zhí)行主程序*J;通過574顯示6位數(shù)字子程序*JDI

21、SP:MOV R0,#D_DAT0MOV A,R0;取需顯示的數(shù)字MOVDPTR,#DISPD;裝載筆畫編碼表首地址MOVCA,A+DPTR ;取需顯示數(shù)字筆畫代碼XRLA,#0FFHMOVDATA_O,A;筆畫代碼送到P0 口SETBPLED1NOPCLR PLED1產(chǎn)生一個鎖存脈沖,鎖存筆畫代碼INC RO;R0增1指向下一個需顯示數(shù)字MOVA,R0;取需顯示的數(shù)字MOVDPTR,#DISPD;裝載筆畫編碼表首地址MOVCA,A+DPTR ;取需顯示數(shù)字筆畫代碼XRLA,#0FFHMOVDATA_O,A;筆畫代碼送到P0 口SETBPLED2NOPCLR PLED2產(chǎn)生一個鎖存脈沖,鎖存筆

22、畫代碼INC R0;R0增1指向下一個需顯示數(shù)字MOVA,R0;取需顯示的數(shù)字MOVDPTR,#DISPD;裝載筆畫編碼表首地址MOVCA,A+DPTR ;取需顯示數(shù)字筆畫代碼XRLA,#0FFHMOVDATA_O,A;筆畫代碼送到P0 口SETBPLED3NOPCLR PLED3產(chǎn)生一個鎖存脈沖,鎖存筆畫代碼INC R0;R0增1指向下一個需顯示數(shù)字MOVA,R0;取需顯示的數(shù)字MOVDPTR,#DISPD;裝載筆畫編碼表首地址MOVCA,A+DPTR ;取需顯示數(shù)字筆畫代碼XRLA,#0FFHMOVDATA_O,A;筆畫代碼送到P0 口SETBPLED4NOPCLR PLED4產(chǎn)生一個鎖存

23、脈沖,鎖存筆畫代碼RET;數(shù)字筆畫代碼表0123456789 熄DISPD: DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,0END并行動態(tài)顯示參考程序 2LIGHT EQU 60H;定義指示燈數(shù)據(jù)存放地址單元SIO EQU P2.0;串行移位數(shù)據(jù)SCLKEQUP2.1;串行移位時鐘信號SRCLK EQUP2.2;輸出鎖存信號ORG 0000HAJMP STARTORG 0030HSTART: MOV SP,#30H ;初始化堆棧指針CLR SIOCLR SCLKCLR SRCLKMOV LIGHT,#01H ;初始化指示燈輸出數(shù)據(jù)NOPMAIN:LCAL

24、L FLYLED;調(diào)用指示燈循環(huán)點(diǎn)亮子程序LCALL DELAY;延時子程序同參考例程一AJMPMAIN;循環(huán)執(zhí)行主程序*J;通過595循環(huán)點(diǎn)亮指示燈子程序*FLYLED:MOVA,L IGHTCLR CRLC A;A中最高位移到CCPL C因低電平點(diǎn)亮,故取反MOV SIO,C;LIGHT中數(shù)據(jù)最高位送到 SER輸入端SETB SCLKNOPCLR SCLK;產(chǎn)生一個移位脈沖SETB SRCLKNOPCLR SRCLK產(chǎn)生一個輸出鎖存脈沖CJNE A,#O,FLYCON ;A中不為0則繼續(xù)MOV A,#0伯;A中為0,表明循環(huán)完一輪;重新賦初值FLYCON:MOV LIGHT,ARET*J;

25、延時子程序*DELAY:MOVR7,#80HDELY1:MOVR6,#0FFHDELY2:DJNZR6,$;$代表當(dāng)前行;作用與DJNZ R6QELY2相同DJNZ R7,DELY1RETENDORG 0030HSTART: MOV SP,#30H并行動態(tài)顯示參考程序 3:D_DA T0 EQU6AHD_DAT1 EQU6BHD_DA T2 EQU6CHD_DA T3 EQU6DHD_DA T4 EQU6EHD_DA T5 EQU6FHD_DA T6 EQU70HORG0000H;定義顯示數(shù)據(jù)單元AJMP STARTMOVMOVMOVMOVMOVMOVMOVD_DAT0,#0D_DAT1,#1

26、D_DAT2,#2D_DAT3,#3D_DAT4,#4D_DAT5,#5 ;初始化顯示數(shù)據(jù)P0,#0;初始化堆棧指針CLR P1.1初始化有關(guān)I/O 口CLR P1.2R0,#D_DAT0R1,#01HMOVMOVNOPMAIN:LCALL DISPLCALL DELAY;初始化顯示指針寄存器;R0指向第一位顯示數(shù)字;初始化需點(diǎn)亮數(shù)碼管位置代碼AJMP MAIN;調(diào)用數(shù)碼管循環(huán)點(diǎn)亮子程序;延時子程序同前,應(yīng)修改延時長度;循環(huán)執(zhí)行主程序DISP:MOV A,R1;取位代碼MOV P0,A位代碼送P0 口SETB P1.2NOPCLR P1.2;產(chǎn)生一個鎖存脈沖,鎖存位代碼MOV A,R0;取需顯

27、示的數(shù)字MOV DPTR,#DISPD;裝載筆畫編碼表首地址MOVC A,A+DPTR ;取需顯示數(shù)字筆畫代碼MOV P0,A;筆畫代碼送到 P0 口SETB P1.1NOPCLR P1.1;產(chǎn)生一個鎖存脈沖,鎖存筆畫代碼INC R0;R0增1指向下一個需顯示數(shù)字MOV A,R1CLR CRLC AMOV R1,A;R1中的值左移1位,指向下一位數(shù)碼管CJNER0,#70H,DISP1;R0中不為 70H 則繼續(xù)MOVR0,#D_DAT0 ;R0 中為 70H,循環(huán)完一輪;重新賦初值MOVR1,#1;位置代碼初值DISP1: NOPRET;數(shù)字筆畫代碼表;0123456789 熄DISPD:D

28、B3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,0DELAY:MOVR7,#40HDELY1:MOVR6,#0FHDELY2:DJNZR6,$;$代表當(dāng)前行;與 DJNZ R6,DELY2 相同DJNZRETENDR7,DELY1串行動態(tài)顯示參考程序1 :D_DA T0 EQU6AHD_DAT1 EQU6BHD_DA T2 EQU6CHD_DA T3 EQU6DHD_DAT4 EQU6EHD_DAT5 EQU6FH;定義顯示數(shù)據(jù)單元D_DA T6 EQU 70HORG 0000HAJMPSTARTORG0030HSTART: MOV SP,#30H;初始化堆棧

29、指針MOVMOVMOVMOVMOVMOVMOVD_DAT0,#0D_DAT1,#1D_DAT2,#2D_DAT3,#3D_DAT4,#4D_DAT5,#5 ;初始化顯示數(shù)據(jù)P0,#0CLR P1.1初始化有關(guān)I/O 口CLR P1.2MOVR0,#D_DAT0 ;初始化顯示指針寄存器;R0指向第一位顯示數(shù)字MOVNOPR1,#01H;初始化需點(diǎn)亮數(shù)碼管位置代碼MAIN:LCALL DISP;調(diào)用數(shù)碼管循環(huán)點(diǎn)亮子程序LCALLAJMPDELAY;延時子程序同前,應(yīng)修改延時長度MAIN;循環(huán)執(zhí)行主程序*J;通過574顯示6位數(shù)字子程序*JDISP:MOV A,R1;取位代碼MOVSETBNOPP0

30、,A;位代碼送P0 口P1.2CLR P1.2;產(chǎn)生一個鎖存脈沖,鎖存位代碼MOVMOVMOVCMOVSETBA,R0;取需顯示的數(shù)字DPTR,#DISPD;裝載筆畫編碼表首地址A,A+DPTR ;取需顯示數(shù)字筆畫代碼P0,A;筆畫代碼送到 P0 口P1.1串行動態(tài)顯示參考程序 2:(本程序?qū)嶒?yàn)時來不及執(zhí)行,不知是否正確)D_DA T0 EQU6AHD_DAT1 EQU6BHD_DA T2 EQU6CHD_DA T3 EQU6DHD_DA T4 EQU6EHD_DA T5 EQU6FH;定義顯示數(shù)據(jù)單元D_DA T6 EQU70HORG;0000HAJMPSTARTORG0030HSTART:

31、 MOVSP,#30H;初始化堆棧指針MOVD_DAT0,#0MOVD_DAT1,#1MOVD_DAT2,#2MOVD_DA T3,#3;初始化顯示數(shù)據(jù)MOVD_DAT4,#4MOVD_DAT5,#5CLR P1.3;SER引腳CLR P1.1;SCLK引腳CLR P1.2;SRCLK引腳;初始化有關(guān)I/O 口MOVR0,#D DAT0 ;初始化數(shù)據(jù)指針;R0指向第一位顯示數(shù)字MOVR1,#01H;初始化需點(diǎn)亮數(shù)碼管位置代碼NOPMAIN:LCALL DISP;調(diào)用指示燈循環(huán)點(diǎn)亮子程序;LCALLDELAY;延時子程序同前NOPAJMPMAIN;死循環(huán)*;通過595顯示4位數(shù)字子程序*DISP

32、:MOV A,R1;取位代碼數(shù)據(jù)MOV R2,#8DISP1: CLR CRLC AMOV P1.3,C;位代碼送到SER的輸入端SETB P1.1NOPCLR P1.1;產(chǎn)生一個輸入鎖存脈沖DJNZ R2,DISP1儂次將8位位代碼移入;實(shí)際只有6位有用MOV A,R0;取需顯示的數(shù)字MOV DPTR,#DISPD;筆畫編碼表同前MOVC A,A+DPTR ;取需顯示數(shù)字筆畫代碼MOV R2,#8DISP3: SETBCLR P1.2RET;數(shù)字筆畫代碼表3456789 熄DISP2: CLR CRLC AMOVP1.3,C;筆畫代碼送到 SER的輸入端SETBP1.1NOPCLR P1.1

33、產(chǎn)生個輸入鎖存脈沖DJNZR2,DISP2;依次將8位筆畫代碼(段代碼)移入INC RO;R0增1指向下一個需顯示數(shù)字MOVA,R1CLR CRLC AMOVR1,A;R1中的值左移1位,指向下一位數(shù)碼管CJNER0,#070H,DISP3;R0 中不為 70H 則繼續(xù)MOVR0,#D_DAT0MOVR1,#01H;R0中為70H,循環(huán)完一輪 重新賦初值P1.2DISPD:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,0DELAY:MOVR7,#80HDELY1:MOVR6,#0FFHDELY2:DJNZR6,$;$代表當(dāng)前行0;與DJNZ R6,DELY

34、2 相同1 2DJNZ R7,DELY1RETEND實(shí)驗(yàn)任務(wù):要讓低次位 LED數(shù)碼管顯示中總帶有小數(shù)點(diǎn)即顯示的六位數(shù)值中總帶有一位小數(shù) ,請編程實(shí)現(xiàn):D_DA T0 EQU6AHD_DAT1 EQU6BHD_DA T2 EQU6CHD_DA T3 EQU6DHD_DA T4 EQU6EHD_DA T5 EQU6FH;定義顯示數(shù)據(jù)單元D_DA T6 EQU70HORG;0000HAJMPSTARTORG0030HSTART: MOVSP,#30H;初始化堆棧指針MOVD_DAT0,#0MOVD_DAT1,#1MOVD_DAT2,#2MOVD_DAT3,#3MOVD_DAT4,#4MOVD_DA

35、T5,#5 ;初始化顯示數(shù)據(jù)MOVP0,#0CLR P1.1;初始化有關(guān)I/O 口CLR P1.2MOVR0,#D_DAT0 ;初始化顯示指針寄存器;R0指向第一位顯示數(shù)字MOVR1,#01H;初始化需點(diǎn)亮數(shù)碼管位置代碼mov R3,#0HMOV R4,#0HNOPMAIN:LCALL DISP;調(diào)用數(shù)碼管循環(huán)點(diǎn)亮子程序LCALLDELAY;延時子程序同前,應(yīng)修改延時長度AJMPMAIN;循環(huán)執(zhí)行主程序*J;通過574顯示6位數(shù)字子程序*JDISP:CJNE R4,#0FEH,NEXTMOV A,R3ADD A,#01HMOV R3,ACJNE R3,#07H,NEXTMOV R3,#0HNE

36、XT:MOVA,R1;取位代碼MOVP0,A;位代碼送P0 口SETBP1.2NOPCLR P1.2;產(chǎn)生一個鎖存脈沖,鎖存位代碼MOVA,R0;取需顯示的數(shù)字MOVDPTR,#DISPD;裝載筆畫編碼表首地址MOVCA,A+DPTR ;取需顯示數(shù)字筆畫代碼CJNE R3,#01H ,POT1CJNE R1,#01H,DISP2ADD A,#80HPOT1:CJNE R3,#02H ,POT2CJNE R1,#02H,DISP2ADD A,#80HPOT2:CJNE R3,#03H ,POT3CJNE R1,#04H,DISP2ADD A,#80HPOT3:CJNE R3,#04H ,POT4

37、CJNE R1,#08H,DISP2ADD A,#80HPOT4:CJNE R3,#05H ,POT5CJNE R1,#10H,DISP2ADD A,#80HPOT5:CJNE R3,#06H ,DISP2CJNE R1,#20H,DISP2ADD A,#80HDISP2: MOV P0,A;筆畫代碼送到 P0 口SETB P1.1NOPCLR P1.1;產(chǎn)生一個鎖存脈沖,鎖存筆畫代碼INC R0;R0增1指向下一個需顯示數(shù)字MOV A,R1CLR CRLC AMOV R1,A;R1中的值左移1位,指向下一位數(shù)碼管MOV A,R4ADD A,#01HMOV R4,ACJNE R4,#0FFH,

38、NEXT2MOV R4,#0HNEXT2: CJNE R0,#70H,DISP1;R0 中不為 70H 則繼續(xù)MOVR0,#D_DAT0 ;R0 中為 70H,循環(huán)完一輪;重新賦初值MOVR1,#1;位置代碼初值DISP1: NOPRET;數(shù)字筆畫代碼表;0123456789 熄DISPD:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,0*J;延時子程序*DELAY:MOVR7,#40HDELY1:MOVR6,#0FHDELY2:DJNZR6,$;$代表當(dāng)前行;與 DJNZ R6QELY2 相同DJNZR7QELY1RETEND實(shí)驗(yàn)5按鍵功能的實(shí)現(xiàn)一實(shí)驗(yàn)

39、目的i理解按鍵電路的作用2學(xué)習(xí)按鍵功能的編程方法二實(shí)驗(yàn)內(nèi)容1進(jìn)一步理解單片機(jī)I/O 口的使用方法2看懂圖436所示的電路,讀懂參考程序3自行設(shè)計(jì)4位按鍵分別操控四個數(shù)碼管顯示四個不同的數(shù)字三實(shí)驗(yàn)步驟1先閱讀課本,理解程序和按鍵原理2調(diào)試示例程序,觀察現(xiàn)象3自行設(shè)計(jì)4位按鍵分別操控四個數(shù)碼管顯示四個不同的數(shù)字四實(shí)驗(yàn)結(jié)果1調(diào)試示例程序,發(fā)現(xiàn)其可以靜態(tài)顯示,且按鍵能改變數(shù)值2自行設(shè)計(jì)4位按鍵分別操控四個數(shù)碼管顯示四個不同的數(shù)字 子程序:START: MOV P1,#0F0HMOV P0,#0INTR : JNB P1.4,K1JNB P1.5,K2JNB P1.6,K3JNB P1.7, K4JMP

40、 INTRK1 : MOV RO,#06HMOV R1,#01H,LJMP DISPK2 : MOV R0,#:5BHMOV R1,#02H,LJMP DISPK3 : MOV R0,#4FHMOV R1,#04H,LJMP DISPK4 : MOV R0,#66HMOV R1,#08H,LJMP DISPDISP: MOV A,R1MOV P0,ASETB P1.2NOPCLR P1.2MOV A,R0MOV P0,ASETB P1.1NOPCLR P1.1LCALL DELAYLJMP START調(diào)試結(jié)果:4位按鍵分別操控四個數(shù)碼管顯示四個不同的數(shù)字五實(shí)驗(yàn)小結(jié)進(jìn)一步了解I/O 口和數(shù)碼管使

41、用和原理,掌握按鍵的使用和原理附:示例程序KEYUSE按鍵功能的實(shí)現(xiàn)D_DA TOEQU60HD_DAT1EQUD_DAT0+1D_DA T2EQUD_DAT1 + 1D_DA T3EQUD_DAT2+1D_DA T4EQUD_DAT3+1D_DA T5EQUD_DAT4+1;定義顯示數(shù)據(jù)單元LIGHTEQUD_DAT5+1H_DA TOEQULIGHT+1H_DAT1EQUH_DAT0+1KBMEQUH_DAT1 + 1;定義按鍵功能號存放單兀D_MAXEQUKBM+1;定義上限值存放單兀D_MINEQUD_MAX+1;定義下限值存放單兀T_DA TOEQUD_MIN+1T_DAT1EQUT

42、_DA T0+1;定義測量值存放單兀ORG0000HAJMPSTARTORG0030HSTART:MOVSP,#30H;初始化堆棧指針MOVD_DAT0,#0MOVD_DAT1,#0MOVD_DAT2,#0MOVD_DAT3,#0MOVD_DA T4,#0MOVD_DA T5,#0 ;初始化顯示數(shù)據(jù)MOVLIGHT,#80HCLR P1.0CLR P1.1CLR P1.2CLR P1.3;初始化有關(guān)I/O 口MOVR0,#D_DAT0 ;初始化數(shù)據(jù)指針;R0指向第位顯示數(shù)字MOVMOVR1,#01H;初始化需點(diǎn)亮數(shù)碼管位置代碼KBM,#0;初始化功能號MOVMOVMOVMOVD_MAX,#80

43、D_MIN,#70;初始化上、下限值T_DAT0,#66T DAT1,#0;目前人為賦給測量值一個值;將來有實(shí)際測量值就存放在此MOVMOVLCALLH_DAT0,T_DA T0H_DAT1,T_DAT1HTD;將測量值二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)MAIN:LCALL DISP;刷新顯示LCALLDELAY;顯示、延時子程序同前*J;按鍵處理程序JB P1.7,KEY1;查詢K0,若K0未按下則跳轉(zhuǎn)*LCALL DELAYJB P1.7,KEY1INC KBMLCALL DISPMOVCJNEMOVA,KBMA,#3,KEY01KBM,#0;若功能號為3,則清0KEY01:NOPAJMPKEND;跳轉(zhuǎn)至按鍵結(jié)束處理程序KEY1:JBP1.6,KEY2;查詢K1LCALLDISPLCALLDELAY;延時去抖動,順便刷新顯示 ;若K0未真正按下則跳轉(zhuǎn) ;K0真正按下,功能號增1JB P1.6,KEY2MOV A,KBMCJNE A,#1,KEY11;功能號不為1則跳轉(zhuǎn)INC D_MAX;功能號1,上限值加1KEY11:CJNEINC D_MINKEY12:AJMPAJMP KENDKEY2:JBP1.5,KEND;查詢K2LCALLDISPLCALLDELAYJB P1.5,KENDMOVA,KBMCJNEA,#1,KEY2

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論