源代碼和hex文件下載地址:
http://m.zg4o1577.cn/ziliao/51hei-5/流水燈_鍵控_asm.rar
;---------------------------------------------------------------
;程序名稱:按鍵控制幾種流水燈程序
;晶振:11.0592
;跳線設(shè)置:默認(rèn)
;實(shí)驗(yàn)對(duì)象:51hei-5型單片機(jī)學(xué)習(xí)板
;按板子上的4個(gè)獨(dú)立鍵盤就可看到現(xiàn)象
;---------------------------------------------------------------
;中斷入口程序;
;************;
;
ORG 0000H ;程序執(zhí)行開(kāi)始地址 LJMP START ;跳至START執(zhí)行 ORG 0003H ;外中斷0中斷入口地址 RETI ;中斷返回(不開(kāi)中斷) ORG 000BH ;定時(shí)器T0中斷入口地址 RETI ;中斷返回(不開(kāi)中斷) ORG 0013H ;外中斷1中斷入口地址 RETI ;中斷返回(不開(kāi)中斷) ORG 001BH ;定時(shí)器T1中斷入口地址 RETI ;中斷返回(不開(kāi)中斷) ORG 0023H ;串行口中斷入口地址 RETI ;中斷返回(不開(kāi)中斷) ; ; 初始化程序 ;************ ; CLEAR: clr P2.7 ;鎖存74hc573 防止數(shù)碼管干擾led燈 clr P1.4 ;打開(kāi)led總開(kāi)關(guān) MOV 20H,#00H ;20H單元內(nèi)存清0(閃爍標(biāo)志清0) SETB 00H ;20H.0位置1(上電時(shí)自動(dòng)執(zhí)行閃爍功能1) RET ;子程序返回 ; ; 主 程 序 ;************ ; START:ACALL CLEAR ;調(diào)用初始化子程序 MAIN: LCALL KEYWORK ;調(diào)用鍵掃描子程序 JB 00H,FUN0 ;20H.0位為1時(shí)執(zhí)行FUN0 JB 01H,FUN1 ;20H.1位為1時(shí)執(zhí)行FUN1 JB 02H,FUN8 ;20H.2位為1時(shí)執(zhí)行FUN2 JB 03H,FUN2 ;備用 AJMP MAIN ;返回主程序MAIN ; ; 功能程序 ;************; ;第1種閃爍功能程序 FUN0: MOV A,#0FEH ;累加器賦初值 FUN00:MOV P0,A ;累加器值送至P0口 LCALL DL05S ;延時(shí) JNB ACC.7,MAIN ;累加器最高位為0時(shí)轉(zhuǎn)MAIN RL A ;累加器A中數(shù)據(jù)循環(huán)左移1位 AJMP FUN00 ;轉(zhuǎn)FUN00循環(huán) ; ;第2種閃爍功能程序 FUN1:MOV A,#7fH ;累加器賦初值 FUN11:MOV P0,A ;累加器值送至P0口 LCALL DL05S ;延時(shí) JZ MAIN ;A為0轉(zhuǎn)MAIN RR A ;累加器A中數(shù)據(jù)循環(huán)左移1位 ANL A,P0 ;A同P1口值相與 AJMP FUN11 ;轉(zhuǎn)FUN11循環(huán) ; ;第2種閃爍功能程序 FUN8:MOV A,#0feH ;累加器賦初值 FUN88:MOV P0,A ;累加器值送至P0口 LCALL DL05S ;延時(shí) JZ MAIN ;A為0轉(zhuǎn)MAIN Rl A ;累加器A中數(shù)據(jù)循環(huán)左移1位 ANL A,P0 ;A同P1口值相與 AJMP FUN88 ;轉(zhuǎn)FUN11循環(huán) ; 第4種閃爍功能程序 FUN2:MOV A,#0AAH ;累加器賦初值 MOV P0,A ;累加器值送至P0口 LCALL DL05S ;延時(shí) CPL A ;A中各位取反 MOV P0,A ;累加器值送至P0口 LCALL DL05S ;延時(shí) AJMP MAIN ;轉(zhuǎn)MAIN ; 掃鍵程序 ;************; ; KEYWORK:MOV P3,#0FFH ;置P3口為輸入狀態(tài) JNB P3.2,KEY0 ;讀P3.2口,若為0轉(zhuǎn)KEY0 JNB P3.4,KEY1 ;讀P3.3口,若為0轉(zhuǎn)KEY1 JNB P3.6,KEY2 ;讀P3.4口,若為0轉(zhuǎn)KEY2 JNB P3.7,KEY3 ;讀P3.5口,若為0轉(zhuǎn)KEY3 RET ;子程序返回 ; ;閃爍功能0鍵處理程序 KEY0:LCALL DL10MS ;延時(shí)10毫秒消抖 JB P3.2,OUT0 ;P3.2為1,子程序返回(干擾) SETB 00H ;20H.0位置1(執(zhí)行閃爍功能1標(biāo)志) CLR 01H ;20H.1位清0 CLR 02H ;20H.2位清0 CLR 03H ;20H.3位清0 OUT0:RET ;子程序返回 ; ; 閃爍功能1鍵處理程序 KEY1:LCALL DL10MS JB P3.4,OUT1 SETB 01H ;20H.1位置1(執(zhí)行閃爍功能2標(biāo)志) CLR 00H CLR 02H CLR 03H OUT1:RET ; ;閃爍功能2鍵處理程序 KEY2:LCALL DL10MS JB P3.6,OUT2 SETB 02H ;20H.2位置1(執(zhí)行閃爍功能3標(biāo)志) CLR 01H CLR 00H CLR 03H OUT2:RET ; ;閃爍功能(備用)鍵處理程序 KEY3:LCALL DL10MS JB P3.7,OUT3 SETB 03H ;20H.3位置1(執(zhí)行備用閃爍功能標(biāo)志) CLR 01H CLR 02H CLR 00H OUT3:RET ; ; 延時(shí)程序 ;************; ;0.5毫秒延時(shí)子程序,執(zhí)行一次時(shí)間為513微秒 DL512:MOV R2,#0FFH LOOP1: DJNZ R2,LOOP1 RET ; ;10毫秒延時(shí)子程序(調(diào)用20次0.5毫秒延時(shí)子程序) DL10MS:MOV R3,#14H LOOP2: LCALL DL512 DJNZ R3,LOOP2 RET ; ;延時(shí)子程序,改變R4寄存器初值可改變閃爍的快慢(時(shí)間為15×25毫秒) DL05S:MOV R4,#0FH LOOP3: LCALL DL25MS DJNZ R4,LOOP3 RET ; ;25毫秒延時(shí)子程序,用調(diào)用掃鍵子程序延時(shí),可快速讀出功能按鍵值 DL25MS:MOV R5,#0FFH LOOP4:LCALL KEYWORK DJNZ R5,LOOP4 RET END ;程序結(jié)束
歡迎光臨 (http://m.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |